目錄git
導語github
通道剪裁(Channel Pruning)做爲一種神經網絡壓縮/加速方法,其有效性已深獲承認,並普遍應用於工業界。算法
一個經典的剪裁方法包含三步:1)訓練一個參數過多的大型網絡;2)剪裁較不重要的權重或通道;3)微調或再訓練已剪裁的網絡。其中第二個階段是關鍵,它一般藉助迭代式逐層剪裁、快速微調或者權重重建以保持精度。數組
卷積通道剪裁方法主要依賴於數據驅動的稀疏約束(sparsity constraints)或者人工設計的策略。最近,一些基於反饋閉環或者強化學習的 AutoML 方法可自動剪裁一個迭代模型中的通道。網絡
相較於傳統剪裁方法, AutoML 方法不只能夠節省人力,還能夠幫助人們在不用知道硬件底層實現的狀況下,直接爲特定硬件定製化設計在知足該硬件上速度限制的最優網絡結構。架構
MetaPruning 做爲利用 AutoML 進行網絡裁剪的算法之一,有着 AutoML 所共有的省時省力,硬件定製等諸多優點,同時也創新性地加入了先前 AutoML pruning 所不具有的功能,如輕鬆裁剪 shortcut 中的通道。app
過去的研究每每經過逐層裁剪一個已訓練好模型中帶有不重要權重的通道來達到裁剪的目的。而一項最新研究發現,無論繼不繼承原始網絡的權重,已剪裁的網絡均可得到相同精度。學習
這一發現代表,通道剪裁的本質是決定逐層的通道數量。基於這個,MetaPruning 跳過選擇剪裁哪些通道,而直接決定每層剪裁多少通道——好的剪裁結構。優化
然而,可能的每層通道數組合數巨大,暴力尋找最優的剪裁結構是計算量所不支的。編碼
受到近期的神經網絡架構搜索(NAS)的啓發,尤爲是 One-Shot 模型,以及 HyperNetwork 中的權重預測機制,曠視研究院提出訓練一個 PruningNet,它可生成全部候選的已剪裁網絡結構的權重,從而僅僅評估其在驗證集上的精度,便可搜索表現良好的結構。這極其有效。
PruningNet 的訓練採用隨機採樣網絡結構策略,如圖 1 所示,它爲帶有相應網絡編碼向量(其數量等於每一層的通道數量)的已剪裁網絡生成權重。經過在網絡編碼向量中的隨機輸入,PruningNet 逐漸學習爲不一樣的已剪裁結構生成權重。
圖 1:MetaPruning 分爲兩步,1)訓練一個 PruningNet,2)搜索最佳的 Pruned Network
訓練結束以後,研究員會藉助進化算法來搜索表現較好的 Pruned Networks,進化算法中能夠靈活加入不一樣的硬約束(hard constraints),好比浮點數運算次數(FLOPs)或者硬件運行時長(latency)。因爲 PruningNet 已學會爲各類不一樣的 Pruned Networks 提供可靠的參數,從而可輕鬆使用 PruningNet 爲 Pruned Networks 結構填入對應參數。
這隻需幾秒,即可獲知 Pruned Network 的精度表現,孰優孰劣,高下立現。這讓通道裁剪變的極其省心省力,也是通道剪裁領域的一個新突破,稱之爲 MetaPruning,其貢獻能夠歸爲四個方面:
MetaPruning 能夠自動剪裁深度神經網絡中的通道,已剪裁的網絡能夠知足不一樣的硬約束。
這一通道剪裁問題可表示爲:
本文想要找到在權重訓練結束以後,知足約束條件的損失最小的剪裁網絡通道寬度組合。
爲此,研究員構建了 PruningNet,爲不一樣的剪裁網絡結構生成權重,從而只須要在驗證集上評估,便可快速獲知剪裁網絡結構的精度,排序不一樣剪裁網絡結構的表現。接着,配合任意搜索方法即可搜索最優的剪裁網絡。
具體的 PruningNet 構建及訓練算法和本文采用的進化搜索算法以下:
圖 2:PruningNet 的隨機訓練方法圖示
PruningNet 包含兩個全鏈接層。在前向傳播中,它的輸入是網絡的編碼向量(即每一層的輸出通道寬度),輸出則是網絡的權重矩陣;同時,根據每一層的輸出通道寬度構建對應的 Pruned Network。
已生成的權重矩陣被切割以匹配 Pruned Network 輸入/輸出通道的數量。給定一批輸入圖像,則可計算帶有生成權重的 Pruned Network 的損失。
在反向傳播中,不用更新 Pruned Networks 的權重, 而是計算 PruningNet 權重的梯度,因爲 PruningNet 全鏈接層的輸出與 Pruned Network 的前一個卷積層的輸出之間 reshape 操做和卷積操做也是可微分的, PruningNet 權重的梯度可輕鬆經過鏈式法則計算。
PruningNet 是端到端可訓練的,其與 Pruned Network 相連的詳細結構可參見圖 3。
圖 3:PruningNet 架構圖示
在 MetaPruning 使用的進化算法中,每一個 Pruned Network 被對應網絡向量(表明了每層通道數)編碼,即 Pruned Network 的基因(Genes)。
在硬約束下,本文首先隨機選擇大量基因,並經過進化得到相應 Pruned Network 的精度。接着,帶有最高精度的 top k 基因被選中以生成帶有突變和交叉的新基因。
研究員可經過消除不合格的基因輕鬆施加硬約束。經過進一步重複 top k 的選擇過程和新基因的生成過程,並作若干次迭代,便可得到知足硬約束,同時精度最高的基因。詳細算法以下所示。
算法 1:進化搜索算法
本節意在證實 MetaPruning 方法的有效性。第一,說明一下實驗設置並介紹如何把 MetaPruning 應用於 MobileNet V1/V2,並可輕鬆泛化至其餘網絡結構;第二,把本文方法與通常的 pruning baselines 和當前最優的基於 AutoML 的通道剪裁方法進行對比;第三,可視化由 MetaPruning 生成的 Pruned Network;最後,藉助消融實驗闡明權重預測在本文方法中的有效性。本文只介紹第二部分,其餘部分請參見原論文。
本文把 MetaPruning 與 uniform pruning baselines 以及當前最優的 AutoML 方法作了對比,其結果以下:
表 1:把 MetaPruning top-1 精度與 MobileNet V1 的通常基線作對比
表 2:把 MetaPruning top-1 精度與 MobileNet V2 的通常基線作對比
表 3:把 MetaPruning top-1 精度與當前最優的 AutoML 方法作對比
本文給出了用於模型壓縮的新方法——MetaPruning,這一元學習方法有如下優點:1)它比通常的 pruning baselines 精度高不少,比其餘基於 AutoML 的通道剪裁方法精度更高或更好;2)它可根據不一樣的約束作靈活的優化而無需額外的超參數;3)它可高效裁剪相似於 ResNet 同樣帶有 short-cut 的網絡結構;4)整個 pipeline 極其高效。