如今學(xué)術(shù)界新提出的神經(jīng)網(wǎng)絡(luò)模型越來越大析既,而在實際應(yīng)用中很多模型都要被部屬在移動端笆焰。移動端的存儲空間以及算力都有限,無法運行太大的模型氢妈,所以模型壓縮這個概念就應(yīng)運而生粹污。本文簡單介紹一下在算法(軟件)層面的模型壓縮方法和paper,不涉及硬件上的技巧首量。內(nèi)容大多來自2020年李宏毅老師的課程壮吩。
目前在算法層面模型壓縮主要有四個流派,簡介如下:
Network Pruning
剪枝思想加入神經(jīng)網(wǎng)絡(luò)中加缘。將網(wǎng)絡(luò)中不重要的weight和neuron(網(wǎng)絡(luò)中每層的層數(shù))刪除鸭叙。
Knowledge Distillation
傳說中的知識蒸餾。利用已經(jīng)訓(xùn)練好的大模型來指導(dǎo)小模型拣宏。主要用在分類任務(wù)上沈贝。
Parameter Quantization
從數(shù)據(jù)存儲角度節(jié)省空間,將存儲參數(shù)的浮點數(shù)壓縮為更小的單位勋乾,用更少的位來表示值缀程。
Architecture Design
調(diào)整結(jié)構(gòu)/使用特殊的結(jié)構(gòu)來節(jié)省參數(shù),后面再詳細介紹市俊。
Network Pruning
前面提到了刪除不重要的weight和neuron。對于權(quán)重來說滤奈,他的范數(shù)(比如L1或L2)大小可以看出重要程度:范數(shù)太小摆昧,不重要。對于神經(jīng)元蜒程,不同輸入下的輸出是0的頻率可以看出重要程度:經(jīng)常輸出0绅你,不重要。刪完之后昭躺,對新的模型進行fine-tune忌锯。這是剪枝最基礎(chǔ)的思路,具體每層剪幾個领炫,低于多少要剪掉不同paper有提出不同算法偶垮。注意可以迭代多次刪除,不要一次刪除太多帝洪。在實踐中似舵,刪除神經(jīng)元的方式更容易被執(zhí)行計算。
下面兩張圖是對于剪枝降低了參數(shù)的示意圖:
至于為什么不直接訓(xùn)練小的模型葱峡,因為大的網(wǎng)絡(luò)容易訓(xùn)練砚哗,小的網(wǎng)絡(luò)容易陷入局部最優(yōu),所以就把大網(wǎng)絡(luò)裁剪成小網(wǎng)絡(luò)而不是直接訓(xùn)練小網(wǎng)絡(luò)砰奕。
當(dāng)然可以剪枝的部分不限于weight和neuron蛛芥,對于剪枝完之后模型的處理方法也有新的發(fā)現(xiàn)提鸟。下面給出相關(guān)的paper list:
Pruning Filters for Efficient ConvNets(ICLR 2017)
Learning Efficient Convolutional Networks Through Network Slimming(ICCV2017)
Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration(CVPR2019)
The Lottery Ticket Hypothesis:Finding Sparse,Trainable Neural Networks(ICLR2019)
Rethinking the value of network pruning(ICLR2019)
Deconstructing Lottery Tickets:Zeros仅淑,Signs称勋,and the Supermask(ICML2019)
Knowledge Distillation
通過已訓(xùn)練好的teacher模型訓(xùn)練student模型,指導(dǎo)/學(xué)習(xí)的過程在這里被抽象為蒸餾(distillation)漓糙∠巢可以蒸餾模型的輸出,直接匹配logits昆禽,或者蒸餾模型中間輸出的特征feature蝗蛙,直接匹配feature或者學(xué)習(xí)feature如何轉(zhuǎn)換 。
先說最經(jīng)典的醉鳖,對logits的蒸餾捡硅。結(jié)構(gòu)如下圖:
至于為什么要在softmax前除T,paper給的解釋是讓softmax的輸出更平滑(意為輸入更加類似soft target盗棵,而不是one-hot那樣的hard target)壮韭。知識蒸餾還有一個有趣的點就是讓小的模型還學(xué)會了不同輸出label間的關(guān)系,比如在mnist模型可以學(xué)會label1和7很相似纹因。
對于logits distillation的研究還有Deep Mutual Learning喷屋,Born Again Neural Networks,Improved Knowledge Distiilation via Teacher Assistant等研究瞭恰,在下面的paperlist也有列出屯曹。
接下來簡單介紹feature distillation。
上面的logits distillation可以看出是直接對結(jié)果惊畏,對label進行指導(dǎo)/學(xué)習(xí)恶耽。feature distillation則是對中間feature進行指導(dǎo)/學(xué)習(xí)。上圖的意思是颜启,直接logits distillation那學(xué)生網(wǎng)絡(luò)會無法理解偷俭,為什么label0和label8很像,只是知道他們很像缰盏,而加入feature distillation學(xué)生就可以通過中間過程理解涌萤,0有一個圈8有兩個(當(dāng)然圖中的例子只是為了作者更好闡述這個模型)。
同時在feature distillation過程中口猜,也可以加入注意力機制形葬,讓模型知道要學(xué)習(xí)feature中的那部分。
之前這些暮的,都是針對一次采樣笙以,讓學(xué)生和教師相似。也可以正對每次采樣間的關(guān)系做知識蒸餾:Relational KD:
類似的研究還有Similarity-Preserving Knowledge Distiilation冻辩,下面是paper list:
Distilling the knowledge in a Neural Network(NIPS2014)
Deep Mutual Learning(CVPR2018)
Born Again Neural Networks(ICML2018)
Improved Knowledge Distiilation via Teacher Assistant(AAAI2020)
Paying More Attention to Attention:Improving the Performance of Convolutional Neural Networks via Attention Transfer(ICLR2017)
Relational Knowledge Distiilation(CVPR2019)
Similarity-Preserving Knowledge Distiilation(ICCV2019)
Parameter Quantization
可以用的方法有權(quán)重聚類猖腕,如下圖:
也可以用一些經(jīng)典的方法比如哈夫曼編碼拆祈。
還有一種方法是使權(quán)重全都是+1或-1:
Architecture Design
調(diào)整結(jié)構(gòu)來節(jié)省參數(shù)的圖示如下:
對于卷積結(jié)構(gòu)也類似,傳統(tǒng)的卷積結(jié)構(gòu)需要3x3x2x4=72個參數(shù)倘感,而以下結(jié)構(gòu)只需要18+8=26個:
上圖中的結(jié)構(gòu)可以把參數(shù)從從k x k x I x O的參數(shù)降低到k x k x I+I x O。
著名的模型有SqueezeNet老玛,MobileNet淤年,ShuffleNet,Xception蜡豹。