Abstract

本文是一篇经典的二值化weight和activations的文章,发表在ECCV2016.本文提出了两种有效二值化的框架:XNORNet以及BWN(Binary-Weight-Networks).在存储方面可以节省32倍的memory。在XNORNet上weights以及卷积层的input都是二值化的。在Imagenet数据集上用Alexnet做实验得到和全精度一样的accuracy。code地址: http://allenai.org/plato/xnornet.

Binary Convolutional Neural Network

设定一个三元组<I,W,>作为一个L层的CNN框架,I=Il(l=1,...,L)是CNN第l层的输入,W=Wlk(k=1,...,Kl)是CNN第l层第k个滤波器的权重,Kl是第l层滤波器的数量,代表IW的卷积操作,这里原文假设卷积核没有bias。IRc×win×hin, WRc×w×h, wwin,hhin.本文提出的两种架构一一介绍。
XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks

1.Binary-Weight-Networks(BWN)

本文直接给出了真实值W与目标二值化的B{+1,1}c×w×h之间的关系,用一个scaling factor αR+来联系两个weight。WαB,一个卷积操作就可以近似为

IW(IB)α(1)

代表不带任何乘法的卷积操作。由于weight是二值化的,所以可以实现一个卷积操作转化为加法和减法。用<I,B.A,>代表二值化weight的CNN,B=Blk是一个二值化的filter,α=AlkWlkAlkBlk.

Estimating binary weights

为了让loss不失一般性,假设W,BRn,n=c×w×h都是矢量.对于WαB,为了找到最优解,本文提出以下优化目标函数:

J(B,α)=WαB2

α,B=argminα,BJ(B,α)(2)

展开公式(2):
J(B,α)=α2BTB2αWTB+WTW(3)

B{+1,1}n,BTB=n是一个常数。WTW也是一个常数由于W是一个已经得变量,设定c=WTW,这样公式(3)就变为:
J(B,α)=α2n2αWTB+c
.
这样求B的最优解就变为以下的约束公式:
B=argmaxB{WTB},s.t.B{+1,1}n(4)

这个最优解就是:Bi=+1ifWi0以及Bi=1ifWi<0.因此最优解就是:B=sign(W).为了找到α的最优解,可以求Jα的导数并置0得:
α=WTBn(5)

带入B=sign(W)得:
α=WTsign(W)n=|Wi|n=1nWl1(6)

Training Binary-Weights-Networks

训练CNN的每一次迭代包含三个步骤:forward pass, backward pass and parameters update.这里要注意一点:在训练二值化weight(在卷积层)的时候,只在forward pass和backward propagation的时候二值化weight。对sign(r),求导公式为signr=r1|r|1.weight的导数就是:CWi=CW~i(1n+signWiα).对于update parameters来说,用全精度的weights,因为在梯度下降时,参数改变的很小,在更新完参数时,二值化可以忽略这些改变。
算法1展示了训练二值化weight的步骤:
XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
首先:对于每一层先计算出B和A,然后使用二值化的weight进行前向,然后在进行反向,最后更新参数。

XNOR-Network

在BWN里面,用A和B来近似表示真实值,但是卷积层的输入仍然是真实值的。

1.Binary Dot Product

近似XRnWRn的点乘:XTWβHTαB, H,B{+1,1}n, α,βR+, 优化以下目标函数:

α,B,β,H=argminα,B,β,HXWβαHB(7)

代表element-wise乘(对应元素相乘)。
设定YRn, Yi=XiWi,C{+1,1}n, Ci=HiBi,γ=βα.公式(7)可以重写为:
γ,C=argminγ,CYγC(8)

根据公式(2),我们可以得到最优解:
C=sign(Y)=sign(X)sign(W)=HB(9)

由于|Xi||Wi|是独立的,Yi=XiWi,所以E[|Yi|]=E[|Xi||Wi|]=E[|Xi|]E[|Wi|],因此
γ=|Yi|n=|Xi||Wi|n(1nXl1)(1nWl1)=βα(10)

2.Binary Convolution

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
输入IRc×win×hin在图二中有两个sub-tensorsX1X2。由于sub-tensors之间有很多重叠,导致有很多冗余的计算。为了克服这个冗余,首先计算出输入I在channel的均方和,A=|I:,:,i|c, 将A和一个2D的卷积核kRw×h,K=Akkij=1w×h,ijKij对应位置ij处的β, 一旦得到αβ

IW(sign(I)sign(W))Kα(11)

表示一个卷积操作使用XNOR和bitcount操作。

3.Training XNOR-Networks

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
Fig.3 左图展示了典型的block,右图展示了XNOR-Net的block,binary activation layer(BinActiv)作用是计算出Ksign(I), BinConv层中,给定Ksign(I),根据公式(11),计算二值化的卷积。训练算法跟算法1一样。

4.Binary Gradient

Experiments

XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks

相关文章:

  • 2021-05-11
  • 2021-12-19
  • 2021-10-06
  • 2021-09-10
  • 2022-01-13
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-07-21
  • 2021-11-13
  • 2021-07-15
  • 2021-12-31
相关资源
相似解决方案