27. 减少方差的技巧

如果你的学习算法遇到了高方差问题,你可以尝试以下技巧:

  • 加入更多的训练集数据:这是用来解决方差问题最简单也是最可靠的办法。只要你能获取更多的数据和有足够的计算能力来处理这些数据,那么加吧。
  • 加入正则化:(L2正则化、L1正则化、Dropout):正则化减少方差,但是会增大偏差;
  • 加入早停止(Early Stopping)(例如根据开发集误差来提前停止梯度下降):这个技巧同样的减少了方差但是增大了偏差。这种早期停止的行为很像是正则化方法,所以有些研究者也把它归类为正则化技术;
  • 进行特征筛选(Feature Selection)来减少输入特征的数量/类型:这个技巧同样可能会在有助于减少方差的同时增大偏差。稍微减少特征的数量(比如总共有1000个特征然后减少到900个)不太可能对偏差产生很大的影响。只要不把很多的主要特征给剔除掉,显著减少它(假设我们把总过1000个特征砍剩100个,减少了10倍)更可能产生明显的效果。在当今条件下的深度学习中,在我们拥有了海量的数据之后,我们的精力就已经从特征选择中转移出来了,现在我们更倾向于将我们拥有的所有特征都丢给算法,然后让算法自己根据数据去分类使用哪些特征。但是当你的训练集很小的时候,进行特征选择将会是很有用的方法;
  • 降低模型的规模(层和神经元数量):慎重使用!!!!这个技巧可以减少方差,但可能会增大偏差。但是,我不推荐使用这种方法来解决方差问题。为算法增加正则化就可以提高分类性能。减少模型的规模的最大好处是降低计算成本从而加快训练模型的速度,如果加速训练模型速度是有效果的,那么我们务必通过办法来降低其规模。但,如果你的目标是减少方差,同时并不在意计算成本的问题,请优先考虑使用正则化!

这里有两个额外的策略,与25节讨论“减少可避免偏差的技巧”重复:

  • 根据误差分析修改输入特征:假设你的误差分析促使你添加额外的特征来帮助算法消除特定类别的错误。也就是说,这些新特征能有助于避免偏差和方差。从理论上来看,添加更多的特征会导致方差增大,但当你发现这种情况的时候,使用正则化吧,它能够抑制方差的增大;
  • 修改模型架构:通过修改模型的架构来让模型更契合你的问题,这通常会同时影响你的偏差和方差。