作者‖ flow
编辑‖ 3D视觉开发者社区

前言

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

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


论文链接:
https://sci-hub.yncjkj.com/https:/link.springer.com/chapter/10.1007/978-3-319-46493-0_32#

代码链接: http://allenai.org/plato/xnornet

论文信息及当前被引量: 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. 二值卷积神经网络


不妨设L层的CNN架构为⟨I,W,∗⟩\langle\mathcal{I}, \mathcal{W}, *\rangle⟨I,W,∗⟩,I\mathcal{I}I是一系列tensor的集合,对于I\mathcal{I}I中的每一个元素I=Il(l=1,...,L)I = \mathcal{I}_{l(l=1,...,L)}I=Il(l=1,...,L)​,表示第lll层网络的输入,如Fig. 1中的绿色三维体所示。W\mathcal{W}W也是一系列tensor的集合,但其中的每一个元素表示W=Wlk(k=1,...,Kl)W = \mathcal{W}_{lk(k=1,...,K^l)}W=Wlk(k=1,...,Kl)​,表示第lll层的第kkk个权重,KlK^lKl则是第lll层的卷积核的个数。∗*∗表示III与WWW之间的卷积操作,在该文章中,假设卷积操作不包含偏置。具体地,I∈Rc∗win∗hinI \in \mathbb{R}^{c * w_{in} * h_{in}}I∈Rc∗win​∗hin​,而W∈Rc∗w∗hW \in \mathbb{R}^{c * w * h}W∈Rc∗w∗h。

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

  • Binary-weights: W\mathcal{W}W中的元素为二值;
  • XNOR-Networks: I\mathcal{I}I与W\mathcal{W}W都是二值。

2.1 Binary-Weight-Networks

为了使得Binary-Weight-Networks能够拥有二值的权重,文章首先通过一个二值滤波器B∈{+1,−1}c∗w∗hB \in \{+1,-1\}^{c * w *h}B∈{+1,−1}c∗w∗h,以及一个尺度因子α∈R+\alpha \in \mathbb{R}^+α∈R+估计出浮点数的权重W∈WW \in \mathcal{W}W∈W,使得W≈αBW \approx \alpha BW≈αB,进而,卷积操作可以近似为:
I∗W≈(I⊕B)α\mathbf{I} * \mathbf{W} \approx(\mathbf{I} \oplus \mathbf{B}) \alpha I∗W≈(I⊕B)α
其中,⊕\oplus⊕表示不使用任何矩阵乘法的卷积操作。

不妨使用(I,B,A,⊕)(\mathcal{I}, \mathcal{B}, \mathcal{A},\oplus)(I,B,A,⊕)表示有二值权重的CNN,其中B\mathcal{B}B表示一系列的二值tensortensortensor,A\mathcal{A}A表示一系列正的浮点数的标量,进而,B=Blk\mathbf{B} = \mathcal{B}_{lk}B=Blk​表示二值的卷积核,α=Alk\alpha = \mathcal{A}_{lk}α=Alk​则为所谓的尺度因子,且有Wlk≈AlkBlk\mathcal{W}_{lk} \approx \mathcal{A}_{lk} \mathcal{B}_{lk}Wlk​≈Alk​Blk​。

2.1.1 二值权重估计

我们现在假设W\mathbf{W}W,B\mathbf{B}B均为Rn\mathbb{R}^nRn的向量,其中n=c∗w∗hn = c * w * hn=c∗w∗h。

我们希望,约等式W≈αB\mathbf{W} \approx \alpha \mathbf{B}W≈αB的两边尽可能地相等,换成数学表达,即为求解下式的最优解:
J(B,α)=∥W−αB∥2α∗,B∗=argmin⁡α,BJ(B,α)\begin{array}{r} J(\mathbf{B}, \alpha)=\|\mathbf{W}-\alpha \mathbf{B}\|^{2} \\ \alpha^{*}, \mathbf{B}^{*}=\underset{\alpha, \mathbf{B}}{\operatorname{argmin}} J(\mathbf{B}, \alpha) \end{array} J(B,α)=∥W−αB∥2α∗,B∗=α,Bargmin​J(B,α)​
对上式进行展开,有:
J(B,α)=α2B⊤B−2αW⊤B+W⊤WJ(\mathbf{B}, \alpha)=\alpha^{2} \mathbf{B}^{\top} \mathbf{B}-2 \alpha \mathbf{W}^{\top} \mathbf{B}+\mathbf{W}^{\top} \mathbf{W} J(B,α)=α2B⊤B−2αW⊤B+W⊤W
由于B∈{+1,−1}n\mathbf{B} \in \{+1,-1\}^nB∈{+1,−1}n,BTB=n\mathbf{B}^T\mathbf{B} = nBTB=n 为一个常数。此外,由于W\mathbf{W}W是已知的变量,因此WTW\mathbf{W}^T\mathbf{W}WTW的结果同样也是一个常数,我们不妨假设c=WTW\mathbf{c} = \mathbf{W}^T \mathbf{W}c=WTW。进而,式(3)可以被改写为:
J(B,α)=α2n−2αW⊤B+cJ(\mathbf{B}, \alpha)=\alpha^{2} n-2 \alpha \mathbf{W}^{\top} \mathbf{B}+\mathbf{c} J(B,α)=α2n−2αW⊤B+c
有了式(4)后,我们如何调整B\mathbf{B}B,使得整体式子的值最小呢?由于α\alphaα为正值,c\mathbf{c}c为常数,因此我们可以通过最大化以下的约束优化问题,即:
B∗=argmax⁡B{W⊤B}s.t. B∈{+1,−1}n\mathbf{B}^{*}=\underset{\mathbf{B}}{\operatorname{argmax}}\left\{\mathbf{W}^{\top} \mathbf{B}\right\} \quad \text { s.t. } \mathbf{B} \in\{+1,-1\}^{n} B∗=Bargmax​{W⊤B} s.t. B∈{+1,−1}n
上式的调整是比较好解决的,因为B\mathbf{B}B只能是+1+1+1或者−1-1−1,所以我们直接在Wi≥0\mathbf{W_i} \ge 0Wi​≥0时令Bi=+1\mathbf{B_i} = +1Bi​=+1,反之则令Bi=−1\mathbf{B_i}=-1Bi​=−1。简洁一点讲,求解最佳B\mathbf{B}B的方式就是B∗=sign(W)\mathbf{B}^* = sign(\mathbf{W})B∗=sign(W)。

至于最佳的尺度因子α∗\alpha^*α∗的估计,我们可以求JJJ对α\alphaα的偏导,并将该结果设为0,即:
α∗=W⊤B∗n\alpha^{*}=\frac{\mathbf{W}^{\top} \mathbf{B}^{*}}{n} α∗=nW⊤B∗​
将上式中的B∗\mathbf{B^*}B∗替换成sign(W)sign(\mathbf{W})sign(W),则有:
α∗=W⊤sign⁡(W)n=∑∣Wi∣n=1n∥W∥ℓ1\alpha^{*}=\frac{\mathbf{W}^{\top} \operatorname{sign}(\mathbf{W})}{n}=\frac{\sum\left|\mathbf{W}_{i}\right|}{n}=\frac{1}{n}\|\mathbf{W}\|_{\ell 1} α∗=nW⊤sign(W)​=n∑∣Wi​∣​=n1​∥W∥ℓ1​
即,最优的尺度因子α\alphaα就是权重绝对值的平均值。

2.1.2 二值权重网络的训练

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

为了训练一个权重为二值的CNN,我们仅仅在前向推理与反向传播的时候对二值进行传播。为了计算符号函数sign(r)sign(r)sign(r)的梯度,我们遵循Denil等(2013)的方法,即∂sign ∂r=r1∣r∣≤1\frac{\partial \text { sign }}{\partial r}=r 1_{|r| \leq 1}∂r∂ sign ​=r1∣r∣≤1​,经过尺度矫正后的signsignsign函数在反向传播时的梯度计算为:
∂C∂Wi=∂CWi‾(1n+∂sign ∂Wiα)\frac{\partial C}{\partial W_{i}}=\frac{\partial C}{\overline{W_{i}}}\left(\frac{1}{n}+\frac{\partial \text { sign }}{\partial W_{i}} \alpha\right) ∂Wi​∂C​=Wi​​∂C​(n1​+∂Wi​∂ sign ​α)
至于参数的更新,由于梯度下降的程度往往是微小的,因此我们使用高精度的浮点数的权值对参数进行更新。Denil等(2013)以及Courbariaux等(2015)同样也采用了这样的训练策略,具体见以下算法:

该算法具体地描述了如何使用二值权重对CNN进行训练。首先,我们通过计算B\mathcal{B}B和A\mathcal{A}A对卷积核进行二值化。其次,我们使用二值化的权重及其对应的尺度因子进行前向传播。再次,我们通过计算卷积核W~\tilde{\mathcal{W} }W~的梯度进行反向传播的调用。最后,进行参数以及学习率的更新。

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

2.2 XNOR-Networks

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

基于这样的思想,我们进一步地将输入也为二值的网络称之为XNORXNORXNOR网络。为了限制一个卷积网络⟨I,W,∗⟩\langle\mathcal{I}, \mathcal{W}, *\rangle⟨I,W,∗⟩既有二值的权重,又有二值的输入,我们需要在卷积操作的每一步中都强制进行二值操作。卷积本身包括了重复的位移操作以及点积。如果我们将点积表达为二值操作的形式,那么卷积就可以近似地变成一种二值操作。

在两个二值向量之间的点积可以使用XNORXNORXNOR-BitcountingBitcountingBitcounting的方式进行等效替代。

在这一小节中,将会介绍如何通过两个取值为{+1,−1}n\{+1,-1\}^n{+1,−1}n的向量之间的点乘来近似两个在Rn\mathbb{R}^nRn空间的向量的点乘。

其次,将介绍如何使用这样的近似方式来估计两个tensortensortensor之间的卷积操作。

2.2.1 二值点积

为了能够近似X,W∈Rn\mathbf{X},\mathbf{W} \in \mathbb{R}^nX,W∈Rn之间的点积,我们使得约等式XTW≈βHTαB\mathbf{X}^T\mathbf{W} \approx \beta \mathbf{H}^T\alpha\mathbf{B}XTW≈βHTαB的两边尽可能的相等,其中,H,B∈{+1,−1}n\mathbf{H},\mathbf{B} \in \{+1,-1\}^nH,B∈{+1,−1}n,且β,α∈R+\beta, \alpha \in \mathbb{R}^+β,α∈R+。这也就相当于求解以下的优化式:
α∗,B∗,β∗,H∗=argmin⁡α,B,β,H∥X⊙W−βαH⊙B∥\alpha^{*}, \mathbf{B}^{*}, \beta^{*}, \mathbf{H} *=\underset{\alpha, \mathbf{B}, \beta, \mathbf{H}}{\operatorname{argmin}}\|\mathbf{X} \odot \mathbf{W}-\beta \alpha \mathbf{H} \odot \mathbf{B}\| α∗,B∗,β∗,H∗=α,B,β,Hargmin​∥X⊙W−βαH⊙B∥
其中,⊙\odot⊙表示逐点的乘法,我们定义:

  • Y∈Rn\mathbf{Y} \in \mathbb{R}^nY∈Rn,其中Yi=XiWi\mathbf{Y_i} = \mathbf{X_i} \mathbf{W_i}Yi​=Xi​Wi​
  • C∈{+1,−1}n\mathbf{C} \in \{+1, -1\}^nC∈{+1,−1}n,其中Ci=HiBi\mathbf{C_i} = \mathbf{H_i}\mathbf{B_i}Ci​=Hi​Bi​
  • γ∈R+\gamma \in \mathbb{R}^+γ∈R+,且γ=βα\gamma = \beta \alphaγ=βα

进而,可以将式(9)改写为:
γ∗,C∗=argmin⁡γ,C∥Y−γC∥\gamma^{*}, \mathbf{C}^{*}=\underset{\gamma, \mathbf{C}}{\operatorname{argmin}}\|\mathbf{Y}-\gamma \mathbf{C}\| γ∗,C∗=γ,Cargmin​∥Y−γC∥

而在式(2)中,我们可以知道:
C∗=sign⁡(Y)=sign⁡(X)⊙sign⁡(W)=H∗⊙B∗\mathbf{C}^{*}=\operatorname{sign}(\mathbf{Y})=\operatorname{sign}(\mathbf{X}) \odot \operatorname{sign}(\mathbf{W})=\mathbf{H}^{*} \odot \mathbf{B}^{*} C∗=sign(Y)=sign(X)⊙sign(W)=H∗⊙B∗
由于∣Xi∣|\mathbf{X_i}|∣Xi​∣以及∣Wi∣|\mathbf{W_i}|∣Wi​∣都是独立的,且Yi=XiWi\mathbf{Y_i} = \mathbf{X_i}\mathbf{W_i}Yi​=Xi​Wi​,那么自然有:
E[∣Yi∣]=E[∣Xi∥Wi∣]=E[∣Xi∣]E[∣Wi∣]\mathbf{E}\left[\left|\mathbf{Y}_{i}\right|\right]=\mathbf{E}\left[\left|\mathbf{X}_{i} \| \mathbf{W}_{i}\right|\right]=\mathbf{E}\left[\left|\mathbf{X}_{i}\right|\right] \mathbf{E}\left[\left|\mathbf{W}_{i}\right|\right] E[∣Yi​∣]=E[∣Xi​∥Wi​∣]=E[∣Xi​∣]E[∣Wi​∣]
进而有:
γ∗=∑∣Yi∣n=∑∣Xi∥Wi∣n≈(1n∥X∥ℓ1)(1n∥W∥ℓ1)=β∗α∗\gamma^{*}=\frac{\sum\left|\mathbf{Y}_{i}\right|}{n}=\frac{\sum\left|\mathbf{X}_{i} \| \mathbf{W}_{i}\right|}{n} \approx\left(\frac{1}{n}\|\mathbf{X}\|_{\ell 1}\right)\left(\frac{1}{n}\|\mathbf{W}\|_{\ell 1}\right)=\beta^{*} \alpha^{*} γ∗=n∑∣Yi​∣​=n∑∣Xi​∥Wi​∣​≈(n1​∥X∥ℓ1​)(n1​∥W∥ℓ1​)=β∗α∗

2.2.2 二值卷积

对于卷积核W∈Rc∗w∗h\mathbf{W} \in \mathbb{R}^ {c * w * h}W∈Rc∗w∗h,以及输入tensorI∈Rc∗win∗hin\mathbf{I} \in \mathbb{R}^{c * w_{in} * h_{in}}I∈Rc∗win​∗hin​,需要对I\mathbf{I}I中的每一个子tensor(大小与卷积核W\mathbf{W}W一致)都计算对应的尺度因子β\betaβ。在下图中的第二行,用X1\mathbf{X_1}X1​以及X2\mathbf{X_2}X2​示意了两个子tensor。由于子tensor之间的重叠,对所有可能的子tensor进行尺度因子β\betaβ的计算的时候将会导致大量的冗余计算。

针对该问题,首先,文章计算了矩阵A=∑∣I:,:,i∣c\mathbf{A} = \frac{\sum{|\mathbf{I}:,:,i|}}{c}A=c∑∣I:,:,i∣​,物理含义为输入I\mathbf{I}I中跨通道的元素的绝对值的平均值。然后,我们对矩阵A\mathbf{A}A进行2D的卷积,2D核的表达为k∈Rw∗h,K=A∗k,其中∀ijkij=1w×hk \in \mathbb{R}^{w * h}, \mathbf{K} = \mathbf{A} * k,其中\forall i j \mathbf{k}_{i j}=\frac{1}{w \times h}k∈Rw∗h,K=A∗k,其中∀ijkij​=w×h1​。

K\mathbf{K}K包含了所有的子tensor的尺度因子β\betaβ,Kij\mathbf{K_{ij}}Kij​对应了子tensor中心位置在ijijij的对应尺度因子β\betaβ。

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

一旦我们得到了对应于权重的尺度因子α\alphaα以及对应于所有子tensor的尺度因子β\betaβ,我们就可以使用二值操作来近似地估计输入I\mathbf{I}I以及卷积核权重W\mathbf{W}W 之间的卷积操作,具体为:
I∗W≈(sign⁡(I)⊛sign⁡(W))⊙Kα\mathbf{I} * \mathbf{W} \approx(\operatorname{sign}(\mathbf{I}) \circledast \operatorname{sign}(\mathbf{W})) \odot \mathbf{K} \alpha I∗W≈(sign(I)⊛sign(W))⊙Kα
其中,$⊛⁡表示使用\circledast \operatorname\ 表示使用⊛ 表示使用XNOR以及以及以及bitcount$的卷积操作。该操作的示意图可见上图中的最后一行。

2.2.3 训练XNORXNORXNOR网络

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

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

二值激活层BinActivBinActivBinActiv计算K\mathbf{K}K以及符号函数sign(I)sign(\mathbf{I})sign(I)。对于下一层BinConvBinConvBinConv来说,已经给定了K\mathbf{K}K以及sign(I)sign(\mathbf{I})sign(I),即可以计算二值卷积。最后一层,即poolpoolpool层,则直接应用池化操作。此外,我们也可以在二值卷积后插入非线性的激活层,比如说ReLUReLUReLU。

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

2.2.3.1 二值梯度

在反向传播过程中的计算瓶颈是:计算卷积核www与输入的梯度ging^{in}gin之间的卷积。类似于前向传播过程中的二值化,我们也可以在反向传播过程中对ging^{in}gin进行二值化,这样的二值化会导致非常高效的训练过程。为了保持所有梯度下降时在所有维度上的最大变化,我们使用maxi(∣giin∣)max_i(|g_i^{in}|)maxi​(∣giin​∣)作为尺度因子。

2.2.3.2 k比特的量化

到目前为止,前面介绍的都是一比特的量化。其实这个过程可以很方便地推广至其他比特的量化的,只要将signsignsign函数替换成:$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) 就可以了,其中就可以了,其中就可以了,其中[.]表示表示表示rounding操作,且有操作,且有操作,且有x \in [-1,1]$。

3. 实验

3.1 效率分析

在一个标准卷积中,总操作次数为cNwNIcN_w N_IcNw​NI​,其中ccc为通道数,Nw=whN_w =whNw​=wh, NI=winhinN_I=w_{in}h_{in}NI​=win​hin​。

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

文章所提出的网络的二值近似有cNwNIcN_wN_IcNw​NI​个二进制运算和NIN_INI​个非二进制运算。在现在的CPU中,我们可以在一个CPU时钟时间内中执行64个二进制运算,因此加速的倍数可以通过该式进行计算:
S=cNWNI164cNWNI+NI=64cNWcNW+64S=\frac{c N_{\mathrm{W}} N_{\mathrm{I}}}{\frac{1}{64} c N_{\mathrm{W}} N_{\mathrm{I}}+N_{\mathrm{I}}}=\frac{64 c N_{\mathrm{W}}}{c N_{\mathrm{W}}+64} S=641​cNW​NI​+NI​cNW​NI​​=cNW​+6464cNW​​
显然,加速与通道数以及卷积核的大小有关系,与输入的尺寸没有关系。

在Fig4中的(b)和©中,为不同数量的通道以及卷积核尺寸输入所带来的加速比的区别。当对一个参数进行改变的时候,我们修正了其他的参数为: c=256,nI=142,nW=32c= 256, n_{\mathbf{I}} = 14^2, n_{\mathbf{W}} = 3^2c=256,nI​=142,nW​=32(对于ResNet来说,大多数的卷积都是这样的参数)。

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

对于比较小的通道(c=3c = 3c=3)以及比较小的卷积核大小NW=1∗1N_{\mathbf{W}}= 1 *1NW​=1∗1来说,加速没有那么好。这使得我们不由地想到,对于第一层和最后一层,是不是没有必要进行二值化。第一层的通道数通常是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变化曲线:

虚线表示训练精度,实线表示验证精度。在所有轮,文章所提的方法都大大超过了BC和BNN(~17%)。

下表将文章所提方法的最终精度与BC和BNN进行了比较:

表中可见,权重的尺度因子α\alphaα比输入的尺度因子β\betaβ似乎有效的多。

3.2.3 ResNet以及GoogleNet 变种

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

3.3 消融实验

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

  1. 二值化技术;

  2. 二值化CNN中的block结构。

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

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

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

4. 结论

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

5. 参考文献

  1. Courbariaux, M., Bengio, Y., David, J.P.: Binaryconnect: training deep neural networks with binary weights during propagations. In: Advances in Neural Information Processing Systems, pp. 3105–3113 (2015)
  2. Courbariaux, M., Bengio, Y.: Binarynet: training deep neural networks with weights and activations constrained to +1 or −1. CoRR (2016)
  3. Krizhevsky, A., Sutskever, I., Hinton, G.E.: Imagenet classification with deep convolutional neural networks. In: Advances in neural information processing systems, pp. 1097–1105 (2012)
  4. He, K., Zhang, X., Ren, S., Sun, J.: Deep residual learning for image recognition. CoRR (2015)
  5. Szegedy, C., Liu, W., Jia, Y., Sermanet, P., Reed, S., Anguelov, D., Erhan, D., Vanhoucke, V., Rabinovich, A.: Going deeper with convolutions. In: Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pp. 1–9 (2015)

版权声明:本文为奥比中光3D视觉开发者社区特约作者授权原创发布,未经授权不得转载,本文仅做学术分享,版权归原作者所有,若涉及侵权内容请联系删文。

3D视觉开发者社区是由奥比中光给所有开发者打造的分享与交流平台,旨在将3D视觉技术开放给开发者。平台为开发者提供3D视觉领域免费课程、奥比中光独家资源与专业技术支持。点击加入3D视觉开发者社区,和开发者们一起讨论分享吧~

或可微信关注官方公众号 3D视觉开发者社区 ,获取更多干货知识哦。

微软联合创始人都看好,这项技术有什么过人之处?相关推荐

  1. 微软联合创始人保罗·艾伦去世,曾说服比尔·盖茨辍学

    乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI 愿天堂没有病痛. 今天早间,微软联合创始人保罗·艾伦(Paul Allen)的家族基金Vulcan Capital宣布: 艾伦因非霍奇金淋 ...

  2. 微软联合创始人保罗·艾伦因病离世,享年 65 岁

    (点击上方蓝字,可快速关注我们) 综合整理:DotNet(id: iDotNet) 据美国 CNBC 报道,微软联合创始人保罗·艾伦(Paul Allen)于西雅图当地时间周一下午,因非霍奇金淋巴瘤并 ...

  3. 【历史上的今天】8 月 28 日:微软联合创始人控诉苹果、谷歌等众企业侵权;人工智能医学领域先驱出生

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 8 月 28 日,八月份的最后一个周末.121 年前的今天,百事可乐公司成立,而在科技历史上的今天也 ...

  4. 今日科技联播:微软联合创始人之一保罗·艾伦去世;锤子否认分公司解散传闻...

    点击关注云栖社区,置顶公众号 专业的行业热点新闻及技术干货,不容错过 ---------------- 今日热点 微软联合创始人保罗·艾伦因病去世,比尔·盖茨悼念艾伦:没有他就没有个人电脑:再传&qu ...

  5. 豪掷197亿美元!微软收购Siri背后的语音技术研发公司

    作者 | Carol 出品 | CSDN(ID:CSDNnews) 4月12日,微软宣布:将以每股56美元的价格收购语音识别巨头Nuance Communications,交易价值达197亿美元. 收 ...

  6. 【SaaS播客】nextS6E06. 对话Databricks联合创始人Reynold Xin:380 亿美元估值背后的长期主义

    Databricks是大数据领域的元老公司,我印象中在14/15年那段时间是和Cloudera.Hortonworks齐名的,而18年那两家已经走下坡路合并了,但Databricks反而这几年越来越好 ...

  7. 大数据早报:路桥率先利用“人脸识别”技术监管医保 亚马逊与微软联合开发人工智能,打造服务大众的AI(10.19)

    数据早知道,上乐投网看早报! 『数据安全』微软内部Windows漏洞数据库曾被入侵:后果可怕 作为这个星球上覆盖率最高的操作系统,Windows的一举一动都影响着大家的使用体验,对于它的安全微软也是相 ...

  8. AWS 聘用 Rust 编译器联合创始人,大企为何都爱 Rust?

    整理 | 夕颜 图源 | 视觉中国 出品 | CSDN(ID:CSDNnews) 近日,AWS开源团队在一篇帖子中低调宣布,已聘用Rust编译器联合创始人Felix Klock.加入AWS后,他将与于 ...

  9. 开发者周刊:英特尔再爆重大芯片漏洞;微软开源Bing搜索关键算法;Facebook联合创始人呼吁拆分Facebook

    开发者周刊:只为传递"有趣/有用"的开发者内容,点击订阅! 本周热门项目 GitHub推出软件包托管服务Package Registry 本周,GitHub 再下一城,推出自己的软 ...

最新文章

  1. 我学的是设计模式的视频教程——命令模式vs策略模式,唠嗑
  2. java session 生命周期_JavaWeb关于session生命周期的几种设置方法
  3. 2019年第十届蓝桥杯 - 省赛 - C/C++研究生组 - G. 扫地机器人
  4. 计算机学业水平考试答题卡,高一年级期末信息技术考试(含答题卡)
  5. 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)...
  6. jeecgboot配置文件_Jeecg-Boot 技术文档
  7. 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
  8. shell 批量生成随机文件
  9. 用好pypi,提高开发速度
  10. 为什么从事软件开发测试?
  11. monoGSM信号强度示例
  12. Codeforces Round #552 (Div. 3)
  13. PE启动盘安装操作系统
  14. 浅谈Linux管线命令grep
  15. freewitch测试信息-cdr
  16. 【场景实现】Vue+element如何让帖子评论带上emoji,这个需求让我在富文本Quill开始了踩坑连连看
  17. 等保2.0测评手册之安全计算环境
  18. 【拓扑学知识】1.拓扑空间与度量拓扑
  19. 二叉树之字形层次遍历
  20. 偏态分布的均值与中位数关系

热门文章

  1. Windows server 2003 R2之三:通过域对统一部署客户端软件
  2. 使用git将本地项目工程推送到码云上
  3. 杭州码农哀叹:新买的房子装修到一半没钱了,靠着贷款平台借钱才勉强推进。这套房子价格高达1000多万,有钱买却没钱装修!...
  4. 快手基于 RocketMQ 的在线消息系统建设实践
  5. 一周内咸鱼疯传2.4W次,最终被所有大厂封杀
  6. 分布式架构下,Session 共享有什么方案?
  7. MySQL 性能优化,索引和查询优化
  8. 【斩获7枚offer,入职阿里平台事业部】横扫阿里、美团、京东、 去哪儿之后,我写下了这篇面经!...
  9. 没做领导的时候,觉得领导都是傻X!做了领导之后觉得下属才是傻X!
  10. 大数据加入渗透实体,错过它你将错过一个时代!