https://www.jianshu.com/p/f9b015cc4514git
https://github.com/hpi-xnor/BMXNet BMXNet:基於MXNet的開源二值神經網絡實現github
神經網絡模型的壓縮是一個頗有前景的方向。因爲神經網絡須要較大的計算量,目前來講,咱們一般在服務器上對神經網絡進行訓練或是計算的。移動端的神經網絡在斷網的狀況下就失去了做用。經過一些壓縮神經網絡的方法,咱們可以縮小神經網絡的規模,而且提升計算速度。這對於實現移動端人工智能來講頗有意義。
本文基於< XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks>介紹了神經網絡模型壓縮的一些相關工做,以及二值化卷積神經網絡BWN,還有XNOR-Net的工做原理。XNOR-Net的實現代碼:[此處應有連接,等我寫完初步的demo將會上傳]。(因爲Tensorflow暫時不支持bit操做,因此代碼只做爲研究用,並不能真正實現bit操做。)算法
Binary Neural Networks由Bengio團隊在< BinaryNet: Training Deep Neural Networks with Weights and Activations Constrained to +1 or −1 >一文中提出。
其原理很簡單:
服務器
可知B = Sign(W), alpha=L1norm(W)/n. 其中n=cwh,c,w,h分佈爲kernel的輸入通道數,寬,高。網絡
能夠經過如下算法對網絡進行訓練:性能
值得注意的是,咱們在前向計算時使用B和alpha,而在後向傳播時使用實數W進行參數更新。這是因爲梯度的量級一般很小,直接對B進行更新時,求導後值爲0。
在網絡中加入Batch Normalization能夠提高網絡性能。編碼
XNOR-Net與BWN不一樣的地方在於,XNOR-Net不只將kernel進行二值化,還將input二值化。
因爲證實過程與BWN類似,在這裏不進行累述。
人工智能
XNOR-Net的block表示如上圖。設計
總的來講,神經網絡壓縮是一個頗有前景的方向。目前存在的問題主要是精度損失的問題。文章中將AlexNet進行壓縮後,精度損失了2.9%,這對於某些任務來講是不可接受的。其次在於如今不少硬件沒有成熟的二值運算。
將來我可能會開源一個基於Tensorflow的神經網絡壓縮的代碼。因爲目前Tensorflow底層代碼沒有支持二值運算,因此裏面使用的實際上仍是浮點數。所以只能做爲研究或者提取訓練好的參數到其餘平臺。orm
Neural Networks compression系列文章包括: