作者‖ flow
 

前言

本文针对当下深度学习模型太大的问题进行了技术改进,首次提出了XNOR-Net的概念。文章提出二值网络的两个版本,Binary-Weight-Network及XNOR-Net,可以通过二值化神经网络的技术方法,对网络规模进行压缩,节省32倍的存储空间,进而使神经网络在便携设备上运行成为可能。并且由于浮点数权重被二值化,运算得到了约58倍的速度加成,这使得网络在CPU上的实时运行成为可能。

值得一提的是,该篇文章的创作团队于2017年在美国西雅图成立了AI公司XNOR.AI,并得到了微软联合创始人Paul Allen个人的种子轮投资。代码开源,值得大家学习下。

nlp对抗训练网络 nlp net_神经网络


 

论文信息及当前被引量: Rastegari M, Ordonez V, Redmon J, et al. Xnor-net: Imagenet classification using binary convolutional neural networks[C]//European conference on computer vision. Springer, Cham, 2016: 525-542.
【当前被引:3646】


1. 概述

在本文中,有:

  • 文章提出了二值网络的两个版本,分别叫Binary-Weight-Network以及XNOR-Net。其中,XNOR-Net的输入以及卷积核的参数都是二值的,Binary-Weight-Network只有卷积核的参数是二值的;
  • 该方法相对于之前的SOTA来说,最大的改变有两个,一个是提出了尺度因子,再一个是改变了CNN基础block的顺序;
  • 对卷积进行近似的二值表达,使得文章所提的网络有在CPU上跑实时的潜力;
  • 首次尝试在大数据集上进行二值网络的评估,具体为ImageNet分类任务。在该任务中,AlexNet的Binary-Weight-Network版本几乎不掉点;
  • 相对于SOTA代表BinaryConnect以及BinaryNets,文章所提出的方法在ImageNet上的top1指标高出它们16个点;

2. 二值卷积神经网络

nlp对抗训练网络 nlp net_计算机视觉_02


不妨设L层的CNN架构为nlp对抗训练网络 nlp net_计算机视觉_03nlp对抗训练网络 nlp net_权重_04是一系列tensor的集合,对于nlp对抗训练网络 nlp net_权重_04中的每一个元素nlp对抗训练网络 nlp net_深度学习_06,表示第nlp对抗训练网络 nlp net_深度学习_07层网络的输入,如Fig. 1中的绿色三维体所示。nlp对抗训练网络 nlp net_计算机视觉_08也是一系列tensor的集合,但其中的每一个元素表示nlp对抗训练网络 nlp net_神经网络_09,表示第nlp对抗训练网络 nlp net_深度学习_07层的第nlp对抗训练网络 nlp net_计算机视觉_11个权重,nlp对抗训练网络 nlp net_计算机视觉_12则是第nlp对抗训练网络 nlp net_深度学习_07层的卷积核的个数。nlp对抗训练网络 nlp net_权重_14表示nlp对抗训练网络 nlp net_计算机视觉_15nlp对抗训练网络 nlp net_深度学习_16之间的卷积操作,在该文章中,假设卷积操作不包含偏置。具体地,nlp对抗训练网络 nlp net_深度学习_17,而nlp对抗训练网络 nlp net_神经网络_18

文章提供二值CNN的两个变种,分别为:

  • Binary-weights: nlp对抗训练网络 nlp net_神经网络_19中的元素为二值;
  • XNOR-Networksnlp对抗训练网络 nlp net_深度学习_20nlp对抗训练网络 nlp net_神经网络_19都是二值。

2.1 Binary-Weight-Networks

为了使得Binary-Weight-Networks能够拥有二值的权重,文章首先通过一个二值滤波器nlp对抗训练网络 nlp net_计算机视觉_22,以及一个尺度因子nlp对抗训练网络 nlp net_nlp对抗训练网络_23估计出浮点数的权重nlp对抗训练网络 nlp net_深度学习_24,使得nlp对抗训练网络 nlp net_神经网络_25,进而,卷积操作可以近似为:
nlp对抗训练网络 nlp net_神经网络_26
其中,nlp对抗训练网络 nlp net_nlp对抗训练网络_27表示不使用任何矩阵乘法的卷积操作。

不妨使用nlp对抗训练网络 nlp net_权重_28表示有二值权重的CNN,其中nlp对抗训练网络 nlp net_nlp对抗训练网络_29表示一系列的二值nlp对抗训练网络 nlp net_nlp对抗训练网络_30nlp对抗训练网络 nlp net_权重_31表示一系列正的浮点数的标量,进而,nlp对抗训练网络 nlp net_深度学习_32表示二值的卷积核,nlp对抗训练网络 nlp net_计算机视觉_33则为所谓的尺度因子,且有nlp对抗训练网络 nlp net_计算机视觉_34

2.1.1 二值权重估计

我们现在假设nlp对抗训练网络 nlp net_权重_35nlp对抗训练网络 nlp net_神经网络_36均为nlp对抗训练网络 nlp net_计算机视觉_37的向量,其中nlp对抗训练网络 nlp net_权重_38

我们希望,约等式nlp对抗训练网络 nlp net_计算机视觉_39的两边尽可能地相等,换成数学表达,即为求解下式的最优解:
nlp对抗训练网络 nlp net_神经网络_40
对上式进行展开,有:
nlp对抗训练网络 nlp net_深度学习_41
由于nlp对抗训练网络 nlp net_计算机视觉_42nlp对抗训练网络 nlp net_神经网络_43 为一个常数。此外,由于nlp对抗训练网络 nlp net_权重_35是已知的变量,因此nlp对抗训练网络 nlp net_计算机视觉_45的结果同样也是一个常数,我们不妨假设nlp对抗训练网络 nlp net_神经网络_46。进而,式(3)可以被改写为:
nlp对抗训练网络 nlp net_神经网络_47
有了式(4)后,我们如何调整nlp对抗训练网络 nlp net_神经网络_36,使得整体式子的值最小呢?由于nlp对抗训练网络 nlp net_深度学习_49为正值,nlp对抗训练网络 nlp net_深度学习_50为常数,因此我们可以通过最大化以下的约束优化问题,即:
nlp对抗训练网络 nlp net_权重_51
上式的调整是比较好解决的,因为nlp对抗训练网络 nlp net_神经网络_36只能是nlp对抗训练网络 nlp net_神经网络_53或者nlp对抗训练网络 nlp net_计算机视觉_54,所以我们直接在nlp对抗训练网络 nlp net_深度学习_55时令nlp对抗训练网络 nlp net_nlp对抗训练网络_56,反之则令nlp对抗训练网络 nlp net_nlp对抗训练网络_57简洁一点讲,求解最佳nlp对抗训练网络 nlp net_权重_58的方式就是nlp对抗训练网络 nlp net_nlp对抗训练网络_59

至于最佳的尺度因子nlp对抗训练网络 nlp net_nlp对抗训练网络_60的估计,我们可以求nlp对抗训练网络 nlp net_深度学习_61nlp对抗训练网络 nlp net_深度学习_49的偏导,并将该结果设为0,即:
nlp对抗训练网络 nlp net_nlp对抗训练网络_63
将上式中的nlp对抗训练网络 nlp net_计算机视觉_64替换成nlp对抗训练网络 nlp net_权重_65,则有:
nlp对抗训练网络 nlp net_nlp对抗训练网络_66
即,最优的尺度因子nlp对抗训练网络 nlp net_神经网络_67就是权重绝对值的平均值。

2.1.2 二值权重网络的训练

CNN的一次训练基本包含三个步骤,即前向推理,反向传播,参数更新。

为了训练一个权重为二值的CNN,我们仅仅在前向推理与反向传播的时候对二值进行传播。为了计算符号函数nlp对抗训练网络 nlp net_神经网络_68的梯度,我们遵循Denil等(2013)的方法,即nlp对抗训练网络 nlp net_nlp对抗训练网络_69,经过尺度矫正后的nlp对抗训练网络 nlp net_深度学习_70函数在反向传播时的梯度计算为:

nlp对抗训练网络 nlp net_nlp对抗训练网络_71

至于参数的更新,由于梯度下降的程度往往是微小的,因此我们使用高精度的浮点数的权值对参数进行更新。Denil等(2013)以及Courbariaux等(2015)同样也采用了这样的训练策略,具体见以下算法:

nlp对抗训练网络 nlp net_计算机视觉_72


该算法具体地描述了如何使用二值权重对CNN进行训练。首先,我们通过计算nlp对抗训练网络 nlp net_nlp对抗训练网络_29nlp对抗训练网络 nlp net_权重_31对卷积核进行二值化。其次,我们使用二值化的权重及其对应的尺度因子进行前向传播。再次,我们通过计算卷积核nlp对抗训练网络 nlp net_神经网络_75的梯度进行反向传播的调用。最后,进行参数以及学习率的更新。

一旦网络训练结束,就不必要留着浮点数的权重,因为我们的前向推理只需要二值的权重。

2.2 XNOR-Networks

尽管我们现在找到了二值权重以及尺度因子的估计方式,进而尽可能地模拟真实的浮点数权重。但输入卷积网络的值仍然是实数的。如果我们能够使得输入也是二值的,那么整个网络就可以变得更加的高效,仅仅使用一些nlp对抗训练网络 nlp net_神经网络_76nlp对抗训练网络 nlp net_计算机视觉_77的操作就可以完成网络的推理。

基于这样的思想,我们进一步地将输入也为二值的网络称之为nlp对抗训练网络 nlp net_神经网络_76网络。为了限制一个卷积网络nlp对抗训练网络 nlp net_计算机视觉_03既有二值的权重,又有二值的输入,我们需要在卷积操作的每一步中都强制进行二值操作。卷积本身包括了重复的位移操作以及点积。如果我们将点积表达为二值操作的形式,那么卷积就可以近似地变成一种二值操作。

在两个二值向量之间的点积可以使用nlp对抗训练网络 nlp net_神经网络_76-nlp对抗训练网络 nlp net_权重_81的方式进行等效替代。

在这一小节中,将会介绍如何通过两个取值为nlp对抗训练网络 nlp net_权重_82的向量之间的点乘来近似两个在nlp对抗训练网络 nlp net_计算机视觉_37空间的向量的点乘。

其次,将介绍如何使用这样的近似方式来估计两个nlp对抗训练网络 nlp net_nlp对抗训练网络_30之间的卷积操作。

2.2.1 二值点积

为了能够近似nlp对抗训练网络 nlp net_计算机视觉_85之间的点积,我们使得约等式nlp对抗训练网络 nlp net_计算机视觉_86的两边尽可能的相等,其中,nlp对抗训练网络 nlp net_神经网络_87,且nlp对抗训练网络 nlp net_权重_88。这也就相当于求解以下的优化式:
nlp对抗训练网络 nlp net_计算机视觉_89
其中,nlp对抗训练网络 nlp net_权重_90表示逐点的乘法,我们定义:

  • nlp对抗训练网络 nlp net_神经网络_91,其中nlp对抗训练网络 nlp net_权重_92
  • nlp对抗训练网络 nlp net_nlp对抗训练网络_93,其中nlp对抗训练网络 nlp net_计算机视觉_94
  • nlp对抗训练网络 nlp net_计算机视觉_95,且nlp对抗训练网络 nlp net_深度学习_96

进而,可以将式(9)改写为:
nlp对抗训练网络 nlp net_nlp对抗训练网络_97

而在式(2)中,我们可以知道:
nlp对抗训练网络 nlp net_神经网络_98
由于nlp对抗训练网络 nlp net_深度学习_99以及nlp对抗训练网络 nlp net_神经网络_100都是独立的,且nlp对抗训练网络 nlp net_深度学习_101,那么自然有:
nlp对抗训练网络 nlp net_计算机视觉_102
进而有:
nlp对抗训练网络 nlp net_权重_103

2.2.2 二值卷积

对于卷积核nlp对抗训练网络 nlp net_计算机视觉_104,以及输入tensornlp对抗训练网络 nlp net_权重_105,需要对nlp对抗训练网络 nlp net_权重_106中的每一个子tensor(大小与卷积核nlp对抗训练网络 nlp net_权重_35一致)都计算对应的尺度因子nlp对抗训练网络 nlp net_深度学习_108。在下图中的第二行,用nlp对抗训练网络 nlp net_深度学习_109以及nlp对抗训练网络 nlp net_权重_110示意了两个子tensor。由于子tensor之间的重叠,对所有可能的子tensor进行尺度因子nlp对抗训练网络 nlp net_深度学习_108的计算的时候将会导致大量的冗余计算。

针对该问题,首先,文章计算了矩阵nlp对抗训练网络 nlp net_权重_112,物理含义为输入nlp对抗训练网络 nlp net_权重_106中跨通道的元素的绝对值的平均值。然后,我们对矩阵nlp对抗训练网络 nlp net_神经网络_114进行2D的卷积,2D核的表达为nlp对抗训练网络 nlp net_计算机视觉_115

nlp对抗训练网络 nlp net_计算机视觉_116包含了所有的子tensor的尺度因子nlp对抗训练网络 nlp net_深度学习_108nlp对抗训练网络 nlp net_神经网络_118对应了子tensor中心位置在nlp对抗训练网络 nlp net_神经网络_119的对应尺度因子nlp对抗训练网络 nlp net_深度学习_108

该过程如下图的第三行所示:

nlp对抗训练网络 nlp net_深度学习_121


一旦我们得到了对应于权重的尺度因子nlp对抗训练网络 nlp net_深度学习_49以及对应于所有子tensor的尺度因子nlp对抗训练网络 nlp net_深度学习_108,我们就可以使用二值操作来近似地估计输入nlp对抗训练网络 nlp net_权重_106以及卷积核权重nlp对抗训练网络 nlp net_权重_35 之间的卷积操作,具体为:

nlp对抗训练网络 nlp net_计算机视觉_126

其中,$nlp对抗训练网络 nlp net_nlp对抗训练网络_127XNORnlp对抗训练网络 nlp net_深度学习_128bitcount$的卷积操作。该操作的示意图可见上图中的最后一行。

2.2.3 训练nlp对抗训练网络 nlp net_神经网络_76网络

对于CNN来说,典型的block包括:卷积、BN、激活、池化,如Fig3. 中的左图所示。

实际上在二进制输入上进行池化,会导致严重的信息丢失,因此,我们将池化层放在卷积的后面。为了进一步减少二值化所引入的信息损失,我们在进行二值化之前对输入进行归一化,这样的好处是使得数据尽可能地保持零均值,进而减少量化误差。二值化CNN的block如下图中的右图所示。

nlp对抗训练网络 nlp net_深度学习_130


二值激活层nlp对抗训练网络 nlp net_权重_131计算nlp对抗训练网络 nlp net_计算机视觉_116以及符号函数nlp对抗训练网络 nlp net_权重_133。对于下一层nlp对抗训练网络 nlp net_权重_134来说,已经给定了nlp对抗训练网络 nlp net_计算机视觉_116以及nlp对抗训练网络 nlp net_权重_133,即可以计算二值卷积。最后一层,即nlp对抗训练网络 nlp net_计算机视觉_137层,则直接应用池化操作。此外,我们也可以在二值卷积后插入非线性的激活层,比如说nlp对抗训练网络 nlp net_深度学习_138

一旦我们构建出基本的CNN架构后,就可以使用与二值权重网络训练一致的方式进行网络训练。

2.2.3.1 二值梯度

在反向传播过程中的计算瓶颈是:计算卷积核nlp对抗训练网络 nlp net_nlp对抗训练网络_139与输入的梯度nlp对抗训练网络 nlp net_深度学习_140之间的卷积。类似于前向传播过程中的二值化,我们也可以在反向传播过程中对nlp对抗训练网络 nlp net_深度学习_140进行二值化,这样的二值化会导致非常高效的训练过程。为了保持所有梯度下降时在所有维度上的最大变化,我们使用nlp对抗训练网络 nlp net_神经网络_142作为尺度因子。

2.2.3.2 k比特的量化

到目前为止,前面介绍的都是一比特的量化。其实这个过程可以很方便地推广至其他比特的量化的,只要将nlp对抗训练网络 nlp net_深度学习_70函数替换成:$q_{k}(x)=2\left(\frac{\left[\left(2{k}-1\right)\left(\frac{x+1}{2}\right)\right]}{2{k}-1}-\frac{1}{2}\right) nlp对抗训练网络 nlp net_nlp对抗训练网络_144[.]nlp对抗训练网络 nlp net_神经网络_145roundingnlp对抗训练网络 nlp net_计算机视觉_146x \in [-1,1]$。

3. 实验

3.1 效率分析

在一个标准卷积中,总操作次数为nlp对抗训练网络 nlp net_深度学习_147,其中nlp对抗训练网络 nlp net_神经网络_148为通道数,nlp对抗训练网络 nlp net_神经网络_149, nlp对抗训练网络 nlp net_神经网络_150

值得注意的是,一些现代的cpu可以将乘法和加法融合为单个循环操作。在这些cpu上,二进制权重网络不能提供速度提升。

文章所提出的网络的二值近似有nlp对抗训练网络 nlp net_计算机视觉_151个二进制运算和nlp对抗训练网络 nlp net_深度学习_152个非二进制运算。在现在的CPU中,我们可以在一个CPU时钟时间内中执行64个二进制运算,因此加速的倍数可以通过该式进行计算:

nlp对抗训练网络 nlp net_深度学习_153

显然,加速与通道数以及卷积核的大小有关系,与输入的尺寸没有关系。

nlp对抗训练网络 nlp net_深度学习_154


在Fig4中的(b)和©中,为不同数量的通道以及卷积核尺寸输入所带来的加速比的区别。当对一个参数进行改变的时候,我们修正了其他的参数为: nlp对抗训练网络 nlp net_nlp对抗训练网络_155(对于ResNet来说,大多数的卷积都是这样的参数)。

使用这种卷积的近似结构,理论上能够获得62.27倍的加速,实际上考虑到内存分配还有访存的一些时间消耗,真正在一个卷积操作中得到的加速倍数为58倍。

对于比较小的通道(nlp对抗训练网络 nlp net_深度学习_156)以及比较小的卷积核大小nlp对抗训练网络 nlp net_nlp对抗训练网络_157来说,加速没有那么好。这使得我们不由地想到,对于第一层和最后一层,是不是没有必要进行二值化。第一层的通道数通常是3,而最后一层的卷积核大小通常是1 * 1 。在BNN(Courbariaux等, 2016)中,也采用了类似的策略。

在Fig 4(a)中,表示了对于AlexNet、VGG-19、ResNet-18三种CNN的网络结构分别进行二值量化所需要的内存占用与不进行量化所需要的内存占用的对比。显然,Binary-weight-networks非常非常的小,可以轻易的适应便携式设备。在Fig 4中,给出了二值卷积的计算效率以及内存占用的分析。这样的分析也适用于BNN(Courbariaux等, 2016)和BinaryConnect(Courbariaux等,2015)。

而该文与之前方法的主要区别就在于使用了尺度因子,在不增加计算负担的前提下,大大地提高了精度。

3.2 影像分类任务

文章评估了二值化方法在图像分类任务上的性能。

当时,二值网络已经在比较小的数据集(如CIFAR-10、MNIST、SVHN)上给出了对应的评估结果。

为了与SOTA进行比较,文章首次在大型的数据集ImageNet (ILSVRC2012)上进行方法的评估。ImageNet有大约1.2 M的训练图像,其来自1K个类别,且有着50k张验证图像。与CIFAR和MNIST这些小数据集相比,ImageNet中的图像是分辨率较高的自然图像。

实验使用Top-1和Top-5来作为评估指标。

实验采用三种不同的CNN架构作为二值化的基本架构,分别是AlexNet(Krizhevsky 等, 2012)、ResNet(He等,2015)以及GoogLenet(Szegedy等,2015)的一个变体。

实验比较了文章所提出的二值权重网络(Binary-weight-network, 简称BWN)、BinarvConnect(简称BC)、文章所提出的XNOR-Networks(XNOR-Net)以及BinaryNeuralNet(简称BNN)这几个方法之间的性能。

BC在正向推理和反向传播过程中均使用二值权值训练深度神经网络。与文章所提出的方法类似,BC在参数更新步骤中保留了浮点数的权值。然而,文章所采用的二值化方法和BC不同。在BC中,二值化可以是确定性的,也可以是随机的,而在本对比实验中,对BC采用了确定性二值化的方式,因为随机二值化并非很有效,关于随机化二值化为什么不好用的原因,在BNN中是有所讨论的。

BNN是一种在推理时采用二值的权重与激活,且在训练的时候进行梯度计算的二值化方法。概念上来看,这是一种类似于XNOR-Network的方法,但BNN中的二值化方法和以及网络结构与XNOR-Net。其训练算法与BC类似,在评估时同样使用了确定性二值化。

3.2.1 CIFAR-10数据集结果

BC和BNN在CIFAR-10、MNIST、SVHN上的表现已经是SOTA了。

当BWN和XNOR-Net采用与BC和BNN相同的网络结构时,在CIFAR-10上的错误率分别为9.88%和10.17%。

在接下来的实验中,则探索了在一个更大、更具挑战性的数据集(ImageNet)上获得SOTA效果的可能性。

3.2.2 AlexNet

AlexNet有5个卷积层和2个全连接层。这个架构是第一个在ImageNet分类任务中体现CNN强大能力的架构。网络有约61 M个参数。

实验将AlexNet与BN层结合使用。

  • 训练: 在每次迭代中,图像先沿着较短的边resize为256,然后再随机裁剪成224 x 224大小,作为训练图像。使用训练算法训练了共16轮,bs为512。实验使用输出的softmax上的负对数似然作为分类损失函数。
    在AlexNet的复现中,没有使用Local-Response-Normalization (LRN) 层。用于更新BWN和BC参数的优化器采用了带动量的SGD,动量设为0.9。对于XNOR-Net和BNN,优化器采用ADAM ,因为ADAM收敛更快,而且对于二值的输入往往也能达到更好的精度。学习率调整策略为,从0.1开始,每隔4轮学习率衰减0.01。
  • 推理结果:使用224 x224的图像进行前向推理。

Figure 5展示了在训练和推理时的top-1和top-5变化曲线:

nlp对抗训练网络 nlp net_计算机视觉_158


虚线表示训练精度,实线表示验证精度。在所有轮,文章所提的方法都大大超过了BC和BNN(~17%)。下表将文章所提方法的最终精度与BC和BNN进行了比较:

nlp对抗训练网络 nlp net_计算机视觉_159

表中可见,权重的尺度因子nlp对抗训练网络 nlp net_深度学习_49比输入的尺度因子nlp对抗训练网络 nlp net_深度学习_108似乎有效的多。

3.2.3 ResNet以及GoogleNet 变种

在ResNet与GoogleNet变种实验中,具体的训练细节与推理细节与AlexNet类似,详见原论文,在此仅贴出对比结果,具体见下图及下表:

nlp对抗训练网络 nlp net_nlp对抗训练网络_162


nlp对抗训练网络 nlp net_权重_163

3.3 消融实验

该方法与以往的二值化方法有两个关键的区别:

  1. 二值化技术;
  2. 二值化CNN中的block结构。

对于二值化,在每次训练迭代中找到最优的缩放因子。对于block结构,对其中的层进行了重排序,目的是减少训练XNOR-Net的量化损失。

在消融实验中,评估了这两个关键区别对二进制网络性能的影响:

  1. 不使用公式(7)计算缩放因子nlp对抗训练网络 nlp net_nlp对抗训练网络_164,直接将nlp对抗训练网络 nlp net_nlp对抗训练网络_164视为网络参数。换句话说,二进制卷积之后的层使用每个卷积核的标量参数乘以卷积的输出。这类似于在BN中计算仿射参数。表3a比较了二值网络中这两种计算比例因子nlp对抗训练网络 nlp net_nlp对抗训练网络_164的效果。
  2. 表3b比较了标准块结构C-B-A-P (卷积,BN ,激活,池化)和文章所采用的结构B-A-C-P(A为二值的激活)

nlp对抗训练网络 nlp net_神经网络_167

4. 结论

本文介绍了一个简单、有效和精确的神经网络二值化的方式,这在理论上使得网络的规模减少了近32倍,进而提供了将神经网络加载到内存有限的便携设备的可能性。此外,文章所提出的XNOR-Net,其使用按位操作的方式来近似卷积,进而提供了约58倍的速度加成,这使得网络在CPU上的实时运行成为可能。