深度学习中防止过拟合的方法

深度学习由于超参数的个数比较多,训练样本数目相对超参数来说略显不足,一不小心就容易发生过拟合。从本质上来说,过拟合是因为模型的学习能力太强,除了学习到了样本空间的共有特性外,还学习到了训练样本集上的噪声。因为这些噪声的存在,导致了模型的泛化性能下降。在深度学习中如何克服过拟合的问题呢?一般来说有以下4种方法:

 

1 data augmentation

  data augmentation即数据增强,数据增强其实是增加训练样本的一种方法。以人脸识别为例,对于人脸识别的数据增强,一般有随机裁剪,随机加光照,随机左右翻转等。

  •   随机裁剪:比如人脸图片本身大小是256*256,随机裁剪每次从256*256的图像里扣出227*227大小的像素点(像素点的原本位置不一定连续)构成训练样本
  •   随机加光照:随机加光照其实就是对像素点随机乘以scale或者随机加bias,这样其实可以提高模型对于光照条件的鲁棒性,使得模型克服外部光照的影响,学习人脸的本质特征
  •       随机左右翻转:人脸是一个左右接近对称的结构,但是左右又不完全一样,通过随机左右翻转可以提高样本的多样性(那么上下翻转可以吗?当然不可以了!人脸并不具备上下对称的特性。)

  通过类似的手段,无论是图像处理,还是语音或者自然语言处理,我们都能有效地增加样本数量。更多的训练样本意味着模型能够学到更多的本质特征,具有对于噪声更好的鲁棒性,从而具有更好的泛化性能,能够有效地避免过拟合。

2 early stopping

  early stopping,顾名思义,就是在训练次数没有达到预先设定的最大训练次数时,我们就让网络停止训练。采用early stopping需要我们在训练集合上划分出一小部分(大概10%~30%吧)作为验证集,验证集不参与训练,可以视为是我们知道结果的测试集。我们通过实时监控模型在验证集上的表现来(实时监控并不意味着每次迭代都去监控,可以每1000次去观察一次),一旦模型在验证集上的表现呈现下降趋势,我们就停止训练,因为再训练下去模型的泛化性能只会更差。

  而实际训练中,我们不可能一直坐在电脑旁观察验证集的准确率,更一般的做法是每隔一段时间(比如每1000次迭代)就保存一次模型,然后选择在验证集上效果最好的模型作为最终的模型。

3 dropout

   

  dropout技术是hinton大神(https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf )提出来的防止过拟合的方法。原理非常简单,dropout的作用对象是layer,对于某一层中的每个节点,dropout技术使得该节点以一定的概率p不参与到训练的过程中(即前向传导时不参与计算,bp计算时不参与梯度更新),如上图所示。实验证明了,dropout的效果非常爆炸,对于模型训练有非常好的效果。为什么dropout能起到这么大作用呢? 一个原因是通过dropout,节点之间的耦合度降低了,节点对于其他节点不再那么敏感了,这样就可以促使模型学到更加鲁棒的特征;第二个是dropout layer层中的每个节点都没有得到充分的训练(因为它们只有一半的出勤率),这样就避免了对于训练样本的过分学习;第三个原因是在测试阶段,dropout layer的所有节点都用上了,这样就起到了ensemble的作用,ensemble能够有效地克服模型的过拟合。

4 weight penality L1&L2

  第四种常用的办法就是weight decay,weight decay通过L1 norm和L2 norm强制地让模型学习到比较小的权值。这里说明两个问题:1 为什么L1和L2 norm能够学习到比较小的权值? 2 为什么比较小的权值能够防止过拟合?

  对于问题1:

  首先看一下L1和L2的定义:

  

  

 

  其中C0为未加上惩罚项的代价函数。那么L1和L2形式的代价函数会如何影响w的值呢?

      (1) 未增加惩罚项w的更新

    

 

  (2) L1下的w更新,其中u为学习率

  

        (3) L2下的w更新,其中u为学习率

    由上面的(1)(2)(3)可以看出,加上惩罚项之后,w明显减少得更多。L1是以减法形式影响w,而L2则是以乘法形式影响w,因此L2又称为weight decay。

 

  对于问题2:

    过拟合的本质是什么呢?无非就是对于非本质特征的噪声过于敏感,把训练样本里的噪声当作了特征,以至于在测试集上的表现非常稀烂。当权值比较小时,当输入有轻微的改动(噪声)时,结果所受       到的影响也比较小,所以惩罚项能在一定程度上防止过拟合。

posted on 2017-02-09 23:19  unclelin  阅读(4758)  评论(0编辑  收藏  举报

导航