Tensorflow 带relu激活的辍学

Tensorflow 带relu激活的辍学,tensorflow,neural-network,activation-function,dropout,Tensorflow,Neural Network,Activation Function,Dropout,我正在尝试在tensorflow中实现一个带有辍学的神经网络 tf.layers.dropout(inputs, rate, training) 从文档中可以看出:“辍学是指在训练期间每次更新时将输入单位的分数率随机设置为0,这有助于防止过度拟合。保留的单位按1/(1-率)缩放,以便它们的总和在训练时和推断时保持不变。” 现在我明白了,如果退出应用在严格高于零的乙状结肠激活之上,这种行为就会发生。如果一半的输入单元归零,那么所有输出的总和也将减半,因此按2的因数缩放它们是有意义的,以便在下一层

我正在尝试在tensorflow中实现一个带有辍学的神经网络

tf.layers.dropout(inputs, rate, training)
从文档中可以看出:“辍学是指在训练期间每次更新时将输入单位的分数率随机设置为0,这有助于防止过度拟合。保留的单位按1/(1-率)缩放,以便它们的总和在训练时和推断时保持不变。”

现在我明白了,如果退出应用在严格高于零的乙状结肠激活之上,这种行为就会发生。如果一半的输入单元归零,那么所有输出的总和也将减半,因此按2的因数缩放它们是有意义的,以便在下一层之前恢复某种一致性

现在,如果我们使用以零为中心的tanh激活呢?上述推理不再成立,那么按照上述因素衡量辍学率是否仍然有效?有没有办法防止tensorflow辍学扩展输出


提前感谢

将节点的输出设置为零,这样神经元就不会对它所喂养的神经元产生影响。这将产生稀疏性,从而尝试减少过度拟合。使用sigmoid或tanh时,该值仍设置为零


我认为你在这里的推理方法是错误的。考虑贡献而不是总和。

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

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

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


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

你好,马克,谢谢你的回答,但这不是问题的重点。我问的是1/(1速率)比例因子。在培训时将此因素应用于辍学是否仍然有效。