Dropout
- Dropout
-
- 目的
- 方法
- 这样是否改变了输出的分布?怎么解决的?
- 那dropout为什么能缓解过拟合?
- 可以换一个角度解释吗?
- 一般dropout中的超参数p选为多少?为什么?
- dropout还有什么作用?
- dropout有什么缺点?为什么很多人觉得BN层可以取代dropout?
Dropout
目的
减少特征检测器(隐层节点)间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用
方法
以概率p来失活(pytorch)部分神经元,只用在训练时,测试时全部神经元都要使用,不会太依赖某些局部特征。
测试时的两种情况:
1)在每个神经元对应的权重w需乘以p,即。(原理:为了使测试时期望与训练时dropout后的期望对应,需给w乘以p。)
2)inverted dropout, 训练时:将dropout后保留下来的神经元权重乘以1/p,称作惩罚项。这样训练时权重扩大,测试时不需要再乘以p以缩小
这样是否改变了输出的分布?怎么解决的?
设不使用dropout时,一个神经元的输出的期望E=x。
使用dropout后,在训练过程中,对其输出以概率p进行保留,其输出的期望
E = p x + ( 1 − p ) ∗ 0 = p x E=px+(1-p)*0=px E=px+(1−p)∗0=px
为了使其在测试时输出的期望依然为px,我们对参数乘以p,输出的期望为E=px。
第一个px代表选择性保留,第二个px表示缩放。
那dropout为什么能缓解过拟合?
在每一个batchsize中,训练的神经元的集合都不同,相当于训练了很多个模型。
在测试阶段,相当于多个模型共同作用,抵消了个别模型对于极端数据的拟合,从而缓解过拟合。
同时,一些神经元组合不会经常被一起训练,缓解了它们之间的依赖关系,缓解了过拟合。
可以换一个角度解释吗?
不使用dropout时的A样本和使用dropout时的B样本,可能会使网络产生类似甚至相同的输出。
所以,在使用dropout时,相当于在训练数据中增加了一个A样本,而原数据库中可能没有A样本。
最后相当于做了数据集的扩增,增加了数据量,缓解了过拟合。
一般dropout中的超参数p选为多少?为什么?
一般选为0.5。
设神经元总数为n,保留的概率为p,那么被保留的神经元个数为pn。
如果说训练不同的神经元集合相当于训练不同的模型
那么一共训练了C(n,pn)(组合公式,n为下标,pn为上标)
当p=0.5时,训练的模型数量最多,可以最大程度缓解过拟合。
dropout还有什么作用?
输入添加p接近1的dropout层,相当于对输入数据加了噪声,实现了样本增强。
dropout有什么缺点?为什么很多人觉得BN层可以取代dropout?
1)训练速度慢
每次训练的神经元变少了,每个子模型的能力在一定程度上降低,拟合速度下降,训练时间变长。
2)局限性较强
比较适合全连接层。
对于卷积层,比较依赖特征图中每个元素之间的关系。
而且,卷积层的权值共享和局部连接在一定程度上已经实现了参数的稀疏化。
强行dropout效果未必会变好。
反之,BN层规范了每一个神经元的输入。
不使用BN层,每一个神经元的输入分布变化较大,或者每层的神经元的输入分布存在差异,
每次反向传播最佳的学习率不同,网络需要迁就学习率最小的,训练较慢。
使用BN层后,就可以适当增加学习率,提升训练速度。
同时,BN层对于卷积层也是适用的,通用性较强。
综上,BN层更全面,dropout更适用于全连接层。BN层可能暂时还无法全面取代dropout。
(这句就属于仁者见仁智者见智了)
可以使用dropblock,
Dropblock的研究者认为,卷积层对于dropout并不敏感.。
因为卷积层通常是三层连用:卷积+激活+池化层,池化层本身就是对相邻单元起作用。
而且即使随机丢弃,卷积层仍然可以从相邻的激活单元学习到相同的信息。因此,在全连接层上效果很好的Dropout在卷积层上效果并不好。相当于把cutout应用到特征图。