Dropout理解-原理,实现,优缺点

一,为何提出dropout?

在机器学习或者深度学习中,经常出现的问题是,训练数据量小,模型复杂度高,这就使得模型在训练数据上的预测准确率高,但是在测试数据上的准确率低,这时就是出现了过拟合。
为了缓解过拟合,可采用的方法有很多,其中一种就是集成,通过训练多个模型,采用“少数服从多数”的策略决定最终的输出,但同时这个方法有一个很明显的缺点–训练时间长。
因此,dropout的提出主要基于以下两点:
1.过拟合
2.训练时间长

二、dropout是怎么回事?

在每一轮的样本输入到神经网络进行训练时,设定一个概率p,使得每个神经元有一定的概率死亡,不参与网络的训练,见下图。
Dropout理解-原理,实现,优缺点_第1张图片
其流程为:
1.首先以一定的概率p随机删除掉网络隐藏层中的神经元(暂时死亡),输入输出神经元保持不变。
2.然后把输入x通过修改后的网络前向传播,把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)。
3.然后继续重复这一过程:

  • 恢复被删掉的神经元(此时被删除的神经元保持原样,而没有被删除的神经元已经有所更新)
  • 从隐藏层神经元中随机选择一个一半大小的子集临时删除掉(备份被删除神经元的参数)。
  • 对一小批训练样本,先前向传播然后反向传播损失并根据随机梯度下降法更新参数(w,b) (没有被删除的那一部分参数得到更新,删除的神经元参数保持被删除前的结果)。

三、代码层面实现dropout的思路

Dropout理解-原理,实现,优缺点_第2张图片
主要就是要思考如何使得神经元暂时死亡。在代码上看,这个神经元的输出为0,那么就可以认为这个神经元在整个模型中的作用为0了。因此,只需要在这个神经元的输出输入到下一个神经元时,乘以0或者1即可。比如我们某一层网络神经元的个数为1000个,其激活函数输出值为y1、y2、y3、…、y1000,我们dropout比率选择0.4,那么这一层神经元经过dropout后,1000个神经元中会有大约400个的值被置为0。见公式:
正常的神经网络:
在这里插入图片描述
dropout的神经网络:
Dropout理解-原理,实现,优缺点_第3张图片
这里的r只有两种取值,0或者1。

注意: 经过上面屏蔽掉某些神经元,使其激活值为0以后,我们还需要对向量y1……y1000进行缩放,也就是乘以1/(1-p)。如果你在训练的时候,经过置0后,没有对y1……y1000进行缩放(rescale),那么在测试的时候,就需要对权重进行缩放,操作如下:
预测模型的时候,每一个神经单元的权重参数要乘以概率p。
测试阶段Dropout公式:
在这里插入图片描述
Dropout理解-原理,实现,优缺点_第4张图片

4、dropout有效性理解

1.dropout的平均作用:每轮训练时,将部分神经元死亡,也就是说每轮的模型的都不同,假设有n个神经元,那么一共有2的n次方种组合方案(粗略计算,实际不是)。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉一半隐藏神经元导致网络结构已经不同,整个dropout过程就相当于对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。
2.减轻神经元之间的相互作用:比如有些神经元y1总是依赖于上一层的神经元y0输出值来进行决策,这就使得在训练中,某些特征被神经元过度学习,认为某类样本必定具有该类特征。通过删除掉该神经元y0,迫使y1利用别的特征进行决策,从而使得网络学到的特征更加鲁棒。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的特征。从这个角度看dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。
3.dropout类似于生物进化中的有性繁殖:我们先做一个假设,那就是基因的力量在于混合的能力而非单个基因的能力。那么有性繁殖的方式不仅仅可以将优秀的基因传下来,还可以降低基因之间的联合适应性,使得复杂的大段大段基因联合适应性变成比较小的一个一个小段基因的联合适应性。dropout也能达到同样的效果,它强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,达到好的效果。消除减弱了神经元节点间的联合适应性,增强了泛化能力。

值得一提的是,dropout会导致训练时间增长,而测试时间几乎不变。主要原因是训练时需要通过伯努利分布生成每一个神经元drop掉的概率,此外多余的乘运算和rescale运算也会增加时间。而dropout目前在全连接层中使用较多,参数设置可选0.3或者0.5,原因在于卷积神经网络隐藏层中由于卷积本身的稀疏性,以及ReLU函数带来的稀疏性,使用dropout效果并不好。

你可能感兴趣的:(算法基础,中级,神经网络,深度学习,人工智能)