ChatGPT解决这个技术问题 Extra ChatGPT

Keras:内核和活动正则化器之间的区别

我注意到 Keras 中不再提供 weight_regularizer 了,取而代之的是活动和内核正则化器。我想知道:

内核和活动正则化器之间的主要区别是什么?

我可以使用 activity_regularizer 代替 weight_regularizer 吗?


B
Bas Krahmer

活动正则化器作为网络输出的函数工作,主要用于正则化隐藏单元,而权重正则化器,顾名思义,作用于权重(例如,使它们衰减)。基本上,您可以将正则化损失表示为输出 (activity_regularizer) 或权重 (weight_regularizer) 的函数。

新的 kernel_regularizer 替换了 weight_regularizer - 尽管从文档中看不太清楚。

根据 kernel_regularizer 的定义:

kernel_regularizer:应用于内核权重矩阵的正则化函数(参见正则化)。

activity_regularizer

activity_regularizer:应用于层输出的正则化函数(它的“激活”)。 (见正则化器)。

重要编辑:请注意,activity_regularizer 中的一个错误仅在 Keras 版本 2.1.4 中修复(至少在 Tensorflow 后端中)。事实上,在旧版本中,活动正则化函数应用于层的输入,而不是应用于输出(层的实际激活,如预期的那样)。因此请注意,如果您使用的是较旧版本的 Keras(2.1.4 之前),活动正则化可能无法按预期工作。

您可以在 GitHub 上看到提交

Five months ago François Chollet provided a fix to the activity regularizer, that was then included in Keras 2.1.4


您完全确定 kernel_regularizer 替换 weight_regularizer 吗?
我找到了许多使用 kernel_regularizer 的示例,但不适用于 activity_regularizer。你能评论一下 activity_regularizer 的用例吗?
为什么要规范隐藏层的输出?是不是出于同样的原因,我们将输入标准化为范围 (-1, 1) 或 (0, 1)。那就是保持对后续层的输入更小以帮助 SGD 过程?
@NagabhushanBaddi 看到这个答案:datascience.stackexchange.com/a/15195/32811
@FinncentPrice 我只能假设它曾经存在,现在不再存在
H
Hossein

这个答案有点晚,但对未来的读者很有用。所以,正如他们所说,必要性是发明之母。我只有在需要的时候才明白。上面的答案并没有真正说明差异,因为它们最终都会影响权重,那么惩罚权重本身或层的输出之间有什么区别?答案是这样的:我遇到了一个网络的权重很小而且很好的情况,范围在 [-0.3] 到 [+0.3] 之间。所以,我真的不能惩罚他们,他们没有错。内核正则化器是无用的。然而,该层的输出是巨大的,以 100 为单位。请记住,层的输入也很小,总是小于 1。但是这些小值与权重的交互方式会产生大量输出。在这里,我意识到我需要的是一个活动正则化器,而不是内核正则化器。有了这个,我正在惩罚那些大输出的层,我不在乎权重本身是否很小,我只是想阻止它达到这种状态,因为这会使我的 sigmoid 激活饱和并导致大量其他问题,比如消失梯度和停滞。


真正直观。
Clipnorm 也有帮助。