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

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

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

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底層代碼沒有支持二值運算,因此裏面使用的實際上仍是浮點數。所以只能做爲研究或者提取訓練好的參數到其餘平臺。orm

Neural Networks compression系列文章包括:

做者:Efackw13 連接:https://www.jianshu.com/p/f9b015cc4514 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
相關文章
相關標籤/搜索