--------點擊屏幕右側或者屏幕底部“+訂閱”,關注我,隨時分享機器智能最新行業動態及技術乾貨----------
1 背景介紹
深度卷積網絡(Deep Neural Networks, DNN)被廣泛用於計算機視覺任務,如目標檢測、分類與分割。DNN 往往被設計得很深,從而能在訓練時能夠對大量參數進行微調從而獲得更準確得推理結果。因此,DNN 具有計算量大和高功耗等特點。如 VGG-16 網絡在對單張圖像進行分類時,需要執行 150 億次運算,同樣,YOLOv3 在處理一張圖片時需要進行 390 億個運算。實現這些計算需要大量的計算資源同時也帶來了巨大的能耗。
那麼,DNN 如何才能部署於低功耗的嵌入式系統和移動設備呢?這些設備往往通過電池或者低電流的 USB 連接供電,並且往往無法使用 GPU。將計算任務部署在雲端是一種不錯的解決方案,但是在一些沒有網絡覆蓋或網絡成本過高的情況,DNN 應用需要直接在低功耗設備上執行,例如,在無人機或者人造衛星上部署 DNN 時。
一些低功耗的計算機視覺技術在只損失很少的精確度的情況下,通過移除一些 DNN 中的冗餘部分可以減少 75% 的運算和 50% 的推理時間。為了將 DNN 部署在更小的嵌入式計算機中,進行更多的優化十分必要。因此,推進低功耗的深度學習技術的發展具有重要價值和意義。這篇文章重點從四個方面介紹了低功耗計算機視覺方法(注意:這裡主要介紹 DNN 推理,而不是訓練)。這四個方面分別是:
- 參數量化及剪枝:通過減小模型參數的比特數量來降低內存和計算消耗;
- 卷積核壓縮及矩陣分解:將 DNN 中較大的層分解為較小的層來減小內存需求以及多餘的矩陣操作;
- 網絡模型搜索(Network Architecture Search,NAS):通過自動最優的 DNN 網絡結構達到預期性能;
- 知識蒸餾:訓練一個小型的 DNN 來模仿大型 DNN 的輸出、特徵和激活函數。
本文著重介紹基於軟件的低功耗計算機視覺方法,下表 1 對這些方法進行了一些總結:
2 參數量化及剪枝
2.1 深度神經網絡的量化
減小內存佔用的一個方法是減少 DNN 網絡參數的數量,已有不少研究顯示這種措施造成的精度損失可忽略不計。圖 1 對比了採用不同程度量化的 DNN 結構的功耗和測試誤差。結果顯示,隨著參數佔用位寬的下降,功耗降低的同時也會增大測試誤差。基於這些發現,LightNN、CompactNet 和 FLightNN 等工作在限制精度的前提下,嘗試為 DNN 不同類型的參數尋找最佳位寬。也有方法嘗試將參數設置為不同的整數類型,例如二值化的神經網絡,其中的每個參數被表示成單比特。此外,這些 DNN 模型也需要更多的層結構以保證高精度。在圖 1 中,對於一個給定的 DNN 結構,1-bit 量化(二值化神經網絡)具有最小的功耗和最大的誤差。量化反向傳播梯度可以在訓練中實現更好的收斂性,提高二元神經網絡的精度。
參數量化也經常和模型壓縮一同使用來減小 DNN 的內存需求。首先將參數量化為離散段,再通過 Huffman 編碼壓縮接近 89% 的模型大小,精度幾乎不受影響。
這種方法的優勢在於,參數約束能夠對訓練過程起到正則化作用,因此當參數的位寬下降時,DNN 網絡的性能保持不變。除此以外,當對 DNN 設計自定義硬件時,量化為使用平移或者異或非門操作來替代高功耗的乘積累加運算創造了條件,從而減小了迴路區域大小和功耗需求。
其劣勢在於,經過量化的 DNN 需要進行多次重複訓練,降低訓練成本能夠使得該技術更易於實踐。此外,DNNs 內的不同層結構對不同特徵較為敏感,對各層採用同樣的位寬則會有較差的性能。可在訓練過程中採用不同的方式表示精度值,從而為 DNN 中的網絡連接選擇不同的參數精度。
2.2 剪枝參數與連接
從 DNNs 中去除掉不重要的參數和網絡連接能夠減少內存訪問的次數。Hessian 加權變形測量法(Hessian-weighted distortion measure)可以評估 DNN 中參數的重要性,從而刪除冗餘的參數以減小網絡規模。但這種基於測量的剪枝方法只適用於全連接層。
為了將剪枝擴展到卷積層,Anwar 等人使用粒子濾波定位可剪枝的參數;Polyak 使用樣本輸入數據,並刪掉稀疏激活的連接;Han 等人使用一個全新的損失函數學習參數和連接;Yan 等人利用算法衡量每個參數對最終輸出的重要程度。通過結合剪枝、量化和編碼的方式,最大可將模型大小縮小 95%。
儘管這些技術能夠識別不重要的連接,但同時也造成了不必要的網絡稀疏性。而稀疏矩陣需要特定的數據結構,也很難映射到現代 GPU 中。為了解決這一問題,也有方法在剪枝的同時進行稀疏性的限制。
優勢在於,如表 2 所示,剪枝可以和量化與編碼結合以實現更好的性能。當三種方法結合時,VGG-16 模型可以減少至原始大小的 2%。剪枝也能夠降低 DNNs 的複雜度從而減少過擬合的情況。
但剪枝也會造成訓練時間的增加,同時使用剪枝和量化時訓練時間會增加 600%。當使用稀疏約束的剪枝時,這個問題會更加嚴重。此外,只有當使用自定義硬件或者用於稀疏矩陣的特定數據結構時,剪枝的優勢才得以顯現。通道層面的剪枝是一個潛在的改進方向,相較於現有的連接層剪枝,它無需特殊數據結構,也不會產生不必要的矩陣稀疏。
3 卷積核壓縮及矩陣分解
3.1 卷積核壓縮
較小卷積核的參數量和計算成本遠小於更大的卷積核。然而,刪除掉所有的大型卷積層意味著影響 DNN 的平移不變性,會降低準確度。有些研究通過識別冗餘的卷積核並替換為較小的卷積核。例如 SqueezeNet 就通過三種策略用 11 的卷積核替換 33 的卷積核來減小參數。
表 3 對比了不同卷積核壓縮技術的性能:相比於 AlexNet,SqueezeNet 的參數減少了 98%,但增加了大量的操作;MobileNet 在瓶頸層(bottleneck layers)使用深度可分離卷積減小計算量、延遲和參數量;在使用深度可分離卷積時,通過保留較小的特徵,只擴展到較大的特徵空間,實現了較高的精度。
瓶頸層的卷積核極大程度地減小了 DNN 的內存和延遲需求。對大多數計算機視覺任務來說,這些技術能夠達到 SOTA 準確度。卷積核壓縮方法與剪枝和量化之間互不影響,三者可以同時使用來進一步減少功耗。
但這種方法的劣勢是,在小型 DNN 中,1*1 的卷積核由於計算成本高會導致較差的性能。此外,由於深度可分離卷積運算強度過低,無法有效利用硬件。可以通過提高管理內存的效率增強深度可分離卷積的運算強度,優化緩存中參數的時間和空間侷限性以減少內存訪問次數。
3.2 矩陣分解
張量分解和矩陣分解以和 - 積的形式加速 DNN 操作,通過將多維張量分解為更小的多個矩陣來消除冗餘計算。一些因式分解方法能夠將 DDNs 提速至四倍,因為它們創建了更密集的參數矩陣,能夠避免非結構化稀疏乘法的局部問題。為了最小化精度損失,每次只實現單層的矩陣分解。首先對一層的參數進行分解,隨後根據重構誤差來分解後續層。這種按層分解的方法難以應用到大型的 DNNs 中,因為隨著 DNN 深度的增加,因式分解的超參數將會呈指數級增長。為了將這種方法在大型 DNNs 中實現,Wen 等人使用了緊湊的核形狀和深層結構來減小分解超參數的數量。
因式分解的方法眾多,大多數都可以應用於 DNN 的加速,但有些方法無法在精度和計算複雜度之間實現最佳的平衡。例如,典型聚並分解(Canonical Polyadic Decompo[1]sition, CPD)和批量歸一化分解(Batch Normalization Decomposition, BMD)在精度上能夠取得很好的表現,但 Tucker-2 分解和奇異值分解的精度就較差。典型聚並分解比批量歸一化分解具有更好的壓縮效果,但是批量歸一化分解取得的準確性要優於典型聚並分解。除此以外,典型聚並分解的優化問題有時並不可解,而批量歸一化分解的解卻始終存在。
這種技術的優勢在於,卷積層和全連接層可以使用相同的矩陣分解方法,通過 CPD 和 BMD 均能夠取得不錯的性能。但由於理論理解的限制,難以說明為什麼有些分解方法的效果能夠達到較好的精度,有些方法卻不能。此外,由於矩陣分解造成及計算開銷常常與減小操作量獲得的性能抵消。同時隨著 DNNs 深度的增加,應用矩陣分解的訓練時間整體會呈指數級增長,因此很難應用於大型網絡。而這是由於在空間內搜索以尋找正確分解超參數的時間過大,可以在訓練過程中學習超時參數,而非在整個空間內進行搜索,從而加速對大型 DNN 的訓練。
4 網絡模型搜索
設計低功耗計算機視覺應用是可以考慮很多不同的 DNN 模型以及優化方法。當有多種可行的網絡模型時,為一個特定任務手動設計最優的 DNN 通常十分困難。網絡模型搜索( Network Architecture Search, NAS)是一項為各類任務自動尋找 DNN 模型方案的技術。其使用遞歸神經網絡(Recurrent Neural Network, RNN)進行控制,通過強化學習創建候選 DNN 的結構。對這些候選模型進行訓練並且在驗證集上測試,驗證準確度作為一個回報函數來優化控制器對下一個候選模型的構建。為了能夠自動給移動設備尋找有效的 DNNs,MNasNet 在控制器中使用多目標回報函數來實現期望的精度和延遲需求。MNasNet 相比 NASNet 加速 2.3 倍,同時參數減少 4.8 倍,操作更是減少 10 倍。此外,MNasNet 也更為精確。然而大多數 NAS 算法具有很高的計算強度,例如 MNasNet 需要 50000GPU 時才能在 ImageNet 數據集上尋找到一個有效的 DNN 模型。
為減小 NAS 相關的計算成本,一些研究者提出通過代理任務和回報來搜索候選模型。FBNet 通過在較小的數據集上進行優化,比 MNasNet 快 420 倍。也有研究表示在代理任務上的優化無法確保在目標任務上是最優結果,從而提出 Proxyless-NAS 方法克服這一問題。該方法使用路徑層面的剪枝減少候選模型的數量,並通過基於梯度的方法解決延遲等目標,最終只需要 300GPU 時便可尋找到有效的模型結構。Single-Path NAS 更是將搜索時間減小至 4 小時。而這些加速的代價是準確度的降低。
NAS 能夠通過空間內搜索所有可能的模型在精度、內存和延遲之間取得平衡,無需人為干涉,這種方法在許多移動設備上都取得了精度和功效上目前最佳的性能。但由於計算量的要求,NAS 算法很難應用到大型數據集中,對各個模型訓練並進行性能評估所花費的時間和計算成本是巨大的。為減小訓練時間,候選 DNNs 可以在不同的子訓練集中進行同步訓練,由各子訓練集得到的梯度可以合併產生一個訓練好的 DNN。然而這種平行訓練通常會造成較低的準確度,在保持高速收斂的同時,使用自適應學習率可以提高精度。
5 知識遷移和蒸餾
大型 DNNs 比小型 DNNs 具有更好的精度,因為更多數量的參數能夠使網絡學習更復雜的函數。一些方法通過用小模型模仿大型預訓練網絡來實現這一目的。首先是知識遷移(Knowledge Tansfer, KT),這種方法將大模型中的“知識”遷移到小模型中,早期的 KT 方法被普遍用於網絡模型壓縮。關鍵思想是經過大模型標註的數據會包含大量對小模型有用的信息。例如在多分類問題中,如果大模型對輸入圖片在一些類中輸出較高的概率,那意味著這些類可能共享一些視覺特徵。通過讓小模型模擬這些概率,可以學習到比訓練集可用信息更多的知識。
而 Hinton 等人提出了另一類叫做知識蒸餾(Knowledge Distillation, KD)的方法,訓練過程比 KT 簡化許多。這種方法以學生 - 教師的模式進行訓練,小模型作為學生,一組特定的 DNNs 作為教師。在這項工作中,研究者們發現學生模擬教師輸出的方式,會使得小模型存在一定的精度損失。為提高模型精度,Li 等人最小化教師和學生之間特徵向量的歐氏距離,FitNet 用類似的方法構建輕量 DNN,讓學生模型的每層都模擬教師的特徵圖。但以上兩種方法對學生模型結構具有嚴格的假設,為解決這一問題並提高泛化能力,可以使用指標間的相關性作為訓練過程的優化問題。
基於 KT 和 KD 的方法能夠有效地減小大型預訓練 DNNs 的計算成本。研究表明,KD 的思想也可以應用於計算機視覺之外的領域,如半監督學習、自適應域等。但是由於這種方法對學生模型的結構和大小具有嚴格的假設,難以泛化到更多的應用中。除此以外,目前的 KD 方法嚴重依賴於 softmax 輸出,而無法在其他輸出層起作用。如果學生能夠學習到教師模型中被激活神經元的信息,將會使學生模型具有更靈活的網絡結構,並且減少對 softmax 輸出層的依賴。
6 討論
6.1 低功耗計算機視覺指南
沒有哪項技術能夠單獨構建有效的 DNN 結構,大多數可應用的技術能夠互相結合以取得更高的功效。對於低功耗的計算機視覺任務,可以得出以下五點結論:
- 量化和減小參數精度能夠很大程度上降低模型大小與運算複雜度,但在多數機器學習庫上難以手動實現量化。英偉達的 TensorRT 庫能夠為這類量化提供良好的接口;
- 剪枝和模型壓縮對優化大型預訓練 DNNs 是有效的選擇;
- 當從頭訓練新的 DNN 時,可以使用壓縮卷積核與矩陣分解來降低模型大小和計算量;
- NAS 可以為單個設備尋找最佳模型,多分支的 DNNs 在核心的啟動以及 GPU 與 CPU 的同步上需要巨大的成本;
- 知識蒸餾可以用於較小或中等大小的數據集,因為這樣對學生和教師的 DNN 模型有較少的假設,從而有更高的準確度。
6.2 評估準則
對於計算機視覺任務使用的低功耗 DNNs 的性能,應該從多方面來評估,而不僅僅是準確度。以下是可以考慮的主要準則:
- 應在大型數據集(如 ImageNet、CIFAR、COCO 等)中評估測試準確度,在訓練集較小的情況下,進行多層面的交叉驗證十分必要;
- 通常內存的尋求與模型參數數量相關,應該運用量化和剪枝時多個準則的對比;
- 通過評估操作數量來確定計算成本,當使用低精度 DNNs 是,每次操作的成本都會降低。在這種情況下,衡量能量損耗也很重要;
- 參數和操作數量並不總是與模型的能量損耗成正比,因此應當將 DNNs 部署到連接功率計的設備上,以確定模型的能量損耗。