當前位置:
首頁 > 新聞 > ICLR 2019論文解讀:量化神經網路

ICLR 2019論文解讀:量化神經網路

今年五月舉辦 ICLR 2019 會議共接收論文 502 篇,本文將解讀其中兩篇有關量化神經網路的研究。

  • UNDERSTANDING STRAIGHT-THROUGH ESTIMATOR IN TRAINING ACTIVATION QUANTIZED NEURAL NETS
  • https://openreview.net/pdf?id=Skh4jRcKQ
  • ANALYSIS OF QUANTIZED MODELS
  • https://openreview.net/pdf?id=ryM_IoAqYX

深度神經網路(DNN)已經極大推升了機器學習(ML)/人工智慧(AI)在許多不同任務中的性能,並由此帶來了許多我們日常生活中所見的成熟應用。經典案例包括圖像目標識別(Krizhevsky et al., 2012; Szegedy et al., 2014)、語音識別(Hinton et al., 2012; Sainath et al., 2013)、統計機器翻譯(Devlin et al., 2014; Sutskever et al., 2014; Bahdanau et al., 2015)和掌握圍棋(Silver et al., 2016)。

神經網路包含兩部分:訓練和推理。由於計算神經元輸入的加權和以及執行神經網路所需的運算需要大量乘法-累加運算(MAC),所以在傳統的(通用型)數字硬體上訓練神經網路以及使用神經網路執行推理的效率很低。

DNN 基本上都是在一個或多個圖形處理單元(GPU)上訓練的。本質上而言,GPU 速度很快且支持高度並行,但功耗卻很高。此外,一旦模型訓練完成,仍然很難在手持設備等低功耗設備上運行訓練後的網路。因此,人們投入了大量研究精力,想要在通用和專用計算硬體上加速 DNN 的運行。

理解訓練激活量化網路中的直通估計器(Understanding Straight-Through Estimator in Training Activation Quantized Neural Nets)

引言

使用直通估計器(STE)的理由可以通過一個簡單實例進行說明。設有一個簡單的閾值函數——ReLU 函數,即 f(x) = max(0,x)。此外,設網路一開始就有某套初始權重。這些 ReLU 的輸入(乘上了權重的信號)可以是負數,這會導致 f(x) 的輸出為 0。

對於這些權重,f(x) 的導數將會在反向傳播過程中為 0,這意味著該網路無法從這些導數學習到任何東西,權重也無法得到更新。STE 的概念也由此而來。STE 會將輸入的梯度設置為一個等於其輸出梯度的閾值函數,而不管該閾值函數本身的實際導數如何。有關 STE 的最早研究(Bengio et al. 2013)請見:

  • https://arxiv.org/pdf/1308.3432.pdf

這篇論文使用了「粗粒梯度(coarse gradient)」這個術語來指代通過「經 STE 修改的

鏈式法則

」而得到的損失函數在權重變數方面的梯度。通過選擇這種非一般的梯度,問題就變成了:STE 梯度並非該損失函數的實際梯度(實際上,STE 梯度不是任何函數的梯度),為什麼在其負方向搜索有助於最小化訓練損失?此外,該如何選擇一個「好的」STE?

這篇論文討論了通過二元激活和高斯數據學習二層線性層網路的三種代表性 STE。作者還證明選擇適當的 STE 能得到表現優良的訓練演算法。

我選擇解讀這篇論文的原因是想要詳細解讀使用 STE 的權重更新的梯度。直接複製這些公式進行使用當然完全可以,但是我希望能圍繞數學進行解讀,並能提供一些這種數學過程為何有效的見解。

在繼續解讀之前,我們先看看這篇論文所使用的符號表示方式:

  • || ? || 表示一個向量的歐幾里德範數或一個矩陣的譜範數
  • 0_n ∈ R^n 表示全為零的向量
  • 1_n ∈ R^n 表示全為一的向量
  • I_n 是 n 階單位矩陣
  • <w, z> = (w^T)z 表示 w, z ∈ R^n 的內積
  • w⊙z 表示哈達瑪積(Hadamard product,也被稱為 entry-wise product)

使用二元激活學習二層線性層 CNN

模型設置和問題構建

考慮以下模型:

ICLR 2019論文解讀:量化神經網路

其中 Z ∈ R^(mxn) 是輸入,w ∈ R^n 和 v ∈ R^n 分別是第一和二層線性層的權重。(Z_i)^T 表示 Z 的第 i 行,σ( ? ) 是在向量 Zw 上逐分量工作的激活函數。第一層用作卷積層,第二線性層用作分類器。標籤根據 y*(Z) = (v*)^T σ(Zw*) 生成,其中 v* 和 w* 是一些最優參數。式 (1) 描述了損失函數,其就是一個簡單的平方損失:

ICLR 2019論文解讀:量化神經網路

σ( ? ) 被取為一個二元函數,即 σ( x ) = 1_{x>0}。Z ∈ R^(mxn) 的項是獨立同分布地(i.i.d.)採樣自一個高斯分布 N(0,1)。不失泛化性能,我們將假設 || w || = 1 並將優化問題構建成 (2) 式形式:

ICLR 2019論文解讀:量化神經網路

反向傳播和粗粒度梯度下降

(2) 式是對問題的數學描述,即最小化 (1) 式中定義的損失函數與 Z 相關的期望。注意,由於對 Z 的高斯假設,所以取期望是可能的。獲取的梯度信息由下式給出:

ICLR 2019論文解讀:量化神經網路

其中期望中的表達式由 (3) 和 (4) 式描述。

ICLR 2019論文解讀:量化神經網路

注意 (4) 式中的 σ" 為零,會導致反向傳播過程中不會傳播信息。也就是說,如果使用標準的梯度下降更新規則,網路將什麼也學習不到。STE 的思想很簡單,就是用一個相關的非平凡函數 μ" 替代 (4) 式中的零分量 σ",其中 μ" 是某個次(可微分)函數 μ 的導數。也就是說,使用 STE μ" 的反向傳播會為 (?l / ?w)(v, w; Z) 提供一個非平凡的表達。這就是作者稱之為粗粒梯度(coarse gradient)的東西,如 (5) 式所示。

ICLR 2019論文解讀:量化神經網路

然後,將這個粗粒梯度插入到標準梯度下降更新規則中,就得到了演算法 1 所示的梯度下降演算法。

ICLR 2019論文解讀:量化神經網路

注意這只是用 g_μ(v^t, w^t; Z) 替換了時間 t 的真實梯度 (?l / ?w)(v, w; Z),其中的 t 是指時間步驟(或迭代)。

分析——計算梯度

讓我們更進一步深入群損失函數 f(v, w) 及其梯度 ? f(v, w)。首先,將兩個向量 w 和 w* 之間的角度定義為:對於任意 w ≠ 0_n,有

ICLR 2019論文解讀:量化神經網路

這在後面會用到,因為這被用於描述兩個帶有高斯項的向量的一個積的期望。arccos(?) 中的參數是 w 和 w* 的內積除以 ||w|| ||w*||,這是 w 和 w* 之間的餘弦角。這兩個向量越近,這個角就越小。

現在來看式 (1) 和 (2) 中描述的 f(v, w),我們可以取式 (1) 的轉置,因為一個標量的轉置還是一樣,將所得到的表達式放入 (2) 中,然後擴展得到(不正確的)表達式如下(下一段會說明這個錯誤):

ICLR 2019論文解讀:量化神經網路

現在的目標是使用分析表達式替換表達式 E_Z[ σ(Zw) σ(Zw)^T ]、E_Z[ σ(Zw) σ(Zw*)^T ] 和 E_Z[ σ(Zw*) σ(Zw*)^T ]。讀者應該把這個牢記在心,不然下一節會很吃力。

因此,(v*)^TZw* 就等於 y*(Z),即為標籤。如果我們查看這個 (m x m) 矩陣 E_Z[ σ(Zw) σ(Zw)^T ]。當 i≠j 時,EZ[ σ(Zw) σ(Zw)^T ] 的元素為 E[ σ(**Zi^Tw) σ(Zj^Tw) ],並且可以寫成 E[ σ(Zi^Tw) ] E[ σ(Zj^Tw) ]。而當 i=j 時,元素為 E[ σ(Zi^Tw) ] E[ σ(Zi^Tw) ] = ( E[ σ(Zi^Tw) ] )^2。其中 Z_i**^T 是指 Z 的第 i 行。

現在我們可以按下式求得對角元素:

ICLR 2019論文解讀:量化神經網路

為什麼會得到第二個等式?我會嘗試給出一些見解。首先,注意 σ(Z_i^Tw) 就是 1_{Z_i^Tw},這是一個指示函數。有一個參數 x 的指示函數 1_{x} 在與自身相乘時會保持不變,因此會得到第二個等式。

最後一個等式源自一個

高斯分布

的統計情況。將 w 固定為 R^n 中的任意向量,則其元素是分布為 N(0,1) 的高斯隨機變數的向量 Z_i 將與 w 形成一個銳角的概率是 0.5。

因此,每個元素都有 0.5 的概率為 1,得到總的期望為 (0.5)x1 + (0.5)x0 = 1/2。我們可以考慮這個例子的極限情況,即僅有 1 個維度的情況。令 w 為任意正數,z 為一個高斯隨機變數 ~N(0,1),則 P [ 1_{w x z > 0} ] = P[ 1_{w x z < 0} ] = 0.5。

對於 i≠j 的情況,E[ σ(Z_i^Tw) σ(Z_j^Tw) ] = E[ σ(Z_i^Tw) ] E[ σ(Z_j^Tw) ],而且因為 Z_i 和 Z_j 是

獨立同分布

,所以這兩個期望是獨立的且每一個都估計為 1/2。使用這一觀察,我們可得以下結果:

ICLR 2019論文解讀:量化神經網路

因此,我們可以綜合以上結果得到表達式:

ICLR 2019論文解讀:量化神經網路

也就是說,E_Z[ σ(Zw) σ(Zw)^T ] 沿對角的元素等於 1/2,其它地方為 1/4。E_Z[ σ(Zw*) σ(Zw*)^T ] 也有一樣的參數。

最後,對於元素為 E_Z[ σ(Zw) σ(Zw*)^T ]_{i, j} 的矩陣,如果 i≠j,則由於獨立同分布的假設,該期望可以被分解和獨立地評估。這會得到 E_Z[ σ(Zw) σ(Zw*)^T ]_{i, j} = E[ σ(Z_i^Tw) ] E[ σ(Z_j^Tw*) ] = 1/4.

對於 i=j 的情況,我們有如下結果:

ICLR 2019論文解讀:量化神經網路

其中 θ(w, w*) 是 w 和 w* 之間的夾角。

主要結果與分析

這篇論文主要關注的是演算法 1 中總結的粗粒梯度下降的行為。其研究了 STE 被設置為基本 ReLU、截斷式 ReLU(clipped ReLU)和恆等函數的導數的情況。這篇論文證明通過使用普通或截斷式 ReLU 的導數,演算法 1 會收斂到一個臨界點;而使用恆等函數則不會。

作者在論文中給出一個說明,其表示粗粒梯度下降的收斂保證基於訓練樣本無限的假設。在僅有少量數據時,在粗粒尺度上,實驗損失大致會沿負粗粒梯度方向下降。隨著樣本規模增大,實驗損失會變得單調和平滑。圖 1 給出這一思路的圖示。

ICLR 2019論文解讀:量化神經網路

注意隨著樣本規模的增大,單個步驟的損失是如何獲得變得單調和越來越平滑的。這能解釋為什麼(合適的)STE 在具有大量數據時(就像深度學習一樣)的表現會那麼好。

將普通 ReLU 的導數視為 STE

(5) 中使用了 ReLU 函數 μ(x) = max(x, 0) 的導數作為 STE。不難看出 μ"(x) = σ(x),全梯度 ? f(v, w) 的表達式如下所示。

ICLR 2019論文解讀:量化神經網路

與 w 相關的粗粒梯度遵循下式:

ICLR 2019論文解讀:量化神經網路

要讓粗粒梯度成為真實梯度的一個可接受的估計量,我們需要兩者之間的內積為非負。這也可被解釋為兩個梯度之間的非負相關性。

相關性、內積、夾角

我想稍微擴展,介紹一下夾角、內積和相關性之間的關係,因為這些術語在論文中出現的次數很多。相關性和內積之間的聯繫可通過以下示例理解。

首先有一個帶有實值隨機變數的向量空間。設 X 和 Y 為隨機變數,它們可能相互獨立,也可能不獨立。X 和 Y 之間的協方差可這樣計算:Cov(X,Y) = E[ (X- μ_X) (Y-μ_Y)],其中 u_X 和 μ_Y 分別為 X 和 Y 的均值。因為這個協方差是雙線性的,所以我們可以在隨機變數的向量空間上定義內積,使其成為一個內積空間。為了完整說明,下面給出了協方差的公式。

ICLR 2019論文解讀:量化神經網路

有了內積之後,我們可以定義向量的範數,即 || X || = √X?X,這等於 Cov(X,X) 的平方根、E[ (X-mX)(X-μX) ] 的平方根、Var(X) 的平方根以及最後的 X 的標準導數,即 _X。更進一步,兩個隨機變數的相關性定義為:

ICLR 2019論文解讀:量化神經網路

這本質上就是在處理點積(內積)時,兩個向量之間的夾角的餘弦的定義,即:

ICLR 2019論文解讀:量化神經網路

總結來說,協方差是內積,標準差是範數,相關性是夾角的餘弦。了解了這一點,我們再回到論文。

內積可以用一種閉式(closed form)表示:

ICLR 2019論文解讀:量化神經網路

不難看出這個內積是非負的,因為 θ(w, w*) 的範圍是 [0, π],所以 sin( θ(w, w*) ) 總是非負的。範數 || w || 也是非負的,(v^Tv*)^2 也是。前面提到,非負內積能保證粗粒梯度大致與真實梯度在同一方向上。因此,ReLU 函數的導數可以用作 STE,以及 f(v, w) 的梯度下降方向。

要讓該演算法收斂,EZ[(?l / ?w)(v, w; Z) ] 和 EZ[ g_{relu}(v, w; Z) ](粗粒梯度)必須同時消失。這隻會發生在 (2) 式(即構建的問題)的鞍點和最小量處。(2) 式的最小量應該有 v = v* 且 θ(w, w*)=0。

將截斷式 ReLU 的導數視為 STE

現在我們將截斷式 ReLU 看作潛在的 STE,即 μ(x) = min(max(x, 0), 1)。圖 2 展示了截斷式 ReLU 的一個四級量化的版本。

ICLR 2019論文解讀:量化神經網路

圖 2:一個四級(2 位)量化的截斷式 ReLU σ_α(x) 和對應的非量化版本。α 是量化級別。

實驗和討論

表現

這篇論文的作者提供了對 STE 的詳盡分析,並且表明普通和截斷式 ReLU 都能學習兩層的線性 CNN。他們繼續將這些 STE 用於更深度的網路。注意它們在這些更深度網路上的實驗表現不同於在兩層網路上的表現。他們在 MNIST(LeCun et al., 1998)和 CIFAR-10(Krizhevsky, 2009)基準上,針對 2 位和 4 位量化激活,執行了利用恆等函數、ReLU 和截斷式 ReLU 作為 STE 的實驗。

在使用量化模型進行操作時,研究者們已經提出了很多用於獲取優良性能的策略。之前的一篇解讀給出了近期 SYSML 2019 會議上的一些研究成果:《SysML 2019 論文解讀:推理優化》。

表 1 總結了實驗結果。表 1 記錄了這三種 STE 在不同實驗和網路上的訓練損失和驗證準確度。

ICLR 2019論文解讀:量化神經網路

表 1:使用量化激活和浮點權重,三種不同的 STE 在 MNIST 和 CIFAR-10 數據集上的訓練損失/驗證準確度(%)。測試了 2 和 4 位的位寬。

可以看到截斷式 ReLU 的整體表現最佳,尤其是在 CIFAR-10 數據集上。

有人會認為,直觀上講,也許量化的普通 ReLU 應該會有最佳的表現,因為其最接近非量化的版本。但是,表 1 中的實驗數據表明截斷式版本的 ReLU 的表現最佳。我並不能真正證明為何為這樣,但也許可以提供一個直觀思路。

總的來說,需要挑選量化 ReLU 的參數 α 以維持全精度水平的準確度,即最高層面需要考慮(截斷式)ReLU 的最大值。但是,這可能並不總是最優設置。考慮一個 95% 的激活都落在 [0, 10] 區間的案例,並假設剩餘的可能值都固定在 100。「犧牲」這些固定在 100 的激活並在 [0,10] 區間內取 4 級可能是合理的。這能讓 95% 的激活都有更好的表徵準確度,僅損失激活 5% 的準確度。

話雖如此,當在相對淺的 LeNet-5 網路上時,普通 ReLU 的表現與截斷式 ReLU 相當,這在一定程度上與這一理論發現一致,即:ReLU 是一種很好的用於學習二層線性層(淺)CNN 的 STE。

如果使用恆等函數作為 STE 的不穩定性

作者在論文前幾節表明恆等 STE 並不能保證收斂。此外,他們還確實觀察到了一個現象,即當在有 4 位激活的 ResNet-20 上使用恆等 STE 時,會被推離優良的極小值。

作者執行了以下實驗並得出結論:恆等 STE 可能遠離一個「優良」極小值。作者使用相對好的 v 和 w 對訓練進行了初始化,並在後續 epoch 中使用了恆等 STE 繼續訓練。他們觀察了隨 epoch 增多而變化的訓練損失和驗證誤差。

在 2 位激活的 ResNet-20 上使用 ReLU STE 時也觀察到了類似的現象。圖 3 展示了一個案例:當使用粗粒梯度執行梯度下降時,帶有 2 位激活的截斷式 ReLU 實際上讓演算法的結果更差了。

ICLR 2019論文解讀:量化神經網路

圖 3:在帶有 2 位激活的 ResNet-20 上,截斷式 ReLU STE 所得到的驗證準確度和訓練損失。激活準確度和訓練損失在粗粒梯度方向上都隨 epoch 數量而增長。

因此,儘管之前的分析表明使用截斷式 ReLU 作為 STE 應該對淺度網路能收斂,但在網路變深時卻並不總是有效。讀者應當記住這一點。

總結

再次說明,作者試圖在這篇論文中回答以下問題。為什麼在 STE 的負方向執行搜索有助於最小化訓練損失,以及怎樣才算是一個「好」STE?

在我們回答這個問題之前,STE 值得嘗試的原因是機器學習中的梯度消失問題。當梯度為 0 時,網路就會在反向傳播過程中「學習」不到任何東西,因為所有的權重都會保持一樣。

因此,作者討論了使用二元激活學習二層線性 CNN 的三種不同 STE,即 ReLU 函數、截斷式 ReLU 函數和恆等函數的導數。作者推導了這些 STE 對應的粗粒梯度,並表明基於普通和截斷式 ReLU 的負期望的粗粒梯度是最小化群損失的下降方向,這是因為粗粒梯度和真實梯度之間的內積總是非負的,即它們在同一方向。另一方面,恆等 STE 卻並非如此,因為其得到的粗粒梯度並不能保證非負內積的條件。

但是,儘管這些 STE 表明了普通和截斷式

ReLU

的收斂性保證,它們在訓練更深更大的神經網路時仍可能遭遇穩定性問題。因此,未來的一個研究方向是進一步理解用於梯度難解的大規模優化問題的粗粒梯度下降。

量化模型分析(ANALYSIS OF QUANTIZED MODELS)

引言

近年來,為了加快推理速度、降低內存成本或降低功耗,研究者們已經提出了很多量化模型。這在攜帶型或手持式設備方面尤顯重要。但是,這些模型的訓練仍然而且往往是基於浮點精度完成的。因此,訓練過程仍然非常耗時。

人們已經提出許多不同的用於加速訓練的方法,比如用於在訓練過程中近似全精度權重的權重量化(Courbariaux et al., 2015, Lin et al., 2016)。此外,為了在近似/量化權重時取得更好的表現,人們也對量化的方法進行過研究。

近期另一個引人關注的方法是利用分散式訓練加速量化網路(Dean et al., 2012)。分散式學習面臨的一些關鍵難題是梯度和模型參數同步過程具有高昂的通信成本(Li et al., 2014)。此外,(Ferdinand et al., 2019)已經從編碼理論角度研究了同步丟失梯度和模型參數的問題。我認為在將糾錯(error correction)用於機器學習的分散式計算方面,這是一種非常有趣的方法。

在這篇論文中,作者考量了分散式設置中權重和梯度都量化的情況。之前的 DoReFa-Net(Zhou et al., 2016))和 QNN(Hubara et al., 2017)等研究已經探索過權重和梯度的量化。但是,它們都不是在分散式設置中完成的。

之前的工作

之前在量化神經網路方面的研究包括:使用全精度梯度和通過隨機權重量化的量化權重的模型(Li et al., 2017; De Sa et al., 2018),僅使用權重的符號的 1 位權重量化(Li et al., 2017)。

此外,也有人研究了帶有全精度權重和量化梯度的模型(Alistarh et al., 2017; Wen et al., 2017; Bernstein et al., 2018)。最後,也有研究者研究過權重和梯度都量化的模型(Zhang et al., 2017),但僅限於在線性模型上的隨機權重量化和平方損失。

前提概念

在線學習(online learning)

在線學習是指使用一組觀察序列作為輸入時模型持續適應和學習自己的參數。這些輸入在到達時即被處理,而不會劃分批次。因此,在線學習是統計學習的一種自然延展,只是在這種序列性方面不同。

該演算法有一個損失 f_t(w_t),在每次迭代,經過 T 輪後,通過一個後悔函數(regret function)R(T) = Σ_{t=1 to T} ft(**wt) - f_t(w*),其中 w*** = argminw Σ{t=1 to T} f_t(w) 評估其表現,即評估之後得到的模型參數的最佳集合。

「後悔(regret)」這一術語在在線機器學習中很常用。直觀上講,最小化(或者說優化)「後悔值」就是降低所採用的動作的數量,事後來看,很顯然總是存在一個更好的選擇。通過最小化後悔值,我們就是要最小化演算法的次優動作。

權重量化(weight quantization)

這篇論文重點關注的是所謂的損失感知型權重量化(loss-aware weight quantization)。不同於現有的用每層、輸出或激活(全精度模型)的直接近似來量化權重的方法,損失感知型權重量化會利用來自損失擾動(loss perturbation)、權重量化的信息,並會構建一個漸進的量化策略來執行量化。

通過以一種漸進的方式來顯式地規範化損失擾動和權重近似誤差,損失感知型量化方法在理論上是合理的,並且在實踐中也有效(Hou et al., 2017)。

這篇論文有以下設置。將網路的所有 L 層的權重設為 w。對應的量化權重表示為 Qw(w) = ^w,其中 Qw() 是權重量化函數。這種損失感知型策略涉及到在每個時間實例的優化問題。在 t+1 個迭代時,問題是如何優化一個二次規劃(quadratic program):

ICLR 2019論文解讀:量化神經網路

其中優化是針對 ^w 而言,Ht 是指在 ^w 的 Hessian。某些讀者可能了解這個,而且知道這是 ft(^w) 的二階泰勒展開。在實踐中,Hessian 往往具有高昂的計算成本,所以往往使用近似的 Hessian。這裡也是如此,這裡的 Hessian 近似為了 Diag( √^v_t),其中 ^v_t 是移動平均線(moving average)。

ICLR 2019論文解讀:量化神經網路

其中 g_t 是隨機梯度,β 是 Adam 等深度網路優化器中可直接使用的一個超參數。移動平均線是通過之前在 t-1 的移動平均線、在時間 t 的當前梯度的平方與決定每個分量所受重視程度的參數 β 的凸組合(convex combination)而計算得到的。

最後,在每次迭代根據以下規則更新權重:

ICLR 2019論文解讀:量化神經網路

梯度量化(gradient quantization)

在分散式設置下,主要的瓶頸在於由於梯度同步所造成的通信成本。我們可以通過一個簡單的例子來理解。假設有 N 個要執行 SGD 的並行處理節點,該過程的偽代碼會是這樣:

並行處理每一批數據:

  1. 讀取當前參數,即權重、激活等等
  2. 根據這批數據計算梯度
  3. 更新梯度

現在假設處理器 1 在剩餘的 N-1 個處理器之前率先結束,它已經更新了權重並希望繼續處理下一批數據。但是,當處理器 1 讀取「當前」參數時,這些參數還沒有整合來自另外 N-1 個處理器的更新。

這可能是由於剩餘的處理器還沒有結束它們的計算,或者它們仍在將它們的更新傳輸到存儲梯度信息的中心位置。一般來說,後者是導致瓶頸的原因。這就是所謂的同步問題,也是提出量化梯度以降低節點之間的通信時間的原因。

量化模型的性質

作者考量了分散式設置下權重和激活兩者的量化。我們用 N 表示並行處理數據的工作器(worker)的數量。圖 1 簡單展示了分散式設置的大致情況。

ICLR 2019論文解讀:量化神經網路

圖 1:使用數據並行化的分散式權重和梯度量化

這種分散式設置的工作方式如前一節所描述的偽代碼一樣。在迭代 t,n ∈ {1, ..., N} 中每一個工作器都執行以下任務:

  1. 根據量化的權重計算全精度梯度 (^g_t)^(n),即第 n 個工作器在迭代 t 的 ^g
  2. 將 (^gt)^(n) 量化為 (~gt)^(n) = Qg( (^gt)^(n))
  3. 將這些信息發送到參數伺服器

一旦參數伺服器收到來自這些工作器的 n 個結果,就繼續:

  1. 計算量化梯度的平均 (~g_t) = (1/N) ∑_(n=1 to N) (~g_t)^(n)
  2. 基於 (~g_t) 更新二階矩 ~v_t
  3. 使用全精度計算更新權重,根據 w_(t+1) = w_t ? η_t Diag( √(~v_t))^(?1) (~g_t)

然後使用損失感知型權重量化計算量化的權重,得到 (^w_(t+1)) = Q_w(w_(t+1)),然後在下一輪迭代將其發送回工作器。

之前在量化網路方面的研究都重在用線性模型分析平方損失。這篇論文沒有將成本函數局限於線性模型,但做出了以下假設:

  1. 成本函數 f_t 是凸的;
  2. f_t 可用 Lipschitz 連續梯度二次可微分
  3. f_t 的梯度有界

很顯然,對神經網路而言,凸假設 1 基本上都不成立。但是,這能促進對深度學習模型的分析。假設 2 在凸假設中很常用。二次可微性是為了確保存在與 Hessian 相關的信息,而假設 2 的「Lipschitz 連續梯度」部分通常是由於強凸性與 Lipschitz 連續梯度之間存在對偶關係。一旦我們很好地理解了其中一個,我們就能輕鬆理解另一個。

使用全精度梯度的權重量化

當僅對權重進行量化時,損失感知型權重量化的更新為

ICLR 2019論文解讀:量化神經網路

其中 (^v)_t 是之前定義的(平方的)梯度 (^g_t)^2 的移動平均線。論文表明,對於用全精度梯度和 η_t = η/√ t 的損失感知型權重量化,R(T)/T 的邊界這樣給定:

ICLR 2019論文解讀:量化神經網路

其中 R(T) 是後悔值。這裡,平均後悔值的收斂速度為 d/√(T),其中 d 是維度。還有一個與權重量化解析度 ?_w(量化層級之間的步長)和維度相關的非零項。L 是 ft 的梯度的 Lipschitz 常數,D 也是一個常數,其為所有 wm, wn ∈ S(S 是量化權重值的集合)限定了 || w*m - w_n* || 的邊界。

第二項很直觀,維度和解析度 ?_w 越高,平均後悔值的邊界就寬鬆。此外,常數 L 和 D 直觀地描述了 ?f_t 和 w 的最糟情況的「拉伸/變化」行為,它們也能寬鬆化平均後悔值的邊界。

使用全精度梯度的權重和梯度量化

現在我們看看權重和梯度都量化的情況。損失感知型權重量化的更新為:

ICLR 2019論文解讀:量化神經網路

其中 (~g_t) 是隨機量化的梯度 Q_g(?f_t(Q_w(w_t)))。(~v_t) 是平方的量化梯度的移動平均線。在這種設置下,期望的平均後悔值的邊界為:

ICLR 2019論文解讀:量化神經網路

我們可以總結出這一點:在權重之外,量化梯度能將收斂速度降低這樣的倍數:

ICLR 2019論文解讀:量化神經網路

這總是 >1。這會帶來問題,因為深度網路的維度 d 通常很大,而分散式學習更傾向於為梯度使用少量比特數,這會導致 ?_g 很大。

實驗

維度的影響

作者研究了維度 d 對收斂速度的影響,還研究了一些常見模型的最終誤差,比如使用平方損失的簡單線性模型、多層感知器模型和 CifarNet。圖 2 展示了結果:

ICLR 2019論文解讀:量化神經網路

圖 2:不同 d 的權重量化模型的收斂

首先我們看看圖 2(a),這代表使用平方損失的合成式簡單線性模型。可以看到,隨著維度增大,其訓練損失隨迭代的收斂速度就越慢。在 d 更大時,全精度和量化梯度都會導致收斂上的損失更大。前一節的分析也能推知這樣的結果。

下一個模型是帶有一個包含 d 個隱藏單元的層的多層感知器(Reddi et al., 2016)。其權重使用 LAQ3 被量化成了 3 位。其梯度要麼是全精度的(表示為 FP),要麼就隨機量化為了 3 位(表示為 SQ3)。選擇的優化器是 RMSProp,學習率設置為 η_t = η /√ t,其中 η = 0.1。

最後,另一個被測網路是 Cifarnet(Wen et al., 2017)。維度 d 為每個卷積層中過濾器的數量。其梯度要麼是全精度的,要麼就隨機量化為了 2 位(表示為 SQ2)。使用的超參數優化器為 Adam。學習率如(Wen et al., 2017)中一樣,從 0.0002 開始衰減,每 200 epoch 以 0.1 的因子衰減。

圖 2 的 (b) 和 (c) 分別給出了多層感知器和 Cifarnet 的結果。類似於簡單線性模型,參數 d 越大,與使用全精度梯度相比,量化梯度的收斂劣化就越嚴重。

權重量化解析度 ?_w

為了研究不同 ?_w(量化權重的步長)的效果,論文中使用了(Wen et al., 2017)中一樣的 d=64 的 Cifarnet 模型。權重被量化為 1 位(LAB)、2 位(LAQ2)或 m 位(LAQm)。

梯度是全精度的(FP)或隨機量化到 m = {2, 3, 4} 位(SQm)。使用的優化器為 Adam。學習率從 0.0002 開始衰減,每 200 epoch 以 0.1 的因子衰減。這個實驗使用了兩個工作器。結果如圖 3 所示。

ICLR 2019論文解讀:量化神經網路

圖 3:在 CIFAR-10 上不同位數的權重的收斂情況

圖 3 展示了不同位數的量化權重下平均訓練損失的收斂情況。結果表明,使用全精度或量化的梯度時,權重量化網路在收斂後的訓練損失比全精度網路更高。使用的位數越多,最終損失就越小。這確認了分析部分的結果,也是我們直觀上能預期的結果。

梯度量化解析度?_g

這裡使用了同樣的 Cifarnet 模型設置,優化器也是 Adam,研究了 ?_g(量化梯度的步長)的影響。圖 4 給出了不同數量的量化梯度位數下平均訓練損失的收斂。同樣,結果和預期一樣。位數更少時,最終誤差就更大,而且使用 2 或 3 位梯度比使用全精度梯度的訓練損失更大、準確度更低。

ICLR 2019論文解讀:量化神經網路

圖 4:在 CIFAR-10 上不同位數的梯度下的收斂情況。其權重是二值化的(記為 W(LAB))或 m 位量化的(W(LAQm))

不同的工作器數量

最後,作者調查了不同工作器數量 N 的影響。他們的目標是調查當使用不同數量的工作器時準確度是否會有損失。他們使用了 Cifarnet(Wen et al., 2017)在分散式學習設置中測試不同數量的工作器。

每個工作器的 mini-batch 大小設置為 64。其中測試和比較了 3 位量化的權重(LAQ3),全精度或隨機量化到 m = {2, 3, 4} 位(SQm)的梯度。表 1 展示了不同工作器數量下的測試準確度。

ICLR 2019論文解讀:量化神經網路

表 1:使用不同數量(N)的工作器時,在 CIFAR-10 上的測試準確度(%)

表 1 還包含了使用梯度裁剪(gradient clipping)的結果。梯度裁剪是一種防止非常深度的網路中梯度爆炸問題的技術。梯度爆炸是指梯度變得過大且錯誤梯度累積的情況,這會導致網路不穩定。儘管如此,我相信從表 1 可以看到量化模型能夠實現與全精度模型相媲美的表現。

總結

這篇論文研究了具有量化梯度的損失感知型權重量化網路。量化梯度的目的有兩個。第一,這可以減少反向傳播階段的計算量。第二,這可以降低分散式設置中通信單元之間的通信成本。論文提供了具有全精度、量化和量化裁剪的梯度的權重量化模型的收斂性分析。此外,作者還通過實證實驗證實了理論結果,表明量化網路可以加快訓練速度,並能取得與全精度模型相當的表現。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

MIT發明10美元AI觸覺手套:識別物體,又能稱重,論文已上Nature
GLUE基準新突破:微軟多任務模型首次超越自然語言人類基準

TAG:機器之心 |