我正在尝试实现一个在tensorflow中辍学的神经网络。
tf.layers.dropout(inputs, rate, training)从文档中看:"Dropout是在训练期间,在每次更新时将输入单元的分数率随机设置为0,这有助于防止过度拟合。保持不变的单位是1/ (1 -速率),因此它们的总和在训练时间和推理时间不变。“
现在我明白了,如果在乙状结肠激活上面应用了这种行为,那么这个行为严格地超过零。如果一半的输入单元被归零,所有输出的和也会减半,因此,为了在下一层之前恢复某种一致性,按2的因子进行缩放是有意义的。
现在,如果一个人使用的是围绕着0的tanh激活呢?上述推理不再成立,那么按上述因素来衡量辍学的产出是否仍然有效?有没有办法防止tensorflow辍学缩小输出?
提前感谢
发布于 2017-11-04 15:55:57
如果你有一组输入到一个节点和一组权值,它们的加权和就是一个值。你可以通过选择原始随机变量的随机分数f来定义另一个随机变量。用这种方法定义的随机变量的加权和是S* f。从这一点可以看出,如果目标是和有标度和没有标度,则重标度的论点是精确的。当激活函数在子集的加权和范围内是线性的,如果激活函数在子集的加权和范围内近似线性,则这是正确的。
在将线性组合通过任何非线性激活函数后,重新标度将不再准确地保持预期的均值。但是,如果对节点的贡献不受少量节点的支配,所选节点的随机选择子集和相当大的大小的方差将相对较小,而且如果激活函数接近于输出值,则重标度将很好地工作,以产生大致相同均值的输出。逻辑函数和tanh函数在任何小区域上近似线性。请注意,函数的范围是无关的,只是其值之间的差异。
对于relu激活,如果原始加权和足够接近于零,使子集的加权和位于零的两边,激活函数中的一个不可微点,重标度就不能很好地工作,但这是一种相对罕见的情况,仅限于输出小,所以可能不是一个大问题。
这里的主要观察是,在大量节点作出重大贡献的情况下,重新标度的效果最好,并且依赖于激活函数的局部近似线性。
发布于 2017-08-04 10:48:20
将节点的输出设置为零的目的是使神经元不会对它所喂入的神经元产生任何影响。这将造成稀疏,因此,试图减少过度适应。当使用sigmoid或tanh时,该值仍然设置为零。
我认为你的推理方法是不正确的。考虑的是贡献而不是总和。
https://stackoverflow.com/questions/45504710
复制相似问题