新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > CNN模型壓縮與加速算法綜述

        CNN模型壓縮與加速算法綜述

        作者: 時間:2018-07-25 來源:網絡 收藏

        自從AlexNet一舉奪得ILSVRC 2012 ImageNet圖像分類競賽的冠軍后,卷積神經網絡(CNN)的熱潮便席卷了整個視覺領域。CNN模型火速替代了傳統人工設計(hand-crafted)特征和分類器,不僅提供了一種端到端的處理方法,還大幅度地刷新了各個圖像競賽任務的精度,更甚者超越了人眼的精度(LFW人臉識別任務)。CNN模型在不斷逼近視覺任務的精度極限的同時,其深度和尺寸也在成倍增長。

        本文引用地址:http://www.104case.com/article/201807/383798.htm

        表1 幾種經典模型的尺寸,計算量和參數數量對比

        ModelModel Size(MB)Million
        Mult-Adds
        Million
        Parameters
        AlexNet[1]>20072060
        VGG16[2]>50015300138
        GoogleNet[3]~5015506.8
        Inception-v3[4]90-100500023.2

        隨之而來的是一個很尷尬的場景:如此巨大的模型只能在有限的平臺下使用,根本無法移植到移動端和嵌入式芯片當中。就算想通過網絡傳輸,但較高的帶寬占用也讓很多用戶望而生畏。另一方面,大尺寸的模型也對設備功耗和運行速度帶來了巨大的挑戰。因此這樣的模型距離實用還有一段距離。

        在這樣的情形下,模型小型化與加速成了亟待解決的問題。其實早期就有學者提出了一系列CNN模型壓縮方法,包括權值剪值(prunning)和矩陣SVD分解等,但壓縮率和效率還遠不能令人滿意。

        近年來,關于模型小型化的算法從壓縮角度上可以大致分為兩類:從模型權重數值角度壓縮和從網絡架構角度壓縮。另一方面,從兼顧計算速度方面,又可以劃分為:僅壓縮尺寸和壓縮尺寸的同時提升速度。

        本文主要討論如下幾篇代表性的文章和方法,包括SqueezeNet[5]、Deep Compression[6]、XNorNet[7]、Distilling[8]、MobileNet[9]和ShuffleNet[10],也可按照上述方法進行大致分類:

        表2 幾種經典壓縮方法及對比

        MethodCompression ApproachSpeed Consideration
        SqueezeNetarchitectureNo
        Deep CompressionweightsNo
        XNorNetweightsYes
        DistillingarchitectureNo
        MobileNetarchitectureYes
        ShuffleNetarchitectureYes

        一、SqueezeNet

        1.1 設計思想

        SqueezeNet是F. N. Iandola,S.Han等人于2016年的論文《SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and 0.5MB model size》中提出的一個小型化的網絡模型結構,該網絡能在保證不損失精度的同時,將原始AlexNet壓縮至原來的510倍左右( 0.5MB)。

        SqueezeNet的核心指導思想是——在保證精度的同時使用最少的參數。

        而這也是所有模型壓縮方法的一個終極目標。

        基于這個思想,SqueezeNet提出了3點網絡結構設計策略:

        策略 1.將3x3卷積核替換為1x1卷積核。

        這一策略很好理解,因為1個1x1卷積核的參數是3x3卷積核參數的1/9,這一改動理論上可以將模型尺寸壓縮9倍。

        策略 2.減小輸入到3x3卷積核的輸入通道數。

        我們知道,對于一個采用3x3卷積核的卷積層,該層所有卷積參數的數量(不考慮偏置)為:

        式中,N是卷積核的數量,也即輸出通道數,C是輸入通道數。

        因此,為了保證減小網絡參數,不僅僅需要減少3x3卷積核的數量,還需減少輸入到3x3卷積核的輸入通道數量,即式中C的數量。

        策略 3.盡可能的將降采樣放在網絡后面的層中。

        在卷積神經網絡中,每層輸出的特征圖(feature map)是否下采樣是由卷積層的步長或者池化層決定的。而一個重要的觀點是:分辨率越大的特征圖(延遲降采樣)可以帶來更高的分類精度,而這一觀點從直覺上也可以很好理解,因為分辨率越大的輸入能夠提供的信息就越多。

        上述三個策略中,前兩個策略都是針對如何降低參數數量而設計的,最后一個旨在最大化網絡精度。

        1.2 網絡架構

        基于以上三個策略,作者提出了一個類似inception的網絡單元結構,取名為fire module。一個fire module 包含一個squeeze 卷積層(只包含1x1卷積核)和一個expand卷積層(包含1x1和3x3卷積核)。其中,squeeze層借鑒了inception的思想,利用1x1卷積核來降低輸入到expand層中3x3卷積核的輸入通道數。如圖1所示。

        圖1 Fire module結構示意圖

        其中,定義squeeze層中1x1卷積核的數量是s1x1,類似的,expand層中1x1卷積核的數量是e1x1, 3x3卷積核的數量是e3x3。令s1x1 e1x1+ e3x3從而保證輸入到3x3的輸入通道數減小。SqueezeNet的網絡結構由若干個 fire module 組成,另外文章還給出了一些架構設計上的細節:

        為了保證1x1卷積核和3x3卷積核具有相同大小的輸出,3x3卷積核采用1像素的zero-padding和步長

        squeeze層和expand層均采用RELU作為激活函數

        在fire9后采用50%的dropout

        由于全連接層的參數數量巨大,因此借鑒NIN[11]的思想,去除了全連接層而改用global average pooling。

        1.3 實驗結果

        表3 不同壓縮方法在ImageNet上的對比實驗結果[5]

        上表顯示,相比傳統的壓縮方法,SqueezeNet能在保證精度不損(甚至略有提升)的情況下,達到最大的壓縮率,將原始AlexNet從240MB壓縮至4.8MB,而結合Deep Compression后更能達到0.47MB,完全滿足了移動端的部署和低帶寬網絡的傳輸。

        此外,作者還借鑒ResNet思想,對原始網絡結構做了修改,增加了旁路分支,將分類精度提升了約3%。

        1.4 速度考量

        盡管文章主要以壓縮模型尺寸為目標,但毋庸置疑的一點是,SqueezeNet在網絡結構中大量采用1x1和3x3卷積核是有利于速度的提升的,對于類似caffe這樣的深度學習框架,在卷積層的前向計算中,采用1x1卷積核可避免額外的im2col操作,而直接利用gemm進行矩陣加速運算,因此對速度的優化是有一定的作用的。然而,這種提速的作用仍然是有限的,另外,SqueezeNet采用了9個fire module和兩個卷積層,因此仍需要進行大量常規卷積操作,這也是影響速度進一步提升的瓶頸。

        二、Deep Compression

        Deep Compression出自S.Han 2016 ICLR的一篇論文《Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding》。該文章獲得了ICLR 2016的最佳論文獎,同時也具有里程碑式的意義,引領了CNN模型小型化與加速研究方向的新狂潮,使得這一領域近兩年來涌現出了大量的優秀工作與文章。

        2.1 算法流程

        與前面的“架構壓縮派”的SqueezeNet不同,Deep Compression是屬于“權值壓縮派”的。而兩篇文章均出自S.Han團隊,因此兩種方法結合,雙劍合璧,更是能達到登峰造極的壓縮效果。這一實驗結果也在上表中得到驗證。

        Deep Compression的算法流程包含三步,如圖2所示:

        圖2 Deep Compression Pipeline

        1、Pruning(權值剪枝)

        剪枝的思想其實早已在早期論文中可以窺見,LeCun等人曾經就利用剪枝來稀疏網絡,減小過擬合的風險,提升網絡泛化性。

        圖3是MNIST上訓練得到的LeNet conv1卷積層中的參數分布,可以看出,大部分權值集中在0處附近,對網絡的貢獻較小,在剪值中,將0值附近的較小的權值置0,使這些權值不被激活,從而著重訓練剩下的非零權值,最終在保證網絡精度不變的情況下達到壓縮尺寸的目的。

        實驗發現模型對剪枝更敏感,因此在剪值時建議逐層迭代修剪,另外每層的剪枝比例如何自動選取仍然是一個值得深入研究的課題。

        圖3 LeNet conv1層權值分布圖

        2、Quantization (權值量化)

        此處的權值量化基于權值聚類,將連續分布的權值離散化,從而減小需要存儲的權值數量。

        初始化聚類中心,實驗證明線性初始化效果最好;

        利用k-means算法進行聚類,將權值劃分到不同的cluster中;

        在前向計算時,每個權值由其聚類中心表示;

        在后向計算時,統計每個cluster中的梯度和將其反傳。

        圖4 權值量化前向和后向計算過程

        3、Huffman encoding(霍夫曼編碼)

        霍夫曼編碼采用變長編碼將平均編碼長度減小,進一步壓縮模型尺寸。

        2.2 模型存儲

        前述的剪枝和量化都是為了實現模型的更緊致的壓縮,以實現減小模型尺寸的目的。

        對于剪枝后的模型,由于每層大量參數為0,后續只需將非零值及其下標進行存儲,文章中采用CSR(Compressed Sparse Row)來進行存儲,這一步可以實現9x~13x的壓縮率。

        對于量化后的模型,每個權值都由其聚類中心表示(對于卷積層,聚類中心設為256個,對于全連接層,聚類中心設為32個),因此可以構造對應的碼書和下標,大大減少了需要存儲的數據量,此步能實現約3x的壓縮率。

        最后對上述壓縮后的模型進一步采用變長霍夫曼編碼,實現約1x的壓縮率。

        2.3 實驗結果

        表4 不同網絡采用Deep Compression后的壓縮率

        通過SqueezeNet+Deep Compression,可以將原始240M的AlexNet壓縮至0.47M,實現約510x的壓縮率。

        2.4 速度考量

        可以看出,Deep Compression的主要設計是針對網絡存儲尺寸的壓縮,但在前向時,如果將存儲模型讀入展開后,并沒有帶來更大的速度提升。因此Song H.等人專門針對壓縮后的模型設計了一套基于FPGA的硬件前向加速框架EIE[12],有興趣的可以研究一下。

        三、XNorNet

        二值網絡一直是模型壓縮和加速領域經久不衰的研究課題之一。將原始32位浮點型的權值壓縮到1比特,如何最大程度地減小性能損失就成為了研究的關鍵。

        此篇論文主要有以下幾個貢獻:

        提出了一個BWN(Binary-Weight-Network)和XNOR-Network,前者只對網絡參數做二值化,帶來約32x的存儲壓縮和2x的速度提升,而后者對網絡輸入和參數都做了二值化,在實現32x存儲壓縮的同時帶了58x的速度提升;

        提出了一個新型二值化權值的算法;

        第一個在大規模數據集如ImageNet上提交二值化網絡結果的工作;

        無需預訓練,可實現training from scratch。

        3.1 BWN

        即最優的二值化濾波器張量B即為原始參數的符號函數,最優的尺度因子為每個濾波器權值的絕對值的均值。

        訓練算法如圖5所示,值得注意的是,只有在前向計算和后向傳播時使用二值化后的權值,在更新參數時依然使用原始參數,這是因為如果使用二值化后的參數會導致很小的梯度下降,從而使得訓練無法收斂。

        3.2 XNOR-Net

        在XNOR網絡中,優化的目標是將兩個實數向量的點乘近似到兩個二值向量的點乘,即

        在卷積計算中,輸入和權值均量化成了二值,因此傳統的乘法計算變成了異或操作,而非二值化數據的計算只占了很小一部分。


        上一頁 1 2 下一頁

        關鍵詞: 計算機

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 银川市| 油尖旺区| 天峨县| 托里县| 台东市| 株洲市| 湘西| 庆安县| 蓬莱市| 舟曲县| 台北市| 河西区| 木兰县| 明溪县| 荥阳市| 南城县| 海宁市| 乌拉特中旗| 成武县| 新巴尔虎左旗| 永安市| 赞皇县| 白玉县| 兴业县| 磴口县| 嘉义市| 临泉县| 和林格尔县| 日土县| 郑州市| 攀枝花市| 青岛市| 阳江市| 苗栗县| 含山县| 平舆县| 临澧县| 桃江县| 从江县| 金昌市| 天气|