辍学与relu激活

我试图在tensorflow中实现具有丢失的神经网络 .

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

从文档中可以看出:“Dropout包括在训练期间每次更新时随机设置输入单位的分数率为0,这有助于防止过度拟合 . 保留的单位按1 /(1 - rate)缩放,以便它们的总和在训练时间和推理时间没有变化 . “

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

现在如果使用以零为中心的tanh激活怎么办?上面的推理不再成立,那么通过上述因素来扩展辍学的输出仍然有效吗?有没有办法防止张量流量减少扩大输出?

提前致谢

回答(2)

2 years ago

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

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

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

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

2 years ago

将节点设置为具有零输出的点使得神经元对由其馈送的神经元没有影响 . 这将产生稀疏性,因此试图减少过度拟合 . 使用sigmoid或tanh时,该值仍设置为零 .

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