论文:XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
链接:https://arxiv.org/abs/1603.05279
代码地址:http://allenai.org/plato/xnornet
模型压缩和加速是深度学习算法应用在移动端必须要解决的问题,也是近年来的研究热点,这篇ECCV2016的文章就是做这样的事。在这篇文章中作者主要提到两种二值化网络:Binary-Weight-Networks和XNOR-Networks。Figure1简单列出了这两种网络和标准的卷积网络的差别,根据实验结果,这里主网络应该采用的是AlexNet。Binary-Weight-Networks通过对权重W做二值化操作,达到减少模型存储空间的目的,准确率影响并不明显(不过后面在ResNet-18上的实验对准确率的影响还比较大)。XNOR-Networks通过同时对权重W和输入I做二值化操作,达到既减少模型存储空间,又加速模型的目的,当然准确率影响也比较明显。
接下来依次介绍这两种二值化网络,另外这里说的权重是指网络中的卷积层参数和全连接层参数,因为全连接层可以用卷积层代替,所以接下来我都用卷积层来介绍二值化操作。
Binary-Weight-Networks
首先Binary-weights的目的是将权重W的值都用二值表示,也就是W的值要么是-1,要么是1。这个替代过程贯穿整个forward和backward过程,但是在更新参数时候还是采用原来的权重W,主要是因为更新参数需要的精度比较高。
接下来详细介绍怎么实现和公式推导,公式部分虽然多,但是很简单。一个卷积层的操作可以用I*W表示,I表示输入,维度是c*win*hin,W表示卷积核(或者叫权重),维度是c*w*h。那么当我用二值卷积核B以及一个尺度参数a代替原来的卷积核W,那么就可以得到下面这个式子:
这里有个圆圈里面带加号的符号表示没有乘法的卷积计算。这里: