比如一个神经元的输出是x,那么在训练的时候它有p的概率keep,(1-p)的概率丢弃,那么它输出的期望是p x+(1-p) 0=px。因此测试的时候把这个神经元乘以p可以得到同样的期望。
训练阶段:
随机断开概率p的神经元连接,
对于某个特定的神经元,被断开的概率是p,输出为x,那么其输出期望=p*x+(1-p)*0=px
预测阶段:
所有神经元正常连接,
输出为x,那么将x*p作为输出,其输出期望为px,和训练阶段期望一致。
那么dropout为什么可以防止过拟合,可能有以下两种原因:
1、投票机制。由于是随机断开连接,所以每次训练的网络都是不同的,但是这些不同的网络使用了相同的目标函数。预测的时候其实是综合了所有这么多种网络的一个结果,相当于一个投票过程,每种网络都投票,票多胜出,增强了整个模型的鲁棒性。对于其中每种神经网络而言,可能存在过拟合的情况,但是由于它们使用了相同的目标函数,那么预测阶段其实是取了多种网络的平均,是一种优化的过程,有效防止过拟合。
2、减少神经元之间复杂的共适应性。当隐藏层神经元被随机删除之后,使得全连接网络具有了一定的稀疏化,从而有效地减轻了不同特征的协同效应。也就是说,有些特征可能会依赖于固定关系的隐含节点的共同作用,而通过Dropout的话,就有效地组织了某些特征在其他特征存在下才有效果的情况,增加了神经网络的鲁棒性。(引用https://blog.csdn.net/williamyi96/article/details/77544536)
对于第二点,我是这样理解的。我们希望得到的特征都是相互独立的,如果有些特征是依赖其他特征的,那么所依赖的这部分特征的变化对整个模型的影响会很大,所谓牵一发而动全身。所以如果能避免特征之间相互的依赖性,最大可能地互相独立,就能加强模型的稳定性和鲁棒性。