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系列文章包括: