[京哥读论文]之XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks

8 篇文章 0 订阅
8 篇文章 0 订阅

Abstract

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

Binary Convolutional Neural Network

设定一个三元组 &lt; I , W , ∗ &gt; &lt;I,W,*&gt; <I,W,>作为一个 L L L层的CNN框架, I = I l ( l = 1 , . . . , L ) I=I_{l(l=1,...,L)} I=Il(l=1,...,L)是CNN第 l l l层的输入, W = W l k ( k = 1 , . . . , K l ) W=W_{lk(k=1,...,K^l)} W=Wlk(k=1,...,Kl)是CNN第 l l l层第 k k k个滤波器的权重, K l K^l Kl是第 l l l层滤波器的数量, ∗ * 代表 I I I W W W的卷积操作,这里原文假设卷积核没有bias。 I ∈ R c × w i n × h i n I\in\mathbb R^{c\times w_{in}\times h_{in}} IRc×win×hin, W ∈ R c × w × h W\in\mathbb R^{c\times w\times h} WRc×w×h, w ≤ w i n w\le w_{in} wwin, h ≤ h i n h\le h_{in} hhin.本文提出的两种架构一一介绍。
这里写图片描述

1.Binary-Weight-Networks(BWN)

本文直接给出了真实值 W W W与目标二值化的 B ∈ { + 1 , − 1 } c × w × h B\in \{+1,-1\}^{c\times w\times h} B{+1,1}c×w×h之间的关系,用一个scaling factor α ∈ R + \alpha \in \mathbb R^+ αR+来联系两个weight。 W ≈ α B W \approx \alpha B WαB,一个卷积操作就可以近似为
I ∗ W ≈ ( I ⊕ B ) α ( 1 ) I*W \approx (I\oplus B)\alpha \quad (1) IW(IB)α(1)
⊕ \oplus 代表不带任何乘法的卷积操作。由于weight是二值化的,所以可以实现一个卷积操作转化为加法和减法。用 &lt; I , B . A , ⊕ &gt; &lt;I,B.A,\oplus&gt; <I,B.A,>代表二值化weight的CNN, B = B l k B=B_{lk} B=Blk是一个二值化的filter, α = A l k \alpha=A_{lk} α=Alk W l k ≈ A l k B l k W_{lk}\approx A_{lk}B_{lk} WlkAlkBlk.

Estimating binary weights

为了让loss不失一般性,假设 W , B ∈ R n , n = c × w × h W,B\in \mathbb R^{n},n=c\times w \times h W,BRn,n=c×w×h都是矢量.对于 W ≈ α B W \approx \alpha B WαB,为了找到最优解,本文提出以下优化目标函数:
J ( B , α ) = ∥ W − α B ∥ 2 J(B,\alpha)=\Vert W-\alpha B \Vert^2 J(B,α)=WαB2
α ∗ , B ∗ = a r g min ⁡ α , B J ( B , α ) ( 2 ) \alpha^*,B^*=arg\min\limits_{\alpha,B} J(B,\alpha) \quad (2) α,B=argα,BminJ(B,α)(2)
展开公式(2):
J ( B , α ) = α 2 B T B − 2 α W T B + W T W ( 3 ) J(B, \alpha)=\alpha^2B^TB - 2\alpha W^T B + W^TW \quad(3) J(B,α)=α2BTB2αWTB+WTW(3)
B ∈ { + 1 , − 1 } n , B T B = n B\in \{+1,-1\}^n,B^TB=n B{+1,1}n,BTB=n是一个常数。 W T W W^TW WTW也是一个常数由于 W W W是一个已经得变量,设定 c = W T W c=W^TW c=WTW,这样公式(3)就变为:
J ( B , α ) = α 2 n − 2 α W T B + c J(B, \alpha)=\alpha^2n-2\alpha W^TB+c J(B,α)=α2n2αWTB+c.
这样求** B B B的最优解**就变为以下的约束公式:
B ∗ = a r g max ⁡ B { W T B } , s . t . B ∈ { + 1 , − 1 } n ( 4 ) B^*=arg\max\limits_B\{W^TB\}, \quad s.t.\quad B\in\{+1,-1\}^n \quad (4) B=argBmax{WTB},s.t.B{+1,1}n(4)
这个最优解就是: B i = + 1 &ThickSpace; i f &ThickSpace; W i ≥ 0 B_i=+1 \; if \;W_i \ge0 Bi=+1ifWi0以及 B i = − 1 &ThickSpace; i f &ThickSpace; W i &lt; 0 B_i=-1 \; if \; W_i &lt;0 Bi=1ifWi<0.因此最优解就是: B ∗ = s i g n ( W ) B^*=sign(W) B=sign(W).为了找到 α ∗ \alpha^* α的最优解,可以求 J J J α \alpha α的导数并置0得:
α ∗ = W T B ∗ n ( 5 ) \alpha^*=\frac{W^TB^*}{n}\quad (5) α=nWTB(5)
带入 B ∗ = s i g n ( W ) B^*=sign(W) B=sign(W)得: α ∗ = W T s i g n ( W ) n = ∑ ∣ W i ∣ n = 1 n ∥ W ∥ l 1 ( 6 ) \alpha^*=\frac{W^Tsign(W)}{n}=\frac{\sum|W_i|}{n}=\frac{1}{n}\Vert W \Vert_{l1}\quad (6) α=nWTsign(W)=nWi=n1Wl1(6)

Training Binary-Weights-Networks

训练CNN的每一次迭代包含三个步骤:forward pass, backward pass and parameters update.这里要注意一点:在训练二值化weight(在卷积层)的时候,只在forward pass和backward propagation的时候二值化weight。对 s i g n ( r ) sign(r) sign(r),求导公式为 ∂ s i g n ∂ r = r 1 ∣ r ∣ ≤ 1 \frac {\partial sign}{\partial r}=r1_{|r| \le 1} rsign=r1r1.weight的导数就是: ∂ C ∂ W i = ∂ C ∂ W ~ i ( 1 n + ∂ s i g n ∂ W i α ) \frac {\partial C}{\partial W_i}=\frac {\partial C}{\partial \widetilde W_i}(\frac {1}{n}+\frac {\partial sign}{\partial W_i}\alpha) WiC=W iC(n1+Wisignα).对于update parameters来说,用全精度的weights,因为在梯度下降时,参数改变的很小,在更新完参数时,二值化可以忽略这些改变。
算法1展示了训练二值化weight的步骤:
这里写图片描述
首先:对于每一层先计算出B和A,然后使用二值化的weight进行前向,然后在进行反向,最后更新参数。

XNOR-Network

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

1.Binary Dot Product

近似 X ∈ R n X\in \mathbb R^n XRn W ∈ R n W\in \mathbb R^n WRn的点乘: X T W ≈ β H T α B X^TW \approx \beta H^T \alpha B XTWβHTαB, H , B ∈ { + 1 , − 1 } n H,B \in \{+1, -1\}^n H,B{+1,1}n, α , β ∈ R + \alpha, \beta \in \mathbb R^+ α,βR+, 优化以下目标函数:
α ∗ , B ∗ , β ∗ , H ∗ = a r g min ⁡ α , B , β , H ∥ X ⊙ W − β α H ⊙ B ∥ ( 7 ) \alpha^*,B^*, \beta^*, H^*=arg\min\limits_{\alpha,B,\beta,H} \Vert X \odot W -\beta \alpha H\odot B\Vert \quad (7) α,B,β,H=argα,B,β,HminXWβαHB(7)
⊙ \odot 代表element-wise乘(对应元素相乘)。
设定 Y ∈ R n Y\in \mathbb R^n YRn, Y i = X i W i , C ∈ { + 1 , − 1 } n Y_i=X_iW_i, C\in\{+1,-1\}^n Yi=XiWi,C{+1,1}n, C i = H i B i , γ = β α C_i=H_iB_i, \gamma=\beta \alpha Ci=HiBi,γ=βα.公式(7)可以重写为:
γ ∗ , C ∗ = a r g min ⁡ γ , C ∥ Y − γ C ∥ ( 8 ) \gamma^*, C^*=arg\min\limits_{\gamma, C} \Vert Y- \gamma C\Vert \quad (8) γ,C=argγ,CminYγC(8)
根据公式(2),我们可以得到最优解:
C ∗ = s i g n ( Y ) = s i g n ( X ) ⊙ s i g n ( W ) = H ∗ ⊙ B ∗ ( 9 ) C^*=sign(Y)=sign(X) \odot sign(W)=H^* \odot B^* \quad (9) C=sign(Y)=sign(X)sign(W)=HB(9)
由于 ∣ X i ∣ |X_i| Xi ∣ W i ∣ |W_i| Wi是独立的, Y i = X i W i Y_i=X_iW_i Yi=XiWi,所以 E [ ∣ Y i ∣ ] = E [ ∣ X i ∣ ∣ W i ∣ ] = E [ ∣ X i ∣ ] E [ ∣ W i ∣ ] E[|Y_i|]=E[|X_i||W_i|]=E[|X_i|]E[|W_i|] E[Yi]=E[XiWi]=E[Xi]E[Wi],因此
γ ∗ = ∑ ∣ Y i ∣ n = ∣ X i ∣ ∣ W i ∣ n ≈ ( 1 n ∥ X ∥ l 1 ) ( 1 n ∥ W ∥ l 1 ) = β ∗ α ∗ ( 10 ) \gamma^* = \frac {\sum|Y_i|}{n}=\frac {|X_i||W_i|}{n} \approx (\frac {1}{n}\Vert X \Vert_{l1}) (\frac {1}{n}\Vert W \Vert_{l1})=\beta ^* \alpha^* \quad (10) γ=nYi=nXiWi(n1Xl1)(n1Wl1)=βα(10)

2.Binary Convolution

这里写图片描述
输入 I ∈ R c × w i n × h i n I\in \mathbb R^{c\times w_{in} \times h_{in}} IRc×win×hin在图二中有两个sub-tensors X 1 X_1 X1 X 2 X_2 X2。由于sub-tensors之间有很多重叠,导致有很多冗余的计算。为了克服这个冗余,首先计算出输入 I I I在channel的均方和, A = ∑ ∣ I : , : , i &ThickSpace; ∣ c A= \frac {\sum |I_{:,:,i}\;|}{c} A=cI:,:,i, 将 A A A和一个2D的卷积核 k ∈ R w × h , K = A ∗ k , k i j = 1 w × h , ∀ i j k\in \mathbb R^{w \times h}, K=A*k, k_{ij}=\frac {1}{w\times h},\forall ij kRw×h,K=Akkij=w×h1,ij K i j K_{ij} Kij对应位置 i j ij ij处的 β \beta β, 一旦得到 α \alpha α β \beta β
I ∗ W ≈ ( s i g n ( I ) ⊛ s i g n ( W ) ) ⊙ K α ( 11 ) I*W \approx (sign(I) \circledast sign(W))\odot K \alpha \quad (11) IW(sign(I)sign(W))Kα(11)
⊛ \circledast 表示一个卷积操作使用XNOR和bitcount操作。

3.Training XNOR-Networks

这里写图片描述
Fig.3 左图展示了典型的block,右图展示了XNOR-Net的block,binary activation layer(BinActiv)作用是计算出 K K K s i g n ( I ) sign(I) sign(I), BinConv层中,给定 K K K s i g n ( I ) sign(I) sign(I),根据公式(11),计算二值化的卷积。训练算法跟算法1一样。

4.Binary Gradient

Experiments

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值