DropOut的概念首次在2012年,论文《Improving neural networks by preventing co-adaptation of feature detectors》中提出。
看上去很有逼格,但是实际却真的很有逼格,很有用。那主要有什么用呢?
千言万语一句话:
就是使模型泛化能力更强,防止过拟合。
他是怎么做的呢?
说来也简单,就是在前向传播时候,以一定的概率,随机的屏蔽掉一部分隐藏层神经元,让他们停止工作。
具体而言:
-
无DropOut工作方式
看上去,朴实无华,再正常不过了。
-
有DropOut工作方式
- 首先,用一个伯努利分布,产生一个发生概率P。这个P生命期很长,可以活到预测阶段,并且一直不变。通过p产生rj, rj就是个0,1向量。如果p为0.5, 则rj会有一半的可能为0向量,一半的可能为1向量.
- 其次,用rj乘以y来控制,输入到隐藏层的y是否往后面传播。为0,则停止。为1,则传播。由第一步可知,当p=0.5时,会有一半的神经元停止工作。
- 最后, 通过激活函数得到最后的y
为什么这样做就能解决过拟合,提高泛化能力?
( 1 )每次随机取不同的神经元向后传播,相当于训练了多个不同的网络,共同作用,类似于投票机制,增强鲁棒性。可有效地防止过拟合。
( 2 ) 减少对局部神经元的依赖,由于每次训练都会随机屏蔽一些神经元,并不是每次两个相同的神经元都会同时出现,这样的就阻止了某些神经元对其他神经元的依赖,是的模型更多的关注数据本身。就像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高。