正則化--L1正則化(稀疏性正則化)


稀疏矢量通常包含許多維度。創建特征組合會導致包含更多維度。由於使用此類高維度特征矢量,因此模型可能會非常龐大,並且需要大量的 RAM。

在高維度稀疏矢量中,最好盡可能使權重正好降至 0。正好為 0 的權重基本上會使相應特征從模型中移除。 將特征設為 0 可節省 RAM 空間,且可以減少模型中的噪點。

以一個涵蓋全球地區(不僅僅只是涵蓋加利福尼亞州)的住房數據集為例。如果按分(每度為 60 分)對全球緯度進行分桶,則在一次稀疏編碼過程中會產生大約 1 萬個維度;如果按分對全球經度進行分桶,則在一次稀疏編碼過程中會產生大約 2 萬個維度。這兩種特征的特征組合會產生大約 2 億個維度。這 2 億個維度中的很多維度代表非常有限的居住區域(例如海洋里),很難使用這些數據進行有效泛化。 若為這些不需要的維度支付 RAM 存儲費用就太不明智了。 因此,最好是使無意義維度的權重正好降至 0,這樣我們就可以避免在推理時支付這些模型系數的存儲費用。

我們或許可以添加適當選擇的正則化項,將這種想法變成在訓練期間解決的優化問題。

L2 正則化能完成此任務嗎?遺憾的是,不能。 L2 正則化可以使權重變小,但是並不能使它們正好為 0.0。

另一種方法是嘗試創建一個正則化項,減少模型中的非零系數值的計數。只有在模型能夠與數據擬合時增加此計數才有意義。 遺憾的是,雖然這種基於計數的方法看起來很有吸引力,但它會將我們的凸優化問題變為非凸優化問題,即 NP 困難。 (如果您仔細觀察,便會發現它與背包問題關聯。) 因此,L0 正則化這種想法在實踐中並不是一種有效的方法。

不過,L1 正則化這種正則化項的作用類似 L0,但它具有凸優化的優勢,可有效進行計算。因此,我們可以使用 L1 正則化使模型中很多信息缺乏的系數正好為 0,從而在推理時節省 RAM。


L1 和 L2 正則化

L2 和 L1 采用不同的方式降低權重:

  • L2 會降低權重2。
  • L1 會降低 |權重|。

因此,L2 和 L1 具有不同的導數:

  • L2 的導數為 2 * 權重。
  • L1 的導數為 k(一個常數,其值與權重無關)。

您可以將 L2 的導數的作用理解為每次移除權重的 x%。如 Zeno 所知,對於任意數字,即使按每次減去 x% 的幅度執行數十億次減法計算,最后得出的值也絕不會正好為 0。(Zeno 不太熟悉浮點精度限制,它可能會使結果正好為 0。)總而言之,L2 通常不會使權重變為 0。

您可以將 L1 的導數的作用理解為每次從權重中減去一個常數。不過,由於減去的是絕對值,L1 在 0 處具有不連續性,這會導致與 0 相交的減法結果變為 0。例如,如果減法使權重從 +0.1 變為 -0.2,L1 便會將權重設為 0。就這樣,L1 使權重變為 0 了。

L1 正則化 - 減少所有權重的絕對值 - 證明對寬度模型非常有效。


引用

分類 (Classification):預測偏差


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM