深度神經(jīng)網(wǎng)絡是深度學習的一種框架,它是一種具備至少一個隱層的神經(jīng)網(wǎng)絡。與淺層神經(jīng)網(wǎng)絡類似,深度神經(jīng)網(wǎng)絡也能夠為復雜非線性系統(tǒng)提供建模,但多出的層次為模型提供了更高的抽象層次,因而提高了模型的能力。深度神經(jīng)網(wǎng)絡是一種判別模型,可以使用反向傳播算法進行訓練。隨著深度神經(jīng)網(wǎng)絡使用的越來越多,相應的壓縮和加速技術(shù)也孕育而生。
大家好,我是來自浙江大學信息與電子工程學院的胡浩基。今天我分享的主題是《深度神經(jīng)網(wǎng)絡壓縮與加速技術(shù)》。
首先一個問題是,為什么要做深度神經(jīng)網(wǎng)絡壓縮?有兩個原因:第一個原因是大型的深度神經(jīng)網(wǎng)絡很難部署在小型化的設備上。另一個原因是當深度模型越來越大,需要消耗的計算和存儲資源越來越多,但是物理的計算資源跟不上需求增長的速度。
從右邊的圖可以看出,從2005年開始,硬件的計算資源增長趨于放緩,而隨著深度學習領(lǐng)域的蓬勃發(fā)展,對算力的需求卻是指數(shù)級增長,這就導致了矛盾。因此,對深度模型進行簡化,降低其計算量,成了當務之急。近年來,以ChatGPT為代表的大模型誕生,將這個問題變得更加直接和迫切。如果想要應用大模型,必須有能夠負擔得起的相對低廉計算和存儲資源,在尋找計算和存儲資源的同時,降低大模型的計算量,將是對解決算力問題的有益補充。
例如2017年流行的VGG-16網(wǎng)絡,在當時比較主流的CPU上處理一張圖片,可能需要1.7秒的時間,這樣的時間顯然不太適合用部署在小型化的設備當中。
深度神經(jīng)網(wǎng)絡的壓縮用數(shù)學表述就是使用一個簡單的函數(shù)來模擬復雜的函數(shù)。雖然這是一個已經(jīng)研究了幾百年的函數(shù)逼近問題,但是在當今的環(huán)境下,如何將幾十億甚至上千億自由參數(shù)的模型縮小,是一個全新的挑戰(zhàn)。這里有三個基本思想 -- 更少參數(shù)、更少計算和更少比特。在將參數(shù)變少的同時,用較為簡單的計算來代替復雜的計算。用低精度量化的比特數(shù)來模擬高精度的數(shù)據(jù),都可以讓函數(shù)的計算復雜性大大降低。
深度模型壓縮和加速領(lǐng)域開創(chuàng)人MIT的副教授韓松在2015年的一篇文章,將深度學習的模型壓縮分成了如下的5個步驟。最左邊輸入了一個深度學習的模型,首先要經(jīng)過分解(decomposition),即用少量的計算代替以前復雜的計算,例如可以把很大的矩陣拆成多個小矩陣,將大矩陣的乘法變成小矩陣的乘法和加法。第二個操作叫做剪枝(pruning),它是一個減少參數(shù)的流程,即將一些對整個計算不那么重要的參數(shù)找出來并把它們從原來的神經(jīng)網(wǎng)絡中去掉。第三個操作叫做量化(Quantization),即將多比特的數(shù)據(jù)變成少比特的數(shù)據(jù),用少比特的加法和乘法模擬原來的多比特的加法乘法,從而減少計算量。做完以上三步操作之后,接下來需要編碼(encoding),即用統(tǒng)一的標準將網(wǎng)絡的參數(shù)和結(jié)構(gòu)進行一定程度的編碼,進一步降低網(wǎng)絡的儲存量。經(jīng)過以上四步的操作,最后可以得到一個被壓縮的模型。
我們團隊提出了另外一種基于層次的模型壓縮分類。最上面一個層級叫做網(wǎng)絡結(jié)構(gòu)搜索(network architecture design),即搜索一個計算量較少但對于某些特定任務很有效的網(wǎng)絡,這也可以看作另一種壓縮方式。第二個層級叫做分層壓縮(Layer)。深度學習網(wǎng)絡基本上是分層的結(jié)構(gòu),每一層有一些矩陣的加法和乘法,對每一層的這些加法和乘法進行約束,例如將矩陣進行分解等,這樣可以進一步降低計算量。第三個壓縮層級是參數(shù)(weight),將每一層不重要的參數(shù)去掉,這也就是剪枝。最下面的層級是比特(bit),用量化對每個參數(shù)做比特層級的壓縮,變成量化的編碼。
這里是各種壓縮方式的介紹以及它們的挑戰(zhàn)。剪枝(Pruning)減少模型的參數(shù);低秩分解(Low rank factorization)將大矩陣拆成小矩陣;知識蒸餾(Knowledge Distillation)用大的網(wǎng)絡教小的網(wǎng)絡學習,從而使小的網(wǎng)絡產(chǎn)生的結(jié)果跟大的網(wǎng)絡類似;量化(Quantization將深度神經(jīng)網(wǎng)絡里的參數(shù)進行量化,變?yōu)榈捅忍貐?shù),降低計算量。
2018年BMVC會議,我們團隊提出了一種基于概率的剪枝方法,叫做Structured Probabilistic Pruning。這種方法的核心思路是將神經(jīng)網(wǎng)絡里不重要的參數(shù)去掉。那么如何劃分重要與不重要,是首要問題。最好的標準是去掉某個參數(shù)以后測試對于結(jié)果的影響。但是在整個網(wǎng)絡中那么多的參數(shù),如果每去掉一個參數(shù)都測試對結(jié)果的影響,時間就會非常漫長。所以需要用一些簡單的標準,例如參數(shù)絕對值的大小來評判參數(shù)的重要性。但有一個矛盾是,簡單標準對于衡量參數(shù)重要性來說并不準確。
那么如何解決上述矛盾呢?我們提出的方案形象一點就是,用多次考試代替一次考試。我們將在訓練到一定的地步之后,去掉不重要的參數(shù),這個過程叫做一次考試。但是每次考試都有偏差。于是我們發(fā)明了這種基于概率的剪枝方法,將一次考試變成多次考試。即每訓練一段時間測試參數(shù)重要性,如果在這段時間內(nèi)它比較重要,就會給它一個較小的剪枝概率,如果在這一段時間內(nèi)不那么重要,就會給它一個較大的剪枝概率。接下來繼續(xù)訓練一段時間,再進行第二次考試。在新的考試中,以前不重要的參數(shù)可能變得重要,以前重要的參數(shù)也可能變得不重要,把相應的概率進行累加,一直隨著訓練的過程累加下去,直到最后在訓練結(jié)束時,根據(jù)累加的分數(shù)來決定哪些參數(shù)需要被剪枝。
這種方式叫做SPP——Structured Probabilistic Pruning。SPP算法相對于其他的算法有一定的優(yōu)勢,具體體現(xiàn)在左邊的圖片里。例如我們將AlexNet壓縮兩倍,識別準確率反而提高了0.7,說明對于AlexNet這樣比較稀疏的網(wǎng)絡效果很好。從別的圖片也可以看到,相對于其他的算法也有一定優(yōu)勢,這里不詳細展開介紹。
2020年我們又提出一種基于增量正則化的卷積神經(jīng)網(wǎng)絡剪枝算法。通過對網(wǎng)絡的目標函數(shù)加入正則化項,并變換正則化參數(shù),從而達到剪枝的效果。
我們通過嚴格的數(shù)學推導證明了一個命題,即如果網(wǎng)絡函數(shù)是二階可導,那么當我們增加每一個網(wǎng)絡參數(shù)對應正則化系數(shù)時,該參數(shù)的絕對值會在訓練過程中會減小。所以我們可以根據(jù)網(wǎng)絡參數(shù)的重要程度,實時分配其對應正則化系數(shù)的增量,從而將一些不太重要的參數(shù)絕對值逐漸壓縮到零。通過這種方式,可以將神經(jīng)網(wǎng)絡的訓練和剪枝融合到一起,在訓練過程中逐步壓縮不重要參數(shù)的絕對值,最終去除它們。
相比SPP, 增量正則化方法在AlexNet(ImageNet)上將推理速度提高到原來的4倍,也能夠提高0.2%的識別率。在將網(wǎng)絡推理速度提高5倍情況下,識別率也僅僅下降了0.8,這相比其他壓縮算法也有很大的優(yōu)勢。
增量正則化方法對于三維卷積網(wǎng)絡的也有一定的壓縮效果,在3D-ResNet18上,將推理速度提高2倍,識別率下降了0.41%;將推理速度提高4倍,識別率下降2.87%。
基于增量正則化方法,我們參與了AVS和IEEE標準的制定,提出的算法成功的寫入到國家標準《信息技術(shù) 神經(jīng)網(wǎng)絡表示與模型壓縮 第1部分 卷積神經(jīng)網(wǎng)絡》中,同時也被寫入“IEEE Model Representation, Composition, Distribution and Management”標準中并獲得今年的新興標準技術(shù)獎。
最近幾年,我們還將深度模型壓縮技術(shù)應用到圖像風格遷移、圖像超分辨率等底層視覺任務中。2020年的CVPR論文,我們利用知識蒸餾來壓縮風格遷移網(wǎng)絡。這里是風格遷移網(wǎng)絡的例子,即輸入兩張圖片,一張是內(nèi)容圖片,一張是風格圖片。通過風格遷移網(wǎng)絡生成一張圖片,將內(nèi)容和風格融合起來。我們需要做的事就是壓縮風格遷移網(wǎng)絡的大小。
我們利用知識蒸餾來壓縮風格遷移網(wǎng)絡,即設計小的學生模型,用小的學生模型來模擬大的教師模型的輸出,從而達到壓縮大的教師模型的目的。我們也設計了針對風格遷移網(wǎng)絡的損失函數(shù),更好的完成了知識蒸餾的任務。我們提出的方法有很好的性能,例如在2020年效果比較好的WCT風格遷移網(wǎng)絡,整個模型的大小是133m,經(jīng)過壓縮之后只有10m。一塊GPU上使用WCT最多可以同時處理900×900的圖片,壓縮之后,同樣的GPU上能夠處理6000×6000的圖片,在處理速度上,處理900×900的圖片,WCT需要花費78秒,壓縮之后只需要7秒,同時處理6000×6000的圖片,在單卡的GPU也只要花費52秒的時間。
可以看到,通過我們的模型壓縮技術(shù),即便是4,000萬像素圖片的風格遷移,放大后的圖像細節(jié)依然清晰。
在人臉識別方面,我們也使用了知識蒸餾的方法。這是2019年發(fā)表在ICIP的論文,人臉識別中有個三元組的損失,即圖片左上角。其中有一個超參數(shù)m。這個m是不可以變化的。通過改進,我們將m變成了一個可變的參數(shù),這個參數(shù)能夠由學生網(wǎng)絡計算兩個圖之間的距離,用距離的方式將m確定下來。基于這種動態(tài)的超參數(shù),我們規(guī)劃了知識蒸餾算法,獲得了不錯的效果。
我們實現(xiàn)了可能是世界上第一個公開的2M左右的人臉識別模型,同時在LFW數(shù)據(jù)上達到99%以上的識別率。同時,我們將所做的小型化人臉識別模型嵌入到芯片中,讓人臉識別獲得了更多的應用。
在瑞芯微RK3288上,原有的模型處理一張圖片大概在0.31秒。而我們這個壓縮后只有2M左右的模型,處理一張圖片的時間在0.17秒左右。
2020年開始,我們和華為合作,將深度壓縮模型應用在圖像超分辨率上。卷積神經(jīng)網(wǎng)絡是一個先處理局部,再處理全局的模型。而在超分辨率網(wǎng)絡中,局部信息很重要,需要用跳線連接前面和后面的層。每一個跳線不僅把數(shù)據(jù)傳送過去,還要同時將那一層的特征圖傳過去。后面的層不僅僅要處理自己那一層產(chǎn)生的特征圖,還要處理前面?zhèn)魉瓦^來的特征圖。然而,不是每一個跳線都重要,都需要保留。于是我們規(guī)劃算法,刪除一些不重要的跳線,同時也刪除了傳送過來的特征圖,從而降低了圖像超分辨率網(wǎng)絡的計算量。我們采用馬爾科夫過程建模目標函數(shù),消除冗余的跳線,從而完成對超分辨率網(wǎng)絡的壓縮。
左邊表格是一些定量的結(jié)果。FLOPs是網(wǎng)絡中加法和乘法的次數(shù)。經(jīng)過壓縮之后的模型DCP-R-102的FLOPs只有102G,與計算量最大的網(wǎng)絡D-DBPN相差50多倍的計算量,而圖像的PSNR和SSIM基本不變。右邊圖片是定性結(jié)果,可見,我們的網(wǎng)絡DCP-R可以很好的恢復圖片的紋理和細節(jié)。
這是關(guān)于圖像超分辨率的另一個工作。這里我們將將藍色的大網(wǎng)絡拆成兩塊,通過互蒸餾(cross knowledge distillation)這種方式進一步完成對超分辨率網(wǎng)絡的壓縮。右圖是具體的定性和定量的結(jié)果。
這篇發(fā)表在期刊Pattern Recognition上的文章所做的事情是對深度模型進行量化。最極致的量化叫做二值化(binarization),即對每個參數(shù)只用+1和-1兩個值來表示。如果每個參數(shù)都只是+1和-1,那么網(wǎng)絡計算中矩陣的乘法將可以變?yōu)榧訙p法,這樣就比較適用于類似FPGA這種對于乘法不友好的硬件系統(tǒng)中。但是二值化也會帶來一定的壞處,由于每個參數(shù)取值范圍變小,整個網(wǎng)絡的性能會有極大的下降。我們在將網(wǎng)絡二值化的同時,為網(wǎng)絡加一些輔助的并行結(jié)構(gòu),這些并行結(jié)構(gòu)是通過網(wǎng)絡搜索出來的,也都是一些二值化的分支,即圖中紅色的部分。加入并行結(jié)構(gòu)后一方面讓二值化的性能有了提升,另一方面也讓計算增量保持在可控的范圍內(nèi)。利用下方的公式,綜合考量精度(accuracy)、特征圖相似性(similarity)和復雜度(complexity)三個方面,構(gòu)造目標函數(shù),在提高精度的前提下盡量減小復雜度,從而達到模型精度和復雜度的平衡。最近我們也在嘗試使用重參數(shù)化的方式,將這些增加的結(jié)構(gòu)合并到以前的網(wǎng)絡當中,從而使網(wǎng)絡結(jié)構(gòu)不發(fā)生改變的前提下,進一步增加網(wǎng)絡二值化的效果。
在ResNet-18上可以看到,使用上述方法可以把90.5%的識別準確度變成92.8%,同時計算量沒有提升特別多。
我們也是比較早做Transformer壓縮的實驗室。Transformer壓縮的第一步是用矩陣理論對Transformer中Q、K、V三個矩陣進行分解,用小的矩陣相乘和相加代替大矩陣的相乘。通過一些理論推導,證明在特定場合下相比原有的矩陣計算準確度上界會有一定提升。壓縮的第二步是減掉Transformer網(wǎng)絡里的跳線。通過這兩個相對簡單的壓縮方式完成對Transformer網(wǎng)絡的壓縮,同時將其用在智能視覺問答任務中。
這是一些定量和定性結(jié)果的比較,可以看到我們的算法在保留原來性能的同時大幅度減少了網(wǎng)絡的計算量。
最后,講一下我認為這個領(lǐng)域可能有前途的未來發(fā)展方向。
首先,利用神經(jīng)網(wǎng)絡壓縮技術(shù)彌補大規(guī)模語言和視覺基礎(chǔ)模型的不足是迫在眉睫的方向。大模型消耗過多的計算量和存儲量,如何將大模型變小是一個重要的科學問題。一些具體的問題包括,如果大模型是可以做100種任務的通才,那么如何將其轉(zhuǎn)變?yōu)橹荒茏?種任務小模型,也就是專才?這里有很多空間,值得繼續(xù)挖掘。
第二,針對流行的特定任務網(wǎng)絡進行壓縮,例如Nerf和擴散模型等。但是,如果我們不能在方法上有所創(chuàng)新,只是一昧追逐流行的網(wǎng)絡進行壓縮,也會陷入內(nèi)卷的困境。
第三,我認為軟硬結(jié)合的的網(wǎng)絡壓縮算法是值得深入研究的方向。將硬件參數(shù)和硬件結(jié)構(gòu)作為優(yōu)化函數(shù)的一部分寫入到網(wǎng)絡壓縮算法中,這樣壓縮出來的網(wǎng)絡就能夠直接適配到專門的硬件上。
第四,神經(jīng)網(wǎng)絡壓縮算法和通信領(lǐng)域的結(jié)合。例如增量壓縮,即設計神經(jīng)網(wǎng)絡壓縮算法,在發(fā)送端首先傳輸網(wǎng)絡最重要的部分,接收端首先收到一個識別精度較低的模型;隨著更多的傳輸,接收端能逐步接收到越來越精確的模型。這個想法與圖像或視頻的壓縮類似,可以完成神經(jīng)網(wǎng)絡模型在不同環(huán)境和資源下的個性化部署。
最后,我比較關(guān)注的是理論方面的研究,我暫且把它稱為深度神經(jīng)網(wǎng)絡的信息論。目前的模型壓縮算法設計主要靠經(jīng)驗,欠缺理論基礎(chǔ)。一個重大的理論問題是,對于特定的任務、數(shù)據(jù)和網(wǎng)絡架構(gòu),實現(xiàn)特定的精度所需要的最小計算是多少?這個問題當然是有一個明確的答案,但目前我們離這個答案仍然非常遙遠。就像香農(nóng)的信息論在通信領(lǐng)域的基礎(chǔ)地位一樣,我們也期待深度神經(jīng)網(wǎng)絡的信息論早日誕生。
審核編輯:劉清
-
深度神經(jīng)網(wǎng)絡
+關(guān)注
關(guān)注
0文章
61瀏覽量
4527
原文標題:深度神經(jīng)網(wǎng)絡壓縮與加速技術(shù)
文章出處:【微信號:livevideostack,微信公眾號:LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論