端上智能——深度学习模型压缩与加速
生活随笔
收集整理的這篇文章主要介紹了
端上智能——深度学习模型压缩与加速
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
摘要:隨著深度學(xué)習(xí)網(wǎng)絡(luò)規(guī)模的增大,計算復(fù)雜度隨之增高,嚴(yán)重限制了其在手機等智能設(shè)備上的應(yīng)用。如何使用深度學(xué)習(xí)來對模型進行壓縮和加速,并且保持幾乎一樣的精度?本文將為大家詳細介紹兩種模型壓縮算法,并展示了阿里巴巴模型壓縮平臺和前向推理工具。
本次直播視頻精彩回顧,戳這里!本次直播PDF下載,戳這里!演講嘉賓簡介:李昊(花名:遼玥),阿里巴巴機器智能技術(shù)實驗室高級算法專家,畢業(yè)于中科院,擁有工學(xué)博士學(xué)位,致力于深度學(xué)習(xí)基礎(chǔ)技術(shù)研究以及在各個行業(yè)的應(yīng)用。
以下內(nèi)容根據(jù)演講嘉賓視頻分享以及PPT整理而成。
本文將圍繞一下幾個方面進行介紹:1. 深度學(xué)習(xí)模型壓縮與加速
- Extremely Low Bit Neural Networks
- Extremely Sparse Network
一. 深度學(xué)習(xí)模型壓縮與加速
隨著深度學(xué)習(xí)網(wǎng)絡(luò)規(guī)模的增大,計算復(fù)雜度隨之增高,嚴(yán)重限制了其在手機等智能設(shè)備上的應(yīng)用。例如下圖一展示的VGGNet和圖二的殘差網(wǎng)絡(luò),如此大規(guī)模的復(fù)雜網(wǎng)絡(luò)模型在端設(shè)備上使用并不現(xiàn)實。
因此需要采用深度學(xué)習(xí)模型來進行壓縮和加速,下面介紹兩種壓縮算法。
1. Extremely Low Bit Neural Networks
Low Bit模型是指將連續(xù)的權(quán)重壓縮成離散的低精度權(quán)重。如下圖所示,原始深度學(xué)習(xí)的網(wǎng)絡(luò)參數(shù)為float型,需要32bit存儲空間,將其轉(zhuǎn)化成只有三值(0,+1,-1)的狀態(tài),存儲只需要2bit,極大地壓縮存儲空間,同時也可以避免乘法運算,只是符號位的變化和加減操作,從而提升計算速度。
這里為大家提供一篇對Low Bit模型詳細介紹的參考文章Extremely Low Bit Neural Networks: Squeeze the Last Bit Out with ADMM。
接下來以二值網(wǎng)絡(luò)為例講解上述的壓縮過程。首先假設(shè)原始神經(jīng)網(wǎng)絡(luò)的優(yōu)化目標(biāo)函數(shù)為f(w),限制條件為深度學(xué)習(xí)網(wǎng)絡(luò)的參數(shù)包含在C內(nèi),如果C為{-1,1},則該網(wǎng)絡(luò)便為二值網(wǎng)絡(luò),如下所示:
這里引入了一種解決分布式優(yōu)化和約束優(yōu)化的常用方法ADMM(Alternating Direction Method of Multipliers),來求解以上離散非凸約束優(yōu)化問題,其形式如下:
ADMM用于解決當(dāng)目標(biāo)函數(shù)為f(x)+g(z),其中限制條件是Ax+Bz=c的優(yōu)化。首先寫出增廣拉格朗日函數(shù),然后將上述問題轉(zhuǎn)化成求解如下所示的xyz:
即先求解xz的極小值,然后得到y(tǒng)的更新。上述即為ADMM標(biāo)準(zhǔn)解法,接下來,如何將Low Bit Neural Networks問題轉(zhuǎn)化成ADMM問題呢?首先需要引入指示函數(shù),形式如下所示:
此時二值神經(jīng)網(wǎng)絡(luò)的目標(biāo)函數(shù)等價于優(yōu)化目標(biāo)函數(shù)和指示函數(shù)之和:
這意味著,當(dāng)指示函數(shù)屬于C時,優(yōu)化目標(biāo)即為初始目標(biāo),沒有變化;當(dāng)指示函數(shù)不屬于C時,指示函數(shù)為正無窮,此時會首先優(yōu)化指示函數(shù)。然后需要引入一致性約束,這里引入輔助變量G,并約束W=G,則目標(biāo)函數(shù)等價于:
加入輔助變量后,就可以將二值神經(jīng)網(wǎng)絡(luò)的優(yōu)化問題轉(zhuǎn)化為ADMM標(biāo)準(zhǔn)問題。接下來,寫出上式增廣拉格朗日公式,使用ADMM算法求解完成優(yōu)化目標(biāo),如下所示:
除上述二值網(wǎng)絡(luò)外,還有以下幾種常用的參數(shù)空間:
參數(shù)空間中加入2、4、8等值后,仍然不需要乘法運算,只需進行移位操作。因此,通過這種方法將神經(jīng)網(wǎng)絡(luò)中的乘法操作全部替換為移位和加操作。將上述Low Bit模型應(yīng)用至ImageNet進行分類,最終的優(yōu)化結(jié)果如下表所示:
表一展示了該算法在AlexNet和VGG-16的應(yīng)用結(jié)果,可以發(fā)現(xiàn)該算法在二值和三值網(wǎng)絡(luò)中的效果明顯優(yōu)于原始范圍的應(yīng)用,并且三值網(wǎng)絡(luò)中的分類結(jié)果與全精度的分類結(jié)果相比,幾乎是無損的。表二是該算法在ResNet-18和ResNet-50中的應(yīng)用,結(jié)果也與表一中類似。在檢測方面,該算法仍具有較高的可用性。如下表所示:
本次實驗的數(shù)據(jù)集為Pascal VOC 2007。根據(jù)上表中數(shù)據(jù)可知,三值空間內(nèi)的檢測結(jié)果精度與全精度參數(shù)空間相比,誤差幾乎可以忽略不計。
2. Extremely Sparse Networks
稀疏神經(jīng)網(wǎng)絡(luò)適用于網(wǎng)絡(luò)中大部分參數(shù)為零的情況,存儲參數(shù)可以通過簡單的壓縮算法,例如游程編碼,極大的減小參數(shù)存儲空間,并且由于0可不參與計算,從而節(jié)約大量的計算空間,提升計算速度。稀疏網(wǎng)絡(luò)中,優(yōu)化目標(biāo)仍然和上述相同,限制條件改為如下所示:
對f(W)求梯度下降值(Gradient Descent),將其進行迭代,每迭代一次,就進行一次連接剪枝(Connection Pruning),裁剪的標(biāo)準(zhǔn)是,W的參數(shù)越小,重要性越低,將比較小的參數(shù)置零,從而保證稀疏度。
但上述解法存在一個明顯的問題是,如下圖所示:
w1與w2相比,w1與0更近,但若將w1置零,對函數(shù)的損失更大,因此在決定w的重要性時,必須同時考慮w本身大小和斜率。只有在w值和斜率都比較小時,才可以將其置零。基于上述標(biāo)準(zhǔn),完成了對Alexnet和GoogleNet的稀少度實驗,如下圖所示:
由上圖結(jié)果可知,無論是純卷積網(wǎng)絡(luò),還是包含全連接層網(wǎng)絡(luò),都可以達到90%以上的稀疏度。
3. 實驗結(jié)果對比
上文中介紹了稀疏和量化兩種方法,實驗一將這兩種方法同時作用于Alexnet,結(jié)果如下所示:
由上圖可以得知,在3Bits,稀疏度為90%以上時,精度損失幾乎可以忽略不計,此時壓縮率可以達到82倍以上。實驗二中,將兩種方法作用于InageNet和Pascal VOC,其中P是稀疏,Q是量化,由圖中結(jié)果可知,實驗過程精度損失極小,并且InageNet中inference的速度有明顯提升,Pascal VOC可以達到稀疏度88.7%,量化為3bits,40倍的壓縮率下,相對于全精度網(wǎng)絡(luò)mAP只有1點的下降幅度。
二. 訓(xùn)練平臺
基于上述兩種方法,建立起Gauss訓(xùn)練平臺。目前Gauss訓(xùn)練平臺支持多種常見訓(xùn)練任務(wù)(例如人臉、ocr、分類、監(jiān)測等)和模型(例如CNN、LSTM等),并且支持多機訓(xùn)練,能夠以盡可能少的參數(shù)設(shè)置,減少用戶使用成本。
同時Gauss訓(xùn)練平臺支持兩種模型訓(xùn)練工具:Data-dependent和Data-independent。Data-dependent模型訓(xùn)練工具需要用戶提供訓(xùn)練數(shù)據(jù),訓(xùn)練時間較長,適合壓縮和加速要求較高的場景。Data-independent模型訓(xùn)練工具無需用戶提供任何訓(xùn)練數(shù)據(jù),一鍵式處理,處理時間在秒級。
三. 高效前向推理工具
建立起訓(xùn)練平臺之后,模型的真正運用還需要高效的前向推理工具。基于低精度矩陣計算工具AliNN&BNN,快速實現(xiàn)低比特矩陣乘法計算。實現(xiàn)后的推理工具在ARM平臺上相比競品提速2-5倍,Intel平臺上提速3倍。
文章作者:聒小小噪
原文鏈接
總結(jié)
以上是生活随笔為你收集整理的端上智能——深度学习模型压缩与加速的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python API快餐教程(1) -
- 下一篇: 深度学习之优化详解:batch norm