引言
網(wǎng)絡(luò)壓縮在AI加速中可以說起到“四兩撥千斤”的作用,網(wǎng)絡(luò)參數(shù)的減小不僅僅降低了存儲和帶寬,而且使計算邏輯簡單,降低了LUT資源。從本篇開始,我們就一起挖掘一下網(wǎng)絡(luò)壓縮算法的類型,原理,實現(xiàn),以及效果。寫這類算法類文章,一是學(xué)習(xí),二是希望能夠令更多做FPGA的人,不再將眼光局限于RTL,仿真,調(diào)試,關(guān)心一下算法,定會發(fā)現(xiàn)FPGA的趣味和神通。
網(wǎng)絡(luò)結(jié)構(gòu)
二值化網(wǎng)絡(luò),顧名思義,就是網(wǎng)絡(luò)參數(shù)只有兩個數(shù)值,這兩個數(shù)值是+1和-1。在DNN網(wǎng)絡(luò)中主要是乘和加法運算,如果參數(shù)只有兩個數(shù)值,那么乘法的實現(xiàn)就很簡單,僅僅需要符號判斷就可以了。比如輸入數(shù)據(jù)A,如果和1乘,不變;和-1乘,變?yōu)樨?fù)數(shù)。這用LUT很好實現(xiàn),還節(jié)省了DSP的使用。相對于單精度浮點數(shù),存儲減小16倍,帶寬也增加16倍。在計算單元數(shù)目相同情況下,比浮點運算速率提高了16倍。當(dāng)然由于乘法和加法使用LUT數(shù)目減少,計算單元也會成倍增長,總的下來計算速率將大幅度提高。
網(wǎng)絡(luò)訓(xùn)練中使用的都是浮點類型參數(shù),這樣做是為了保證訓(xùn)練的精度。那么這些浮點類型的參數(shù)如何量化的只有兩個數(shù)值呢?論文中提出了兩種方法,第一種是粗暴型,直接根據(jù)權(quán)重參數(shù)的正負(fù),強行分出1和-1。即:

這里wb是二值參數(shù),w是實際權(quán)重參數(shù)。量化可以看做在原來數(shù)據(jù)基礎(chǔ)上增加了噪聲,導(dǎo)致數(shù)據(jù)間最短距離變大。比如原來數(shù)據(jù)的分辨率為R0,如果增加一個高斯噪聲s,那么其分辨率就增大了。這樣在DNN中矩陣乘法中也引入了噪聲,為:

數(shù)據(jù)分辨率的降低導(dǎo)致了有效信息的損失,但是在大量權(quán)重情形下,平均下來可以補償一定的信息損失,即如果有:

那么在權(quán)重?zé)o窮多時,有:

圖1.1 數(shù)據(jù)增加了噪聲,導(dǎo)致數(shù)據(jù)分辨率降低
另外一種是隨機型,即以一定概率來選擇1和-1,論文中采用如下公式:

其中“hard sigmoid”函數(shù)為:

這實際上是對sigmoid函數(shù)進(jìn)行了線性化,這樣做的目的可以減少計算量。因為線性計算只有一個乘法和加法,而sigmoid函數(shù)有指數(shù)計算。使用隨機量化更能均衡化量化引入的噪聲,消除噪聲造成的信息損失。粗暴型量化可能因為權(quán)重參數(shù)分布不同而發(fā)生較大的“不平衡”,比如負(fù)數(shù)權(quán)重較多,那么導(dǎo)致-1遠(yuǎn)遠(yuǎn)多于+1,這樣就會出現(xiàn)權(quán)重偏移在負(fù)方向多一些。如果使用隨機概率模型,即使負(fù)數(shù)權(quán)重多,也會有一定概率出現(xiàn)+1,彌補了+1較少的情況。

圖1.2 粗暴型和隨機型量化:隨機型量化的分布更加均勻
訓(xùn)練過程
訓(xùn)練過程主要包括三個部分:
1) 前向傳播:給定輸入數(shù)據(jù),一層一層的計算,前一層激活函數(shù)的結(jié)果作為下一層的輸入;
2) 反向傳播:計算每一層代價函數(shù)的梯度,從最后一層開始計算,反向計算前一層,一直到計算出第一層的梯度值;
3) 更新參數(shù):根據(jù)計算出來的梯度和前一時刻的參數(shù),計算出下一時刻的參數(shù)。
計算過程可以用圖2.1表示:

圖2.1 訓(xùn)練過程

圖2.2 訓(xùn)練算法
每次量化發(fā)生在計算出浮點參數(shù)之后,然后在進(jìn)行前向計算,得到代價函數(shù),進(jìn)行反向計算代價函數(shù)梯度,接著利用前一刻參數(shù)計算出下一刻數(shù)據(jù),不斷迭代直到收斂。
結(jié)果
論文在三個數(shù)據(jù)集上進(jìn)行了測試:MNIST,CIFAR-10,SVHN。
MNIST有6萬張內(nèi)容為0-9數(shù)字的訓(xùn)練圖片,以及1萬張用于測試的28x28大小的灰度圖片。論文研究了兩種量化方式下訓(xùn)練時間,以及測試出錯率。從中看出隨機量化出錯率更低,更適合用于二值量化。

圖3.1 不同量化方式下的訓(xùn)練時間以及測試錯誤率:點線表示訓(xùn)練誤差,連續(xù)線表示測試錯誤率
CIFAR-10圖片內(nèi)容比MNIST復(fù)雜一些,包含了各種動物。有5萬張訓(xùn)練圖片和1萬張32x32大小的測試圖片。
SVHN也是0-9數(shù)字圖片,含有604K張訓(xùn)練圖片和26K的32x32大小的測試圖片。以上三種數(shù)據(jù)集下使用二值網(wǎng)絡(luò)的結(jié)果如下圖:

圖3.2 三種數(shù)據(jù)集結(jié)果(錯誤率)比較
從中看出二值網(wǎng)絡(luò)錯誤率幾乎和其他網(wǎng)絡(luò)模型差不多,但是其大大壓縮了網(wǎng)絡(luò)模型。
結(jié)論
二值化網(wǎng)絡(luò)中參數(shù)只用兩個數(shù)值表示,實際上僅僅考慮了權(quán)重的符號作用。在三種小型簡單的數(shù)據(jù)集上表現(xiàn)良好。
文獻(xiàn)
1 Matthieu Courbariaux, Y.B., Binary Connect Training Deep Neural Networks with binary weights during propagations. ArXiv preprint, 2016.
編輯:hfy
-
FPGA
+關(guān)注
關(guān)注
1664文章
22497瀏覽量
639002 -
算法
+關(guān)注
關(guān)注
23文章
4800瀏覽量
98517
發(fā)布評論請先 登錄
linux的壓縮和解壓操作
REFFRIDGED111TRC2SL:冰箱壓縮機驅(qū)動參考設(shè)計板的深度解析
電能質(zhì)量在線監(jiān)測裝置支持哪些數(shù)據(jù)壓縮算法?
應(yīng)用于暫態(tài)波形存儲的數(shù)據(jù)壓縮算法需要考慮哪些因素?
SM4算法實現(xiàn)分享(一)算法原理
Camellia算法的實現(xiàn)(基于開源蜂鳥E203協(xié)處理器)
Camellia算法的實現(xiàn)二(基于開源蜂鳥E203協(xié)處理器)
AES加解密算法邏輯實現(xiàn)及其在蜂鳥E203SoC上的應(yīng)用介紹
如何使用恢復(fù)算法來實現(xiàn)開平方運算
國密系列算法簡介及SM4算法原理介紹
加密算法的應(yīng)用
e203除法器算法改進(jìn)(一)
數(shù)據(jù)濾波算法的具體實現(xiàn)步驟是怎樣的?
低內(nèi)存場景下的高效壓縮利器:FastLZ壓縮庫應(yīng)用實踐指南
基于FPGA的壓縮算法加速實現(xiàn)
一文解析網(wǎng)絡(luò)壓縮算法的原理實現(xiàn)及結(jié)果
評論