十歲的小男孩
本文為終端移植的一個小章節。
目錄
概念
Regular法
Irregular法
論文
A. Learning Structured Sparsity in Deep Neural Networks
B. Dynamic Network Surgery for Efficient DNNs
C. Training Skinny Deep Neural Networks with Iterative Hard Thresholding Methods
概念
核的稀疏化,是在訓練過程中,對權重的更新加以正則項進行誘導,使其更加稀疏,使大部分的權值都為0。我們大多數情況下,在網絡loss上面增加的權重衰減,是用權重的L2范數,制約數據損失,起到提高泛化能力的作用,如果再增加一項正則,如下:

其中第一項數據損失,第二項,權重的L2正則,第三項,稀疏化正則L1,這樣也可以起到模型壓縮的作用。
另外,上面這種正則是對每個節點進行限制,還有組正則,即指定一個組單位(可以是卷積核,通道,層),進行正則,如下:

其中:

核的稀疏化方法分為regular和irregular。
Regular法
regular的稀疏化后,裁剪起來更加容易,尤其是對im2col的矩陣操作,效率更高。
Irregular法
irregular的稀疏化后,參數需要特定的存儲方式,或者需要平台上稀疏矩陣操作庫的支持。
論文
該節摘錄核稀疏化的三篇論文探入不深,請讀者自行研讀。
A. Learning Structured Sparsity in Deep Neural Networks
本文作者提出了一種Structured Sparsity Learning的學習方式,能夠學習一個稀疏的結構來降低計算消耗,所學到的結構性稀疏化能夠有效的在硬件上進行加速。 傳統非結構化的隨機稀疏化會帶來不規則的內存訪問,因此在GPU等硬件平台上無法有效的進行加速。 作者在網絡的目標函數上增加了group lasso的限制項,可以實現filter級與channel級以及shape級稀疏化。所有稀疏化的操作都是基於下面的loss func進行的,其中Rg為group lasso:
則filter-channel wise:
而shape wise:
由於在GEMM中將weight tensor拉成matrix的結構,因此可以通過將filter級與shape級的稀疏化進行結合來將2D矩陣的行和列稀疏化,再分別在矩陣的行和列上裁剪掉剔除全為0的值可以來降低矩陣的維度從而提升模型的運算效率。該方法是regular的方法,壓縮粒度較粗,可以適用於各種現成的算法庫,但是訓練的收斂性和優化難度不確定。
B. Dynamic Network Surgery for Efficient DNNs
作者提出了一種動態的模型裁剪方法,包括以下兩個過程:pruning和splicing,其中pruning就是將認為不中要的weight裁掉,但是往往無法直觀的判斷哪些weight是否重要,因此在這里增加了一個splicing的過程,將哪些重要的被裁掉的weight再恢復回來,類似於一種外科手術的過程,將重要的結構修補回來,它的算法如下:
作者通過在W上增加一個T來實現,T為一個2值矩陣,起到的相當於一個mask的功能,當某個位置為1時,將該位置的weight保留,為0時,裁剪。在訓練過程中通過一個可學習mask將weight中真正不重要的值剔除,從而使得weight變稀疏。由於在刪除一些網絡的連接,會導致網絡其他連接的重要性發生改變,所以通過優化最小損失函數來訓練刪除后的網絡比較合適。
優化問題表達如下:
參數迭代如下:
其中用於表示網絡連接的重要性 h 函數定義如下:
該算法采取了剪枝與嫁接相結合、訓練與壓縮相同步的策略完成網絡壓縮任務。通過網絡嫁接操作的引入,避免了錯誤剪枝所造成的性能損失,從而在實際操作中更好地逼近網絡壓縮的理論極限。屬於irregular的方式,但是ak和bk的值在不同的模型以及不同的層中無法確定,並且容易受到稀疏矩陣算法庫以及帶寬的限制。
C. Training Skinny Deep Neural Networks with Iterative Hard Thresholding Methods
作者想通過訓練一個稀疏度高的網絡來降低模型的運算量,通過在網絡的損失函數中增加一個關於W的L0范式可以降低W的稀疏度,但是L0范式就導致這是一個N-P難題,是一個難優化求解問題,因此作者從另一個思路來訓練這個稀疏化的網絡。算法的流程如下:
先正常訓練網絡s1輪,然后Ok(W)表示選出W中數值最大的k個數,而將剩下的值置為0,supp(W,k)表示W中最大的k個值的序號,繼續訓練s2輪,僅更新非0的W,然后再將之前置為0的W放開進行更新,繼續訓練s1輪,這樣反復直至訓練完畢。 同樣也是對參數進行誘導的方式,邊訓練邊裁剪,先將認為不重要的值裁掉,再通過一個restore的過程將重要卻被誤裁的參數恢復回來。也是屬於irregular的方式,邊訓邊裁,性能不錯,壓縮的力度難以保證。
總結
以上三篇文章都是基於核稀疏化的方法,都是在訓練過程中,對參數的更新進行限制,使其趨向於稀疏,或者在訓練的過程中將不重要的連接截斷掉,其中第一篇文章提供了結構化的稀疏化,可以利用GEMM的矩陣操作來實現加速。第二篇文章同樣是在權重更新的時候增加限制,雖然通過對權重的更新進行限制可以很好的達到稀疏化的目的,但是給訓練的優化增加了難度,降低了模型的收斂性。此外第二篇和第三篇文章都是非結構化的稀疏化,容易受到稀疏矩陣算法庫以及帶寬的限制,這兩篇文章在截斷連接后還使用了一個surgery的過程,能夠降低重要參數被裁剪的風險。之后還會對其他的模型壓縮方法進行介紹。
知識應該是開源的,歡迎斧正,929994365@qq.com
參考文獻:大佬博客
