android二值化skan代码,XNOR-Net:二值化卷积神经网络

本文介绍了神经网络模型压缩的重要性和应用,特别是二值化技术,如Binary Neural Networks (BNN)和XNOR-Net。BNN通过二值化权重简化计算,而XNOR-Net进一步将输入也二值化,利用XNOR操作加速计算。尽管精度可能有所下降,但压缩后的模型更适合移动端部署。文章还探讨了相关工作,如浅层网络、模型压缩和量化参数,并提供了一个未实现的XNOR-Net demo代码示例。
摘要由CSDN通过智能技术生成

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 = WTW, 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为wh大小的卷积核,其值为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系列文章包括:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值