美文网首页
深度学习中的Dropout方法

深度学习中的Dropout方法

作者: 晨光523152 | 来源:发表于2019-07-30 22:23 被阅读0次

上周看了L1,L2正则化。简单来说,L2正则化是把权重变小,达到简化模型来解决过拟合问题;L1正则化是把权重向零靠近,也是简化模型。这会儿来看看Dropout具体的原理。

Dropout

Dropout是指在神经网络模型训练的过程中,对所有神经元按照一定的概率进行消除的处理方式。

Dropout优点:

  • 在训练深度神经网络模型时,Dropout能够在很大程度上简化神经网络结构,以达到防治过拟合的问题
  • 并且能解决深度神经网络模型花费大量时间的问题

Dropout可以作为训练深度神经网络的一种trick供选择。
Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强(因为它不会太依赖某些局部的特征);在每一次的迭代训练过程中,让一部分神经元暂时被忽略掉,不让其参与前向传播以及反向传播。

Dropout算法训练步骤
每一个训练步骤,每一个神经元(包括输入神经元,不包括输出神经元)都有一个被暂时”丢弃“的可能性p,意思是在这次的训练步骤中它会被完全忽略,但是到下一步的时候就会被激活。
超参数p被称为丢弃率,通常设置为50%。
在训练之后,神经元不会再被丢弃。

标准神经网络模型图:


标准神经网络模型图

经过Dropout变成了:


经过Dropout后的神经网络模型

Dropout能够解决过拟合的原因:

  • 取平均作用。每一个训练步骤都会创建一个独立的神经网络。因为每一个神经都有可能出现或者不出现,所以总共有2^{N}个可能的网络(N是可丢弃的神经元个数)。(我自己感觉有点类似于Boosting)
  • 减少神经元的共适应性。训练有Dropout的神经元不能和周围的神经元共适应;它们必须让自己尽可能有用。它们也不能过分依赖几个输入神经元,必须关注每一个输入神经元。最后会变得对于输入的细微变化不那么敏感,最终会获得一个更好地泛化了的健壮的网络

测试时

在测试时候,一种最自然的方法是,我们把 2^N个子网络都用来做测试,然后以某种投票机制将所有结果结合一下(比如说平均一下下),然后得到最终的结果。但是,由于N实在是太大了,这种方法实际中完全不可行!

有人提出得到一个近似的估计即可。从2^{N}个子网络中随机选取m个子网络做测试(m很大,但是又远小于2^{N}),能够很好逼近原2^{N}个网络结合起来的结果。

但是通过dropout自带的功能,能够通过一次测试得到逼近原2^{N}个网络结合起来的结果。

在训练时,dropout会让一部分神经元“沉默”,但是在测试时,我们不使用dropout,也就是不对网络的参数做任何丢弃,这时dropout layer相当于进来什么就输出什么。**然后,把测试时dropout layer的输出乘以训练时使用的p

如果在测试时,如果不对dropout层的输出乘以1 - p,那么在dropout层后会多了p* units的输出(units指的是神经元个数)。这里(1 - p) * units的输出是和训练模型时候是保持一致的,多出来的是应该被丢弃的。

所以,为了使得dropout layer 下一层的输入和训练时具有相同的“意义”和“数量级”,我们要对测试时的伪dropout layer的输出(即下层的输入)做 rescale,也就是乘以1 - p。这样以来,只要一次测试,将原2^n个子网络的参数全部考虑进来了,并且最后的 rescale 保证了后面一层的输入仍然符合相应的物理意义和数量级。

image.png

参考资料:
https://zhuanlan.zhihu.com/p/38200980
https://blog.csdn.net/App_12062011/article/details/57075459
书--机器学习实战
http://blog.leanote.com/post/ryan_fan/Drop

相关文章

网友评论

      本文标题:深度学习中的Dropout方法

      本文链接:https://www.haomeiwen.com/subject/lstwrctx.html