深度學習-模型壓縮之Quantization & Binarization方向論文閱讀筆記
深度學習-模型壓縮之Quantization & Binarization方向論文閱讀筆記
論文:Binarized Neural Networks: Training Neural Networks with Weights and Activations Constrained to +1 or 1
Weight and Activation
首先,該論文主要把weight和啟用函式結果activation在訓練時都做了二元化操作。具體來說,文章介紹了兩種binarization方法,確定法(deterministic)和隨機法(stochastic):- deterministic:給定x,若x > 0,返回+1,反之返回-1。
- stochastic:根據x的值,計算返回+1的概率p,在做二元化操作時,以p為概率返回1,反之返回-1。具體p的計算公式為
σ(x)=clip(x+12,0,1)=max(0,min(1,x+12)))
這裡有一個例外,就是input layer,它的輸出通常是image資訊,文中並沒將其binarized。
Gradient
gradient在實現中保留了浮點數的形式,原因應該是為了保證SGD的有效。
在計算gradient時,會對weights和activations加一些noise以增加generalization。(待定,看論文公佈的實現再確認)
Propagation
因為前向的時候相當於是對weight和activation求了個sign函式,而sign()的導數幾乎處處為0,這顯然沒法用到後向的計算中,因此需要找到一個sign函式導數的估計。
論文中選擇的是
1|r|<=1 ,這個方法被稱作“straight-through estimator”。事實上這個函式也是hard tanh的導數。Htanh(x)=Clip(x,−1,1) 。具體來說,對activation和weight的操作如下:
activation:使用sign函式作為非線性啟用函式
weight:1. 更新weight時,把實數weight控制在[-1, +1]之間; 2. 在weight使用前先做binarization。
具體來說計算的虛擬碼如下:
### 論文:Deep Learning with Low Precision by Half-wave Gaussian Quan
由上文可知,在forward propagation時對activation取sign函式,在backward propagation時取
這篇文章就提出了一種針對ReLU的低精度估計。具體來說,
Forward Propagation:在前向計算時,文章使用了quantization技術來估計ReLU函式
g(x)=max(0,x) 。就是把(0,+∞] 區間用一組ti,i∈{1,2,...,m} 切割成m + 1份,並使得每個(ti,ti+1] 區間內為一個常數值(例如等於ti ),將以此生成的分段函式Q(x)=qi,ifx∈(ti,tt+1] 來估計ReLU。這麼做的好處是不需要將activation存成高精度來保持計算結果,而只需根據切分的分數m安排實際activation的資料型別。另外,
{ti} 的選擇有多種,例如可以均勻分佈的{ti} ,也就是使得ti+1−ti=Δ,Δ∈R1 (Tensorflow使用的量化方法在此處類似),也可以使用符合正態分佈的{ti} ,這種選擇正太分佈來切割(0,+∞] 來估計ReLu的方法就是論文的題目,Half - wave Gaussian Quantization。這個選擇其實更符合邏輯,因為本身做BN的一個假設也是activation是符合正態分佈的。然而論文中最終的實證結果是兩種方法效果差不都。Backward Propagation:在後向計算時,ReLU同樣遇到上文提到的導數幾乎處處為0的情況,一樣也需要有個估計方法,文中提供了兩個方法.
- Clipped ReLU:
$$\tilde{Q_c}(x) = \begin{equation}\begin{cases}q_m, &{x > q_m,}\
x, &x\in(0, q_m],\
- &otherwise,\end{cases}\end{equation}$$
對應的,導數就是在
(0,qm] 中為1,其餘為0.- Log-tailed ReLU
$$\tilde{Q_c}(x) = \begin{equation}\begin{cases}q_m + log(x - \gamma), &{x > q_m,}\
x, &x\in(0, q_m],\
- &otherwise,\end{cases}\end{equation}$$
對應的導數就是
$$\tilde{Q_c}^{\prime}(x) = \begin{equation}\begin{cases}1 / (x - \gamma), &{x > q_m,}\
1, &x\in(0, q_m],\
- &otherwise,\end{cases}\end{equation}$$
理論上log-tailed ReLU的估計應該更符合邏輯,因為他同時考慮了outer lier的效果,但論文的實證效果說明兩種backward的估計效果差不多。