簡體   English   中英

Keras / Tensorflow *中的L1正則化真的是* L1正則化嗎?

[英]Is the L1 regularization in Keras/Tensorflow *really* L1-regularization?

我正在使用keras.regularizers.l1(0.01)keras.regularizers.l1(0.01)神經網絡參數進行L1正則化,以獲得稀疏模型。 我發現,雖然我的許多系數都接近於零,但實際上很少有系數為零。

在查看正則化的源代碼時 ,它表明Keras只是將參數的L1范數添加到損失函數中。

這將是不正確的,因為參數幾乎肯定永遠不會像L1正則化那樣變為零(在浮點誤差內)。 當參數為零時,L1范數不可微分,因此如果參數設置為零(如果在優化例程中足夠接近零),則需要使用次梯度方法。 請在此處查看軟閾值運算符max(0, ..)

Tensorflow / Keras是否會這樣做,或者這對隨機梯度下降是否不切實際?

編輯: 這里還有一篇精湛的博客文章,解釋了L1正則化的軟閾值運算符。

所以盡管@Joshua回答,還有其他三件事值得一提:

  1. 0的漸變沒有問題。 keras自動將其設置為1類似於relu case。
  2. 請記住,小於1e-6值實際上等於0因為這是float32 precision。
  3. 由於基於梯度下降的算法(並且設置高l1值)的性質,由於計算原因可能出現不將大多數值設置為0問題,因為可能由於梯度不連續而發生振盪。 要理解想象,對於給定的權重w = 0.005你的學習率等於0.01 ,主要損失的梯度等於0 wrt到w 因此,您的體重將按以下方式更新:

     w = 0.005 - 1 * 0.01 = -0.05 (because gradient is equal to 1 as w > 0), 

    並在第二次更新后:

     w = -0.005 + 1 * 0.01 = 0.05 (because gradient is equal to -1 as w < 0). 

    正如您所看到的,即使您應用l1正則化, w的絕對值也沒有減少,這是由於基於梯度的算法的性質而發生的。 當然,這是簡化的情況,但是當使用l1范數正則化器時,您可能經常會遇到這種振盪行為。

Keras正確地實現了L1正則化。 在神經網絡的背景下,L1正則化簡單地將參數的L1范數添加到損失函數(參見CS231 )。

雖然L1正則化確實鼓勵稀疏性,但它並不能保證輸出稀疏。 隨機梯度下降的參數更新本質上是有噪聲的。 因此,任何給定參數恰好為0的概率都很小。

然而,L1正則化網絡的許多參數通常接近於0.一個基本的方法是將小值閾值設置為0.已經有研究探索更先進的生成稀疏神經網絡的方法。 本文中 ,作者同時修剪和訓練神經網絡,以在許多眾所周知的網絡架構上實現90-95%的稀疏性。

Keras正確地實現了L1正則化,但這不是LASSO。 對於LASSO,需要一個軟閾值函數,如原始帖子中正確指出的那樣。 對於類似於keras.layers.ThresholdedReLU(theta = 1.0)的函數來說非常有用,但是對於x> theta,f(x)= x,對於x <-the,f(x)= x,f(x) )= 0否則。 對於LASSO,theta將等於學習速率乘以L1函數的正則化因子。

TL; DR:深度學習框架中的表述是正確的,但目前我們沒有強大的求解器/優化器來完全解決它與SGD或其變體。 但是如果使用近端優化器,則可以獲得稀疏解。


你的觀察是正確的。

  1. 幾乎所有深度學習框架(包括TF)都通過向損失函數添加參數的絕對值來實現L1正則化。 這是L1正則化和IS CORRECT的拉格朗日形式。
  2. 但是, SOLVER / OPTIMIZER應該受到指責。 即使對於經過充分研究的LASSO問題,其中解決方案應該是稀疏的並且軟閾值算子DOES給我們稀疏解, 所以子梯度下降求解器也不能得到精確的SPARSE解。 Quora的這個答案給出了一些關於次梯度下降的收斂性的見解,它說:

次梯度下降對於非光滑函數(例如Lasso目標)具有非常差的收斂性質,因為它只是通過查看整個目標的子梯度來完全忽略問題結構(它不區分最小二乘擬合和正則化項) 。 直觀地,在(子)梯度的方向上采取小步驟通常不會導致坐標精確地等於零。

  1. 如果使用近端運算符,則可以獲得稀疏解。 例如,您可以查看論文“深度神經網絡的數據驅動稀疏結構選擇”(這一個帶有MXNET代碼並且易於重現!)或“帶加速技術的隨機近端梯度下降”(這個給出更多理論見解)。 我不確定TF中的內置近端優化器(例如: tf.train.ProximalAdagradOptimizer )是否會導致稀疏解決方案,但您可能會嘗試一下。

另一個簡單的工作是在訓練之后或在每個梯度下降步驟之后將小權重(即:絕對值<1e-4)歸零以強制稀疏。 這只是一種方便的啟發式方法,在理論上並不嚴謹。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM