XNOR-Net:二值化卷積神經網絡


https://www.jianshu.com/p/f9b015cc4514

https://github.com/hpi-xnor/BMXNet  BMXNet:基於MXNet的開源二值神經網絡實現

Index

  • Introduction
  • Related Works
  • Binary Neural Networks
  • XNOR-Net
  • Conclusion

Introduction

神經網絡模型的壓縮是一個很有前景的方向。由於神經網絡需要較大的計算量,目前來說,我們通常在服務器上對神經網絡進行訓練或是計算的。移動端的神經網絡在斷網的情況下就失去了作用。通過一些壓縮神經網絡的方法,我們能夠縮小神經網絡的規模,並且提高計算速度。這對於實現移動端人工智能來說很有意義。
本文基於< XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks>介紹了神經網絡模型壓縮的一些相關工作,以及二值化卷積神經網絡BWN,還有XNOR-Net的工作原理。XNOR-Net的實現代碼:[此處應有鏈接,等我寫完初步的demo將會上傳]。(由於Tensorflow暫時不支持bit操作,所以代碼只作為研究用,並不能真正實現bit操作。)

Related Works

  • Shallow Networks淺層網絡:用更淺的網絡來表示訓練好的網絡。很多時候,神經網絡會存在冗余的參數和層數,這個方法通過使用更淺的網絡,達到相同的效果,減少參數加快計算。
  • Compressing pre-trained networks壓縮訓練好的模型:Deep Compression就是這樣的方法。通過對模型參數進行剪枝,量化,哈夫曼編碼等技巧,能夠壓縮模型。關於Deep Compression的介紹可以看我前幾篇文章(文末有鏈接)。
  • Designing compact layers設計更簡潔層: Residual layers就是一種壓縮的手段。
  • Quantizing parameters量化參數:目前浮點數通常使用32bit表示,量化可以用更少的位數來表示參數,但是會損失一定精度。
  • Network binarization網絡二值化:二值化是將網絡完全使用+1, -1來表示,這樣就可以用1bit來表示網絡。Binary Weight Network 和XNOR-Net都是二值化的網絡。網絡二值化后,卷積可以表示為簡單的加法減法,且可以大大減小計算時間。

Binary Neural Networks

Binary Neural Networks由Bengio團隊在< BinaryNet: Training Deep Neural Networks with Weights and Activations Constrained to +1 or −1 >一文中提出。
其原理很簡單:

 
BWN

其中I為Input輸入,W為weight,B為二值化的weight,alpha為縮放因子。
由上式可知,一個kernel對輸入進行卷積的結果,可以由二值化的weight對輸入進行⊕后,再乘縮放因子得到。其中⊕表示沒有乘法的卷積運算。
證明:
 
證明

由上式可知,J最小時,alpha和B有最優值。
展開一式:
 
證明

令c = WT W, n=BTB,得到:
 
證明

易得alpha和B的最優解:

 

 
證明
 
證明

可知B = Sign(W), alpha=L1norm(W)/n. 其中n=cwh,c,w,h分布為kernel的輸入通道數,寬,高。

可以通過以下算法對網絡進行訓練:

 
Algorithm

值得注意的是,我們在前向計算時使用B和alpha,而在后向傳播時使用實數W進行參數更新。這是由於梯度的量級通常很小,直接對B進行更新時,求導后值為0。
在網絡中加入Batch Normalization可以提升網絡性能。

XNOR-Net

XNOR-Net與BWN不同的地方在於,XNOR-Net不僅將kernel進行二值化,還將input二值化。
由於證明過程與BWN相似,在這里不進行累述。

 
Binarization

如上圖,將輸入進行二值化時,由於計算L1norm時存在很多冗余的計算,XNOR-Net采用了更有效的方式:將輸入在channel維度計算norm得到A,用k(k為w h大小的卷積核,其值為1/wh)對A進行卷積得到K。
之后只需要將Sign(I)與Sign(W)進行卷積,再乘K和alpha即可。
由於Sign(I)和Sign(W)都是二值化的,卷積可以通過XNOR和bit-count表示。

 

 
結構

XNOR-Net的block表示如上圖。

Conclusion

總的來說,神經網絡壓縮是一個很有前景的方向。目前存在的問題主要是精度損失的問題。文章中將AlexNet進行壓縮后,精度損失了2.9%,這對於某些任務來說是不可接受的。其次在於現在很多硬件沒有成熟的二值運算。
未來我可能會開源一個基於Tensorflow的神經網絡壓縮的代碼。由於目前Tensorflow底層代碼沒有支持二值運算,所以里面使用的實際上還是浮點數。因此只能作為研究或者提取訓練好的參數到其他平台。

Neural Networks compression系列文章包括:



作者:Efackw13
鏈接:https://www.jianshu.com/p/f9b015cc4514
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM