XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks

这篇文章提出了两个二进制类的网络模型,一个叫做Binary-Weighted-Networks,一个叫做XNOR-Net。其中BWN只有filter是二进制的表达,而XNOR-Net在input和filter上都是二进制的表达。其中指出二进制的表达XNOR-Nets在执行卷积运算时能够提升58×的速度,而可以节省32×的内存空间,这为XNOR-Nets在CPU上运行提供了可能性。

Binary-Weighted-Networks

在进行卷积运算的时候,可以将乘法改成加法和减法,这可以提高2×左右的运行效率。BWNs已经可以嵌入更小、便携式的硬件中去了。

XNOR-Nets

当input和filter的输入都是二进制的时候,可以使用XNOR(异或)运算来代替乘法的运算,这使得XNOR-Nets近似的CNNs比起高精度的CNNs有了58×的速度提升,这使得XNOR-Nets能够高效地在CPU上进行实现。

1 Binary Convolutional Neural Networks

一些数学符号的意义直接贴图了......

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks_第1张图片

1.1 Binary-Weighted-Neural-Networks

为了用二进制的filter去最好地近似高精度的filter,采用了一个非常直观的近似方法,为每一个filter找一个scaling factor:

为了更好地近似,我们选择使得近似前后的矩阵之间的欧氏距离最短,即:

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks_第2张图片

展开之后得到:

其中一个特别好的性质就是,B^TB是一个常数n,而W^TW是一个和α和B都无关的变量,所以最后和B有关的需要考虑的只有中间的式子,这就是一个非常naive的问题了,只需要使得:

之后我们只需要让W中为正数的项在B中为1,负数的项在B中为-1,就可以取得最大值。

最后考察α,求导之后求极值得到:

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks_第3张图片

最后卷积的运算就可以表示成:

其中,⊕是不需要乘法的卷积运算符。

1.1.1 Training

在训练的时候,只在forward pass的时候binarize weights。

由于sign函数的梯度几乎处处为0,所以作者使用了STE(straight-forward-estimator)的方法来近似的估计梯度。

最终计算得到的梯度应当是:

注意的是,在gd的时候,使用的是全精度来更新权值,否则二进制的表示更新的幅度实在是太小了。

通过下面的伪码真的是一目了然:

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks_第4张图片

一旦网络训好了之后,就不需要再保存全精度的数据了。

1.2 XNOR-Networks

当input和filter都是二进制的数的时候,卷积操作就可以视为不断地重复bit shift和dot product的过程,而这些操作都可以通过位运算实现。dot product就可以视为是异或的操作。

1.2.1 Binary Dot Product

在XNOR-Nets中,需要保证内积之间的差异最小,即:

其中α和β分别是input和filter的scaling factor。

用相似的思想可以得到一下的最优化结果:

1.2.2 Binary Convolution

作者发现要计算每一input中small patch的β包含非常多的冗余的计算,所以作者选择了使用卷积操作进行该项任务。

最终得到的近似的卷积的结果为:

1.2.3 Training XNOR-Networks

文章中指出将pooling放在binary input之后的会导致信息急剧地损失,因为弄出来的绝大多数都是1.

为了减少binarization带来的information loss,钻则了在binarization之前进行normalize,使得其均值为0.最终的卷积结构调整为:

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks_第5张图片

其中BinActiv是用来计算矩阵K和sign(I)的;BinConv用来进行卷积运算;可以在卷积运算之后加上一个ReLU function。

同时文章中指出,为了计算的方便,在backward pass的时候也将input进行二值化。同时用绝对值的方法计算input的scaling factor,否则会有梯度消失的问题。

2 Experiments

2.1 Efficiency Analysis

通过和传统的convolution相比,速度的提升比例为:S=\frac{cN_WN_I}{\frac{1}{64}cN_WN_I+N_I}=\frac{64cN_W}{cN_W+64}

可以发现,速度提升的比例和input size没有关系,之和channel数量以及filter size有关。

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks_第6张图片

2.2 Image Classification

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks_第7张图片

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks_第8张图片

 

你可能感兴趣的:(machine,learning,ML论文,CNN,quantization,mobile,DL,binarization)