Keras:内核和 Activity 正则化器之间的区别
Keras: Difference between Kernel and Activity regularizers
我注意到 weight_regularizer 在 Keras 中不再可用,取而代之的是 activity 和 kernel 正则化器。
我想知道:
- kernel 和 activity 正则化器之间的主要区别是什么?
- 我可以用 activity_regularizer 代替 weight_regularizer 吗?
activity 正则化器作为网络输出的函数,主要用于正则化隐藏单元,而 weight_regularizer,顾名思义,作用于权重(例如使它们腐烂)。基本上,您可以将正则化损失表示为输出 (activity_regularizer
) 或权重 (weight_regularizer
) 的函数。
新的 kernel_regularizer
取代了 weight_regularizer
- 尽管文档中不是很清楚。
根据kernel_regularizer
的定义:
kernel_regularizer: Regularizer function applied to
the kernel
weights matrix
(see regularizer).
和activity_regularizer
:
activity_regularizer: Regularizer function applied to
the output of the layer (its "activation").
(see regularizer).
重要编辑:请注意 activity_regularizer 中有一个错误 仅修复在 Keras 版本 2.1.4 中(至少使用 Tensorflow 后端)。事实上,在旧版本中,activity 正则化函数应用于层的输入,而不是应用于输出(层的实际激活,如预期的那样)。所以请注意,如果您使用的是旧版本的 Keras(2.1.4 之前),activity 正则化可能无法按预期工作。
您可以在 GitHub
上看到提交
Five months ago François Chollet provided a fix to the activity regularizer, that was then included in Keras 2.1.4
这个回答有点晚了,但对以后的读者有用。
因此,正如他们所说,必要性是发明之母。需要的时候才懂
上面的答案并没有真正说明差异,因为它们最终都会影响权重,那么惩罚权重本身或层的输出有什么区别?
答案如下:我遇到过一个情况,网络的权重很小,很好,范围在[-0.3]到[+0.3]之间。
所以,我真的没法惩罚他们,他们没有错。内核正则化器是无用的。然而,层的输出是巨大的,以 100 为单位。
请记住,该层的输入也很小,总是小于 1。但是这些小值以产生大量输出的方式与权重相互作用。在这里我意识到我需要的是 activity 正则化器,而不是内核正则化器。有了这个,我正在惩罚那些大输出的层,我不在乎权重本身是否很小,我只是想阻止它达到这种状态,因为这会使我的 sigmoid 激活饱和并导致大量其他问题,例如消失梯度和停滞。
我注意到 weight_regularizer 在 Keras 中不再可用,取而代之的是 activity 和 kernel 正则化器。 我想知道:
- kernel 和 activity 正则化器之间的主要区别是什么?
- 我可以用 activity_regularizer 代替 weight_regularizer 吗?
activity 正则化器作为网络输出的函数,主要用于正则化隐藏单元,而 weight_regularizer,顾名思义,作用于权重(例如使它们腐烂)。基本上,您可以将正则化损失表示为输出 (activity_regularizer
) 或权重 (weight_regularizer
) 的函数。
新的 kernel_regularizer
取代了 weight_regularizer
- 尽管文档中不是很清楚。
根据kernel_regularizer
的定义:
kernel_regularizer: Regularizer function applied to the
kernel
weights matrix (see regularizer).
和activity_regularizer
:
activity_regularizer: Regularizer function applied to the output of the layer (its "activation"). (see regularizer).
重要编辑:请注意 activity_regularizer 中有一个错误 仅修复在 Keras 版本 2.1.4 中(至少使用 Tensorflow 后端)。事实上,在旧版本中,activity 正则化函数应用于层的输入,而不是应用于输出(层的实际激活,如预期的那样)。所以请注意,如果您使用的是旧版本的 Keras(2.1.4 之前),activity 正则化可能无法按预期工作。
您可以在 GitHub
上看到提交Five months ago François Chollet provided a fix to the activity regularizer, that was then included in Keras 2.1.4
这个回答有点晚了,但对以后的读者有用。
因此,正如他们所说,必要性是发明之母。需要的时候才懂
上面的答案并没有真正说明差异,因为它们最终都会影响权重,那么惩罚权重本身或层的输出有什么区别?
答案如下:我遇到过一个情况,网络的权重很小,很好,范围在[-0.3]到[+0.3]之间。
所以,我真的没法惩罚他们,他们没有错。内核正则化器是无用的。然而,层的输出是巨大的,以 100 为单位。
请记住,该层的输入也很小,总是小于 1。但是这些小值以产生大量输出的方式与权重相互作用。在这里我意识到我需要的是 activity 正则化器,而不是内核正则化器。有了这个,我正在惩罚那些大输出的层,我不在乎权重本身是否很小,我只是想阻止它达到这种状态,因为这会使我的 sigmoid 激活饱和并导致大量其他问题,例如消失梯度和停滞。