我在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
您如何在「您的」代碼中使用正規化器? –