我注意到在Keras中weight_regularizer不再可用,取而代之的是活动和内核正则化器。我想知道:
- 内核和活动正则器之间的主要区别是什么?
- 我可以使用activity_regularizer代替weight_regularizer吗?
Answers:
活动调节器是网络输出的函数,通常用于调节隐藏的单位,而权重调节器(顾名思义)对权重起作用,使权重衰减。基本上,您可以将正则化损失表示为输出(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上查看提交
这个答案有点晚了,但对将来的读者很有用。因此,正如他们所说,必要性是发明之母。我只有在需要时才了解它。
上面的答案并没有真正说明差异的原因,因为它们最终都会影响权重,因此惩罚权重本身或图层输出之间有什么区别?
答案是:我遇到了一种情况,网的权重很小且很好,介于[-0.3]到[+0.3]之间。
所以,我真的不能惩罚他们,他们没有错。内核正则化器是没有用的。但是,该层的输出为100的巨大值。
请记住,该图层的输入也很小,总是小于一。但是,这些较小的值与权重相互作用,从而产生大量的输出。在这里,我意识到我需要的是活动正则化器,而不是内核正则化器。这样,我要为那些较大的输出惩罚该层,我不在乎权重本身是否很小,我只是想阻止它达到这样的状态,因为这会使我的S型激活饱和并导致大量其他麻烦,例如消失梯度和停滞。
kernel_regularizer
替换weight_regularizer
吗?