解决过拟合的一些方法


由于条件限制,比如数据不够丰富、不够代表性,你的模型很有可能出现过拟合。即你的模型试图去记住所有的训练数据,而不是学习数据的趋势。虽然数据增强的方法能缓解一些,但往往插值出来的数据仍然很局限。一般,我们有下面几个方法来从模型的角度来解决过拟合问题。

  • Early Stopping

随着训练的进行,你发现迭代到某轮时,训练误差逐渐下降,但校验集误差却在逐渐上升。这时,你需要在那轮提前停止训练,获得模型。就这么简单。

还有个解释是,每个神经元的激活函数在不同区间有不同的拟合性能,因此在训练时,网络开始初始化的值比较小,随着训练进行有些值越来越大,因此较早地停止训练能让网路的拟合能力限制在较好的区间内。


  • Penalizing Large Weights

过拟合发生时,往往会出现拟合函数在训练数据点上的“曲率”很大。而这些“曲率”是由模型的参数近似表达出来的,因此通过对大值参数的惩罚来抑制这种曲率的发生。也就是对loss中加些正则化项。


  • Dropout

想法是尝试添加规则来训练神经网络,使神经元被去除。 这意味着神经网络不能完全依赖于任何给定的神经元,因为它可能会死亡(从模型中删除)。一种理解是它可以使得模型某些特征不会只当其它某个特征出现时才起作用,另一种理解是它类似boosting,即每次随机的dropout后是不同的网络。


  • 增加噪声。
    • 输入噪声。等同于L2的正则。因为输入噪声随着网络传播,最终成为cost中权值平方的干扰,因此对cost进行优化,则会使得权值较小。
    • 权值噪声。指在权值初始化的时候,用高斯分布。
    • 网络噪声。让训练向前传播的输出为随机,这使得在测试集上表现会更好。

  • 结合多种模型。模型的bias和Variance会影响过拟合、欠拟合,即bias越大,模型越欠拟合、Variance越大,模型越过拟合。这里多说一点,Variance和bias是trade off, 我为了让模型处处更准(小的bias),往往会导致模型过拟合(大的Variance,即每次判定不稳定) 
    • bagging. (bootstrap aggregation), 采用多次对样本的采样,并行进行多个模型的训练,最终对分类结果进行投票获得最终结果。这中方法可以减小模型的Variance。因为bagging是多个强分类器的组合,每个强分类器的Variance高。 数学上,由于bagging的模型不是完全独立的,因此var(avg(x))/n < bagging < var(avg(x)), 所以可以起到降低Variance的作用。
    • boosting。串行地进行采样的模型训练,即比如每次取上个模型的错分样本。它是多个弱分类器的组合,每个弱分类器的bias高,组成强分类器后,bias就变低了。由于boosting 是迭代地进行损失最小化,越往后,模型的bias越小。

在训练中结合使用以上方法,可以让你的训练更持久,模型的表达能力更强。



另外,还有一些方法也值得一试

  • drop connect. 在激活之前对feature map进行drop
  • Feature scale clipping

一些总结比较好的文章
  • https://www.zhihu.com/question/59201590


猜你喜欢

转载自blog.csdn.net/mao_feng/article/details/70225068