dropout的Keras
实现参考了这篇论文。
以下摘录来自该论文:
这个想法是在测试时使用单个神经网络而不会丢失。该网络的权重是经过训练的权重的缩小版本。如果在训练期间以概率 p 保留一个单元,则该单元的传出权重在测试时乘以 p,如图 2 所示。
Keras 文档提到 dropout 仅在训练时使用,以及 Dropout 实现中的以下行
x = K.in_train_phase(K.dropout(x, level=self.p), x)
似乎表明确实在测试期间来自层的输出只是简单地传递。
此外,我找不到像论文建议的那样在训练完成后缩小权重的代码。我的理解是,这个缩放步骤对于使 dropout 起作用从根本上是必要的,因为它相当于在“子网络”的集合中获取中间层的预期输出。没有它,计算就不能再被认为是从这个“子网络”集合中采样的。
那么,我的问题是,如果有的话,Keras 中实现的 dropout 的这种缩放效果在哪里?
更新 1:好的,所以 Keras 使用了倒置 dropout,尽管它在 Keras 文档和代码中被称为 dropout。链接http://cs231n.github.io/neural-networks-2/#reg似乎并不表示两者是等价的。答案也不在https://stats.stackexchange.com/questions/205932/dropout-scaling-the-activation-versus-inverting-the-dropout。我可以看到他们做类似的事情,但我还没有看到有人说他们完全一样。我认为他们不是。
所以一个新问题:dropout和inverted dropout是等价的吗?需要明确的是,我正在寻找数学上的理由来说明它们是或不是。