1.6 dropout 正则化(Dropout Regularization)

Dropout是指在深度学习网络的训练过程中,对于每层的神经元,按照一定的概率将其暂时从网络中丢弃。即每次训练时,每一层都有部分神经元不工作,起到简化复杂网络模型的效果,从而避免发生过拟合

Inverted dropout(反向随机失活)

假设对于第ll层神经元,设定保留神经元比例概率keep_prob=0.8,即该层有20%的神经元停止工作。dldl为dropout向量,设置dldl为随机vector,其中80%的元素为1,20%的元素为0。

生成dropout vector:

dl = np.random.rand(al.shape[0],al.shape[1])<keep_prob

ll层经过dropout,随机删减20%的神经元,只保留80%的神经元,其输出为:

al = np.multiply(al,dl)

最后,对alal进行scale up处理,即:

al /= keep_prob

alal进行scale up是为了保证在经过dropout后,alal作为下一层神经元的输入值尽量保持不变,尽可能保持alal的期望值相比之前没有大的变化

Inverted dropout的另外一个好处就是在对该dropout后的神经网络进行测试时能够减少scaling问题。因为在训练时,使用scale up保证alal的期望值没有大的变化,测试时就不需要再对样本数据进行类似的尺度伸缩操作

对于mm个样本,单次迭代训练时,随机删除掉隐藏层一定数量的神经元;然后,在删除后的剩下的神经元上正向和反向更新权重ww和常数项bb;接着,下一次迭代中,再恢复之前删除的神经元,重新随机删除一定数量的神经元,进行正向和反向更新wwbb。不断重复上述过程,直至迭代训练完成

使用dropout训练结束后,在测试和实际应用模型时,不需要进行dropout和随机删减神经元,所有的神经元都在工作

Last updated