【論文筆記】MetaPruning: Meta Learning for Automatic Neural Network Channel Pruning

論文:https://arxiv.org/pdf/1903.10258.pdf
源碼:https://github.com/liuzechun/MetaPruning

這篇論文仍然是基於通道裁剪,發表在ICCV 2019 ,這篇文章思路同樣是想要使用AutoML的思想去自動裁剪調整出合適的網絡,其中一個優點讓人眼前一亮,通過這種方式可以直接處理shortcut的結構。

簡介

通道裁剪是一種有效對的神經網絡壓縮/加速的方法。通道裁剪方法可以歸納成3個階段
1)訓練一個很大參數量的完整神經網絡
2)裁減掉其中重要性較低的通道或權重
3)微調或者重新訓練剪枝後的神經網絡
其中第二個步驟十分關鍵,通常採用逐層裁剪,並通過微調和重新訓練來保持精度。
剪枝的策略傳統採用人工設定約束,根據權重稀疏性等相關指標來進行設定。近年來隨着AutoML的方法興起,爲剪枝提供了新的解決方案 ,裁剪通道後使用模型驗證,得到準確率等指標的反饋構成閉環,然後使用強化學習等方法進行自動的訓練調優學習最優策略,能夠節約人工設計的成本,同時效果也要優於人工。因此文章從AutoML的角度切入設計了一種基於元學習的剪枝方法。
在這裏插入圖片描述

contribution

  • 本文提出了一種基於metaLearning的剪枝方式,通過建立一個 PruningNet的meta network來爲特定結構的網絡產生權重。
  • 與傳統的卷積神經網絡剪枝方法相比,解放了人工調參的工作量,同時能夠按照想要優化的指標進行優化
  • 與其他AutoML的方法相比,Meta Pruning的方法搜索結構時更容易添加約束,不需要人工調節強化學習的超參數
  • meta learning 能夠毫不費力的裁剪 殘差結構 ,殘差結構或多分支結構在裁剪的時候需要注意shortcut連接,常規的裁剪方式會影響到其它層,需要人工額外去指定共享層。

相關工作

該章節分別介紹了Pruning、AutoML、Meta Learing、Neural Architecture Search(NAS)中的經典算法

方法

將通道剪枝問題該公式化 (c1,c2,...,cl)=argminc1,c2,...,clζ(A(c1,c2,...,cl;w))(c_1,c_2,...,c_l)^* = argmin_{c_1,c_2,...,c_l} \zeta(A(c_1,c_2,...,c_l;w)) s.t. C<constraints.t. \space C<constraint 其中A是剪枝前的網絡,cnc_n代表第n層的通道數量,我們嘗試找到從第1層到第ll層的一組合適的通道數的結構,使訓練後權重的損失最小,同時滿足約束條件(FLOPs)。本文提出了一種PruningNet的院學習結構,能夠在使用驗證集快速驗證一組結構的優劣,然後可以使用其他合適的算法來搜索最優的網絡結構。

訓練 Pruning Net

PruningNet是一個元學習網絡,將一組剪枝策略(c1,c2,...,cl)(c_1,c_2,...,c_l)作爲輸入,然後通過PruningNet根據輸入的結構產生對應的權重矩陣W,PruningNet如圖2所示,其中PruningNet的一個Block由兩個FC全連接層組成
W=PruningNet(c1,c2,...,cl)W = PruningNet(c_1,c_2,...,c_l)
同時,每次產生的剪枝網絡結構,每一層的輸出通數量都對應到網絡產生權重的尺寸,在反向傳播的過程中,直接計算PruningNet裏權重的梯度,而不是更新被剪枝網絡的權重。
爲了訓練Pruning Net,文章採用隨機結構採樣的方式來得到各種剪枝的網絡結構,然後由PruningNet學習產生與輸入剪枝網絡結構的權重。

在這裏插入圖片描述
在這裏插入圖片描述

剪枝網絡搜索

PruningNet在經過訓練之後已經具備了根據輸入剪枝的網絡結構產生權重的能力,此時可以根據產生的權重在驗證集上進行評估。此時已經可以使用搜索方法來搜索最優剪枝網絡結構,由於網絡編碼通過過於複雜,因此文章採用進化算法來搜索最優的剪枝網絡結構。每個剪枝網絡結構對應到網絡網絡編碼的形式,因此可以將網絡編碼看做網絡在每層上通道數量的向量表示,此時每層的通道數量可以對應到計劃算法中的基因gene。首先隨機選擇大量的gene,通過PruningNet產生權重在驗證集上的精度。然後取出前K個最高準確率的基因,然後使用交叉和變異方法產生新的gene。變異即爲隨機改變基因中的元素比例,交叉是隨機重組兩個雙親的基因的來產生新的基因組合,反覆迭代這個過程,即可得到最優的剪枝網絡編碼。

進化算法的僞代碼如下

在這裏插入圖片描述

實驗結果

實驗全部基於Imagenet2012數據集的分類任務。

MobileNet and ResNet

mobileNet V1沒有殘差結構,因此直接從權重左上方裁剪,MobileNet V2和ResNetcun由於存在shortcut連接,論文提出產生兩個網絡編碼的方式一個用於整體的stage輸出和輸入的通道數,一個用於每個block內部的通道數。剪枝方式如下圖所示
在這裏插入圖片描述

帶約束的裁剪

FLOPs約束的裁剪效果
在這裏插入圖片描述

Latency約束的效果

在這裏插入圖片描述

裁剪後通道對比

在這裏插入圖片描述

結論

又嘮叨了一遍contribution,本文提出了一種基於metaLearning的剪枝方式,通過建立一個 PruningNet的meta network來爲特定結構的網絡產生權重。 與傳統的卷積神經網絡剪枝方法相比,解放了人工調參的工作量,同時能夠按照想要優化的指標進行優化。與其他AutoML的方法相比,Meta Pruning的方法搜索結構時更容易添加約束,不需要人工調節強化學習的超參數 。meta learning 能夠毫不費力的裁剪殘差結構 ,殘差結構或多分支結構在裁剪的時候需要注意shortcut連接,常規的裁剪方式會影響到其它層,需要人工額外去指定共享層。

個人觀點

這篇論文的創新點我認爲主要還是用元學習來產生權重這一招,真的很妙,常規的剪枝算法一般採取直接裁剪通道,然後使用權重重構的方法修正,削弱對後續層的影響,而直接產生權重卻可以有效的避免掉。將網絡結構已經映射成了向量編碼了,那麼之後的搜索策略自然就有很多種,啓發式算法只是其中的一種。最後一個裁剪short-cut讓我有點蒙,分成兩個編碼輸出。然而我在其他方法剪枝shortcut的時候也是採用的這種辦法,也不能說不好就總感覺沒有想象中那麼秀。

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