機器之心原創
作者:立早
編輯:H4O
本文是一篇關於神經網絡壓縮領域的論文解讀,通過對ICCV 2019中的三篇論文進行分析,讀者可以了解目前的發展趨勢。
神經網絡壓縮方向是目前深度學習研究的一個熱門的方向,其主要的研究方向是壓縮,蒸餾,網絡架構搜索,量化等。在 ICCV2019 中,不少的研究單位和學者都發表了神經網絡壓縮方向的論文。本文主要以其中三篇論文來研究神經網絡壓縮的目前發展趨勢。
論文 1:基於元學習的模型壓縮《MetaPruning: Meta Learning for Automatic Neural Network Channel Pruning》
論文地址:https://arxiv.org/abs/1903.10258
1 論文主旨概述
Meta learning 論文是曠世研究院提出的一種神經網絡壓縮方法。通道剪枝 [1] 作為一種神經網絡的壓縮方法被廣泛的實現和應用,一般剪枝算法通過對預訓練的大網絡裁剪次要的通道,之後微調,得到最終的剪枝網絡。隨著 AutoML[2] 的發展,metapruning 利用 autoML 的自動尋找最優結構的特點,脫離了人工設計的局限以及彌補剪枝算法的依賴數據的不足。本文從元學習的角度出發,直接用元學習得到剪枝網絡(pruned networks)的結構以及自生成權重,而不是保留原始網絡的重要參數。
2 方法:
近年來,有研究 [3] 表明無論是否保存了原始網絡的權值,剪枝網絡都可以達到一個和原始網絡相同的準確率。因此,通道剪枝的本質是逐層的通道數量,也就是網絡結構。鑑於此項研究,Metapruning 決定直接保留裁剪好的通道結構,區別於剪枝的裁剪哪些通道。
本文提出來一個 Meta network,名為 PruningNet,可以生成所有候選的剪枝網絡的權重,並直接在驗證集上評估,有效的搜索最佳結構。
Pruningnet training
PruningNet 是一個 meta network,以一組網絡編碼向量 (c1,c2,,,cl) 為輸入,輸出為剪枝網絡的權重。一個 PruningNet 的訓練方式如下圖 (1) 所示:
圖(1)PruningNet 的隨機訓練方法
圖 (1) 中,PruningNet 由多個 block 組成,其中的每個 block 由兩個全連接層組成。
在前向過程中,PruningNet 以網絡編碼向量(即剪枝網絡的每層通道數)為輸入,生成權重矩陣。同時,剪枝網絡以網絡編碼向量中的數值為輸出通道,並將生成的權重矩陣裁剪匹配剪枝網絡的輸入輸出。對於一個 batach 的輸入圖像,我們可以計算帶權重的剪枝網絡的前向損失。
在反向過程中,本文並不是更新剪枝網絡的權重,而是計算 PruningNet 的梯度,更新 PruningNet 的權重(全連接層參數)。
在整個訓練過程中,由於所有的操作都是可微的,所以能夠進行端到端的學習。通過隨機生成不同的網絡編碼向量,可以得到不同的剪枝網絡結構。
Pruned-network search-evolutionary algorithm
本文中,網絡向量編碼為 pruned networks 的基因。在硬約束的前提下,我們首先隨機選擇大量的基因並獲得相關的剪枝網絡的準確率。選擇前 top k 的基因,對其做變異和交叉,生成新的基因。同時對不符合要求的基因添加約束來消除。如此迭代數次,最終可以得到既滿足約束又獲得最高準確率的基因。具體算法如圖(2)所示:
圖(2)進化搜索算法
3 實驗和結果
圖(3)mobilenetV1 結構實驗
圖(4)mobilenet V2 實驗
圖(3)(4)表明 metaPruning 相比較一般基線模型相比,metaPruning 得到的結構在效率和 top1 上都有較大的優勢。
4 總結
本文提出的 metaPruning 的方法,從本質上來講屬於一種結構搜索的方法。跳出傳統剪枝的思路,不僅僅可以去除數據的約束,同時避免了微調的耗時。
該方法將根據不同的約束加入搜索中,靈活調整算法;可以應對帶 short-cut 的網絡結構;端到端的學習十分高效,且無需更新剪枝網絡的權重。
但是,這個網絡的生成過程中,需要注意以下的幾個問題:
(1)對訓練的硬體要求,PruningNet 和生成的剪枝網絡同時在訓練過程中,是否帶來了較大的 GPU 資源的消耗,導致生成過程較慢。
(2)在生成過程中雖說對樣本不做要求,但是簡單的幾個 batch 的樣本對模型的影響應該比較大。
參考文獻
[1] Hao Li, Asim Kadav, Igor Durdanovic, Hanan Samet, and Hans Peter Graf. Pruning lters for efcient convnets. arXiv preprint arXiv:1608.08710, 2016.
[2] Tien-Ju Yang, Andrew Howard, Bo Chen, Xiao Zhang, Alec Go, Mark Sandler, Vivienne Sze, and Hartwig Adam. Netadapt: Platform-aware neural network adaptation for mobile applications. In Proceedings of the European Conference on Computer Vision (ECCV), pages 285–300, 2018.
[3] Zhuang Liu, Mingjie Sun, Tinghui Zhou, Gao Huang, and Trevor Darrell. Rethinking the value of network pruning.arXiv preprint arXiv:1810.05270, 2018.
論文 2:無需數據的蒸餾方法《Data-Free Learning of Student Networks》
論文地址:https://arxiv.org/abs/1904.01186v1
該篇論文是華為提出的一篇蒸餾方向的論文,其主要的創新點是提出的蒸餾過程不需要原始訓練數據的參與。
1 論文概述
通常來說,知識蒸餾需要原始訓練數據的參與,才能達到一個較好的蒸餾效果,那麼在缺乏原始數據甚至無數據的時候,或者,老師模型只知道接口不知道其模型結構的時候,如何才能達到一個蒸餾的效果呢?此文章的出發點就在此,文章利用 GAN 生成圖像的特性來生成蒸餾所需數據。
2 Data-free 網絡壓縮方法
在神經網絡壓縮領域,SVD(singular value decomposition)[1],KD(knowledge distillation)[2],基本都是需要數據驅動的,在有原始數據參與的時候能達到一個較好的壓縮效果。無需數據驅動的壓縮方法較少,比如合併相似單元 [3],但是這些方法的效果並不如數據驅動的方法。
GAN 生成訓練樣本
網絡通常被用與生成樣本,包括生成器 G 和辨別器 D。對於一個普通的 GAN 網絡而言,給定一個帶噪聲的向量 z,其損失函數表示為公式(1):
利用公式(1)分別訓練 G 和 D。與普通 GAN 網絡不同的是,傳統 GAN 網絡中,D 網絡對於輸入的圖像,其輸出是判別真假的二分類。在本文中,我們給定 D 為預訓練完成的老師網絡,其輸出是圖像的類別數。為了適應這種情況下的 GAN 網絡,本文利用新的損失函數來更新訓練 G。具體的公式如下所示:
其中:
(1)Loh 表示 one-hot loss , 此時的 D 網絡輸出為類別數。假設對一個輸入為 X={X1,X2,,,Xn} 的圖像來說,D 的輸出為 {y1,y2,,,yn},根據輸出得到的預測的 label 為 {t1,t2,,,tn},Loh 則可以表示為輸出和預測值之間的交叉熵損失:
(2)La 表示激活損失,如果一個輸入圖像是真實的圖像而不是隨機向量生成的,那麼在 D 網絡中,經過 D 提取進過全連接層之前得到的輸出值 ft,其激活值應該為一個較高的值。所以,La 可以表示為如下的公式:
(3)Lie 損失表示的信息熵的大小。用于衡量生成樣本中的類別平衡情況。對於給定的輸出集合 {y1,y2,,,yn},每個類別的頻率分布可以表示為輸出的均值。那麼 Lie 可以用如下表示:
利用 GAN 蒸餾的算法步驟
本文算法主要分為兩步:
第一步,訓練生成器 G。利用預訓練的給定老師模型作為 D,訓練生成器 G。第二步,訓練學生網絡。利用 G 網絡生成訓練樣本,然後用這些樣本來進行知識蒸餾。其蒸餾的示意過程如圖(1)所示:
圖(1)利用 GAN 的知識蒸餾過程
3 實驗結果
圖(2)無數據蒸餾方法在 MNIST 上的實驗
圖(3)在 CIFAR 上的實驗
從圖(2)(3)中,我們可以看出無數據的 GAN 蒸餾方法相比較其他無數據的蒸餾方法能夠大幅度的提升蒸餾的效果。
4 總結
本文從無數據的情況出發,考慮到了蒸餾領域的一個比較常見的情況。本文提出的利用 GAN 的方法新穎且有效,利用 GAN 學習原始數據的分布情況,做到了一個神似而形不似的學習。但是這種 GAN 的生成樣本在蒸餾過程中保留了數據的分布,從而在蒸餾中也能達到一個好的效果。
但是,這種利用 GAN 的生成數據的方法在筆者看來是不是更適合作為一種數據增強的方式,從訓練時間上來看,加入了 G 網絡的生成過程,訓練過程較長且不太好控制收斂情況。
參考文獻
[1] Emily L Denton, Wojciech Zaremba, Joan Bruna, Yann LeCun, and Rob Fergus. Exploiting linear structure within convolutional networks for efcient evaluation. In NIPS, 2014.1, 2
[2] Geoffrey Hinton, Oriol Vinyals, and Jeff Dean. Distilling the knowledge in a neural network. arXiv preprint arXiv:1503.02531, 2015. 1, 2, 3, 5, 7, 8
[3] Suraj Srinivas and R Venkatesh Babu. Data-free parameter pruning for deep neural networks. arXiv preprint arXiv:1507.06149, 2015. 2, 3
論文 3:基於樣本之間相關性的蒸餾方法《Correlation Congruence for Knowledge Distillation》
論文地址:https://arxiv.org/abs/1904.01802
這篇論文是由商湯提出的一篇蒸餾方向論文,其主要的亮點在於研究樣本之間的相關性,利用這種相關性作為蒸餾的知識輸出。
1 論文概述
知識蒸餾方法 [1] 是老師-學生網絡的基礎方法,通常的知識蒸餾方法都是關注實例(instance level)層的約束,但是這種約束經常會忽略多示例之間的相關性。本文提出了一種基於實例之間的相關性的蒸餾方法。
2 Correlation Congruence 知識蒸餾
傳統蒸餾定義
傳統的蒸餾方法主要是用 kl 散度等距離度量的方法來表徵老師網絡和學生網絡的特徵之間的距離,例如公式(1)和(2)所示:
其中,fs 和 ft 分別表示學生和老師網絡的特徵,ps 和 Pt 分別表示學生和老師網絡的 softmax 輸出值。
這種蒸餾方法關注的是特徵圖之間的距離,但是由於學生網絡和老師網絡在擬合能力本質上的鴻溝,這種蒸餾方法並不能學到一個恆等映射使得學生網絡能夠更好的學習。
樣本間的關係一致性(correlation congruence):
不同於之前的方法,CCKD(correlation congruence knowledge distillation)方法不僅僅關注樣本實例層面的一致性,同時也關注實例之間的一致性,如圖 1 所示:
圖 1:CCKD 算法圖示
如圖 1 所示,CC(correlation congruence)為圖中最右邊的部分,表示實例之間的相關性信息,IC(instance congruence)則是實例層的相關信息。
我們用 Ft 和 Fs 來分別表示老師學生網絡的特徵表示的集合。可以用公式表示如下:
定義 C 為相關性矩陣,其中每一個元素表示 xi 和 yi 的關係,因此可以表示為公式(5):
其中,距離度量的方法可以有很多種。基於公式(5),我們可以得到 CCloss。如公式(6)所示:
蒸餾算法
CCKD 算法的 loss 由三部分組成,如公式(7)所示:
其中 Lce 為交叉熵所示,Lkd 為 t-s 之間的實例層的蒸餾損失,Lcc 則是實例間一致性的損失。
3 實驗結果
圖 2 CCKD 算法在 mnist 的實驗
圖3 CCKD 算法在 ImageNet1k 的實驗
圖 4 CCKD 在 MSMT17 的實驗
4 總結
在 KD 領域中,[2] 文章也提出來類似的思想,用特徵實例之間的距離來做知識蒸餾,就思想上來說並無差異。所以,如果從創新性上來說,本文應該對比同等論文的思想對比。
本文在做蒸餾的時候用上了三個損失的結合,做了充分的實驗證明算法的有效性。但是,在之後的研究中,三種損失的比重也是一個值得研究的方向。
參考文獻
[1] G. Hinton, O. Vinyals, and J. Dean. Distilling the knowledge in a neural network. arXiv preprint arXiv:1503.02531, 2015.1, 2, 3, 5, 6
[2]Passalis N , Tefas A . Learning Deep Representations with Probabilistic Knowledge Transfer[J]. 2018.
作者介紹:工學碩士,研究方向為模式識別。目前從事人臉識別、檢測和神經網絡壓縮方向的工作。希望能夠一直學習,多多交流,不斷進步。