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

Sim*_*one 70 machine-learning keras keras-layer

我注意到在Keras中没有更多的weight_regularizer可用,并且取而代之的是有活动内核规范化器.我想知道:

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

Mic*_*tti 75

活动正则化器作为网络输出的函数起作用,主要用于规范隐藏单元,而weight_regularizer,正如其名称所说,对权重起作用,使它们衰减.基本上,您可以将正则化损失表示为output(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的例子,但没有找到activity_regularizer.你能评论一下activity_regularizer的用例吗? (3认同)
  • 是的 - 检查我的编辑答案 (2认同)

Ale*_*eft 11

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

  • 真正直观。 (3认同)