關於L1、L2正規化的一些疑問?
我的理解中L1的主要作用是作為L0的最優凸近似,使得訓練出來的特徵係數更稀疏,更容易變為0,L2的主要作用是防止過擬合,使得特徵係數更接近於0。那麼我的第一個問題是:以線性模型或者logistics regression為例,對於L1中訓練出來的那些特徵係數為0(或者特別接近0的)的特徵是否可以刪除呢,如果可以,刪除過後了是不是還需要L1正規化項呢?第二個問題,對於L1和L2這兩個超參數,一般優化的順序是啥?第三個問題,L1的形式是絕對值,它是一個不可導函數,那麼怎麼求它的梯度,在訓練過程中有什麼比較快比較好的方法嗎?
謝邀。
Q1:以線性模型或者logistics regression為例,對於L1中訓練出來的那些特徵係數為0(或者特別接近0的)的特徵是否可以刪除呢,如果可以,刪除過後了是不是還需要L1正規化項呢?
A1:L1的係數為0,至少有兩種情況:1是這些特徵確實對於模型做預測沒有任何影響,這種情況可以通過一些統計學方法檢驗,進而刪除。2是更加普遍的情況:數據量太少,優化演算法在綜合考慮loss和正則化的情況下,選擇把一些特徵打成0,避免過擬合,而並非這些特徵沒用。
Q2:對於L1和L2這兩個超參數,一般優化的順序是啥?
A2:沒有先後之分,調超參數用grid search。Q3:L1的形式是絕對值,它是一個不可導函數,那麼怎麼求它的梯度,在訓練過程中有什麼比較快比較好的方法嗎?A3:L1隻是在原點處不可導。LR+L1比較經典的是OWL-QN演算法。更一般的優化不可導目標函數的方法是次梯度類(subgradient)的方法。
答一下後兩個問題。
Q2:超參數可以用 random search。有文章(找不到是哪篇了)認為隨機搜索比網格搜索更優,因為不同的超參數對模型的效果影響不同,模型最終的性能可能對某些超參數的變化非常敏感而對另一些不太敏感,因此用隨機搜索可以選到更好的超參數。以存在兩個超參數 alpha 和 beta 為例說明這一點:假設計算資源一共允許做 9 組實驗,如果用 3*3 的網格搜索,每個超參數只能嘗試三種不同的值;而用隨機搜索的話,每個超參數就能嘗試 9 種不同的值。假設超參數 alpha 對模型效果影響更大,而 beta 的影響則不那麼大,因為隨機搜索嘗試了 9 種 alpha,因此更有可能找到更好的 alpha。由於 alpha 對模型最終的效果影響較大,即使這個 alpha 對應的 beta 不那麼好,這一對 (alpha, beta) 的組合也很可能更好,因此隨機搜索更有可能找到更好的 (alpha, beta) 組合。
Q3:最基本的是次梯度 (sub-gradient)方法:絕對值函數僅僅在原點不可導,其他都是可導的,可以把絕對值函數 abs(x) 的導數定義成符號函數 sgn(x) 然後類似普通的梯度下降去求解。
更好的方法是近端梯度 (proximal gradient) 法,大致原理是說用目標函數往往形如 f(x) + g(x),其中 f(x) 光滑而 g(x) 不光滑,可以用一個二次函數 q(x) 在局部近似 f(x),而 q(x) + g(x) 的最優解是可以解析地求出的(對於絕對值函數,其近端運算元是軟閾值收縮函數 soft-thresholding),因此可以高效求得近似以後的函數的最優解。得到這個解以後,在這個位置重新用二次函數近似 f(),然後重複之前的步驟。就這樣迭代多次就會收斂。
了解了近端運算元的原理,就可以和其他技術結合起來花式魔改設計更好的演算法,比如 ADMM, FISTA, Bregman Iteration 等等。
==========================================
答這道題主要是無意間發現了自己以前整理的一份 L1 正則優化的筆記,順便分享一下吧:
https://pan.baidu.com/s/1nvAwosD
推薦閱讀:
※2012CNN 論文中所提出的網路結構,為什麼前兩個卷積有pooling層,而後邊的三個卷積層都沒有?
※6年資料庫核心開發 是否 該轉行機器學習/人工智慧?
※做NLP演算法工程師是一種什麼樣的體驗,以及日常工作是什麼?
※tf.data是如何支持多線程的?為何會比基於queue的batch方案慢4到5倍?
※data scientist 有什麼常見 machine learning 相關的面試問題?