「一文看懂」深度神經網絡加速和壓縮新進展年度報告

【一文看懂】深度神經網絡加速和壓縮新進展年度報告

新智元 2018-05-18

作者 程健

「一文看懂」深度神經網絡加速和壓縮新進展年度報告


新智元報道

【新智元導讀】在人工智能領域,深度神經網絡的設計,如同繪製枝蔓繁複的蘭竹,需在底層對其刪繁就簡;而將其拓展至不同場景的應用,則如同面向不同意境的引申,需要創新算法的支撐。中國科學院自動化研究所的程健研究員,向大家介紹過去一年,深度神經網絡加速和壓縮方面所取得的進展。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

鄭板橋在《贈君謀父子》一詩中曾寫道,

“刪繁就簡三秋樹,領異標新二月花。”

這句詩講的是,在畫作最易流於枝蔓的蘭竹時,要去掉其繁雜使之趨於簡明如“三秋之樹”;而針對不同的意境要有發散的引申,從而使每幅作品都如“二月之花”般新穎。

其實在人工智能領域,深度神經網絡的設計,便如同繪製枝蔓繁複的蘭竹,需在底層對其刪繁就簡;而將其拓展至不同場景的應用,則如同面向不同意境的引申,需要創新算法的支撐。

1946年,世界上第一臺通用計算機“恩尼亞克”誕生, 經過七十年餘的發展,計算機從最初的龐然大物發展到今天的可作“掌上舞”,在體積逐步縮小的同時算力也有了很大提升。然而隨著深度學習的崛起,在計算設備上可集成算法的能力邊界也在不斷拓展,我們仍然面臨著巨大計算量和資源消耗的壓力。

深度神經網絡,作為目前人工智能的基石之一,其複雜性及可移植性將直接影響人工智能在生活中的應用。因此,在學術界誕生了深度網絡加速與壓縮領域的研究。

今天,來自中國科學院自動化研究所的程健研究員,將向大家介紹過去一年中,深度神經網絡加速和壓縮方面所取得的進展。

文末,大講堂提供文中提到參考文獻的下載鏈接。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

首先我們來了解一下常用卷積神經網絡的計算複雜度情況。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

從上表可以看出近年來網絡層數越來越多,計算複雜度越來越高。而過高的計算複雜度通常要求我們使用GPU或者高性能的CPU對神經網絡進行運算。實際上在深度學習應用過程中,我們還面臨很多諸如移動設備、嵌入式設備這樣存在計算、體積、功耗等方面受限的設備,它們也需要應用深度學習技術。由於這些設備存在的約束,導致現有的高性能深度神經網絡無法在上面進行有效的計算和應用。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

這種情況給我們提出了新的挑戰:我們如何在保持現有神經網絡性能基本不變的情況下,通過將網絡的計算量大幅減小,以及對網絡模型存儲做大幅的削減,使得網絡模型能在資源受限的設備上高效運行。這正是我們做深度神經網絡加速、壓縮的基本動機。

從加速和壓縮本身來說,兩者不是同一件事,但通常情況下我們往往會同時做加速和壓縮,兩者都會給網絡的計算帶來收益,所以我們今天把它們放在一起來講。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

網絡加速和壓縮技術根據採用的方法不同大概可以分為Low-Rank、Pruning、Quantization、Knowledge Distillation等。目前存在很多體積比較小,性能還不錯的緊緻網絡,在其架構設計過程中也含有很多網絡加速壓縮的基本思想,所以我們今天也把Compact Network Design也作為網絡加速和壓縮方法的一種來介紹。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

我們對過去一年和2018年目前發表在國際頂會上的有關網絡加速和壓縮的論文做了統計。由上圖可以看出在CVPR2017有10篇關於網絡加速和壓縮的文章,到CVPR2018年增加到13篇文章,ICLR2017有12篇,ICLR2018增加到14篇,這是兩個與深度學習應用相關的主要會議。

但奇怪的一點是我們看到也有很多文章在NIPS、ICML等相對傳統、比較注重理論的會議上發表,其中NIPS2017有10篇,ICMI2017有4篇。可以說在過去一年多的時間裡,深度神經網絡加速和壓縮不僅僅在應用方面有所突破,還在理論方面有所進展。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

根據我們剛才對網絡加速和壓縮方法的分類來看,Low-Rank只有兩篇,Pruning、Quantization都有三十多篇,這兩個是研究的絕對熱點問題。Knowledge Distillation有4篇,Compact CNN Design有3篇。下面分別從這幾個方面進行簡單介紹。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

深度網絡加速和壓縮的第一種方法是Low-Rank低秩分解。由於卷積神經網絡中的主要計算量在於卷積計算,而卷積計算本質上是矩陣分析的問題,通過在大學對矩陣分析、高等數學的學習我們知道通過SVD奇異值分解等矩陣分析方法可以有效減少矩陣運算的計算量。

對於二維矩陣運算來說SVD是非常好的簡化方法,所以在早期的時候,微軟研究院就做過相關的工作來對網絡實現加速。後面對於高維矩陣的運算往往會涉及到Tensor分解方法來做加速和壓縮,主要是CP分解、Tucker分解、Tensor Train分解和Block Term分解這些在2015年和2016年所做的工作。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

應該說矩陣分解方法經過過去的發展已經非常成熟了,所以在2017、2018年的工作就只有Tensor Ring和Block Term分解在RNN的應用兩篇相關文章了。

那麼為什麼Low-Rank不再流行了呢?除了剛才提及的分解方法顯而易見、比較容易實現之外,另外一個比較重要的原因是現在越來越多網絡中採用1×1的卷積,而這種小的卷積使用矩陣分解的方法很難實現網絡加速和壓縮。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

深度網絡加速和壓縮的第二種方法是Pruning,簡單來說就是把神經網絡中的連接剪掉,剪掉以後整個網絡複雜度特別是網絡模型大小要減小很多。最早在ICLR2016上斯坦福大學提出了一種稱為Deep Compression的隨機剪枝方法。

由於隨機剪枝方法對硬件非常不友好,往往在硬件實現的過程中不一定能夠很好地對網絡起到加速和壓縮的效果。後來大家就想到使用成塊出現的結構化Pruning,Filter Pruning,梯度Pruning等方法。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

對於結構化Pruning,在ICML2017中有一篇對於權重進行分析剪枝的文章。具體方法是:首先使用Group Sparsity組稀疏的方法對分組特徵添加稀疏正則來修剪掉權重矩陣的一些列,然後通過Exclusive Sparsity增強不同權重之間特徵的競爭力來學習更有效的filters,兩者共同作用取得了很好的Pruning結果。

從另一方面考慮,我們能否對feature map和activation也做一些pruning的工作呢?在ICCV2017的工作中有人通過給每個通道channel添加一個尺度因子scaling factor,然後對這些尺度因子scaling factor添加sparsity regularization,最後根據尺度因子大小對相應的通道channels進行修剪,將一些尺度因子比較小的通道剪掉,實現對整個網絡的瘦身效果。

剛才所講的都是在網絡前向傳播過程中所做的Pruning,那麼我們能否在網絡訓練的過程中也加入Pruning來加快網絡訓練的過程呢?ICML2017有一篇文章對網絡訓練過程中的梯度信息做了分析,通過去掉幅值比較小的梯度來簡化網絡的反向傳播過程,從而加快網絡的訓練過程。從結果來看,這種方法可以通過僅僅更新1%-4%的權重來實現和原有網絡相當的效果。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

除了Pruning,還有一種研究較多的方法是Quantization量化。量化可以分為Low-Bit Quantization(低比特量化)、Quantization for General Training Acceleration(總體訓練加速量化)和Gradient Quantization for Distributed Training(分佈式訓練梯度量化)。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

由於在量化、特別是低比特量化實現過程中,由於量化函數的不連續性,在計算梯度的時候會產生一定的困難。對此,阿里巴巴冷聰等人把低比特量化轉化成ADMM可優化的目標函數,從而由ADMM來優化。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

我們實驗室從另一個角度思考這個問題,使用哈希把二值權重量化,再通過哈希求解。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

前面兩篇文章都是對權重進行量化,那麼feature map能否也可以進行量化呢?以前有人考慮過這個問題,將權重和feature map一起進行量化,但在實際過程中非常難以收斂。我們實驗室在CVPR2018上提出一個方法,受到兩步哈希法的啟發,將量化分為兩步,第一步先對feature map進行量化,第二步再對權重量化,從而能夠將兩個同時進行很好的量化。

剛才的量化都是在網絡inference過程中,其實量化也可以在訓練過程中使用,這是英特爾在NIPS2017提出的Flexpoint方法。我們知道在32位浮點和16位浮點存儲的時候,第一位是符號位,中間是指數位,後面是尾數。他們對此提出了把前面的指數項共享的方法,這樣可以把浮點運算轉化為尾數的整數定點運算,從而加速網絡訓練。

在很多深度學習訓練過程中,為了讓訓練更快往往會用到分佈式計算。在分佈式計算過程中有一個很大問題,每一個分佈式服務器都和中心服務器節點有大量的梯度信息傳輸過程,從而造成帶寬限制。這篇文章採取把要傳輸的梯度信息量化為三值的方法來有效加速分佈式計算。

第四種方法是Knowledge Distillation。這方面早期有兩個工作,Knowledge Distillation最早由Hinton在2015年提出,隨後Romero提出了FitNets。在Knowledge Distillation中有兩個關鍵的問題,一是如何定義知識,二是使用什麼損失函數來度量student網絡和teacher 網絡之間的相似度。

這裡主要介紹2017年的兩個相關工作。一是FSP方法,它實際上將原始網絡中feature map之間的相關度作為知識transfer到student network中,同時使用了L2損失函數。

另一個ICLR2017的工作在feature map中定義了attention,使用了三種不同的定義方法,將attention作為知識transfer到student network中。

下面是幾種主流方法在知識定義和損失函數選擇方面的對比。

最後簡單講一下緊緻網絡設計。我們剛才講到的幾種網絡加速和壓縮方法都是在原有非常複雜的網絡基礎上,對它進行量化、剪枝,讓網絡規模變小、計算變快。我們可以考慮直接設計又小又快又好的網絡,這就是緊緻網絡設計的方法。我們主要講三個相關的工作。

先介紹谷歌在2017年和2018年連續推出的MobileNets V1和MobileNets V2,其中使用了depthwise的1x1卷積。MobileNets V1是一個在網絡非常精簡情況下比較高性能的網絡,MobileNets V2開始於通道比較少的1×1的網絡,然後映射到通道比較多的層,隨後做一個depthwise,最後再通過1x1卷積將它映射回去,這樣可以大幅減少1×1卷積計算量。

實際上MobileNets中1x1的卷積佔有很大的比重,基於這樣的原則,曠視科技在CVPR2018提出把1×1的卷積通過分組來減少計算的方法,由於分組以後存在不同通道之間信息交流非常少的問題,他們又在卷積層之間增加channel shuffle過程進行隨機擾亂,增加了不同通道之間的信息交流。這是ShuffleNet所做的工作。

下面是緊緻網絡設計幾種方法的比較。

最後簡單講一下深度神經網絡加速和壓縮的發展趨勢。

第一,我們發現實際上現在絕大部分加速和壓縮的方法,都需要有一個fine-tuning的過程,這個過程需要有一定量的含有標籤的原始訓練樣本,這在實際應用過程中可能會有一定的限制。會有一些Non-fine-tuning或者Unsupervised Compression方法的出現。實際上現在已經有人在研究這方面的東西。

第二,在加速和壓縮過程中會涉及到很多參數,甚至還包含很多經驗性東西,將來能不能做到儘可能少需要、不需要經驗或者參數越少越好的self-adaptive方法。

第三,現在很多加速壓縮方法往往都是針對分類問題,未來在目標檢測、語義分割方面也會出現類似的工作。

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

文中提到參考文獻的下載鏈接為:

https://pan.baidu.com/s/1mpXsDzMZXRNO9tVB8pVkHw

密碼:k1T5

作者信息:

「一文看懂」深度神經網絡加速和壓縮新進展年度報告

程健,博士,中國科學院自動化研究所模式識別國家重點實驗室研究員、南京人工智能芯片創新研究院常務副院長、人工智能與先進計算聯合實驗室主任。分別於1998年和2001年在武漢大學獲學士和碩士學位,2004年在中國科學院自動化研究所獲博士學位。2004年至2006年在諾基亞研究中心做博士後研究。2006年9月至今在中科院自動化研究所工作。目前主要從事深度學習、人工智能芯片設計、圖像與視頻內容分析等方面研究,在相關領域發表學術論文100餘篇,英文編著二本。曾先後獲得中科院盧嘉錫青年人才獎、中科院青年促進會優秀會員獎、中國電子學會自然科學一等獎、教育部自然科學二等獎等。目前擔任國際期刊《Pattern Recognition》的編委,曾擔任2010年ICIMCS國際會議主席、HHME 2010組織主席、CCPR 2012出版主席等。


【加入社群】


分享到:


相關文章: