为什么在TensorFlow中tf.nn.dropout会对输入进行缩放?

我无法理解为什么TensorFlow中的dropout会这样工作。CS231n的博客提到,"dropout通过以某个概率p(一个超参数)保持神经元活跃,或者将其设为零来实现。"你也可以从图片中看到这一点(图片来自同一网站)enter image description here

根据TensorFlow的网站,以keep_prob的概率输出输入元素,并将其放大1 / keep_prob,否则输出0。

那么,为什么输入元素要被放大1/keep_prob呢?为什么不保持输入元素原样并以一定概率输出,而不进行1/keep_prob的缩放呢?


回答:

这种缩放使得同一个网络可以用于训练(keep_prob < 1.0)和评估(keep_prob == 1.0)。从Dropout论文中可以看到:

这个想法是在测试时使用一个没有dropout的单一神经网络。这个网络的权重是训练权重的缩小版本。如果一个单元在训练期间以概率p被保留,那么在测试时该单元的输出权重将乘以p,如图2所示。

TensorFlow的实现并不是在测试时添加操作来将权重缩小keep_prob,而是在训练时添加操作来将权重放大1. / keep_prob。这种方法对性能的影响可以忽略不计,并且代码更简单(因为我们使用相同的图,并将keep_prob视为一个tf.placeholder(),根据我们是训练还是评估网络而输入不同的值)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注