1. 程式人生 > >深度學習-模型壓縮之Quantization & Binarization方向論文閱讀筆記

深度學習-模型壓縮之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時取1|r|<=1,其實本質上是對hTan(hyperbolic tangent)的低精度估計。然而在影象識別以及其他深度學習模型中,ReLU越來越多地被用於啟用函式。

這篇文章就提出了一種針對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+1ti=Δ,Δ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],\

    1. &otherwise,\end{cases}\end{equation}$$

    對應的,導數就是在(0qm]中為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],\

    1. &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],\

    1. &otherwise,\end{cases}\end{equation}$$

    理論上log-tailed ReLU的估計應該更符合邏輯,因為他同時考慮了outer lier的效果,但論文的實證效果說明兩種backward的估計效果差不多。

論文:Neural Networks With Few Multiplications