綜述論文:當(dāng)前深度神經(jīng)網(wǎng)絡(luò)模型壓縮和加速方法速覽
大型神經(jīng)網(wǎng)絡(luò)具有大量的層級(jí)與結(jié)點(diǎn),因此考慮如何減少它們所需要的內(nèi)存與計(jì)算量就顯得極為重要,特別是對(duì)于在線學(xué)習(xí)和增量學(xué)習(xí)等實(shí)時(shí)應(yīng)用。此外,近來(lái)智能可穿戴設(shè)備的流行也為研究員提供了在資源(內(nèi)存、CPU、能耗和帶寬等)有限的便攜式設(shè)備上部署深度學(xué)習(xí)應(yīng)用提供了機(jī)會(huì)。高效的深度學(xué)習(xí)方法可以顯著地影響分布式系統(tǒng)、嵌入式設(shè)備和用于人工智能的 FPGA 等。典型的例子是 ResNet-50[5],它有 50 層卷積網(wǎng)絡(luò)、超過(guò) 95MB 的儲(chǔ)存需求和計(jì)算每一張圖片所需要的浮點(diǎn)數(shù)乘法時(shí)間。如果剪枝一些冗余的權(quán)重后,其大概能節(jié)約 75% 的參數(shù)和 50% 的計(jì)算時(shí)間。對(duì)于只有兆字節(jié)資源的手機(jī)和 FPGA 等設(shè)備,如何使用這些方法壓縮模型就很重要了。
實(shí)現(xiàn)這個(gè)目標(biāo)需要聯(lián)合多個(gè)學(xué)科以尋找解決方案,包括但不限于機(jī)器學(xué)習(xí)、最優(yōu)化、計(jì)算機(jī)架構(gòu)、數(shù)據(jù)壓縮、索引和硬件設(shè)計(jì)等。在本論文中,我們回顧了在壓縮和加速深度神經(jīng)網(wǎng)絡(luò)方面的工作,它們廣泛受到了深度學(xué)習(xí)社區(qū)的關(guān)注,并且近年來(lái)已經(jīng)實(shí)現(xiàn)了很大的進(jìn)展。
我們將這些方法分為四個(gè)類(lèi)別:參數(shù)修剪和共享、低秩分解、遷移/壓縮卷積濾波器和知識(shí)精煉等?;趨?shù)修剪(parameter pruning)和共享的方法關(guān)注于探索模型參數(shù)中冗余的部分,并嘗試去除冗余和不重要的參數(shù)?;诘椭确纸?Low-rank factorization)技術(shù)的方法使用矩陣/張量分解以估計(jì)深層 CNN 中最具信息量的參數(shù)?;谶w移/壓縮卷積濾波器(transferred/compact convolutional filters)的方法設(shè)計(jì)了特殊結(jié)構(gòu)的卷積濾波器以減少存儲(chǔ)和計(jì)算的復(fù)雜度。而知識(shí)精煉(knowledge distillation)則學(xué)習(xí)了一個(gè)精煉模型,即訓(xùn)練一個(gè)更加緊湊的神經(jīng)網(wǎng)絡(luò)以再現(xiàn)大型網(wǎng)絡(luò)的輸出結(jié)果。
在表 1 中,我們簡(jiǎn)單地總結(jié)了這四種方法。通常參數(shù)修剪和分享、低秩分解和知識(shí)精煉方法可以通過(guò)全連接層和卷積層用于 DNN,它們能實(shí)現(xiàn)有競(jìng)爭(zhēng)力的性能。另外,使用遷移/壓縮濾波器的方法只適用于全卷積神經(jīng)網(wǎng)絡(luò)。低秩分解和遷移/壓縮濾波器的方法提供了一種端到端的流程,并且它們很容易直接在 CPU/GPU 環(huán)境中實(shí)現(xiàn)。而參數(shù)修剪和共享使用了不同的方法,如向量量化、二進(jìn)制編碼和系數(shù)約束以執(zhí)行這些任務(wù),通常他們需要花一些處理步驟才能達(dá)到最終的目標(biāo)。
表 1. 不同的模型壓縮方法
至于訓(xùn)練協(xié)議,基于參數(shù)修剪/共享、低秩分解的模型可以從預(yù)訓(xùn)練的模型中抽取或者從頭開(kāi)始訓(xùn)練,這些訓(xùn)練比較靈活高效。而遷移/壓縮濾波器和知識(shí)精煉模型只支持從頭開(kāi)始訓(xùn)練。這些方法獨(dú)立設(shè)計(jì),互為補(bǔ)充。例如,遷移層和參數(shù)修剪/共享可以一起使用,模型量化/二進(jìn)制化(binarization)可以和低秩分解一起使用,以實(shí)現(xiàn)進(jìn)一步提速。論文作者詳細(xì)介紹了每一類(lèi)方法,包括特性、優(yōu)勢(shì)和缺陷等。
一、參數(shù)修剪和共享
根據(jù)減少冗余(信息冗余或參數(shù)空間冗余)的方式,這些技術(shù)可以進(jìn)一步分為三類(lèi):模型量化和二進(jìn)制化、參數(shù)共享和結(jié)構(gòu)化矩陣(structural matrix)。
1. 量化和二進(jìn)制化
網(wǎng)絡(luò)量化通過(guò)減少表示每個(gè)權(quán)重所需的比特?cái)?shù)來(lái)壓縮原始網(wǎng)絡(luò)。Gong et al. [6] 和 Wu et al. [7] 對(duì)參數(shù)值使用 K 均值標(biāo)量量化。Vanhoucke et al. [8] 展示了 8 比特參數(shù)量化可以在準(zhǔn)確率損失極小的同時(shí)實(shí)現(xiàn)大幅加速。[9] 中的研究在基于隨機(jī)修約(stochastic rounding)的 CNN 訓(xùn)練中使用 16 比特定點(diǎn)表示法(fixed-point representation),顯著降低內(nèi)存和浮點(diǎn)運(yùn)算,同時(shí)分類(lèi)準(zhǔn)確率幾乎沒(méi)有受到損失。
[10] 提出的方法是首先修剪不重要的連接,重新訓(xùn)練稀疏連接的網(wǎng)絡(luò)。然后使用權(quán)重共享量化連接的權(quán)重,再對(duì)量化后的權(quán)重和碼本(codebook)使用霍夫曼編碼,以進(jìn)一步降低壓縮率。如圖 1 所示,該方法首先通過(guò)正常的網(wǎng)絡(luò)訓(xùn)練來(lái)學(xué)習(xí)連接,然后再修剪權(quán)重較小的連接,最后重新訓(xùn)練網(wǎng)絡(luò)來(lái)學(xué)習(xí)剩余稀疏連接的最終權(quán)重。
缺陷:此類(lèi)二元網(wǎng)絡(luò)的準(zhǔn)確率在處理大型 CNN 網(wǎng)絡(luò)如 GoogleNet 時(shí)會(huì)大大降低。另一個(gè)缺陷是現(xiàn)有的二進(jìn)制化方法都基于簡(jiǎn)單的矩陣近似,忽視了二進(jìn)制化對(duì)準(zhǔn)確率損失的影響。
圖 1
圖 1. [10] 中提到的三階段壓縮方法:修剪、量化(quantization)和霍夫曼編碼。修剪減少了需要編碼的權(quán)重?cái)?shù)量,量化和霍夫曼編碼減少了用于對(duì)每個(gè)權(quán)重編碼的比特?cái)?shù)。稀疏表示的元數(shù)據(jù)包含壓縮率。壓縮機(jī)制不會(huì)帶來(lái)任何準(zhǔn)確率損失。
2. 剪枝和共享
網(wǎng)絡(luò)剪枝和共享已經(jīng)被用于降低網(wǎng)絡(luò)復(fù)雜度和解決過(guò)擬合問(wèn)題。有一種早期應(yīng)用的剪枝方法稱(chēng)為偏差權(quán)重衰減(Biased Weight Decay),其中最優(yōu)腦損傷(Optimal Brain Damage)和最優(yōu)腦手術(shù)(Optimal Brain Surgeon)方法基于損失函數(shù)的 Hessian 矩陣減少連接的數(shù)量,他們的研究表明這種剪枝方法的精確度比基于重要性的剪枝方法(比如 weight dDecay 方法)更高。
缺陷:剪枝和共享方法存在一些潛在的問(wèn)題。首先,若使用了 L1 或 L2 正則化,則剪枝方法需要更多的迭代次數(shù)才能收斂,此外,所有的剪枝方法都需要手動(dòng)設(shè)置層的敏感度,即需要精調(diào)超參數(shù),在某些應(yīng)用中會(huì)顯得很冗長(zhǎng)繁重。
3. 設(shè)計(jì)結(jié)構(gòu)化矩陣
如果一個(gè) m x n 階矩陣只需要少于 m×n 個(gè)參數(shù)來(lái)描述,就是一個(gè)結(jié)構(gòu)化矩陣(structured matrix)。通常這樣的結(jié)構(gòu)不僅能減少內(nèi)存消耗,還能通過(guò)快速的矩陣-向量乘法和梯度計(jì)算顯著加快推理和訓(xùn)練的速度。
二、低秩分解和稀疏性
一個(gè)典型的 CNN 卷積核是一個(gè) 4D 張量,需要注意的是這些張量中可能存在大量的冗余。而基于張量分解的思想也許是減少冗余的很有潛力的方法。而全連接層也可以當(dāng)成一個(gè) 2D 矩陣,低秩分解同樣可行。
所有近似過(guò)程都是一層接著一層做的,在一個(gè)層經(jīng)過(guò)低秩濾波器近似之后,該層的參數(shù)就被固定了,而之前的層已經(jīng)用一種重構(gòu)誤差標(biāo)準(zhǔn)(reconstruction error criterion)微調(diào)過(guò)。這是壓縮 2D 卷積層的典型低秩方法,如圖 2 所示。
圖 2
圖 2. CNN 模型壓縮的低秩近似(Low-rank approximation)。左:原始卷積層。右:使用秩 K 進(jìn)行低秩約束的卷積層。
表 2
表 2. 低秩模型及其基線模型在 ILSVRC-2012 數(shù)據(jù)集上的性能對(duì)比。
缺陷:低秩方法很適合模型壓縮和加速,該方法補(bǔ)充了深度學(xué)習(xí)的近期發(fā)展,如 dropout、修正單元(rectified unit)和 maxout。但是,低秩方法的實(shí)現(xiàn)并不容易,因?yàn)樗婕坝?jì)算成本高昂的分解操作。另一個(gè)問(wèn)題是目前的方法逐層執(zhí)行低秩近似,無(wú)法執(zhí)行非常重要的全局參數(shù)壓縮,因?yàn)椴煌膶泳邆洳煌男畔ⅰW詈?,分解需要大量的重新?xùn)練來(lái)達(dá)到收斂。
三、遷移/壓縮卷積濾波器
使用遷移卷積層對(duì) CNN 模型進(jìn)行壓縮受到 [42] 中研究的啟發(fā),該論文介紹了等變?nèi)赫?equivariant group theory)。使 x 作為輸入,Φ(·) 作為網(wǎng)絡(luò)或?qū)?,T (·) 作為變換矩陣。則等變概念可以定義為:
即使用變換矩陣 T (·) 轉(zhuǎn)換輸入 x,然后將其傳送至網(wǎng)絡(luò)或?qū)?Phi;(·),其結(jié)果和先將 x 映射到網(wǎng)絡(luò)再變換映射后的表征結(jié)果一致。
根據(jù)該理論,將變換矩陣應(yīng)用到層或?yàn)V波器Φ(·) 來(lái)對(duì)整個(gè)網(wǎng)絡(luò)模型進(jìn)行壓縮是合理的。
表 3. 基于遷移卷積濾波器的不同方法在 CIFAR-10 和 CIFAR-100 數(shù)據(jù)集上的性能對(duì)比
缺陷:將遷移信息應(yīng)用到卷積濾波器的方法需要解決幾個(gè)問(wèn)題。首先,這些方法的性能可與寬/平坦的架構(gòu)(如 VGGNet)相媲美,但是無(wú)法與較窄/特殊的架構(gòu)(如 GoogleNet、Residual Net)相比。其次,遷移假設(shè)有時(shí)過(guò)于強(qiáng)大以致于無(wú)法指導(dǎo)算法,使得在某些數(shù)據(jù)集上的結(jié)果不穩(wěn)定。
知識(shí)精煉
據(jù)我們所知,Caruana 等人 [49] 首先提出利用知識(shí)遷移(KT)來(lái)壓縮模型。他們通過(guò)集成強(qiáng)分類(lèi)器標(biāo)注的偽數(shù)據(jù)訓(xùn)練了一個(gè)壓縮模型,并再現(xiàn)了原大型網(wǎng)絡(luò)的輸出結(jié)果。然而他們的工作僅限于淺層網(wǎng)絡(luò)。這個(gè)想法近來(lái)在 [50] 中擴(kuò)展為知識(shí)精煉(Knowledge Distillation/KD),它可以將深度和寬度的網(wǎng)絡(luò)壓縮為淺層模型,該壓縮模型模仿了復(fù)雜模型所能實(shí)現(xiàn)的功能。KD 的基本思想是通過(guò)軟 softmax 學(xué)習(xí)教師輸出的類(lèi)別分布而降大型教師模型(teacher model)的知識(shí)精煉為較小的模型。
[51] 中的工作引入了 KD 壓縮框架,即通過(guò)遵循學(xué)生-教師的范式減少深度網(wǎng)絡(luò)的訓(xùn)練量,這種學(xué)生-教師的范式即通過(guò)軟化教師的輸出而懲罰學(xué)生。該框架將深層網(wǎng)絡(luò)(教師)的集成壓縮為相同深度的學(xué)生網(wǎng)絡(luò)。為了完成這一點(diǎn),學(xué)生學(xué)要訓(xùn)練以預(yù)測(cè)教師的輸出,即真實(shí)的分類(lèi)標(biāo)簽。盡管 KD 方法十分簡(jiǎn)單,但它同樣在各種圖像分類(lèi)任務(wù)中表現(xiàn)出期望的結(jié)果。
缺點(diǎn):基于 KD 的方法能令更深的模型變得更加淺而顯著地降低計(jì)算成本。但是也有一些缺點(diǎn),例如 KD 方法只能用于具有 Softmax 損失函數(shù)分類(lèi)任務(wù),這阻礙了其應(yīng)用。另一個(gè)缺點(diǎn)是模型的假設(shè)有時(shí)太嚴(yán)格了,以至于其性能有時(shí)比不上其它方法。
表 4. 模型壓縮不同的代表性研究中使用的基線模型
討論與挑戰(zhàn)
深度模型的壓縮和加速技術(shù)還處在早期階段,目前還存在以下挑戰(zhàn):
- 大多數(shù)目前的頂尖方法都建立在設(shè)計(jì)完善的 CNN 模型的基礎(chǔ)上,這限制了改變配置的自由度(例如,網(wǎng)絡(luò)結(jié)構(gòu)和超參數(shù))。為了處理更加復(fù)雜的任務(wù),還需要更加可靠的模型壓縮方法。
- 剪枝是一種壓縮和加速 CNN 的有效方式。目前大多數(shù)的剪枝技術(shù)都是以減少神經(jīng)元之間的連接設(shè)計(jì)的。另一方面,對(duì)通道進(jìn)行剪枝可以直接減小特征映射的寬度并壓縮模型。這很有效,但也存在挑戰(zhàn),因?yàn)闇p少通道會(huì)顯著地改變下一層的輸入。確定這類(lèi)問(wèn)題的解決方式同樣很重要。
- 正如之前所提到的,結(jié)構(gòu)化矩陣和遷移卷積濾波器方法必須使模型具有人類(lèi)先驗(yàn)知識(shí),這對(duì)模型的性能和穩(wěn)定性有顯著的影響。研究如何控制強(qiáng)加先驗(yàn)知識(shí)的影響是很重要的。
- 知識(shí)精煉(knowledge distillation/KD)方法有很多益處比如不需要特定的硬件或?qū)崿F(xiàn)就能直接加速模型。開(kāi)發(fā)基于 KD 的方法并探索如何提升性能仍然值得一試。
- 多種小型平臺(tái)(例如,移動(dòng)設(shè)備、機(jī)器人、自動(dòng)駕駛汽車(chē))的硬件限制仍然是阻礙深層 CNN 擴(kuò)展的主要問(wèn)題。如何全面利用有限的可用計(jì)算資源以及如何為這些平臺(tái)設(shè)計(jì)特定的壓縮方法仍然是個(gè)挑戰(zhàn)。
論文:A Survey of Model Compression and Acceleration for Deep Neural Networks
論文鏈接:https://arxiv.org/abs/1710.09282
深層卷積神經(jīng)網(wǎng)絡(luò)(CNN)目前已經(jīng)在很多視覺(jué)識(shí)別任務(wù)中達(dá)到了非常準(zhǔn)確的表現(xiàn)。然而,目前的深層卷積神經(jīng)網(wǎng)絡(luò)模型非常耗費(fèi)計(jì)算資源和內(nèi)存,面臨著在終端部署和低延遲需求場(chǎng)景下難以應(yīng)用的問(wèn)題。因此,一種很自然的解決方案就是在保證分類(lèi)準(zhǔn)確率不顯著下降的前提下對(duì)深層卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行壓縮和加速。近年來(lái),該領(lǐng)域?qū)崿F(xiàn)了極大的發(fā)展。我們將在本論文中介紹近期壓縮和加速 CNN 模型的先進(jìn)技術(shù)。這些技術(shù)可以大致分為四類(lèi):參數(shù)修剪和共享(parameter pruning and sharing)、低秩分解(low-rank factorization)、遷移/壓縮卷積濾波器(transfered/compact convolutional filter)和知識(shí)精煉(knowledge distillation)。參數(shù)修剪和共享的方法將在論文開(kāi)頭詳細(xì)描述,其他幾類(lèi)方法也都會(huì)在文中介紹。我們對(duì)每一類(lèi)方法的性能、相關(guān)應(yīng)用、優(yōu)勢(shì)和缺陷等進(jìn)行獨(dú)到的分析。然后本文將介紹幾個(gè)最近的其他成功方法,如動(dòng)態(tài)網(wǎng)絡(luò)和隨機(jī)深度網(wǎng)絡(luò)(stochastic depths network)。之后,我們將研究評(píng)估矩陣(evaluation matrix)——用于評(píng)估模型性能和近期基準(zhǔn)的主要數(shù)據(jù)集。最后,我們總結(jié)并討論了現(xiàn)有的挑戰(zhàn)和可能的發(fā)展方向。
【本文是51CTO專(zhuān)欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】