防止过拟合


防止过拟合的方法:
1.Early stopping
2.增加训练样本(数据增广)
3.损失函数添加正则化项;
4.Dropout

Early stopping

  对模型进行训练的过程即是对模型的参数进行学习更新的过程,往往会用到一些迭代方法,如梯度下降学习算法,Early stopping便是一种迭代次数截断的方法来防止过拟合的方法,在模型对训练集迭代收敛之前停止迭代来防止过拟合。
具体做法:
  在每一个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算validation data 的accuracy,当accuracy不再提高时,就停止训练,在训练的过程中,记录目前为止最好的validation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则停止迭代。

增加训练样本(数据增广)

  通常样本数已经确定,可以通过数据增强的办法。比如图片的上下左右翻转,比如音频的加噪等。
  这是解决过拟合最有效的方法,只要给足够多的数据,让模型尽可能多的适应【例外情况】,就会不断修正参数,得到更好的结果。
  从数据源获取更多数据;根据当前数据集估计数据分布参数,使用该分布产生更多数据(一般不用,或引入抽样误差);数据增强,通过一定规则扩充数据,如在物体分类问题里,物体在图像中的位置、姿态、尺度、图片明暗度等都不会影响分类结果,可以通过图像平移、翻转、缩放等扩充数据。

损失函数添加正则化项

正则化有3种解释:
1.几何解释(KKT);
2.数学公式解释;
3.概率分布解释;

几何解释(KKT条件)

  

数学公式解释

来自于李宏毅老师讲的课,链接
防止过拟合
**L1:**w为正,就减掉一个数,w为负就加上一个数,这个动作永远存在,所以如果这个权值长时间不被更新,这个权值是有很可能减为0的,w=0就相当于对应的神经元作废,训练的参数就是稀疏的,而如果一个神经元权重一直在被更新,也就是负责训练样本整体特征的权重被减小或增大,会立马再被更新到合适的值;如果w非常大,那么每次只减掉相同的小值,最终w也会很大,每次变化都是在最优的权值左右一点点儿左右摇摆,对于不常更新的权重会一直减为0,所以L1正则,训练出的权值,可能权值很大,也可能很多为0,当然也可能是合适的权重+0,总之相比于L2正则化而言,更稀疏。

**L2:**因为w的系数是(1-n*lamda),所以当w大的时候,就减掉一个大的值,当w小的时候就减掉小的值,而且最终的永远和w的值有关,即使这个权值长时间不被更新,也不会减为0,只会变成越来越小的小数值,所以L2中这个权值容易保持在小数值,最终训练结果,很大的w和为0的w都很少有,最终的w值大小比较适中,相比于L1而言。
防止过拟合
  再添加一个理解:人脑的神经元的变化是,如果有些神经元长时间不用,就会慢慢消失。神经网络的训练相似,如果有些权值一直没有被更新,那这个权值就会越来越小,甚至消失。

  以上,可知,如果没有正则化项,当网络训练地比较稳定的时候,对整个训练集而言,权值合适,每次更新地比较少了,整体上达到最优了,就说明可以了,该停止了。此时如果继续增加epoch继续训练,那么那些表征整体样本特征的神经元已经达到最优的权重不再被更新,这些w几乎不变了,而样本中的噪声样本或者样本中的噪声点还是会引发部分权值的更新,这些w的值会在一个个的epoch训练中更新,并把这种更新累计到最终的权重中,于是过拟合产生了。
  正则化项的作用是长时间不更新的权重越来越小,那么,对于每个epoch,噪声样本个数比较少,噪声样本出现的次数很少,表征噪声的神经元权重就会越来越小,而已经达到最优的权值如果不被更新权值也会变小,但是这些权值一旦变小,大量训练样本继续训练,就会立马又达到最优,所以不用担心最优的权值变小或者失真。这样就能去过拟合了。
有没有正则项的本质区别:没有正则项,每个训练样本的权值更新是一直叠加的,有了正则项,长时间不被更新的神经元权值是会不断衰减的,最终的权值系数由出现概率最大的样本们决定。
另一种理解:
  长时间不被更新的权重值越来越小,甚至等于0,就相当于关掉了一些神经元,神经网络的复杂度降低了,能表征的过于复杂特征的能力也降低了,过拟合也就消失了。

概率分布解释

  

Dropout

防止过拟合
每更新一次权值,resample一次dropout,也就是每个mini-batch更新一次dropout。每次训练一次权值,拿来训练的network都是不一样的。

我之前想的没错,用dropout确实会让训练结果变差,因为每次用的神经元都不一样,可能上一次更新权值,表征训练样本整体特征的神经元在下一次就直接不见了,这样神经网络就不得不把训练样本整体特征表征在其他这次包含的神经元上,如此一来,产生2个效果:

  1. 训练样本整体特征会分散地表征在几乎每个神经元的权重中;
  2. 训练样本在训练好的网络中准确度会比没有dropout低,需要更多训练次数才能对抗dropout随机resample神经元带来的不确定性,直到训练样本整体特征稳定地、均衡地分布在所有神经元上。

dropout一般不能用在输入层,除非输入层的序列中每个元素相互之间相互独立,否则就完全破坏了输入值,使得输入没有意义(不能表征样本的特性)。

dropout的目的本来就是让模型在training上效果变差一点儿(虽然不是目的,但是是必要渠道)让在testing上效果变好。但这种方法的前提是,模型在训练样本上效果已经很好而在测试集中效果不好的情况,如果在训练集上效果本来就不好,那加上dropout效果只会越来越差。
这个在训练集上效果变差会带来的另一个好处:训练集和样本集有点儿不一样的时候,比如训练集和测试集中,有一个是含噪,一个不含噪,有dropout的网络效果更好。因为dropout本身就是弱化了样本输入特征之间的关系,也使得神经元上权值分布更分散,含噪的特殊特征被所有神经元平摊了。
防止过拟合
防止过拟合
防止过拟合
防止过拟合
防止过拟合
防止过拟合
和随机森林一个道理。但是我觉得和随机森林还是不一样,随机森林的每个model是互相独立训练的,自己更新自己的权值,而dropout是在一个大的网络下更新公用的权值,dropout并不是说在决策级别综合每个网络的输出,而是在更新每个网络的权值,那么是否可以说,是每一单个神经网络权值的计算就是一次随机森林?
防止过拟合
防止过拟合
防止过拟合
上面的小例子表明,线性的时候有没有dropout结果是相同的,但是加上**函数的非线性部分,有没有dropout结果就不equiverlent了,虽然不不equiverlent,但是结论还是对的。
既然在线性的时候有没有dropout结果是equiverlent的,那么**函数越接近线性就dropout效果越好,所以有文章写过,**函数用ReLU和Maxout效果会比用sigmoid好。

参考来源链接

李宏毅的课程