神經網絡壓縮(8)Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights

Incremental Network Quantization: Towards Lossless CNNs with Low-precision Weights

Intro

英特爾中國研究院:INQ神經網絡無損低比特量化技術
給定任意結構的全精度浮點神經網絡模型,能將其轉換成無損的低比特二進制模型;
文章分析現有的量化壓縮方法有兩點不足:1.量化過程中的精度損失仍然不可忽視;2.大多數量化壓縮方法只適用於處理特定的模型結構和特定類型的層,一定程度限制了泛化能力和量化壓縮的性能(這裏指的是很多方法對fc層的壓縮比較有效,最終得到的比較大的壓縮率很大一部分貢獻是fc);另外還有重訓練時間長等問題;

Method

  • 提出了漸進式神經網絡量化的思想,引入了三種操作:參數分組,量化,重訓練

簡單的說就是在訓練得到一個網絡模型後,首先將這個全精度浮點網絡模型中的每一層參數分爲兩組,第一組中的參數直接被量化固定,另一組參數通過重訓練來補償量化給模型造成的精度損失。然後這三個操作依次迭代應用到剛纔的第二組完成重訓練之後的全精度浮點參數部分,直到模型全部量化爲止。
可以說參數分組分成的這兩個部分是互補的作用,一個建立低精度模型的基礎,另一個通過retrain補償精度損失;這樣迭代最終得到漸進式的量化和精度提升。
這裏寫圖片描述
圖中,綠線代表當前已經被量化的網絡連接,藍線代表需要重新訓練的網絡連接。

Weight partition

  • 分組的方式文中討論了兩種:random strategy 和 pruning-inspired strategy。
    1. random strategy:隨機的把權值分成兩個不重疊的部分,相當於是按相等的概率對待每一個值,有同等的概率被分到兩組中;
    2. pruning-inspired strategy:基於prune的策略是:逐層確定每層自己的thresholds(一般是given splitting ratio),取weights的絕對值和thresholds比較,最後分成兩個不重疊的組。
      給出了兩種分組方法的一個比較,毫無疑問選取了基於prune的策略。
      這裏寫圖片描述
      分成的兩部分肯定一組值大一點一組值小一點,那麼該選取哪部分先做quant呢?文中說取大的部分去做quant,大的這部分被認爲是low-precision base:
      the weights with larger absolute values are more important than the smaller ones to form a low-precision base for the original CNN model.

Group-wise quantization

量化的目的是給定一個訓練好的全精度的CNN網絡模型,將全部的weights從32位浮點數轉爲2的整數次冪或者0,而不損失精度。
文章中採用的量化的形式是:量化最後Wl的每個值是和Pl中的值對應的,也就是2的整數次冪或0;其中只有n1一個超參數,n1是根據這個公式得到的,s就是簡單的對所有weights取絕對值取最大。。。bitwidth=b是由我們設定的,n1知道了,n2可以通過n1和b求得
這裏寫圖片描述
最終convert every entry of Wl (按上面的公式)into a low-precision one。

Re-training

INQ漸進式網絡量化示例:第一行:依次爲參數分組、量化、重訓練;第二行:迭代過程
(綠色區域表示當前已經被量化的網絡參數,淺紫區域表示需要重新訓練的網絡參數)
這裏寫圖片描述

Incremental network quantization algorithm

  • 優化的目標函數,以及參數更新策略
    這裏寫圖片描述

其中,Pl是由前面的分組量化所確定的取值;Tl是一個mask,他代表了每一步weights的分組:T=0表示是已經quant的部分,T=1表示需要retrain的部分;
在retrain時只更新retrain部分(T=1)對應的部分也就是還保持32位的weights。(和韓松只更新沒有被remove的連接的思想類似)

  • 全部流程
    這裏寫圖片描述
    梳理:
    1.輸入是training data,pre-trained model,每步迭代有百分之多少weights做quant,就是用於確定2.每層的threshold進而分組的;
    3.根據delta逐層確定weights的分組,更新A1A2也就是分組,Tl也就是分組的mask;
    4.在A1上逐層確定每一層自己的Pl集合;
    5.逐層量化;
    6.計算loss,更新A2部分的參數;

Experiments

這裏寫圖片描述
圖1:INQ應用在主流的深度神經網絡上,和全精度浮點模型對比,5bit量化,INQ模型分類精度超越了原始的全精度浮點模型;
圖2:不同比特長度,參數二進制化的神經網絡模型性能

這裏寫圖片描述
圖1:三值,二值神經網絡性能比較
圖2:和韓松的文章比,韓松的是把三種不同的方法融合到了一起
另外本文的方法還有一點好處:之前這些方法最後的weights還是浮點數,但是INQ得到的是二進制化的參數,可以用簡單的二進制移位運算代替原來的浮點數乘法運算,簡化硬件計算
the final weights for vector quantization (Gong et al., 2014), network pruning (Han et al., 2015) and deep compression (Han et al., 2016) are still floating-point values, but the final weights for our INQ are in the form of either powers of two or zero. The direct advantage of our INQ is that the original floating-point multiplication operations can be replaced by cheaper binary bit shift operations on dedicated hardware like FPGA.

Future Work

這裏寫圖片描述
進一步將INQ技術從只量化模型參數推廣到不但量化模型參數,還量化網絡每一層的輸入和輸出
VGG-Net爲例,首次實現了無損的、低比特、全量化的神經網絡模型
圖表:輸入輸出及參數均二進制化的神經網絡模型性能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章