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

时间:2017-06-12 09:16:34

标签: machine-learning keras keras-layer

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

  • 内核活动规范制定者之间的主要区别是什么?
  • 我可以使用 activity_regularizer 代替 weight_regularizer 吗?

2 个答案:

答案 0 :(得分:64)

活动正则化器作为网络输出的函数起作用,主要用于规范隐藏单元,而weight_regularizer,正如其名称所说,对权重起作用,使它们衰减。基本上,您可以将正则化损失表示为输出(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

上看到提交

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

答案 1 :(得分:3)

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