天天看點

【Dynamic Network Surgery for Efficient DNNs】論文筆記

[NIPS’16]論文連結:https://arxiv.org/pdf/1608.04493.pdf

代碼連結:https://github.com/yiwenguo/Dynamic-Network-Surgery

這篇文章也是關于參數的修剪,但是多了一個拼接的步驟,可以大幅度恢複修剪造成的精度損失,并且能有效的提升壓縮率。

效果:

可以将LeNet-5和AlexNet中的參數數量分别壓縮108倍和17.7倍,而且不損失精度。

【Dynamic Network Surgery for Efficient DNNs】論文筆記
【Dynamic Network Surgery for Efficient DNNs】論文筆記

(a)代表的是文章提出的動态網絡手術,(b)代表的是Song Han等人提出的網絡壓縮的方法。以AlexNet為例,(b)需要4800K以上的疊代才能獲得一個合理的壓縮率(9×),而(a)隻需要700K次疊代就可以得到一個明顯更好的結果(17.7×)。

主要思想:

文章中提出了一種新的網絡壓縮方法,稱為動态網絡手術,通過動态連接配接修剪降低網絡複雜度。 與以前貪心修剪的方法不同,該方法将連接配接拼接整合到整個過程中,以避免不正确的修剪并對網絡進行維護。

涉及兩個關鍵操作:修剪和拼接。

修剪操作是為了壓縮網絡模型,但是修剪或修剪不正确應該是造成精度損失的原因。為了彌補操作不當造成的損失,将拼接操作納入網絡手術中,并且一旦發現被修剪的連接配接在任何時候都很重要,就實作連接配接恢複。

這種方法不僅有利于更好地接近壓縮極限,而且有利于提高學習效率。

【Dynamic Network Surgery for Efficient DNNs】論文筆記

我們的目标是網絡修剪,關鍵是放棄不重要的參數并保留重要的參數。然而,由于互相連接配接的神經元之間的互相影響和互相激活,某個網絡中的參數重要性(即連接配接重要性)是非常難以測量的。也就是說,由于其他一些網絡的存在,網絡連接配接可能是多餘的,但一旦其他網絡被删除,它很快就會變得至關重要。是以,在進行學習過程中不斷進行網絡結構的維護應該會更合适。

文章提出以下優化問題:

【Dynamic Network Surgery for Efficient DNNs】論文筆記

以第k層為例,其中L()是網絡損失函數。hk()是參數w在目前層的判别函數,重要為1,否則為0。簡言之:Wk是原始矩陣,Tk就是這一層的掩碼矩陣,兩者相乘得到修剪後的參數矩陣。

Wk更新方案:

【Dynamic Network Surgery for Efficient DNNs】論文筆記

這種方法不僅更新了重要的參數,而且還更新了與Tk中0相對應的參數(0,1之間變換代表着修剪的參數位置也一直在變換),這樣就可以拼接回修剪不正确的連接配接。

算法步驟:

修剪和拼接不斷循環進而重複更新Wk和Tk。

【Dynamic Network Surgery for Efficient DNNs】論文筆記

參數重要性判斷:

hk()函數:

【Dynamic Network Surgery for Efficient DNNs】論文筆記

參數重要性還是以權值絕對值為基礎,設定了ak和bk2個門檻值,bk=ak+t。

訓練收斂速度優化:

為了加快訓練速度,文章中提供了兩個政策:

1)降低修剪和拼接頻率,因為這些操作會導緻網絡結構的變化。通過随機地觸發Tk的更新來完成,其機率為p,一段之間過後,機率p甚至可以設定為零,即不再進行修剪或拼接。

2)将卷積層和全連接配接層分開裁剪連接配接。由于很大比例的連接配接被修剪掉,是以網絡結構應該變得更簡單并且可能甚至更“薄”。是以,損失函數的導數可能非常小,特别是當參考模型非常深時。

繼續閱讀