关于 Dropout 可以防止过拟合,出处:深度学习领域大神 Hinton,在2012年文献:《Improving neural networks by preventing co-adaptation of feature detectors》提出的。

  【Dropout 可以防止过拟合】

  运用了dropout的训练过程,相当于训练了很多个只有半数隐层单元的神经网络(后面简称为“半数网络”),每一个这样的半数网络,都可以给出一个分类结果,这些结果有的是正确的,有的是错误的。随着训练的进行,大部分半数网络都可以给出正确的分类结果,那么少数的错误分类结果就不会对最终结果造成大的影响。

 

  在每次训练的时候,让一半的特征检测器停过工作,这样可以提高网络的泛化能力,Hinton把它称之为dropout。

  Hinton认为:过拟合,可以通过阻止某些特征的协同作用来缓解。在每次训练的时候,每个神经元有百分之50的几率被移除,这样可以让一个神经元的出现不应该依赖于另外一个神经元。

  每次将一个神经网络进行dropout之后就是对这个网络进行了瘦身处理,有一些参数被dropout掉,得到了一个更加简单的网络。

 

  【迭代过程】

  1. 在训练开始时,我们随机地“删除”一半的隐层单元,视它们为不存在;

  2. 保持输入输出层不变,按照BP算法更新神经网络中的权值(虚线连接的单元不更新,因为它们被“临时删除”了)。

  以上就是一次迭代的过程,在第二次迭代中,也用同样的方法,只不过这次删除的那一半隐层单元,跟上一次删除掉的肯定是不一样的,因为我们每一次迭代都是“随机”地去删掉一半。第三次、第四次……都是这样,直至训练结束。

 

  另外一个可以防止过拟合的原因是:我们可以把dropout理解为模型平均。 假设我们要实现一个图片分类任务,我们设计出了1000个网络,这1000个网络,我们可以设计得各不相同,然后我们对这1000个网络进行训练,训练完后我们采用平均的方法,进行预测,这样肯定可以提高网络的泛化能力,或者说可以防止过拟合,因为这1000个网络,它们各不相同,可以提高网络的稳定性。而所谓的dropout我们可以这么理解,这 n 个网络,它们权值共享,并且具有相同的网络层数(这样可以大大减小计算量)。我们每次dropout后,网络模型都可以看成是整个网络的子网络。(需要注意的是如果采用dropout,训练时间大大延长,但是对测试阶段没影响)。

      根据个人实际经验,dropout在数据量比较小的时候,不建议使用,效果并没有特别好,dropout的值一般来说取值为0.5效果会比较好。

 

 

 

 

【Reference】

1、dropout为什么能够防止过拟合

2、浅谈 Dropout防止过拟合