5MB的神經(jīng)網(wǎng)絡(luò)也高效,F(xiàn)acebook新壓縮算法造福嵌入式設(shè)備
魚羊 發(fā)自 凹非寺
量子位 報(bào)道 | 公眾號 QbitAI
人工智能風(fēng)暴襲來,機(jī)器人、自動駕駛汽車這樣的嵌入式設(shè)備也熱度漸長。毫無疑問,現(xiàn)在,嵌入式設(shè)備也需要高效的神經(jīng)網(wǎng)絡(luò)加持。
但是,如何在嵌入式設(shè)備上實(shí)現(xiàn)高效的神經(jīng)網(wǎng)絡(luò),可不是一件簡單的事情。
性能,功耗,成本,都是不得不考慮的問題。每一種不同的應(yīng)用場景,都需要在神經(jīng)網(wǎng)絡(luò)的大小和精確度之間進(jìn)行特定的權(quán)衡(trade-off)。
像自動駕駛汽車,就需要實(shí)現(xiàn)對實(shí)時(shí)視頻的精確識別,這意味著嵌入其中的神經(jīng)網(wǎng)絡(luò)模型一定是個(gè)體積龐大的家伙。
受限于硬件,神經(jīng)網(wǎng)絡(luò)必須進(jìn)行壓縮。
在卷積神經(jīng)網(wǎng)絡(luò)壓縮這個(gè)課題上,移動高效架構(gòu)是主流(MobileNets或ShuffleNets)。
然而,基于移動高效架構(gòu)的MobileNet-v2在ImageNet對象分類中雖然已經(jīng)達(dá)到了71%的 top-1準(zhǔn)確率,但這仍遠(yuǎn)落后于卷積神經(jīng)網(wǎng)絡(luò)的最佳表現(xiàn)83.1%。
Facebook的研究人員們決定轉(zhuǎn)換思路,既然如此,何不更專注于傳統(tǒng)的卷積網(wǎng)絡(luò)本身呢?
重新審視神經(jīng)網(wǎng)絡(luò)的量化
Facebook提出了一種適用于ResNet類架構(gòu)的壓縮方法,名叫Bit Goes Down。
這種方法利用了結(jié)構(gòu)化量化算法PQ(Product Quantization)中卷積的高相關(guān)性,重點(diǎn)關(guān)注activations的重建,而不是權(quán)重本身。
也就是說,這種方法只關(guān)注域內(nèi)輸入的重建質(zhì)量。
研究人員讓未經(jīng)壓縮的神經(jīng)網(wǎng)絡(luò)充當(dāng)“老師”,利用圖靈獎得主Hinton等人提出的提煉(distillation)技術(shù)來指導(dǎo)“學(xué)生”網(wǎng)絡(luò)的壓縮。
這一過程無需任何標(biāo)記數(shù)據(jù),是一種無監(jiān)督學(xué)習(xí)方法。
具體的實(shí)現(xiàn)方法是這樣的:
一、層量化
先以全連接層為例。
PQ算法的任務(wù)是量化全連接層的權(quán)重矩陣。但從實(shí)際需求來看,權(quán)重不重要,保留層的輸出才是研究人員的關(guān)注重點(diǎn)。
在上圖這種非線性分類器中,不能保證層權(quán)重的Frobenius近似是某個(gè)任意域輸出的最佳近似(特別是對于域內(nèi)輸入)。
因此,研究人員提出了一個(gè)替代方案,通過將層應(yīng)用于域內(nèi)輸入獲得輸出激活(activations)的重建誤差,直接最小化該誤差。用編碼簿(codebook)最大限度地減少輸出激活及其重建之間的差異。
接著要對EM算法(最大期望化算法)進(jìn)行調(diào)整。
E-step是集群分配,這一步通過詳盡的探索來執(zhí)行。
M-step是碼字(codeword)更新,這一步通過顯式計(jì)算最小二乘問題的解來完成,實(shí)際上就是在E-step和M-step交替之前,計(jì)算x tilde的偽逆。
需要注意的是在E-step之后某些集群可能為空。
對于卷積層情況又是如何呢?
在完全連接層,這一方法適用于任何矢量集,所以如果將相關(guān)的4D權(quán)重矩陣分割成一組向量,該方法就可以應(yīng)用于卷積層。
分割4D矩陣的方法有很多,標(biāo)準(zhǔn)就是要最大化矢量之間的相關(guān)性,因?yàn)楫?dāng)矢量高度相關(guān)時(shí),基于矢量量化的方法效果最好。
就像這樣,在空間上量化卷積濾波器以利用網(wǎng)絡(luò)中的信息冗余,不同顏色代表擁有不同碼字的子向量。
二、網(wǎng)絡(luò)量化
接下來,就涉及到對整個(gè)神經(jīng)網(wǎng)絡(luò)的量化。
首先,這是自下而上的量化,從最低層開始,到最高層結(jié)束。
這也就是所謂的用非壓縮的教師網(wǎng)絡(luò)引導(dǎo)學(xué)生網(wǎng)絡(luò)的壓縮。主要包括以下兩個(gè)步驟:
學(xué)習(xí)碼字
恢復(fù)該層的當(dāng)前(current)輸入激活,即通過量化后的低層轉(zhuǎn)發(fā)一批圖像而獲得的輸入激活。使用這些激活量化當(dāng)前層。
微調(diào)碼字
采用Hinton的distillation方法微調(diào)碼字,以非壓縮網(wǎng)絡(luò)作為教師網(wǎng)絡(luò),當(dāng)前層之前的壓縮網(wǎng)絡(luò)作為學(xué)生網(wǎng)絡(luò)。
在這一步驟中,通過對分配給指定碼字的每個(gè)子矢量的梯度求平均,來完成碼字的精細(xì)化。更確切地說,是在量化步驟之后,一次性修復(fù)分配。
接下來,就剩下最后一步,全局微調(diào)所有層的碼字,以減少殘余漂移。同時(shí)更新BatchNorm層的統(tǒng)計(jì)數(shù)據(jù)。
全局微調(diào)使用的是標(biāo)準(zhǔn)的ImageNet訓(xùn)練集。
小體積,高精度
研究人員用Bit Goes Down量化了在ImageNet數(shù)據(jù)集上預(yù)先訓(xùn)練好的vanila ResNet-18和ResNet-50。
在16GB的 Volta V100 GPU上跑了一天之后,終于到了展示成果的時(shí)候。
首先,是跟標(biāo)準(zhǔn)ResNet-18和ResNet-50的比較。
對于ResNet-18,在29倍壓縮的情況下,模型大小縮小到了1.54MB,而top-1準(zhǔn)確率僅比標(biāo)準(zhǔn)模型降低了不到4%。
ResNet-50上模型大小略大一些,但也達(dá)到了5MB左右,準(zhǔn)確率同樣保持在一個(gè)可以接受的水平。
跟模型壓縮界的前輩相比,Bit Goes Down表現(xiàn)出了它的優(yōu)勢,雖然在1MB的指定大小中敗下陣來,但在5MB的比拼中,新方法優(yōu)勢明顯,準(zhǔn)確率提升了將近5個(gè)百分點(diǎn)。
這意味著壓縮后的模型獲得了非壓縮ResNet-50的性能,同時(shí)還只有5MB大小。
Bit Goes Down在圖像分類上表現(xiàn)不俗,在圖像檢測方面又如何呢?
研究團(tuán)隊(duì)又壓縮了何愷明的Mask R-CNN。這回用上了8塊V100 GPU來進(jìn)行訓(xùn)練。
在壓縮了25倍的情況下,壓縮模型的Box AP和Mask AP都只下降了4左右。
這表現(xiàn),著實(shí)有些厲害。
Facebook表示,Bit Goes Down這樣的壓縮算法將推動虛擬現(xiàn)實(shí)(VR)和增強(qiáng)現(xiàn)實(shí)(AR)等技術(shù)的進(jìn)一步發(fā)展。
目前,研究團(tuán)隊(duì)已經(jīng)開源了壓縮模型及代碼,如果感興趣,你可以親自復(fù)現(xiàn)一下~
傳送門
博客地址:
https://ai.facebook.com/blog/compressing-neural-networks-for-image-classification-and-detection/
論文地址:
https://arxiv.org/abs/1907.05686
GitHub地址:
https://github.com/facebookresearch/kill-the-bits