Dropout
Dropout可以比较有效的缓解过拟合的发生,在一定程度上达到正则化的效果。
Dropout简介
Dropout出现的原因
训练深度神经网络的时候,总是会遇到两大缺点:
- 容易过拟合
- 费时
过拟合具体表现在:模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。
什么是Dropout
Dropout可以作为训练深度神经网络的一种trick供选择。在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0),可以明显地减少过拟合现象。这种方式可以减少特征检测器(隐层节点)间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。
Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征,如图所示。
Dropout训练和预测时的不同
在训练阶段:
- 首先随机(临时)删掉网络中一半的隐藏神经元,输入输出神经元保持不变
- 然后把输入x通过修改后的网络前向传播,然后把得到的损失结果通过修改的网络反向传播。一小批训练样本执行完这个过程后,在没有被删除的神经元上按照随机梯度下降法更新对应的参数(w,b)
- 在p是神经元抛弃概率时,训练后神经元参数需要进行$\frac{1}{1-p}$缩放
当模型使用dropout layer时,训练的时候只有占比为$p$的隐层单元参与训练,那么在预测的时候,如果所有的隐藏层单元都需要参与进来,则得到的结果相比训练时平均要大$\frac{1}{p}$,为了避免这种情况,就需要测试的时候将输出结果乘以 $p$使下一层的输入规模保持不变。
而利用inverted dropout,我们可以在训练的时候直接将dropout后留下的权重扩大$\frac{1}{p}$倍,这样就可以使结果的scale保持不变,而在预测的时候也不用做额外的操作了,更方便一些。
在测试阶段:
直接利用所有训练好的神经元权重计算输出,不需要dropout