神经网络中正确使用dropout

一、dropout目的

Dropout是在《ImageNet Classification with Deep Convolutional》这篇论文里提出来为了防止神经网络的过拟合。它的主要思想是让隐藏层的节点在每次迭代时(包括正向和反向传播)有一定几率(keep-prob)失效。这样来预防过拟合。它主要避免对某个节点的强依赖,让反向传播的修正值可以更加平衡的分布到各个参数上。还有如果一些节点失效,实际上也和我们减少网络复杂度是一样的道理。所以可以防止过拟合。

二、dropout方法

(1)训练阶段

Dropout是在标准的bp网络的的结构上,使bp网的隐层激活值,以一定的比例v变为0,即按照一定比例v,随机地让一部分隐层节点失效;在后面benchmark实验测试时,部分实验让隐层节点失效的基础上,使输入数据也以一定比例(试验用20%)是部分输入数据失效(这个有点像denoising autoencoder),这样得到了更好的结果。

去掉权值惩罚项,取而代之的是,限制权值的范围,给每个权值设置一个上限范围;如果在训练跟新的过程中,权值超过了这个上限,则把权值设置为这个上限的值(这个上限值得设定作者并没有说设置多少最好,后面的试验中作者说这个上限设置为15时,最好;为啥?估计是交叉验证得出的实验结论)。

此外,还可以使算法使用一个比较大的学习率,来加快学习速度,从而使算法在一个更广阔的权值空间中搜索更好的权值,而不用担心权值过大。

(2)测试阶段

Dropout只发生在模型的训练阶段,预测、测试阶段则不用Dropout

三、关于dropout需要知道的

直观认识:Dropout随机删除神经元后,网络变得更小,训练阶段也会提速

事实证明,dropout已经被正式地作为一种正则化的替代形式

有了dropout,网络不会为任何一个特征加上很高的权重(因为那个特征的输入神经元有可能被随机删除),最终dropout产生了收缩权重平方范数的效果

Dropout的功能类似于L2正则化,但Dropout更适用于不同的输入范围

如果你担心某些层比其它层更容易过拟合,可以把这些层的keep-prob值设置的比其它层更低

Dropout主要用在计算机视觉领域,因为这个领域我们通常没有足够的数据,容易过拟合。但在其它领域用的比较少

Dropout的一大缺点就是代价函数不再被明确定义,所以在训练过程中,代价函数的值并不是单调递减的

使用时,先关闭Dropout,设置keep-prob为1,使代价函数的值单调递减,然后再打开Dropout

版权声明:本文为CSDN博主「_VioletHan_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/VioletHan7/article/details/81012993

最新文章