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

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

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

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

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

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

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

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

圖2.1 訓(xùn)練過程

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

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

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