【发布时间】:2016-07-26 14:40:28
【问题描述】:
dropout 引用 this paper 的 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 和倒置 dropout 是等价的吗?明确地说,我正在寻找数学上的理由来说明它们是或不是。
【问题讨论】:
标签: machine-learning neural-network deep-learning keras regularized