模型壓縮概述
前言
自從AlexNet一舉奪得ILSVRC 2012 ImageNet影象分類競賽的冠軍後,卷積神經網路(CNN)的熱潮便席捲了整個計算機視覺領域。CNN模型火速替代了傳統人工設計(hand-crafted)特徵和分類器,不僅提供了一種端到端的處理方法,還大幅度地重新整理了各個影象競賽任務的精度,更甚者超越了人眼的精度(LFW人臉識別任務)。CNN模型在不斷逼近計算機視覺任務的精度極限的同時,其深度和尺寸也在成倍增長。
表1 幾種經典模型的尺寸,計算量和引數數量對比
Model |
Model Size(MB) |
Million Mult-Adds |
Million Parameters |
AlexNet[1] |
>200 |
720 |
60 |
VGG16[2] |
>500 |
15300 |
138 |
GoogleNet[3] |
~50 |
1550 |
6.8 |
Inception-v3[4] |
90-100 |
5000 |
23.2 |
隨之而來的是一個很尷尬的場景:如此巨大的模型只能在有限的平臺下使用,根本無法移植到移動端和嵌入式晶片當中。就算想通過網路傳輸,但較高的頻寬佔用也讓很多使用者望而生畏。另一方面,大尺寸的模型也對裝置功耗和執行速度帶來了巨大的挑戰。因此這樣的模型距離實用還有一段距離。
在這樣的情形下,模型小型化與加速成了亟待解決的問題。其實早期就有學者提出了一系列CNN模型壓縮方法,包括權值剪值(prunning)和矩陣SVD分解等,但壓縮率和效率還遠不能令人滿意。
近年來,關於模型小型化的演算法從壓縮角度上可以大致分為兩類:從模型權重數值角度壓縮和從網路架構角度壓縮。另一方面,從兼顧計算速度方面,又可以劃分為:僅壓縮尺寸和壓縮尺寸的同時提升速度。
本文主要討論如下幾篇代表性的文章和方法,包括SqueezeNet[5]、DeepCompression[6]、XNorNet[7]、Distilling[8]、MobileNet[9]和ShuffleNet[10]
表2 幾種經典壓縮方法及對比
Method |
Compression Approach |
Speed Consideration |
SqueezeNet |
architecture |
No |
Deep Compression |
weights |
No |
XNorNet |
weights |
Yes |
Distilling |
architecture |
No |
MobileNet |
architecture |
Yes |
ShuffleNet |
architecture |
Yes |
一、SqueezeNet
1.1 設計思想
SqueezeNet是F. N. Iandola,S.Han等人於2016年的論文《SqueezeNet: AlexNet-level accuracy with 50xfewer 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結構示意圖[5]
其中,定義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和兩個卷積層,因此仍需要進行大量常規卷積操作,這也是影響速度進一步提升的瓶頸。
二、DeepCompression
Deep Compression出自S.Han 2016 ICLR的一篇論文《Deep Compression: Compressing Deep NeuralNetworks with Pruning, Trained Quantization and Huffman Coding》。該文章獲得了ICLR 2016的最佳論文獎,同時也具有里程碑式的意義,引領了CNN模型小型化與加速研究方向的新狂潮,使得這一領域近兩年來湧現出了大量的優秀工作與文章。
2.1 演算法流程
與前面的“架構壓縮派”的SqueezeNet不同,Deep Compression是屬於“權值壓縮派”的。而兩篇文章均出自S.Han團隊,因此兩種方法結合,雙劍合璧,更是能達到登峰造極的壓縮效果。這一實驗結果也在上表中得到驗證。
Deep Compression的演算法流程包含三步,如圖2所示:
圖2 Deep Compression Pipeline[6]
1) Pruning(權值剪枝)
剪枝的思想其實早已在早期論文中可以窺見,LeCun等人曾經就利用剪枝來稀疏網路,減小過擬合的風險,提升網路泛化性。
圖3是MNIST上訓練得到的LeNet conv1卷積層中的引數分佈,可以看出,大部分權值集中在0處附近,對網路的貢獻較小,在剪值中,將0值附近的較小的權值置0,使這些權值不被啟用,從而著重訓練剩下的非零權值,最終在保證網路精度不變的情況下達到壓縮尺寸的目的。
實驗發現模型對剪枝更敏感,因此在剪值時建議逐層迭代修剪,另外每層的剪枝比例如何自動選取仍然是一個值得深入研究的課題。
圖3 LeNet conv1層權值分佈圖
2) Quantization(權值量化)
此處的權值量化基於權值聚類,將連續分佈的權值離散化,從而減小需要儲存的權值數量。
· 初始化聚類中心,實驗證明線性初始化效果最好;
· 利用k-means演算法進行聚類,將權值劃分到不同的cluster中;
· 在前向計算時,每個權值由其聚類中心表示;
· 在後向計算時,統計每個cluster中的梯度和將其反傳。
圖4 權值量化前向和後向計算過程[6]
3) Huffmanencoding(霍夫曼編碼)
霍夫曼編碼採用變長編碼將平均編碼長度減小,進一步壓縮模型尺寸。
2.2 模型儲存
前述的剪枝和量化都是為了實現模型的更緊緻的壓縮,以實現減小模型尺寸的目的。
· 對於剪枝後的模型,由於每層大量引數為0,後續只需將非零值及其下標進行存儲,文章中採用CSR(CompressedSparse Row)來進行存儲,這一步可以實現9x~13x的壓縮率。
· 對於量化後的模型,每個權值都由其聚類中心表示(對於卷積層,聚類中心設為256個,對於全連接層,聚類中心設為32個),因此可以構造對應的碼書和下標,大大減少了需要存儲的資料量,此步能實現約3x的壓縮率。
· 最後對上述壓縮後的模型進一步採用變長霍夫曼編碼,實現約1x的壓縮率。
2.3 實驗結果
表4 不同網路採用Deep Compression後的壓縮率[6]
通過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上提交二值化網絡結果的工作;
· 無需預訓練,可實現trainingfrom scratch。
3.1 BWN
為了訓練二值化權值網路,
令,其中,即二值濾波器,是尺度因子。通過最小化目標函式,得到其最優解:
即最優的二值化濾波器張量B即為原始引數的符號函式,最優的尺度因子為每個濾波器權值的絕對值的均值。
訓練演算法如圖5所示,值得注意的是,只有在前向計算和後向傳播時使用二值化後的權值,在更新引數時依然使用原始引數,這是因為如果使用二值化後的引數會導致很小的梯度下降,從而使得訓練無法收斂。
3.2 XNOR-Net
在XNOR網路中,優化的目標是將兩個實數向量的點乘近似到兩個二值向量的點乘,即
式中
相關推薦
模型壓縮概述
前言 自從AlexNet一舉奪得ILSVRC 2012 ImageNet影象分類競賽的冠軍後,卷積神經網路(CNN)的熱潮便席捲了整個計算機視覺領域。CNN模型火速替代了傳統人工設計(hand-crafted)特徵和分類器,不僅提供了一種端到端的處理方法,還大幅度地重新整理了各個影象競賽任務的
模型壓縮相關工作
image 理論 博客 article 數據 == 例如 iss 裁剪 總結的很好的一篇博客:https://blog.csdn.net/App_12062011/article/details/81665140 定點化: 百度搜“模型壓縮定點化” http
“三權分立”模型的概述
在雲計算出來之前,大多數的商業模式、計算模式都是自家的機器服務自家。雲計算出來之後,這一場景發生了變化,人們開始依賴於把自己需要的服務放在別人家的機器裡,而你沒法確認機器是否在做它該做的事情。當我們使用雲服務時,如何知道雲上的某些管理員或者程式是否保證了我們所使用服務的安全可靠,那些近乎居於“王座”
TensorFlow 首個優化工具來了:模型壓縮4倍,速度提升3倍!
今天,TensorFlow釋出了一個新的優化工具包:一套可以讓開發者,無論是新手還是高階開發人員,都可以使用來優化機器學習模型以進行部署和執行的技術。 這些技術對於優化任何用於部署的TensorFlow模型都非常有用。特別是對於在記憶體緊張、功耗限制和儲存有限的裝置
基於caffe的模型壓縮
DeepCompression-caffe 精簡後的日誌: stage1 I1102 17:28:31.986773 29076 cmp_conv_layer.cpp:47] CONV THR: 0.115747 0.33 I1102 17:28:31.986806 29076 cmp_co
模型壓縮 方法彙總和梳理
Introduction 預訓練後的深度神經網路模型往往存在著嚴重的 過引數化 問題,其中只有約5%的引數子集是真正有用的。為此,對模型進行 時間 和 空間 上的壓縮,便謂之曰“模型壓縮” 。 模型壓縮技術包括 前端壓縮 和 後端
深度學習模型壓縮方法綜述(一)
前言 目前在深度學習領域分類兩個派別,一派為學院派,研究強大、複雜的模型網路和實驗方法,為了追求更高的效能;另一派為工程派,旨在將演算法更穩定、高效的落地在硬體平臺上,效率是其追求的目標。複雜的模型固然具有更好的效能,但是高額的儲存空間、計算資源消耗是使其難以有
深度學習模型壓縮與加速演算法之SqueezeNet和ShuffleNet
自從AlexNet一舉奪得ILSVRC 2012 ImageNet影象分類競賽的冠軍後,卷積神經網路(CNN)的熱潮便席捲了整個計算機視覺領域。CNN模型火速替代了傳統人工設計(hand-crafted)特徵和分類器,不僅提供了一種端到端的處理方法,還大幅度地重新整理了各個影
深度學習模型壓縮與加速 綜述
遷移學習:將一個模型的效能遷移到另一個模型上 網路精餾:在同一個域上遷移學習的一種特例。 [2006,Bucila,SIGKDD]Model Compression 思想:通過整合強分類器標註的偽資料訓練了一個壓縮模型,並再現了原大型網路的輸出結果。 缺點:僅限於淺層網路。 [2014,Hi
深度學習模型壓縮方法(4)-----模型蒸餾(Distilling)與精細模型網路
前言 在前兩章,我們介紹了一些在已有的深度學習模型的基礎上,直接對其進行壓縮的方法,包括核的稀疏化,和模型的裁剪兩個方面的內容,其中核的稀疏化可能需要一些稀疏計算庫的支援,其加速的效果可能受到頻寬、稀疏度等很多因素的制約;而模型的裁剪方法則比較簡單明瞭,直接在原有的模型上剔
Neo4j: RBAC許可權管理簡單圖模型(實現概述)
建模RBAC許可權管理系統 對於CRUD操作, 角色和資源有4條關係. 分別是CREATE,UPDATE,READ,DELETE. 如果對應的操作許可權不存在, 表示沒有許可權. 這裡ID為 c508b480-082e-11e8-9f0c-b8e8563f0d3a的資源有兩條操作
【天池學習】模型融合概述
在比賽中提高成績主要有3個地方 特徵工程 調參 模型融合 1. Voting 模型融合其實也沒有想象的那麼高大上,從最簡單的Voting說起,這也可以說是一種模型融合。假設對於一個二分類問題,有3個基礎模型,那麼就採取投票制的方法,投票多者確定為最終的分類。 2.A
tensorflow之模型壓縮
tensorflow的模型在移動端執行時往往需要進行模型壓縮。這主要有於兩方面的原因:1.模型過大不易載入和下載,執行時記憶體佔用率太高。2. tensorflow的模型在訓練的過程中可能為了訓練會新增一些操作和節點,而tensorflow的移動端只專注於推理,這樣在執行時就會產生一些核心不存在
深度學習——淺談CNN模型壓縮技術
模型壓縮的動機 最近幾年,CNN已經成為了計算機視覺任務的主要技術手段,在影象分類、目標檢測、深度估計、語義分割等方向都大放異彩。越來越大的資料集和越來越強的計算裝置允許研究者不斷探索更深更復雜的網路模型,例如從AlexNet、VGGNet到GOOGleN
深度學習模型壓縮方法綜述(三)
前言在前兩章,我們介紹了一些在已有的深度學習模型的基礎上,直接對其進行壓縮的方法,包括核的稀疏化,和模型的裁剪兩個方面的內容,其中核的稀疏化可能需要一些稀疏計算庫的支援,其加速的效果可能受到頻寬、稀疏度等很多因素的制約;而模型的裁剪方法則比較簡單明瞭,直接在原有的模型上剔除掉
深度學習模型壓縮方法和框架
模型壓縮的兩種方法: 一、設計輕量級的模型(SqueezeNet,MobileNet,ShuffleNet等):不需要壓縮。 二、模型結構/記憶體優化:剪枝、權值量化等 二、模型結構/記憶體優化 目前的框架主要有: Deep Compression、XNorNe
(筆記)通過知識蒸餾和量化進行模型壓縮MODEL COMPRESSION VIA DISTILLATION AND QUANTIZATION
(筆記)Model Compression via Distillation and Quantization 原文連結: 程式碼: 摘要 主要介紹了兩種演算法。 1)加入知識蒸餾loss的量化訓練。 2)訓練量化集p。
深度學習模型壓縮與優化加速(Model Compression and Acceleration Overview)
1. 簡介 深度學習(Deep Learning)因其計算複雜度或引數冗餘,在一些場景和裝置上限制了相應的模型部署,需要藉助模型壓縮、優化加速、異構計算等方法突破瓶頸。 模型壓縮演算法能夠有效降低引數冗餘,從而減少儲存佔用、通訊頻寬和計算複雜度,有助於深度學習的應用部署,
騰訊AI Lab正式開源PocketFlow自動化深度學習模型壓縮與加速框架
感謝閱讀騰訊AI Lab微訊號第54篇文章,11月2日,騰訊AI Lab在南京舉辦的騰訊全球合作
最新模型壓縮技術導向
paper-list 1.Distilling the Knowledge in a Neural Network hiton的經典之作,大體上就是用softmax/t 代替softmax去用大網路學小網路,在mnist等小資料集取得了積極的結果。但