我在Keras的神经网络参数上使用L1正则化与keras.regularizers.l1(0.01)
来获得稀疏模型。我发现,虽然我的许多系数是关闭归零,但其中很少是实际为零。Keras/Tensorflow中的L1正则化*真正* L1正则化吗?
看着the source code for the regularization,它表明Keras只是将参数的L1范数添加到损失函数中。
这将是不正确的,因为这些参数几乎可以肯定不会像L1正则化那样变为零(在浮点错误之内)。当一个参数为零时,L1范数是不可微分的,所以如果在优化程序中接近零的地方将参数设置为零,则需要使用次梯度方法。请参阅软阈值运算符max(0, ..)
here。
Tensorflow/Keras是否这样做,或者这对于随机梯度下降不切实际?
编辑:另外here是一个很好的博客文章,解释L1正则化的软阈值运算符。
'L1'正则化很好。 L1鼓励稀疏性超过L2,但肯定不能保证。 theano和tensorflow都经过了很好的测试,当然在非微分点附近处理梯度也很好。 – y300
我认为你是正确的,它的实施方式并没有使权重实际上达到零。这很不幸。 – Aaron
您如何在“您的”代码中使用正规化器? –