论文题目:Towards Accurate Binary Convolutional Neural Network_NIPS2017
引用量:98
code:https://github.com/layog/Accurate-Binary-Convolution-Network
https://github.com/cow8/ABC-Net-pytorch
由于之前二值化工作在ImageNet数据集上损失的精度很大,这篇文章是二值化领域第一次在ImageNet数据集与全精度最接近的文章.本文提出了一个ABC-Net,用多个二值函数的线性组合来近似浮点权重以及激活函数。在有足够多二值权值和激活值的情况下,ABC-Net 的准确率远比以往的二值网络更接近它们对应的浮点版本,甚至能在 ImageNet 和 forest trail 数据集上达到可以与浮点网络相比较的准确率。
Binarization methods
- Weight aoproximation
考虑一个L层的CNN,每一层weights用 ( w , h , c i n , c o u t ) (w,h,c_{in},c_{out}) (w,h,cin,cout)来表示,假设使用M个二值的线性组合。- Approximate weights as a whole
本文采用一组二值化基(binary filter base)的线性组合来逼近W,
W ≈ α 1 B 1 + α 2 B 2 + . . . + α M B M W \approx \alpha_1B_1 + \alpha_2B_2 + ... + \alpha_MB_M W≈α1B1+α2B2+...+αMBM
本文类似XNOR优化以下问题:
min α , B = ∣ ∣ w − B α ∣ ∣ 2 , s . t . B i j ∈ − 1 , + 1 ( 1 ) \min \limits_{\alpha,B}=||w-B\alpha||^2, \quad s.t.B_{ij} \in {-1, +1} \quad (1) α,Bmin=∣∣w−Bα∣∣2,s.t.Bij∈−1,+1(1)
B = [ v e c ( B 1 ) , v e c ( B 2 ) , . . . , v e c ( B M ) ] B=[vec(B_1),vec(B_2),...,vec(B_M)] B=[vec(B1),vec(B2),...,vec(BM)], w = v e c ( W ) w=vec(W) w=vec(W), α = [ α 1 , α 2 , . . . , α M ] T \alpha = [\alpha_1,\alpha_2,...,\alpha_M]^T α=[α1,α2,...,αM]T
尽管(1)可以得到一个局部最优解,但是不能反向传播来更新参数,所以针对每个网络层,本文采用一组固定数值的矢量表示二值化基,并且由网络层参数的均值与标准差决定:
B i = F u i ( W ) : = s i g n ( W ‾ + u i s t d ( W ) ) , i = 1 , 2 , . . . , M ( 2 ) B_i=F_{u_i}(W):=sign(\overline W + u_istd(W)), i=1,2,...,M \quad (2) Bi=Fui(W):=sign(W+uistd(W)),i=1,2,...,M(2)
W ‾ = W − m e a n ( W ) \overline W=W-mean(W) W=W−mean(W), u i u_i ui是一个shift参数,比如: u i = − 1 + ( i − 1 ) 2 M − 1 , i = 1 , 2 , . . . , M u_i=-1+(i-1) \frac{2}{M-1},i=1,2,...,M ui=−1+(i−1)M−12,i=1,2,...,M,将范围变为$[-std(W), std(W)] $.
B固定后,优化变成了以下式子:
min α J ( α ) = ∣ ∣ w − B α ∣ ∣ 2 ( 3 ) \min \limits_{\alpha}J(\alpha)=||w-B\alpha||^2 \quad (3) αminJ(α)=∣∣w−Bα∣∣2(3)
前向和反向如下:
F o r w a r d : B 1 , B 2 , . . . , B M = F u 1 ( W ) , F u 2 ( W ) , . . . , F u M ( W ) ( 4 ) Forward:B_1,B_2,...,B_M=F_{u_1}(W),F_{u_2}(W),...,F_{u_M}(W) \quad (4) Forward:B1,B2,...,BM=Fu1(W),Fu2(W),...,FuM(W)(4)
\quad \quad \quad \quad \quad \quad Solve (3) for α ( 5 ) \alpha \quad (5) α(5),
O = ∑ m = 1 M α m C o n v ( B m , A ) ( 6 ) O=\sum_{m=1}^{M} \alpha_m Conv(B_m,A) \quad (6) O=m=1∑MαmConv(Bm,A)(6)
B a c k w a r d : ∂ c ∂ W = ∂ c ∂ O ( ∑ m = 1 M α m ∂ O ∂ B m ∂ B m ∂ W ) = S T E ∂ c ∂ O ( ∑ m = 1 M α m ∂ O ∂ B m ) = ∑ m = 1 M α m ∂ c ∂ B m ( 7 ) Backward:\frac{\partial c}{\partial W}=\frac{\partial c}{\partial O}(\sum_{m=1}^{M} \alpha_m \frac{\partial O}{\partial B_m} \frac{\partial B_m}{\partial W}) \overset{STE}{=} \frac{\partial c}{\partial O}(\sum_{m=1}^{M} \alpha_m \frac{\partial O}{\partial B_m})=\sum_{m=1}^{M} \alpha_m \frac{\partial c}{\partial B_m} \quad (7) Backward:∂W∂c=∂O∂c(m=1∑Mαm∂Bm∂O∂W∂Bm)=STE∂O∂c(m=1∑Mαm∂Bm∂O)=m=1∑Mαm∂Bm∂c(7)
在测试时只用(6)即可。框图如下方左图所示:
[外链图片转存失败(img-ACjOA54D-1565881699162)(https://i.loli.net/2019/08/14/hjevygPQqClV1FM.png)] - Approximate weights channel-wise
本文没有实现,思想就是一个卷积核的channel用一组二值化的基来线性组合,这样会变得非常复杂。
- Approximate weights as a whole
- Mutiple binary activations and bitwise convolution
类似DoreFa[1]一样,本文也是确保激活输出的范围控制在 h ( x ) ∈ [ − 1 , 1 ] h(x) \in [-1,1] h(x)∈[−1,1], 可以用下面公式来表示:
h v ( x ) = c l i p ( x + v , 0 , 1 ) ( 8 ) h_v(x)=clip(x+v,0,1) \quad (8) hv(x)=clip(x+v,0,1)(8)
v v v是一个shift参数,比如 v = 0 v=0 v=0, h v h_v hv就是Dorefa中的clip函数。
二值化:
H v ( R ) : = 2 I h v ( R ) ≥ 0.5 − 1 ( 9 ) H_v(R):=2I_{h_v(R) \geq 0.5}-1 \quad (9) Hv(R):=2Ihv(R)≥0.5−1(9)
训练:
F o r w a r d : A = H v ( R ) Forward:A=H_v(R) \quad Forward:A=Hv(R)
B a c k w a r d : ∂ c ∂ R = ∂ c ∂ A ∘ I 0 ≤ R − v ≤ 1 . ( u s i n g    S T E ) Backward:\frac{\partial c}{\partial R}= \frac{\partial c}{\partial A} \circ I_{0 \leq R-v \leq 1}.\quad (using \; STE) Backward:∂R∂c=∂A∂c∘I0≤R−v≤1.(usingSTE)
∘ \circ ∘代表Hadamard乘积,就是对应位置相乘。
同样,用了一组不同参数的二值化激活函数,融合的参数仍然是可训练的:
R ≈ β 1 A 1 + β 2 A 2 + . . . + β N A N R \approx \beta_1A_1+\beta_2A_2+...+\beta_NA_N R≈β1A1+β2A2+...+βNAN
A 1 , A 2 , . . . , A N = H v 1 ( R ) , H v 2 ( R ) , . . . , H v N ( R ) A_1,A_2,...,A_N=H_{v1}(R), H_{v2}(R), ..., H_{vN}(R) A1,A2,...,AN=Hv1(R),Hv2(R),...,HvN(R)
整个卷积过程:
C o n v ( W , R ) ≈ C o n v ( ∑ m = 1 M α m B m , ∑ n = 1 N β n A n ) = ∑ m = 1 M ∑ n = 1 N α m β n C o n v ( B m , A n ) Conv(W,R) \approx Conv(\sum_{m=1}^M \alpha_m B_m, \sum_{n=1}^N \beta_n A_n)=\sum_{m=1}^M\sum_{n=1}^N \alpha_m \beta_n Conv(B_m, A_n) Conv(W,R)≈Conv(m=1∑MαmBm,n=1∑NβnAn)=m=1∑Mn=1∑NαmβnConv(Bm,An)
Results
可以看出输入时全精度,权重是二值的时候,M=5,结果接近全精度。
[外链图片转存失败(img-rai90K88-1565881699189)(https://i.loli.net/2019/08/14/dDaCBXOZRcgkyP1.png)]
本文贡献
本文提出了用线性组合来近似权重和激活值,是一个不限制bit数的量化算法,不同的组合情况准确率最终可以和FP相近
不足
虽然准确率很高,但是计算复杂度太高。
参考文献:
[1] S. Zhou, Y. Wu, Z. Ni, X. Zhou, H. Wen, and Y. Zou. Dorefa-net: Training low bitwidth convolutional neural
networks with low bitwidth gradients. arXiv preprint arXiv:1606.06160, 2016.