辍学中使用的比例因子的目的是什么?

机器算法验证 机器学习 深度学习 lstm 西阿诺 退出
2022-04-15 16:01:12

我有一个关于 LSTM 教程中 dropout 函数的问题:http: //deeplearning.net/tutorial/code/lstm.py

def dropout_layer(state_before, use_noise, trng):
    proj = tensor.switch(use_noise,
                         (state_before *
                          trng.binomial(state_before.shape,
                                        p=0.5, n=1,
                                        dtype=state_before.dtype)),
                         state_before * 0.5)
    return proj

据我了解,代码意味着当 时use_noise=1,我们state_before乘以一个随机二进制向量(即 dropout 过程)。
但是use_noise=0,当我们验证模型时使用 时,我们将隐藏单元值设置为state_before*0.5

为什么*0.5在这里?
不应该只是state_before不乘以任何数字吗?

1个回答

如果使用p=0.5dropout,在训练期间只有一半的神经元被激活,而如果我们在测试时将它们全部激活,则 dropout 层的输出将“加倍”,因此在这方面将输出乘以1-p抵消这种影响的一个因素。

这是辍学论文http://arxiv.org/pdf/1207.0580v1.pdf的引述

在测试时,我们使用包含所有隐藏单元的“平均网络”,但它们的输出权重减半,以弥补其中两倍活跃的事实。

另请参阅有关实现 dropout Dropout 的两种不同方法的问题:缩放激活与反转 dropout