L1、L2正则化是通过修改代价函数来实现防止过拟合的,而 Dropout则是通过修改神经网络本身来实现 的,它是在训练网络时用的一种技巧(trike)。在模型训练时按照一定的概率 暂时让网络某些隐含层节点的权 重不工作(也称丢弃),不工作的那些节点可以暂时认为不是网络结构的一部分,但是它的权重得保留下来, 对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。对于随机梯度下降来说,由于是随机丢弃,故而 每一个mini-batch都在训练不同的网络。这样 阻止特征检测器的共同作用,减弱了神经元节点间的联合适应性, 增强了泛化能力,提高神经网络的性能。
TensorFlow中,可以用一个placeholder来代表一个神经元 的输出在 dropout 中保持不变的概率。这样我们可以在训 练过程中启用dropout,在测试过程中关闭dropout。 TensorFlow的 tf.nn.dropout操作除了可以屏蔽神经元的 输出外,还会自动处理神经元输出值的 scale。所以用 dropout的时候可以不用考虑 scale。
实例代码(片段):