Dropout!

dropout指神经网络在训练时通过随机失活部分神经元方式来降低过拟合的策略,大多在全连接层中使用。

[《Dropout: A Simple Way to Prevent Neural Networks from Overfitting》 (https://jmlr.org/papers/volume15/srivastava14a/srivastava14a.pdf)

Dropout起作用的方式

  • 在训练时:每次前传, 按照失活概率 \(p\) 来随机将输入向量中某些元素置零(相当于失活了上一层中这些元素对应的神经元),为了保证该层输出均值不发生偏移,对应的输出也将会被调整至原来的 \(1/(1-p)\).
  • 在测试时:不进行dropout处理,也即利用全部的神经元来进行预测。
    image
    具体的, 在pytorch中通过nn.Dropout()或者nn.Dropout2d()来实现,其中前者是完全随机的将输入tensor中每个元素按照伯努利分布p进行置零,后者是按照通道处理,也即每个通道按照伯努利分布p进行同步置零的操作(更符合dropout中神经元失活的说法,因为某个通道中的所有元素都是由相同的一组CNN权重卷积得到的)。

Dropout为什么能够降低过拟合?

  1. 类似于集成学习中的集成效果:因为在训练过程中每次随机失活不同的神经元,网络结构已经发生了改变。因此可以这样理解:在整个dropout的训练过程就相当于训练了很多个不同的网络,而最后测试时相当于集成了这些网络的综合结果(类似于取平均或者多模型投票)
  2. dropout减弱了神经元之间复杂的依赖共生关系,降低了神经元不同参数之间的耦合程度。阻止了某些特征仅仅在有其它特定特征下才有效果的情况,从而迫使网络少关注这些特殊情况,而只能去学习一些更加鲁棒的特征。
  3. 由于dropout在训练时随机置零,因此为训练输入带来了随机性,同时也稀疏了网络参数,可以看作某种意义上的参数正则化。
posted @ 2022-07-27 15:50  yinpengchen  阅读(138)  评论(0编辑  收藏  举报