早期的研究顯示,網路修剪 (pruning) 與量化 (quantization) 能有效降低網路複雜性並解決過度擬合 (over-fitting) 的問題。在發現修剪可以為類神經網路帶來正則化 (regularization) 並因此改善泛化能力 (generalization) 後,其被廣泛研究用於壓縮深度神經網路 (DNNs)。這些技術可以進一步分為三個子類別:量化與二值化 (quantization and binarization)、網路修剪 (network pruning) 和結構矩陣設計 (structural matrix design)。
網路量化透過減少每個權重所需的位元數來壓縮原始網路。Gong 等人 和 Wu 等人 將 k-means 純量量化應用於參數值。Vanhoucke 等人 顯示 8 位元參數量化可以顯著提高速度且僅帶來微小的準確度損失。 的工作在基於隨機捨入 (stochastic rounding) 的卷積神經網路 (CNN) 訓練中使用了 16 位元定點表示,這顯著減少了記憶體使用量和浮點運算,同時分類準確度損失很小。
中提出的方法使用權重共享 (weight sharing) 對連接權重進行量化,然後對量化的權重和碼本 (codebook) 應用霍夫曼編碼 (Huffman coding) 以進一步降低碼率。如圖 1 所示,它首先透過正常的網路訓練來學習連接性,然後修剪權重較小的連接。最後,重新訓練網路以學習剩餘稀疏連接的最終權重。這項工作在所有基於量化的方法中達到了最先進的性能。在 中,顯示海森權重 (Hessian weight) 可用於衡量網路參數的重要性,並提出通過最小化平均海森加權量化誤差來對參數進行聚類。量化是模型壓縮和加速的一種非常有效的方法。
在每權重 1 位元表示的極端情況下,即二值權重神經網路 (binary weight neural networks)。其主要思想是在模型訓練期間直接學習二值權重或激活值。有幾項工作直接訓練具有二值權重的 CNN,例如 BinaryConnect、BinaryNet 和 XNOR。 中的一項系統性研究顯示,通過反向傳播 (back propagation) 訓練的網路對特定的權重失真具有彈性,包括二值權重。
討論:二值網路的準確度在處理大型 CNN (例如 GoogleNet) 時顯著降低。這種二值網路的另一個缺點是現有的二值化方案基於簡單的矩陣近似,並且忽略了二值化對準確度損失的影響。為了解決這個問題, 的工作提出了一種帶有對角線海森近似的近端牛頓法 (proximal Newton algorithm with diagonal Hessian approximation),直接最小化關於二值權重的損失。 的工作通過隨機二值化權重並將隱藏狀態計算中的乘法轉換為顯著變化,減少了訓練階段的浮點乘法時間。Zhao 等人 提出了半波高斯量化 (half-wave Gaussian Quantization) 來學習低精度網路,並取得了有希望的結果。
早期的一種修剪方法是偏權重衰減 (Biased Weight Decay)。最佳腦損傷 (Optimal Brain Damage) 和最佳腦外科醫生 (Optimal Brain Surgeon) 方法根據損失函數的海森矩陣減少連接數量。他們的工作表明,這種修剪比基於幅度的修剪 (例如權重衰減法) 提供了更高的準確度。
這個方向的後續趨勢是在預訓練的 DNN 模型中修剪冗餘、非資訊性的權重。例如,Srinivas 和 Babu 探索了神經元之間的冗餘,並提出了一種無資料的修剪方法來移除冗餘神經元。Han 等人 提出減少整個網路的參數總數和運算。Chen 等人 提出了一種 HashedNets 模型,該模型使用低成本的雜湊函數將權重分組到雜湊桶中以實現參數共享。 中的深度壓縮方法移除冗餘連接並量化權重,然後使用霍夫曼編碼對量化後的權重進行編碼。在 中,提出了一種基於軟權重共享 (soft weight-sharing) 的簡單正則化方法,該方法在一個簡單的 (重新) 訓練過程中包含了量化和修剪。上述修剪方案通常會在 DNN 中產生連接修剪。
人們對訓練具有稀疏性約束的緊湊型 DNN 也越來越感興趣。這些稀疏性約束通常在最佳化問題中作為 l0 或 l1-norm 正則項引入。 的工作對卷積濾波器施加了群體稀疏性約束 (group sparsity constraint),以實現結構化腦損傷 (structured brain Damage),即以群體方式修剪卷積核心中的條目。在 中,在訓練階段引入了神經元的群體稀疏正則項,以學習具有減少濾波器的緊湊型 CNN。Wen 等人 在每一層添加了一個結構化稀疏正則項,以減少無關緊要的濾波器、通道甚至層。在濾波器級別的修剪中,上述所有工作都使用了 l1 或 l2-norm 正則項。 的工作使用 l1-norm 來選擇和修剪不重要的濾波器。
討論:使用網路修剪存在一些問題。首先,使用 l1 或 l2 正則化進行修剪比一般方法需要更多的迭代才能收斂。此外,所有修剪準則都需要手動設置層的敏感度,這需要對參數進行微調,對於某些應用程式來說可能很麻煩。最後,網路修剪通常能夠減小模型大小,但不能提高效率 (訓練或推斷時間)。
在包含全連接層的架構中,探索全連接層中參數的冗餘至關重要,這通常是記憶體消耗的瓶頸。這些網路層使用非線性轉換 f(x,M) = σ(Mx),其中 σ(·) 是一個逐元素的非線性運算子,x 是輸入向量,M 是 m×n 的參數矩陣。當 M 是一個大型的通用密集矩陣時,儲存 mn 個參數和計算矩陣-向量乘積的時間成本為 O(mn)。因此,一種直觀的修剪參數方法是將 x 設定為參數化的結構矩陣。一個可以用比 mn 少得多的參數描述的 m × n 矩陣稱為結構矩陣。通常,這種結構不僅應減少記憶體成本,還應通過快速矩陣-向量乘法和梯度計算來顯著加速推斷和訓練階段。
循著這個方向, 的工作提出了一種基於循環投影 (circulant projections) 的簡單有效方法,同時保持具有競爭力的錯誤率。給定一個向量 r = (r0, r1, · · · , rd−1),一個循環矩陣 R ∈ Rd×d 定義為公式 (1) 中的形式。因此,記憶體成本變為 O(d) 而不是 O(d^2)。這種循環結構還可以使用快速傅立葉轉換 (FFT) 來加速計算。給定一個 d 維向量 r,上述公式 (1) 中的 1 層循環神經網路的時間複雜度為 O(d log d)。
在 中,引入了一種新穎的自適應 Fastfood 轉換 (Adaptive Fastfood transform) 來重新參數化全連接層的矩陣-向量乘法。自適應 Fastfood 轉換矩陣 R ∈ Rn×d 被定義為公式 (2) 的形式。其中 S、G 和 B 是隨機對角矩陣。Π ∈ {0, 1}d×d 是一個隨機置換矩陣,H 表示 Walsh-Hadamard 矩陣。使用自適應 Fastfood 轉換重新參數化具有 d 個輸入和 n 個輸出的全連接層,將儲存和計算成本從 O(nd) 分別降低到 O(n) 和 O(n log d)。
的工作顯示了結構矩陣理論中新概念「簡約性 (parsimony)」的有效性。他們提出的方法可以擴展到各種其他結構矩陣類別,包括與多維卷積相關的區塊和多級 Toeplitz 型矩陣。循著這個想法, 提出了一種用於 CNN 的通用結構化高效線性層。
缺點:這類方法的一個問題是結構性約束通常會損害性能,因為約束可能會為模型帶來偏差。另一方面,如何找到一個合適的結構矩陣很難。沒有理論方法可以推導出來。