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


86

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

  • 内核活动正则器之间的主要区别是什么?
  • 我可以使用activity_regularizer代替weight_regularizer吗?

Answers:


85

活动调节器是网络输出的函数,通常用于调节隐藏的单位,而权重调节器(顾名思义)对权重起作用,使权重衰减。基本上,您可以将正则化损失表示为输出(activity_regularizer)或权重(weight_regularizer)的函数。

新的kernel_regularizer替代品weight_regularizer-尽管从文档中还不清楚。

从定义kernel_regularizer

kernel_regularizer:将正则化函数应用于kernel权重矩阵(请参阅正则化器)。

activity_regularizer

activity_regularizer:将正则化函数应用于图层的输出(其“激活”)。(请参见正则化)。

重要编辑:请注意,activity_regularizer中存在一个错误,该错误仅在Keras的2.1.4版本中得到了解决(至少在Tensorflow后端中)。实际上,在较旧的版本中,活动调整器功能将应用于图层的输入,而不是应用于输出(按预期的方式实际激活该图层)。因此,请注意,如果您使用的是Keras的旧版本(在2.1.4之前),则活动正则化可能无法按预期进行。

您可以在GitHub上查看提交

五个月前,FrançoisChollet提供了对活动正则化器的修复,然后将其包含在Keras 2.1.4中


您完全确定该kernel_regularizer替换weight_regularizer吗?
Simone

3
我发现许多使用kernel_regularizer的示例,但没有使用activity_regularizer的示例。您可以评论activity_regularizer的用例吗?
Milad M

1
为什么要规范化隐藏层的输出?是出于同样的原因,我们将输入标准化为范围(-1,1)或(0,1)。那是为了使后续层的输入较小以帮助SGD过程?
Nagabhushan Baddi '18

1
@NagabhushanBaddi看到了这个答案:datascience.stackexchange.com/a/15195/32811
Michele Tonutti

1
@FinncentPrice我只能假设它曾经存在,现在已经不存在了
Michele Tonutti

34

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


真正的直觉。
萨朗·曼雷卡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.