姜懿家
(大連市第十三中學,遼寧大連,116000)
近年來,卷積神經(jīng)網(wǎng)絡在語音識別,計算機視覺,目標檢測以及制藥、基因等領域取得了出類拔萃的效果。如圖1所示,卷積神經(jīng)網(wǎng)絡[1]通過多個層次的特征學習,建立從底層特征到高級抽象特征的映射,使復雜的特征提取工作簡單化,抽象化。這種比傳統(tǒng)方法更符合人腦視覺機制的技術使深度學習能夠?qū)W習到目標的一些隱形規(guī)律和規(guī)則,具有學習速度快,耗時小,識別率高的優(yōu)點。
卷積神經(jīng)網(wǎng)絡規(guī)模龐大,消耗高昂的存儲代價、能耗以及計算開銷,嚴重制約了深度學習在嵌入式移動設備上的部署。同時卷積神經(jīng)網(wǎng)絡參數(shù)存在大量冗余,研究表明只需要訓練完成后的一小部分參數(shù)[2]就可以保證深度網(wǎng)絡的識別精度,這啟發(fā)了卷積神經(jīng)網(wǎng)絡的壓縮研究。有效的壓縮方法提高了深度學習在分布式系統(tǒng),嵌入式設備,F(xiàn)PGA等終端上的計算效率;比如,ResNet-50網(wǎng)絡[3]擁有50層卷積計算,占用超過96MB的存儲,大量的浮點乘法需要計算,如果舍棄冗余的參數(shù),可以節(jié)約75%的存儲空間和50%的計算代價。
本文介紹四種常用的卷積神經(jīng)網(wǎng)絡壓縮方法:低秩近似[4],剪枝與稀疏約束[5],參數(shù)量化[6],二值網(wǎng)絡[7]。低秩近似是使用近似算法將大的矩陣乘法轉(zhuǎn)為幾個小的矩陣乘法計算,適合小規(guī)模網(wǎng)絡及全連接層計算;剪枝與稀疏約束利用卷積神經(jīng)了的參數(shù)冗余性移除掉不重要的神經(jīng)元,是一種有效的通用壓縮技術,但是訓練比較復雜;參數(shù)量化使用碼表代替原有權重,極大地降低了存儲開銷;二值網(wǎng)絡是將權重量化到+1,能到最大限度地壓縮網(wǎng)絡,但性能損失也最為嚴重。
圖1 卷積神經(jīng)網(wǎng)絡
卷積操作是深度神經(jīng)網(wǎng)絡的主要計算開銷,因此減少卷積計算能夠提高網(wǎng)絡的壓縮比率。例如,給定權重矩陣W ∈ Rm×n,若能將其表示為若干個低秩矩陣的組合,即,其中 Mi∈ Rm×n為低秩矩陣,其秩為ri,并滿足ri< 低秩近似算法在卷積神經(jīng)網(wǎng)絡中取得了很好的壓縮和加速效果。但是,矩陣分解是逐層計算,計算量較大;同時低秩近似修改了網(wǎng)絡的原有結構,需要微調(diào)( fi netune)網(wǎng)絡。 由于訓練后的卷積神經(jīng)網(wǎng)絡存在過參數(shù)化,通過剪枝去掉冗余的神經(jīng)元,能夠大幅壓縮模型,同時提高網(wǎng)絡的抗過擬合能力。比如,論文[9]提出無效數(shù)據(jù)剪枝方法來去掉冗余的神經(jīng)元,論文[10]提出哈希網(wǎng)絡模型利用哈希代價函數(shù)將權重映射到共享參數(shù)哈希表。于此同時,利用稀疏約束來對網(wǎng)絡進行剪枝保證了神經(jīng)網(wǎng)絡的結構性。論文[5]在網(wǎng)絡訓練中引入稀疏正則項,使網(wǎng)絡的部分卷積核權重趨向0,并剪枝這部分0值權重,這樣保證了網(wǎng)絡的結構性,同時只需要重訓練一遍就能達到剪枝的目的。 在保持網(wǎng)絡分類精度不下降的情況下,剪枝可以將網(wǎng)絡參數(shù)壓縮9~11倍。比如,在論文[5]將AlexNet網(wǎng)絡的6千萬參數(shù)量壓縮到7百萬,將VGG-16網(wǎng)絡的1億4千萬參數(shù)量壓縮到1千萬,同時沒有精度的損失。 總的來說,剪枝作為通用的壓縮方法,能夠應用到廣泛的神經(jīng)網(wǎng)絡模型中,壓縮率高同時精度損失很小。但是,剪枝特別是稀疏約束下的剪枝對網(wǎng)絡的重訓練要求較高,如何衡量神經(jīng)元的重要程度以及是否剪枝是訓練的關鍵。 參數(shù)量化通過減少參數(shù)的比特數(shù)來達到壓縮原始網(wǎng)絡的目的。其中最簡單的一種量化算法是標量量化[11],該算法首先將權重矩陣轉(zhuǎn)為標量形式,然后應用k-means算法對權重進行聚類。最后,只需要將k個標量存儲在碼表中,原始的權重矩陣只需要記錄對應碼表中的索引值。這樣原始的浮點參數(shù)可以壓縮為幾個比特的索引值,能夠?qū)⒋鎯臻g減少為原來的log2(k)/32,將原始網(wǎng)絡模型壓縮8~16倍。不過,當壓縮率較高時,精度損失較為嚴重。 為了解決標量量化的精度損失問題,更加通用的結構化量化技術受到關注。其中QCNN[12]基于乘積量化方法,最小化每一層網(wǎng)絡輸出的重構誤差,以此大幅壓縮網(wǎng)絡規(guī)模并保證了很小的精度損失。比如,QCNN將VGG-16網(wǎng)絡的浮點參數(shù)減少4倍,規(guī)模減少20倍,同時精度只損失0.58%。 參數(shù)量化作為一種通用的壓縮方法被廣泛應用到FPGA,神經(jīng)網(wǎng)絡加速芯片,嵌入式設備中。其較高的壓縮率和較低的性能損失使參數(shù)量化技術受到廣泛關注,但是每一種參數(shù)量化方法需要專門的運算庫來執(zhí)行。無法應用到通用的卷積神經(jīng)網(wǎng)絡計算框架中(Caあe, TensorFlow等),對于硬件也需要定制專門的計算單元來完成。 由參數(shù)量化方法可知,降低參數(shù)的比特數(shù)是一種簡單有效的壓縮方法。如果將網(wǎng)絡的參數(shù)壓縮到1比特+1就能最大化壓縮參數(shù),這就是二值網(wǎng)絡。二值網(wǎng)絡可以分為三種類型:權重二值化,數(shù)據(jù)二值化,中間計算結果二值化。如果權重,數(shù)據(jù)及中間計算結果都二值化,那么網(wǎng)絡的壓縮率即最大,但這種方法目前不可實現(xiàn),因為網(wǎng)絡的精度會完全丟失。 常用的二值化方法是權重二值化,數(shù)據(jù)保持8~32比特。網(wǎng)絡二值化的關鍵問題是如何訓練二值化后的網(wǎng)絡,因為網(wǎng)絡大多基于梯度下降來反向訓練參數(shù)。由于權重二值化,梯度將不能被計算?;诖?,二值連接算法(binary connect[13])采用單精度與二值相結合的方式來訓練二值神經(jīng)網(wǎng)絡:網(wǎng)絡采用二值計算前向過程,使用單精度權重進行反向的權重更新,從而加快網(wǎng)絡的收斂過程。 同時如果在卷積計算中加入單精度縮放因子,可以有效降低網(wǎng)絡的重構誤差,實現(xiàn)在ImageNet數(shù)據(jù)集上與Alex-Net一樣的精度。同時如果二值化數(shù)據(jù),網(wǎng)絡壓縮率能進一步提高,但精度會下降12.6%。 本文詳細介紹了四種常用的卷積神經(jīng)網(wǎng)絡壓縮技術:低秩近似,剪枝與稀疏壓縮,參數(shù)量化,二值網(wǎng)絡。如表1所示,低秩近似在全連接層應用最多,使用SVD可以壓縮5~13倍;剪枝與稀疏壓縮有效利用了卷積神經(jīng)網(wǎng)絡的過參數(shù)化特性,去掉冗余的神經(jīng)元,能夠減少大量權重,同時還可以增強網(wǎng)絡的抗過擬合能力;參數(shù)量化方法是目前在FPGA和專用的硬件加速器中使用最普遍的方法,在不改變原始網(wǎng)絡結構的基礎上能夠很好地壓縮網(wǎng)絡,節(jié)省大量存儲空間;二值網(wǎng)絡是壓縮比最高的方法,但網(wǎng)絡訓練困難,精度損失大,二值網(wǎng)絡是目前壓縮研究的熱點問題。卷積神經(jīng)網(wǎng)絡的壓縮研究未來會集中在通用化、網(wǎng)絡改動小、壓縮比高、精度損失小等綜合性能突出的壓縮方法上,或者融合多種壓縮方法應用到一個網(wǎng)絡上,以最大化性能提升。 表1 網(wǎng)絡壓縮方法總結2 剪枝與稀疏約束
3 參數(shù)量化
4 二值網(wǎng)絡
5 總結