我正在从 deeplearning.ai
课程中学习神经网络的正则化。在 dropout 正则化中,教授说如果应用了 dropout,计算得到的激活值将比不应用 dropout 时(在测试阶段)要小。因此,我们需要对激活值进行缩放,以简化测试阶段的过程。
我理解了这个事实,但我不明白如何进行缩放。这里有一个用于实现反转 dropout 的代码示例。
keep_prob = 0.8 # 0 <= keep_prob <= 1l = 3 # 此代码仅适用于第3层# 生成的小于0.8的数字将被丢弃。80%保留,20%丢弃d3 = np.random.rand(a[l].shape[0], a[l].shape[1]) < keep_proba3 = np.multiply(a3,d3) # 只保留d3中的值# 增加a3以不减少输出预期值#(确保a3的预期值保持不变) - 解决缩放问题a3 = a3 / keep_prob
在上面的代码中,为什么激活值要除以 0.8
或保持层中节点的概率 (keep_prob
)?任何数值示例都会有所帮助。
回答:
在花了一些时间理解反转 dropout 后,我自己找到了答案。这里是我的直觉:
我们以 keep_prob
的概率保留任何层中的神经元。假设 keep_prob = 0.6
,这意味着要关闭任何层中40%的神经元。如果在关闭40%的神经元之前该层的原始输出是 x
,那么在应用40%的 dropout 后,它将减少 0.4 * x
。所以现在它会是 x - 0.4x = 0.6x
。
为了维持原始输出(预期值),我们需要将输出除以 keep_prob
(这里是 0.6
)。