深度學習訓練中是否有必要使用L1獲得稀疏解

內容來自知乎深度學習訓練中是否有必要使用L1獲得稀疏解?,整理以做記錄。

知乎專欄:CNN-L1正則的稀疏性 -無痛的機器學習中對比了L1和L2在CNN中的實踐,並提出問題:稀疏解是否有意義?爲何在實際中很少看見L1在深度學習中採用?

Towser 的回答:

Towser - 知乎
沒必要。因爲:

  1. 對於加了L1正則的神經網絡,大部分深度學習框架自帶的優化器(主要是SGD及其變種)訓練獲得不了稀疏解
  • DL框架中L1正則的實現基本都是給損失函數加上所有參數
    的絕對值之和,這一步是沒有問題的(這是L1範數約束的拉格朗日形式)。但是,求解算法(optimizer)卻求不到所有參數的絕對值之和,哪怕是對於已經被研究得很透的LASSO而言,subgradient descent都獲得不了嚴格的稀疏解(LASSO需要用soft-thresholding/LARS等求解算法才能獲得真正的稀疏解),更別說更加複雜的神經網絡了。Gradient descent 連一個高維光滑函數的最小值都找不到,還指望stochastic subgradient descent 找到一個不光滑函數的最小值?不存在的。上面專欄中的實驗也驗證了對於現在的深度學習框架來說,加L1正則是獲得不了稀疏解的。
  1. 實踐中如果想獲得稀疏解,可以先給目標函數加L1正則,然後在訓練過程中或者訓練結束後把絕對值較小的參數抹成0
  • 例如Github源碼就是這樣做的,readme裏寫了把1e-4以下的權重抹成0.另一種獲得稀疏解的方法是使用proximal gradient系列的優化器,不過這種方法通常需要自己改optimizer,用的人比較少
  1. 如果稀疏解的模式是無規律的,這種稀疏意義不大
  • 因爲對部署並不友好,完全有可能減了參數卻沒減推斷速度(稀疏的卷積或者其它稀疏運算其實不好實現),模型的存儲格式也要重新修改(比如說要存儲非零元素的位置),有一連串的後續反應。如果希望稀疏解的模式有規律,往往需要更復雜的正規手段(例如Group LASSO)來引導,這樣依賴代碼寫起來太麻煩:一方面是需要考慮自己想要的稀疏模式應該如何對權重分組(別整到最後大大影響模型訓練速度,把深度學習框架倖幸苦苦優化的fused kernel的優勢全搞沒了),另一方面還要按照2中所說的技巧對網絡權重及時歸零,簡直麻煩大了,所以不實用。
  1. 綜上,如果是爲了模型壓縮、加速推斷的話,有搞稀疏正則的時間不如去搞量化、蒸餾以及精簡網絡結構(MobileNet等);如果是爲了給模型加正則防止過擬合,不如去用L2正則或者Dropout等手段,好用又好寫。

補充:

Naiyan Wang的回答:

Naiyan Wang - 知乎
這個問題是分成兩個小問題的:

  • 深度學習中怎麼通過L1能優化到sparse的解
  • 深度學習中sparse有什麼用

針對第一個問題,以上的回答中已經說的很好。如果直接使用momentum SGD這種方法去優化L1這種non-smooth loss的話,其實並不會得到exact sparse solution。一般來說只能通過一些heuristic的辦法,比如說設置某個threshold強行截斷來得到一個sparse的結果,我們爲了解決這個問題,在[1]中提出了一種modified accelerated proximal gradient辦法,只使用簡單幾行代碼,無痛地把稀疏優化問題聯合加入到deep learning的訓練中去。

針對第二個問題,我想其實需要退一步站在更廣闊的一個視角下來看。狹義無結構的sparse對於實際應用來說意義不是很大,很難獲得實際的walk clock time加速的效果。訓練的目標可能不僅僅是有狹義的weight,還可能包括更廣義的結構等。這也是[1,2]中所努力探索的。在模型壓縮和最近流行的模型結構搜索NAS上都取得了不錯的效果。

[1] Huang, Z., & Wang, N. (2018). Data-driven sparse structure selection for deep neural networks. InProceedings of the European Conference on Computer Vision (ECCV)(pp. 304-320).

[2] Zhang, X., Huang, Z., & Wang, N. (2018). You Only Search Once: Single Shot Neural Architecture Search via Direct Sparse Optimization.arXiv preprint arXiv:1811.01567.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章