自己在实现 dropout 的时候遇到的一些问题,遇到到过拟合的情况,想通过 dropout 减少过拟合,提高识别成功率。
本文首发于卷积神经网路(CNN)入门讲解
不过大家不用担心,dropout肯定用还是可以用的,谷歌只是想特定时刻,利用专利保护或者对抗某些竞争对手或者不良企业
上图特征清晰明了,相必大家一眼就能认出是谁了把
所以你看,每次训练都随机让一定神经元停止参与运算,简单的操作让我们由一个模型演变成四个模型:
这样就出现了一个问题,就好比
我觉得都可以,反正这个东西的思想是保证鲁棒性,扰动可以用多种方式实现,可以丢通路,可以丢输出,可以加杂讯,只要扰动了就行。
我们都知道Dropout可以随机删除网路中的神经单元,它为什么可以通过正则化发挥如此大的作用呢? 直观上理解:神经网路不依赖于任何一个具体的输入特征,因为该单元的输入可能随时被清除,因此该单元通过这种方式传播下去,并为单元的输入增加一点权重,通过传播所有权重, dropout将产生收缩权重的平方范数的效果,和$L2$正则化类似;实施 dropout的结果使它会压缩权重,并完成一些预防过拟合的外层正则化; $L2$对不同权重的衰减是不同的,它取决于激活函数倍增的大小。
dropout的功能类似于 $L2$正则化,与 $L2$正则化不同的是应用方式不同会带来一点点小变化,甚至更适用于不同的输入范围。
dropout实施的另一个细节是,要为神经网路中的每一层选择一个keep_prob,即该层节点保留的概率。不同层的keep_prob可以变化。对于网路中前面的层,它的keep_prob应该相对较低。对于其它层,过拟合可能没那么严重,它们的keep_prob可能高一些。如果在某一层,我们不必担心过拟合问题,可以将keep_prob设置成1。
对于有可能出现过拟合,且含有诸多参数的层,我们可以把 keep_prob设置成比较小的值,以便应用更强大的 dropout,有点像在处理 $L2$正则化的正则化参数$lambda$。
总结一下,dropout大致有如下作用:
我们知道,在每一层使用dropout后,都会对没有被dropout掉的神经元进行rescale。即$rescale = 1/(1-keep_prob)$。此步骤是为了弥补因为随即删除节点而造成的输出减少的副作用。
==所以dropout时,权重并没有被丢弃,只是后面需要对未丢弃神经元做一个rescale来保持期望输出大小不变。实际丢弃的是就是神经元的输出。==
参考:
Dropout解决过拟合问题
吴恩达,改善深层神经网路:超参数调试、正则化以及优化
使用dropout丢弃输出(激活值),使用dropconnect[Wan2013]丢弃权重。
When training with Dropout, a randomly selected subset of activations are set to zero within each layer. DropConnect instead sets a randomly selected subset of weights within the network to zero.
[Wan2013]: Wan, L., Zeiler, M., Zhang, S., Le Cun, Y., Fergus, R. (2013, February). Regularization of neural networks using dropconnect. In International conference on machine learning (ICML 2013) (pp. 1058-1066).
丢的是输出,楼上说丢权重的应该是deep compression的剪枝吧,pruning。
输出
丢弃输出,丢弃权重那个忘记叫什么名字了,好像不叫drop out?建议看一下cs231n