使用 relu 激活的 dropout

dropout with relu activations

我正在尝试在 tensorflow 中实现一个带 dropout 的神经网络。

tf.layers.dropout(inputs, rate, training)

来自文档:"Dropout consists in randomly setting a fraction rate of input units to 0 at each update during training time, which helps prevent overfitting. The units that are kept are scaled by 1 / (1 - rate), so that their sum is unchanged at training time and inference time."

现在我明白了,如果在严格高于零的 sigmoid 激活之上应用 dropout,就会出现这种行为。如果一半的输入单元归零,所有输出的总和也将减半,因此将它们缩放 2 倍是有意义的,以便在下一层之前重新获得某种一致性。

现在如果使用以零为中心的 tanh 激活会怎样?上面的推理不再成立,那么通过上述因素来缩放 dropout 的输出是否仍然有效?有没有办法防止 tensorflow dropout 缩放输出?

提前致谢

将节点设置为输出为零的目的是为了让神经元不会影响由它馈送的神经元。这会产生稀疏性,因此会尝试减少过度拟合。使用 sigmoid 或 tanh 时,该值仍设置为零。

我认为你这里的推理方法是不正确的。想贡献而不是总和。

如果您有一组节点输入和一组权重,它们的加权和是一个值 S。您可以通过选择原始随机变量的随机分数 f 来定义另一个随机变量。这样定义的随机变量使用相同权重的加权和为S * f。由此,如果 objective 是总和的平均值在缩放和不缩放时保持不变,则您可以看到重新缩放的论点是精确的。当激活函数在子集的加权和范围内呈线性时,这将是正确的,如果激活函数在子集的加权和范围内是近似线性的,则近似为真。

通过任意非线性激活函数将线性组合传递后,重新缩放完全保持预期均值不再正确。然而,如果对一个节点的贡献不是由少数节点支配,则随机选择的一个选择的子集的总和的方差,相当大的尺寸将相对较小,并且如果激活函数近似线性相当接近输出值,重新缩放可以很好地产生具有大致相同平均值的输出。例如,logistic 和 tanh 函数在任何小区域上都是近似线性的。请注意,函数的范围无关紧要,只是其值之间的差异。

使用relu激活,如果原始加权和足够接近零,子集的加权和在零的两侧,激活函数中的不可微分点,重新缩放将不会很好地工作, 但这是一种相对罕见的情况,仅限于较小的输出,因此可能不是大问题。

此处的主要观察结果是,重新缩放在大量节点做出重大贡献时效果最佳,并且依赖于激活函数的局部近似线性。