Incremental network quantization: towards lossless CNNs with low-precision weights
1、本文概述
本文提出了一種新的用於壓縮神經網路的量化方法—— INQ (Incremental network quantization)。該方法可以將全精度 CNN 轉化為低精度網路,在不損失甚至提高精度的情況下,使得權重均為 0 或 2 的冪次(在 FPGA 等嵌入式裝置上可以進行移位操作)。
文章中主要涉及三種操作:權重分組,分組量化以及重訓練。首先利用一定準則(後面會提到,隨機的或者基於剪枝的)將每一層的權重分成互補的兩部分(圖 1 (b)),其中一部分直接量化為低精度(圖 1 (b) 綠色),另一部分用於重訓練(圖 1 (b) 藍色)以彌補量化帶來的精度損失。如此操作一次後,將未量化的部分分組,依次重複三種操作,一直迭代,直到所有的權重均為 0 或 2 的冪次為止。圖 1 中的數字表示量化部分的比例。
另外,在本文中還有一個需要注意的地方是,文中提到的位寬(bit-width),其中一位為 0 值(zero value)。因此,這裡的 k-bit 實際為 (k-1)-bit。
2、INQ
2.1 量化規則
設全精度 CNN 的權重為
,
其中 W_l 為第 l 層的權重,L 為層數。量化的目標是將轉換為,並且中每個元素都在集合中,其中 n_1 和 n_2 是兩個整數,並且 n_2 <= n_1。絕對值小於 的權重均被量化為 0。設位寬為 b,則 n_2 可以由 n_1 和 b 來確定。具體的公式如下:
(有個小問題:這裡的 4/3 是否可以換成其他比 1 大一點的數字?)
量化規則為
其中 alpha 和 beta 是 P_l 中相鄰的兩個元素。
文中提到,前面的 4/3 與這裡的 3/2 是對應的,這樣可以保證 s 可以對應到 。那麼,將 4/3 換成其他滿足條件的數字,應該都可以。
2.2 增量量化策略
前面提到,需要先將權重分成互補的兩部分,用公式表達為
其中,A_l^(1) 為需要量化的部分,A_l^(2) 為需要重訓練的部分。
這裡分組的依據參考文獻“Dynamic network surgery for efficient dnns”,從中挑選了兩種方法:隨機分組和剪枝分組(pruning-inspired partition)。隨機分組,顧名思義,就是隨機的進行劃分。剪枝分組,通過比較權重的絕對值,利用給定的分割率(splitting ratio)進行劃分。實驗發現,剪枝分組效果好於隨機分組,故本文中均採用剪枝分組。
另外,構造一個二值矩陣 T_l,代表,代表。
2.3 INQ 演算法
以第 l 層為例,優化函式為
其中,L(W_l)為網路損失(network loss),R 為正則項,lambda 為一個正係數。但是這個優化問題不太好求,因此轉化為下面的優化問題,然後利用 SGD (隨機梯度下降)進行優化。
整個 INQ 演算法如下:
下面的圖 2 展示了演算法的過程,其中上面三個圖展示了第一次迭代的情景,黑色為待量化部分,綠色為量化後的部分,淡藍色為重訓練後的部分。下面三個圖展示了後面三步迭代的結果。