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 来源:简书 简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。
相关文章
相关标签/搜索