簡介
將深度學習模型應用於自動駕駛的感知任務上,模型預測結果的准確性和實時性是兩個重要指標。一方面,為了確保准確可靠的感知結果,我們會希望選擇多個准確性盡可能高的模型並行執行,從而在完成多種感知任務的同時,提供一定的冗余度,但這不可避免的意味着更高的計算量和資源消耗。另一方面,為了確保車輛在各種突發情況下都能及時響應,我們會要求感知模塊的執行速度必須與自動駕駛場景的車速相匹配,這就對深度學習模型的實時性提出了很高的要求。另外,在保證高准確性和高實時性的前提下,我們還希望降低模型對計算平台的算力、內存帶寬、功耗等方面的要求,從而提高自動駕駛系統整體的效能。為了應對上述挑戰,我們需要從各種角度對深度學習模型進行壓縮和加速。實際上,模型壓縮和加速是一個相當龐大且活躍的研究領域,包含眾多的研究方向。本文接下來會簡要介紹目前模型壓縮和加速領域的主要技術方向,並聚焦於模型裁剪算法這一方向進行詳細探討。在討論具體的算法之前,首先讓我們簡要回顧一下深度學習模型的理論復雜度評價指標,以及影響模型實際運行性能的各種因素。
1.復雜度分析
深度學習模型的復雜度主要體現在計算量、訪存量和參數量上。
- 計算量:即模型完成一次前向傳播所需的浮點乘加操作數,其單位通常寫作 FLOPs (FLoating-point OPerations)。對卷積神經網絡而言,卷積操作通常是整個網絡中計算量最為密集的部分,例如 VGG16 [1] 網絡 99% 的計算量都來自於其卷積層。假設卷積層的輸出特征圖空間尺寸為 H × W,輸入通道數為 Cin,卷積核個數(輸出通道數)為 Cout,每個卷積核空間尺寸為 KH × KW,那么該卷積層的理論計算量為 H × W × KH × KW × Cin × Cout FLOPs。可以看到,卷積層的計算量由輸出特征圖的大小、卷積核的大小以及輸入和輸出通道數所共同決定。對輸入特征圖進行下采樣,或者使用更小、更少的卷積核都可以明顯降低卷積層的計算量。
- 訪存量:即模型完成一次前向傳播過程中發生的內存交換總量,單位是 Byte。訪存量的重要性經常會被人們忽視,實際上,模型在逐層進行前向傳播的過程中,需要頻繁的讀寫每層的輸入特征圖、權重矩陣和輸出特征圖,而讀寫速度取決於計算平台的內存帶寬。如果我們在嘗試加速模型的時候,只關注減少模型計算量,而沒有等比例減小其訪存量,那么依據 Roofline [2] 理論,這將導致模型在實際運行過程中,發生單位內存交換所對應的計算量下降,模型會滑向越來越嚴重的內存受限狀態(即下圖中的紅色區域),從而無法充分的利用計算平台的算力,因此最后觀察到的實際加速比與理論計算量的減小並不成正比。
圖1:Roofline Model(圖中左側紅色區域為帶寬受限,右側綠色區域為算力受限)
- 參數量:即模型所含權重參數的總量,單位是 Byte,表現為模型文件的存儲體積大小。全連接層通常是整個網絡參數量最為密集的部分,例如 VGG16 網絡中超過 80% 的參數都來自於最后三個全連接層。資源嚴重受限的移動端小型設備會對模型文件的大小較為敏感。
- 並行度:如果以 GPU 作為計算平台,那么由於 GPU 本身所具有的高吞吐特性,模型的並行度會成為影響模型實際運行效率的一個重要方面。模型的並行度越高,意味着模型越能夠充分利用 GPU 的算力,執行效率越高。影響並行度的因素有很多,例如模型的計算強度(計算量與訪存量的比值)、卷積算法的具體實現方式等,Batch Size 也會顯著的影響模型的並行度。
2.模型壓縮和加速的主要技術方向
深度學習模型壓縮和加速算法是一個相當龐大且活躍的研究領域,涵蓋軟件和硬件,包括眾多的技術方向,簡要概括如下:
- 輕量網絡設計:指重新設計新型網絡結構,而不局限於僅對現有網絡進行優化加速。輕量網絡設計方向的主要代表論文是 MobileNet v1 / v2 [3, 4] , ShuffleNet v1 / v2 [5, 6] 等,其主要思想是利用 Depthwise Convolution、Pointwise Convolution、Group Convolution 等計算量更小、更分散的卷積操作代替標准卷積。這類模型的計算量通常僅有幾十到幾百 MFLOPs,與傳統的大型網絡例如 VGG / Inception [7] / ResNet [8] 等動輒上 GFLOPs 的計算量相比有明顯優勢,同時在比較簡單的任務上與大模型的准確率差距較小。
- 模型裁剪:相比輕量網絡設計,模型裁剪主要關注對現有模型做減法,由大化小。其主要思想是在保持現有模型的准確率基本不變的前提下,設計某種篩選機制(稀疏化),在某個尺度上篩選掉卷積層中重要性較低的權重,從而達到降低計算資源消耗和提高實時性的效果 [12, 13, 14, 15, 16, 17]。模型裁剪算法的核心就在於權重篩選機制的設計以及篩選粒度的選擇上。這也是本文接下來會着重深入討論的方向。
- 模型蒸餾:相比於模型裁剪的目標是把大模型逐漸變小,同時保持精度損失較小,模型蒸餾的目標是利用大模型(Teacher Network)提供的監督特征幫助計算量較小的模型(Student Network)達到近似於大模型的精度,從而實現模型加速。模型蒸餾的關鍵在於監督特征的設計,例如使用 Soft Target 所提供的類間相似性作為依據 [9],或使用大模型的中間層特征圖 [10] 或 attention map [11] 作為暗示,對小網絡進行訓練。
- 矩陣分解:由於深度學習模型中計算量最密集的部分就是卷積,而卷積可以經過 im2col 之后用矩陣乘法實現,因此我們可以使用多種矩陣低秩近似方法 [18, 19],將兩個大矩陣的乘法操作拆解為多個小矩陣之間的一系列乘法操作,降低整體的計算量,加速模型的執行速度。
- 量化與低精度運算:深度學習模型在運行過程時需要進行大量的浮點乘加運算,一般默認數據位寬是 32bit,但是實際上我們完全可以用更低的位寬(例如 16bit / 8bit / 4bit / 2bit 甚至 1bit)來量化模型的權重和特征圖,完成近似的運算 [21, 22, 23]。這么做一方面可以成倍的降低模型運行時的訪存量,一方面在相應硬件指令集的支持下,可以成倍的提高模型的運算速度。其重點在於如何控制低精度對模型帶來的精度損失。
- 計算圖優化:深度學習模型的層數通常在幾十層到上百層,但實際上層與層之間有很多部分都存在固定的組合關系(例如 Conv-BatchNorm-ReLU 組合),因此我們可以對計算圖中的這些固定組合進行優化,分別在水平和垂直方向上將多層融合為一層執行,從而大量減少層間不必要的內存拷貝以及多次 kernel launch 帶來的開銷,有效提升模型的運行速度。
- 卷積算法優化:卷積運算本身有多種算法實現方式,例如滑動窗、im2col + gemm、FFT、Winograd卷積等方式。這些卷積算法在速度上並沒有絕對的優劣,因為每種算法的效率都很大程度上取決於卷積運算的尺寸。因此,在優化模型時,我們應該對模型的各個卷積層有針對性的選用效率最高的卷積算法,從而充分利用不同卷積算法的優勢。
- 硬件加速:任何模型的運行都需要依托於某種計算平台來完成,因此我們可以直接從計算平台的硬件設計方面進行加速。目前深度學習模型的主流計算平台是 GPU,從 Volta 架構開始,GPU 配備了專門用於快速矩陣乘法運算的硬件計算單元 Tensor Core,可以顯著提升深度學習模型的吞吐量。同時,以低功耗低延遲為主要特性的 FPGA / ASIC 加速芯片也開始在業界嶄露頭角。
除此之外,在更廣義的視角下,使用多任務學習、多傳感器融合、利用多幀之間的相關性等方法通過減少模型數量和數據處理量,也能間接的降低計算資源消耗,提高實時性。總體而言,上面介紹的各種技術路線分別從不同的角度提升模型的運行速度、減少模型的資源消耗,可謂條條大路通羅馬。在實際應用中,這些方法相互之間通常並不矛盾,可以相互彌補,因此我們通常會疊加使用,使整體達到更好的效果。
下面讓我們聚焦在模型裁剪算法這個研究方向上。
3.模型裁剪算法
廣義上的模型裁剪算法,其本質是在各種粒度下尋找更為稀疏的模型表征。對於模型的權重,我們既可以在神經元的粒度上進行裁剪(Fine Grained Pruning),也可以在每個卷積核的通道粒度上進行裁剪(Channel Pruning),甚至可以直接拿掉那些我們認為對於模型表征沒有太多貢獻的卷積核(Filter Pruning)。按照裁剪的粒度,我們可以將裁剪算法划分為非結構化裁剪和結構化裁剪這兩大類方式。
模型的非結構化裁剪是在神經元級別對網絡的權重進行裁剪 [12],算法的具體流程分為三步,第一步是正常訓練網絡,第二步是人為設定一個閾值並對所有權值低於該閾值的神經元進行裁剪,第三步是通過微調網絡來恢復損失的精度。這種裁剪方式的靈活性最高,但是會導致權重矩陣稀疏化,需要額外的稀疏矩陣運算庫或者專門設計的硬件支持 [20] 才能真正達到加速效果,在實際應用中存在一定限制。因此下面我們主要介紹對於實現較為友好的各種結構化裁剪算法。
3.1 Filter 粒度上的裁剪
論文 [13] 提出了一種在 Filter 粒度上簡單高效的模型裁剪算法。該算法的裁剪依據是卷積核的 L1Norm。對於每個卷積層,我們會統計每個卷積核權重矩陣的 L1Norm,並按照 L1Norm 的取值從小到大排序,如圖2所示。然后人為設定一個保留的比例(例如 80%),將最小的 20% 卷積核移除。作者認為,對於同樣的輸入特征圖,一個卷積核相比其他卷積核是否更重要、是否有必要繼續存在於模型中,很大程度上取決於它的整體權值大小,L1Norm越大的卷積核更有可能產生響應值較大的輸出特征圖,進而更有可能對網絡最后的輸出結果產生更大貢獻。反過來,如果一個卷積核的所有權值都非常接近於 0,那么無論給它輸入什么樣的特征圖,其輸出也將都是 0,這說明該卷積核對於整個模型的表征能力貢獻較小,很有可能是冗余的,因此可以直接裁剪去除。算法的具體執行流程與上面介紹的非結構化裁剪類似,逐層執行 Filter Pruning 並搭配進行 Finetune 恢復精度,直到所有層都完成裁剪。
從計算量優化角度來分析,如果我們對第 i 個卷積層進行 Filter Pruning,保留其中 r% 的卷積核,由於卷積層的計算量與輸出通道數呈正比,因此該層的計算量將降為裁剪前的 r%;同時,由於第 (i+1) 個卷積層的輸入通道數降為原來的 r%,因此該層的整體計算量也降為原來的 r%,而且每個卷積核也都得以精簡相應的輸入通道。簡而言之,對第 i 個卷積層按保留比例 r% 進行裁剪,會導致第 i 層和第 (i+1) 層的計算量都降為之前的 r%。
圖2:對 VGG16 模型每個卷積層的所有卷積核按照 L1Norm 進行排序后的取值分布情況。橫軸為歸一化后的卷積核索引,縱軸為歸一化后的卷積核權重的 L1Norm 取值。
3.2 Channel 粒度上的裁剪
論文 [14] 提出了一種在 Channel 粒度上的模型裁剪算法。該算法沒有依據卷積核的取值進行裁剪,而是將注意力聚焦在特征圖的不同通道上,其核心思想在於分析輸入特征圖的各個通道對輸出特征圖的貢獻大小,並使用 LASSO 回歸將這一問題轉變為對輸入通道的選擇問題。作者指出,如果我們可以去掉輸入特征圖的某個或多個通道,並且還能夠確保該卷積層的輸出特征圖基本不變,那么這就意味着那些去掉的輸入通道本身對於輸出特征圖的貢獻很小,可以安全去除而不影響網絡的精度。
圖3:Channel Pruning 示意圖,左側為輸入特征圖,中間為卷積核,右側為輸出特征圖,虛線表示裁剪。
整個裁剪算法主要分為兩步,可以參考圖3所示。
第一步:通道選擇。如上圖所示,假設該卷積層的輸入特征圖具有 4 個通道,3 個卷積核,每個輸入通道定義一個權重系數 beta_i。為了獲取輸入特征圖與輸出特征圖的原始對應關系,我們需要對輸入特征圖按照卷積核的感受野進行多次隨機采樣,獲得矩陣 X,並根據權重矩陣 W 獲得相應的輸出特征點集合 Y,構造優化方程,這里我們對 beta 進行優化,目標是最小化原輸出特征點與經過 beta 權重系數得到的輸出特征點之間的誤差,添加 L1 正則項,通過調整 lambda 可以調整 beta 中置零項的個數,lambda 越大,意味着我們裁剪的輸入通道數越多。
LaTeX
第二步:最小化重建誤差。在完成 beta 權重系數的選擇后(如上圖所示,輸入特征圖中的紅色通道被移除,與此同時,所有卷積核的紅色輸入通道也被移除),我們可以進一步對卷積核的權重矩陣 W' 進行優化,目的是通過調整 W',讓裁剪后的輸入特征圖經過卷積后與輸出特征圖的誤差盡可能小。這步操作能夠有效的恢復裁剪后模型的精度,減小后期微調訓練的工作量。
代碼塊LaTeX
我們評價模型裁剪算法通常會關注兩個指標,一個是裁剪后模型的准確率損失是多少,一個是裁剪前后模型在相同計算平台上的實際運行速度提升是多少,前者反映了算法所使用裁剪依據的合理性,后者反映了算法的實際有效性。
針對第一個指標,表1給出了多種模型加速算法針對同一個模型(VGG16)分別將計算量進行 50% 裁剪(2x)、75% 裁剪(4x)、80% 裁剪(5x)情況下在 ImageNet 數據集上的 Top5 准確率損失數據。可以看到,Filter Pruning 在裁剪 75% / 80% 計算量的情況下,導致模型的精度分別下降 7.9% 和 22%,而同樣裁剪比的 Channel Pruning 對模型的精度損失僅有 1% 和 1.7%,裁剪質量提升十分明顯。
圖4:不同裁剪算法在同樣減少 VGG16 模型 2倍、4倍、5倍計算量的條件下,在 ImageNet 數據集上 Top5 Accuracy 的下降情況,數值越小越好。
針對第二個指標,表2給出了Channel Pruning與其他基於矩陣低秩近似算法在相同裁剪比的實際加速效果對比。可以看到,同樣是裁剪掉 75% 的計算量,經過各種矩陣低秩近似算法變換后的模型由於並行度下降,幾乎沒有加速效果,甚至有些運行速度比之前更慢;相比之下,采用結構化裁剪的 Channel Pruning 算法能夠達到 2.5 倍的加速,同時精度損失只有 1%。
圖5:不同裁剪算法在同樣減少 VGG16 模型 4 倍計算量的條件下,在 Titan X 上實測的准確率損失和每張圖片預測耗時情況,數值越小越好。
在兩種粒度上進行裁剪的異同點
- 如果我們從裁剪的實際操作上來看,Filter Pruning 與 Channel Pruning 是完全等效的。Filter Pruning 的操作是:移除第 i 層的部分卷積核,同時移除第 i+1 層所有卷積核的相應通道。Channel Pruning 的操作是:移除第 i + 1 層所有卷積核的某些通道,同時移除第 i 層的產生這些通道的卷積核。兩種方式僅僅順序不同,但最終表現出來的裁剪操作是相同的。
- 但是如果我們從裁剪的依據上來看,兩者是完全不同的。Filter Pruning 僅關注權重的取值,不需要數據驅動。而 Channel Pruning 會首先逐層灌入數據,獲得輸入和輸出特征圖,然后綜合考慮輸入特征圖經過權重矩陣后對輸出特征圖的貢獻,再將其中部分通道裁剪。后者的數據驅動方式使其可以獲得更好的裁剪質量。
3.3 邊訓練邊學習裁剪
上面介紹的 Channel Pruning 方法主要適用於已經完成訓練的模型,那么我們是否能夠在模型的最初訓練階段就為 Channel Pruning 做好准備呢?答案是肯定的。論文 [15, 16] 提出對模型每個卷積層的各個輸入通道分配權重系數 gamma,然后將這些權重系數作為 L1 正則項加入損失函數,從而實現在模型訓練階段同時對常規模型權重和各通道權重進行優化,如圖6所示。這種裁剪機制的好處在於,當完成模型訓練后,我們不僅得到了可用的模型,還同時得到了模型各層權重在通道尺度上的重要性分布,因此我們就可以通過設置閾值來快速完成所有卷積層的通道裁剪操作,最后 Finetune 恢復精度。
圖6:對卷積層的每個通道設置縮放系數,在訓練過程中對各個通道進行稀疏約束。
在具體實現上,卷積層各個通道重要性系數的學習,並不是通過在每個卷積層之后添加 Scaling layer 來進行的,因為卷積與縮放操作都屬於線性變換,連在一起整體依然是一個線性變換,如果僅對Scaling層進行L1正則,可能會導致卷積層權重出現負補償,並不能有效的對卷積層的各個通道進行稀疏約束。因此論文中使用的方法是,在每個卷積層之后添加 BN 層,然后對 BN 層的 Scaling Factor gamma 施加 L1 正則。我們知道 Batch Norm 會首先對輸入特征圖的每個通道按照當前batch的均值和方差進行歸一化,再通過縮放與平移輸出。為了強制使 BN 的 gamma 取值盡可能稀疏,我們可以在 Loss 中添加 gamma 的 L1 Norm 作為懲罰項,修改 BN 層的反向傳播過程,其他部分正常訓練即可。實際上,很多網絡中(例如 ResNet)已經默認將卷積與BN搭配使用,因此對於這些網絡而言,甚至網絡結構都不需要改變,就可以直接使用這種裁剪算法邊訓練、邊學習通道裁剪系數,十分方便。
3.4 基於強化學習的自動化裁剪
上面介紹的裁剪算法,不論裁剪粒度是通道還是卷積核,不論裁剪依據是來自於權重還是特征圖,都有一個共性,就是需要基於經驗選擇各層的裁剪閾值比例和迭代輪數,整個模型裁剪過程中不可避免的需要大量人工干預。這帶來兩個方面的問題,一個是效率,一個是質量。一方面我們希望模型裁剪的過程能夠像模型訓練一樣全自動高效完成,另一方面,基於人工經驗的裁剪方案往往在實際中很難達到最優解,我們希望能夠讓模型裁剪算法生成更高質量的方案。因此,論文 [17] 提出了一種基於強化學習的自動化模型裁剪算法 AMC。該方法不僅可以自動化執行,而且與使用相同裁剪算法的人工裁剪方案相比,這種方法最后生成的整體模型裁剪方案的精度損失更低。
圖7:Overview of AutoML for Model Compression (AMC) Engine.
該算法采用基於 DDPG 的 Agent,對模型的各個卷積層進行逐層裁剪。對於每一層,Agent 首先會獲得描述該層以及相鄰層計算特性的狀態空間向量(包括卷積的尺寸、計算量等信息),Actor 根據該狀態和自己的策略網絡生成相應的裁剪比(即行為),然后調用裁剪算法完成相應的裁剪操作。當整個網絡都完成一次裁剪后,就可以計算出裁剪前后引入的精度損失,然后通過預定義的獎勵函數將獎勵值返回給 Agent, Critic 會根據狀態和獎勵更新自己的價值網絡,經過多次迭代不斷更新策略網絡和價值網絡,完成 Exploration-Exploitation 的過程,獲得最后的裁剪模型,然后對這個模型進行 Finetune,獲得最終的模型。論文提出了獎勵函數的兩種設計方案,一種是通過限定搜索空間,搜索在指定裁剪范圍內精度損失最小的模型裁剪方案。另一種則是將模型計算量、參數量、預測耗時等指標直接引入到獎勵函數,在保持精度不變的前提下,搜索讓這些指標盡可能小的裁剪方案。針對 VGG16 的裁剪實驗結果顯示,在同樣精簡 80% 計算量的情況下,采用 AMC 裁剪方法不僅可以自動完成,而且最終模型的精度損失比其他人工裁剪方案的精度損失更低,在 ImageNet 上的 Top1 准確率下降僅有 1.4%。
圖8:AMC 與其他裁剪算法在計算量減少量和准確率損失上的對比。
4. 小結
本文回顧了模型加速領域中模型裁剪方向上的幾種比較成功的裁剪算法。通過上面的介紹,我們可以看到,模型裁剪算法的核心思想是在各種粒度下尋找更為稀疏的模型表征,去除模型的冗余部分。需要注意的是,模型中的“冗余部分”始終是一個相對的概念,它與模型本身的結構以及模型所處理的任務難度有密切關系。模型體積越大、層數越深、所面對的任務越簡單,也就意味着模型的相對冗余度越高,可以使用更大比例進行裁剪而不明顯影響精度。但同時我們也需要認識到,從目前的模型裁剪算法來看,在保持精度損失較小的前提下,所有裁剪算法都存在一定的裁剪上限,一旦超過上限,再進一步裁剪都會不可避免的損傷模型的精度,即便 finetune 也無法恢復。因此,如何能夠更為精准的對模型進行裁剪而不損失精度,並且同時保證實際運行的加速比,是模型裁剪方向的未來研究重點,讓我們拭目以待。
5. 參考文獻
1. Karen Simonyan and Andrew Zisserman. "Very deep convolutional networks for large-scale image recognition". The International Conference on Learning Representations (ICLR). 2015.
2. Samuel Williams, Andrew Waterman, and David Patterson. "Roofline: An insightful visual performance model for multicore architectures". Communications of The ACM, Vol.52. 2009.
3. Andrew G. Howard, et al. "MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications". arXiv preprint arXiv:1704.04861. 2017.
4. Mark Sandler, et al. "MobileNetV2: Inverted Residuals and Linear Bottlenecks". arXiv preprint arXiv:1801.04381. 2018.
5. Xiangyu Zhang, et al. "ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices". IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2018.
6. Ningning Ma, et al. "ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design". European Conference on Computer Vision (ECCV). 2018.
7. S. Ioffe and C. Szegedy. "Batch normalization: Accelerating deep network training by reducing internal covariate shift". arXiv preprint arXiv:1502.03167. 2015.
8. Kaiming He, et al. "Deep residual learning for image recognition". IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2016.
9. Geoffrey Hinton, Oriol Vinyals, and Jeff Dean. "Distilling the Knowledge in a Neural Network". Conference and Workshop on Neural Information Processing Systems (NIPS) Workshop. 2014.
10. Adriana Romero, et al. "FitNets: Hints for thin deep nets". The International Conference on Learning Representations (ICLR). 2015.
11. Sergey Zagoruyko, Nikos Komodakis. "Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer". The International Conference on Learning Representations (ICLR). 2017.
12. Han Song, et al. "Learning both weights and connections for efficient neural network". Advances in Neural Information Processing Systems (NIPS). 2015.
13. Hao Li, et al. "Pruning filters for efficient convnets". The International Conference on Learning Representations (ICLR). 2017.
14. He Yihui, Zhang Xiangyu, and Sun Jian. "Channel pruning for accelerating very deep neural networks". Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2017.
15. Zhuang Liu, et al. "Learning efficient convolutional networks through network slimming". IEEE International Conference on Computer Vision (ICCV). 2017.
16. Jianbo Ye, et al. "Rethinking the Smaller-Norm-Less-Informative Assumption in Channel Pruning of Convolution Layers". The International Conference on Learning Representations (ICLR). 2018.
17. He Yihui, et al. "AMC: AutoML for Model Compression and Acceleration on Mobile Devices". European Conference on Computer Vision (ECCV). 2018.
18. Max Jaderberg, Andrea Vedaldi and Andrew Zisserman. "Speeding up convolutional neural networks with low rank expansions". arXiv preprint arXiv:1405.3866. 2014.
19. Zhang Xiangyu, et al. "Accelerating very deep convolutional networks for classification and detection". IEEE transactions on pattern analysis and machine intelligence, 38(10):1943–1955. 2016.
20. Han Song, et al. "EIE: Efficient Inference Engine on Compressed Deep Neural Network". arXiv preprint arXiv:1602.01528. 2016.
21. Matthieu Courbariaux, Yoshua Bengio, and Jean-Pierre David. "BinaryConnect: Training Deep Neural Networks with binary weights during propagations". arXiv preprint arXiv:1511.00363. 2015.
22. Mohammad Rastegari, et al. "XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks". European Conference on Computer Vision (ECCV). 2016.
23. Itay Hubara, et al. "Quantized Neural Networks: Training Neural Networks with Low Precision Weights and Activations". arXiv preprint arXiv:1609.07061. 2016.
24. 模型加速概述與模型裁剪算法技術解析(美團無人配送算法團隊)
25. https://www.zhihu.com/search?type=content&q=%E6%A8%A1%E5%9E%8B%E5%8E%8B%E7%BC%A9
26. 《解析卷積神經網絡》關於第四章卷積神經網絡的壓縮
27. 深度學習模型壓縮與加速綜述