Multi-Precision Quantized Neural Networks via Encoding Decomposition of {-1,+1}

Multi-Precision Quantized Neural Networks via Encoding Decomposition of {-1,+1}

文章目录

  • Multi-Precision Quantized Neural Networks via Encoding Decomposition of {-1,+1}
    • Introduction
    • Multi-Precision Quantized Neural Networks
      • Model Decomposition
      • M-bit Encoding Functions
    • Networks Training
    • Experiments
    • Discussion and Conclusion

文章链接 2019年5月31日

Introduction

直接使用高bit模型的参数初始化低bit模型,因此训起来很快

提出了一系列的函数(MBitEncoder)来分解激活值,可直接用于inference阶段的计算。

做完分解之后,编码可直接存入1-bit的vectors。

Multi-Precision Quantized Neural Networks

Model Decomposition

CNN中矩阵乘法是最耗时的,非负数都可以用 { 0 , 1 } \{0,1\} {0,1}来进行编码。用 x = [ x 1 , x 2 , … , x N ] T x=[x^1,x^2, \dots,x^N]^T x=[x1,x2,,xN]T w = [ w 1 , w 2 , … , w N ] T w=[w^1,w^2, \dots,w^N]^T w=[w1,w2,,wN]T来表示两个非负的向量,其中, x i , w i ∈ { 0 , 1 , 2 , …   }    i = 1 , 2 , … , N x^i,w^i\in \{0,1,2,\dots\}\ \ i=1,2,\dots,N xi,wi{0,1,2,}  i=1,2,,N,两个向量的点乘就可以表示如下:
x T ⋅ w = [ x 1 , x 2 , … , x N ] [ w 1 , w 2 , … , w N ] T = ∑ n = 1 N x n ⋅ w n (1) \begin{aligned} x^{T} \cdot w &=\left[\mathrm{x}^{1}, \mathrm{x}^{2}, \ldots, \mathrm{x}^{N}\right]\left[\mathrm{w}^{1}, \mathrm{w}^{2}, \ldots, \mathrm{w}^{N}\right]^{T} \\ &=\sum_{n=1}^{N} \mathrm{x}^{n} \cdot \mathrm{w}^{n} \end{aligned} \tag{1} xTw=[x1,x2,,xN][w1,w2,,wN]T=n=1Nxnwn(1)上面的操作包括 N N N次乘法和 N − 1 N-1 N1次加法。如果用 0 , 1 {0,1} 0,1来进行编码的话,则
x = [ c M 1 c M − 1 1 ⋯ c 1 1 ⏞ , c M 2 c M − 1 2 ⋯ c 1 2 ⏞ , … , c M N c M − 1 N … c 1 N ⏞ ] T (2) x=[\overbrace{\mathrm{c}_{M}^{1} \mathrm{c}_{M-1}^{1} \cdots \mathrm{c}_{1}^{1}}, \overbrace{\mathrm{c}_{M}^{2} \mathrm{c}_{M-1}^{2} \cdots \mathrm{c}_{1}^{2}}, \ldots, \overbrace{\mathrm{c}_{M}^{N} \mathrm{c}_{M-1}^{N} \ldots \mathrm{c}_{1}^{N}}]^{T}\tag{2} x=[cM1cM11c11 ,cM2cM12c12 ,,cMNcM1Nc1N ]T(2)然后右边的可以转换为:
[ c M 1 c M 2 ⋯ c M N c M − 1 1 c M − 1 2 ⋯ c M − 1 N ⋮ ⋮ ⋯ ⋮ c 1 1 c 1 2 ⋯ c 1 N ] = [ c M c M − 1 ⋮ c 1 ] (3) \left[\begin{array}{cccc}{\mathrm{c}_{M}^{1}} & {\mathrm{c}_{M}^{2}} & {\cdots} & {\mathrm{c}_{M}^{N}} \\ {\mathrm{c}_{M-1}^{1}} & {\mathrm{c}_{M-1}^{2}} & {\cdots} & {\mathrm{c}_{M-1}^{N}} \\ {\vdots} & {\vdots} & {\cdots} & {\vdots} \\ {\mathrm{c}_{1}^{1}} & {\mathrm{c}_{1}^{2}} & {\cdots} & {\mathrm{c}_{1}^{N}}\end{array}\right]=\left[\begin{array}{c}{c_{M}} \\ {c_{M-1}} \\ {\vdots} \\ {c_{1}}\end{array}\right]\tag{3} cM1cM11c11cM2cM12c12cMNcM1Nc1N=cMcM1c1(3)其中:
x j = ∑ m = 1 M 2 m − 1 ⋅ c m j ,    c m j ∈ { 0 , 1 } (4) x^j=\sum_{m=1}^{M}{2^{m-1}\cdot c_m^j},\ \ c_m^j \in \{0,1\}\tag{4} xj=m=1M2m1cmj,  cmj{0,1}(4)

c i = [ c i 1 , c i 1 , … , c i N ] (5) \mathrm{c}_i=[\mathrm{c}_i^1,\mathrm{c}_i^1, \dots,\mathrm{c}_i^N]\tag{5} ci=[ci1,ci1,,ciN](5)

这样的话,用于表示数据的数量不会超过 2 M 2^M 2M。同样的,将 w w w也使用 K K K-bit编码,因此,上面的点乘就变成了
x T ⋅ w = ∑ n = 1 N x n ⋅ w n = ∑ n = 1 N ( ∑ m = 1 M 2 m − 1 ⋅ c m n ) ⋅ ( ∑ k = 1 K 2 k − 1 ⋅ d k n ) = ∑ m = 1 M ∑ k = 1 K 2 m − 1 ⋅ 2 k − 1 ⋅ c m ⋅ d k T (6) \begin{aligned} x^T \cdot w &= \sum_{n=1}^{N}{x^n\cdot w^n} \\ &=\sum_{n=1}^{N}{(\sum_{m=1}^M 2^{m-1} \cdot c_m^n)\cdot (\sum_{k=1}^K 2^{k-1} \cdot d_k^n)} \\ &=\sum_{m=1}^M\sum_{k=1}^K 2^{m-1} \cdot 2^{k-1} \cdot c_m \cdot d_k^T \end{aligned} \tag{6} xTw=n=1Nxnwn=n=1N(m=1M2m1cmn)(k=1K2k1dkn)=m=1Mk=1K2m12k1cmdkT(6)由上可知,点乘被分解成 M × K M\times K M×K个子运算,其中,每个运算的元素都是0或1。然而,上面的这种形式只能表示非负数,而weight和activation不一定都是非负的。

为了扩展编码空间,使用 { − 1 , + 1 } \{-1,+1\} {1,+1}代替 { 0 , 1 } \{0,1\} {0,1}作为编码的基本元素,编码的规则是一样的:
x i = ∑ m = 1 M 2 m − 1 ⋅ c m i ,    c m i ∈ { − 1 , 1 } (7) x^i=\sum_{m=1}^{M}{2^{m-1}\cdot c_m^i},\ \ c_m^i \in \{-1,1\}\tag{7} xi=m=1M2m1cmi,  cmi{1,1}(7)式中, M M M表示编码的bit位数,共能表示 2 M 2^M 2M种值。
Multi-Precision Quantized Neural Networks via Encoding Decomposition of {-1,+1}_第1张图片
上图中,使用2-bit进行编码。 x x x是输入数据, w w w是权重矩阵,这里假定不存在bias。然后定义一个“Encoder”,便于在2BitEncoder function φ 2 1 ( ⋅ ) \varphi_2^1(\cdot) φ21() φ 2 2 ( ⋅ ) \varphi_2^2(\cdot) φ22()中使用,这个是用于对输入进行编码。例如, x x x可以用 x 1 ∈ { − 1 , + 1 } N x_1 \in \{-1,+1\}^N x1{1,+1}N x 2 ∈ { − 1 , + 1 } N x_2 \in \{-1,+1\}^N x2{1,+1}N编码,其中, x 1 x_1 x1表示低bit数据, x 2 x_2 x2表示高bit数据, x = x 1 + 2 x 2 x=x_1+2x_2 x=x1+2x2。同样的, w w w可以进行编码为 w 1 ∈ { − 1 , + 1 } M × N w_1 \in \{-1,+1\}^{M\times N} w1{1,+1}M×N w 2 ∈ { − 1 , + 1 } M × N w_2 \in \{-1,+1\}^{M\times N} w2{1,+1}M×N。经过交叉相乘之后,得到了四个中间变量 { y 1 , y 2 , y 3 , y 4 } \{y_1,y_2,y_3,y_4\} {y1,y2,y3,y4}。每一个乘法都可以认为是二进制下的全连接层,这种分解可以看成有很多分支的层,因此称之为Multi-Branch Binary Networks (MBNs)

M-bit Encoding Functions

神经网络的一个重要特性就是非线性。在本论文中,encoding function扮演了很重要的角色。一般的QNN中,并没有明确给出quantized numbers和encode bits之间的仿射变换,本部分提出了一些 M M M-bit的encoding function。

在量化之前,数据应该被线性在一个固定的数值范围内。使用了一个叫 H R e L U ( ⋅ ) HReLU(\cdot) HReLU()的激活函数,便于更快地使用SGD收敛,并把输入值限制在 [ 0 , 1 ] [0,1] [0,1]
H Re ⁡ L U ( x ) = { + 1 , x > 1 x , 0 ⩽ x ⩽ 1 0 , x ⩽ 0 (8) H \operatorname{Re} L U(x)=\left\{\begin{array}{ll}{+1,} & {x>1} \\ {x,} & {0 \leqslant x \leqslant 1} \\ {0,} & {x \leqslant 0}\end{array}\right.\tag{8} HReLU(x)=+1,x,0,x>10x1x0(8) M M M-bit的encoding function的输出也应该是 M M M个-1或者+1的数,这些数就表示了输入的编码,然后点乘就可以用式 ( 6 ) (6) (6)进行计算。同时,在上面那个图中,用2-bit来编码 x x x并把它限制在 [ − 1 , 1 ] [-1,1] [1,1],这样就会有4种编码状态。如下表2所示。
Multi-Precision Quantized Neural Networks via Encoding Decomposition of {-1,+1}_第2张图片
在表2中,是有一个线性的因子 α \alpha α的。对于表2来说, α = 3 \alpha=3 α=3。再用式 ( 6 ) (6) (6)计算的话,这个值就会变成 α 2 \alpha^2 α2倍。因此,在图1中就会产出一个 1 / 9 1/9 1/9。图2说明了2-bit和3-bit的编码函数,可以看到这些编码函数必须是周期性的,每个函数有不同的周期。自然地,我们会使用三角函数作为基本的encoder function,编码方式用红线标出。其数学表达如下:
2 B i t E n c o d e r ( x ) = { φ 2 2 ( x ) : sign ( sin ⁡ ( 3 4 π x ) ) , φ 2 1 ( x ) : sign ( − sin ⁡ ( 3 2 π x ) ) (9) 2BitEncoder(x)=\left\{\begin{array}{cc}{\varphi_{2}^{2}(x): \text{sign}(\sin (\frac{3}{4} \pi x)),} \\ \varphi_{2}^{1}(x): \text{sign}(-\sin (\frac{3}{2} \pi x))\end{array}\right.\tag{9} 2BitEncoder(x)={φ22(x):sign(sin(43πx)),φ21(x):sign(sin(23πx))(9)式中, φ 2 1 ( x ) \varphi_{2}^{1}(x) φ21(x)表示2BitEncoder中的第一个bit的encoding function, φ 2 2 ( x ) \varphi_{2}^{2}(x) φ22(x)表示2BitEncoder中的第二个bit的encoding function,它们两的周期明显是不同的。
Multi-Precision Quantized Neural Networks via Encoding Decomposition of {-1,+1}_第3张图片

Networks Training

对于QNN来说,由于导数没有定义,无法使用传统的梯度优化算法进行求解。不同的论文提出的不同的方法解决这个问题。

Multi-Branch Binary Networks Training

MBNs需要使用 M M M-bit的encoding function得到每个bit为的元素,从而使得运算更加高效。它的训练方式用2-bit进行举例说明。由于编码中符号函数的存在使得直接使用BP变得困难,我们使用下面的方式近似计算encoder function的导数。
∂ φ 2 2 ( x ) ∂ x = { 3 4 π cos ⁡ ( 3 4 π x ) , − 1 ⩽ x ⩽ 1 0  otherwise  (10) \frac{\partial \varphi_{2}^{2}(x)}{\partial x}=\left\{\begin{array}{cc}{\frac{3}{4} \pi \cos \left(\frac{3}{4} \pi x\right),} & {-1 \leqslant x \leqslant 1} \\ {0} & {\text { otherwise }}\end{array}\right.\tag{10} xφ22(x)={43πcos(43πx),01x1 otherwise (10)

∂ φ 2 1 ( x ) ∂ x = { − 3 2 π cos ⁡ ( 3 2 π x ) , − 1 ⩽ x ⩽ 1 0  otherwise  (11) \frac{\partial \varphi_{2}^{1}(x)}{\partial x}=\left\{\begin{array}{cc}{-\frac{3}{2} \pi \cos \left(\frac{3}{2} \pi x\right),} & {-1 \leqslant x \leqslant 1} \\ {0} & {\text { otherwise }}\end{array}\right.\tag{11} xφ21(x)={23πcos(23πx),01x1 otherwise (11)

除了激活值,网络中所有的权重也必须二值化。在训练过程中保留实值权重 w w w和二值化权重 w b w_b wb,使用 w b w_b wb来计算loss和梯度,来更新 w w w w w w被限制在-1和1之间,防止出现excessive growth。不同与权重, w w w的二值化函数对于encoding function来说并不需要,直接定义为:
B i n a r i z e ( x ) = s i g n ( H T a n h ( x ) ) (12) Binarize(x)=sign(HTanh(x))\tag{12} Binarize(x)=sign(HTanh(x))(12)对于这个函数,我们定义了每个元素的梯度函数来限制搜索空间,也就是说,sign函数的输入被 H T a n h ( x ) HTanh(x) HTanh(x)限定在 [ − 1 , + 1 ] [-1,+1] [1,+1]之间,它也能加速收敛。

Quantized Networks Training

上述的训练方式是用于训练二值网络的,也可以转换到多值网络中。只不过,转换会产生很多的参数。如果只优化二值化网络的话,又容易陷入局部最优解。因此直接优化多bit的量化网络,并在inference阶段使用multi-branch binary operations。一般有两种量化方法:linear quantization and logarithmic quantization。鉴于编码机制,我们使用linear quantization,定义如下:
q k ( x ) = 2 ( < ( 2 k − 1 ) ( x + 1 2 ) > 2 k − 1 − 1 2 ) (13) q_{k}(x)=2\left(\frac{<\left(2^{k}-1\right)\left(\frac{x+1}{2}\right)>}{2^{k}-1}-\frac{1}{2}\right)\tag{13} qk(x)=2(2k1<(2k1)(2x+1)>21)(13)式中, < ⋅ > <\cdot> <>表示rounding operation,将一个实数 x ∈ [ − 1 , + 1 ] x\in [-1,+1] x[1,+1]量化。也是使用STE加速计算,使用量化的参数计算loss并更新全精度的参数。对于使用low-precision的量化编码方案,使用Adam训练,其他情况使用SGD训练。

Experiments

本文中,在训1-bit的时候使用 H T a n h ( ⋅ ) HTanh(\cdot) HTanh()作为激活函数,其他情况使用 H R e L U ( ⋅ ) HReLU(\cdot) HReLU(),编码bit为1或者2时,使用Adam收敛更快,当编码数不低于3的时候,使用SGD,学习率设为0.1。在ImageNet上性能表现如下表3。
Multi-Precision Quantized Neural Networks via Encoding Decomposition of {-1,+1}_第4张图片
总得来说,不是精度高,就是精度差不多,但速度更快。同时它的编码方式多样。对于目标检测的结果如下表4所示:
Multi-Precision Quantized Neural Networks via Encoding Decomposition of {-1,+1}_第5张图片

Discussion and Conclusion

{0,1} Encoding and {-1,+1} Encoding

一般而言,映射的方式为:
x q = 2 2 M − 1 x { 0 , 1 } − 1 (14) \mathrm{x}^q = {2\over{2^M-1}}\mathrm{x}^{\{0,1\}}-1\tag{14} xq=2M12x{0,1}1(14)式中, x q x^q xq表示量化的值, x { 0 , 1 } x^{\{0,1\}} x{0,1}表示用0和1编码的固定点整数, K K K-bit固定点整数表示一个量化的数值 w q w^q wq,乘积就可以表示为:
x q ⋅ w q = 4 ( 2 M − 1 ) ( 2 K − 1 ) x { 0 , 1 } ⋅ w { 0 , 1 }    − 2 2 M − 1 x { 0 , 1 } − 2 2 K − 1 w { 0 , 1 }   +   1 (15) \begin{aligned} \mathrm{x}^{q} \cdot \mathrm{w}^{q}=& \frac{4}{\left(2^{M}-1\right)\left(2^{K}-1\right)} \mathrm{x}^{\{0,1\}} \cdot \mathrm{w}^{\{0,1\}}\ \ -\\ & \frac{2}{2^{M}-1} \mathrm{x}^{\{0,1\}}-\frac{2}{2^{K}-1} \mathrm{w}^{\{0,1\}}\ +\ 1 \end{aligned}\tag{15} xqwq=(2M1)(2K1)4x{0,1}w{0,1}  2M12x{0,1}2K12w{0,1} + 1(15)上式右边是一个多项式,有四项,每一项都有自己的尺度因子, x { 0 , 1 } ⋅ w { 0 , 1 } \mathrm{x}^{\{0,1\}}\cdot\mathrm{w}^{\{0,1\}} x{0,1}w{0,1}可以使用bitwise操作加速,然而,多项式和尺度因子的计算会增加计算的复杂度。对于本文提出的二值量化编码方案,两个数的乘积被表示为
x q ⋅ w q = 1 ( 2 M − 1 ) ( 2 K − 1 ) x { − 1 , 1 } ⋅ w { − 1 , 1 } (16) \begin{aligned} \mathrm{x}^{q} \cdot \mathrm{w}^{q}=& \frac{1}{\left(2^{M}-1\right)\left(2^{K}-1\right)} \mathrm{x}^{\{-1,1\}} \cdot \mathrm{w}^{\{-1,1\}} \end{aligned}\tag{16} xqwq=(2M1)(2K1)1x{1,1}w{1,1}(16)式中, x { − 1 , 1 } \mathrm{x}^{\{-1,1\}} x{1,1} w { − 1 , 1 } \mathrm{w}^{\{-1,1\}} w{1,1}表示用-1和1编码的固定点整数,显然,这种计算方式是更加高效的。

Linear Approximation and Quantization

ABC网络中使用了 K K K个二进制编码的权重子集 { w 1 , w 2 , … , w K } \{\mathrm{w}_1,\mathrm{w}_2,\ldots,\mathrm{w}_K\} {w1,w2,,wK}来逼近权重 w \mathrm{w} w,其中 w i ∈ { − 1 , + 1 } N \mathrm{w}_i\in \{-1,+1\}^N wi{1,+1}N,然后就能用bitsiwe操作加速,但是还必须解下面这个问题:
min ⁡ { α i , w i } i = 1 K ∥ w − ∑ i = 1 K α i w i ∥ 2 , w ∈ R N (17) \min _{\left\{\alpha_{i}, w_{i}\right\}_{i=1}^{K}}\left\|w-\sum_{i=1}^{K} \alpha_{i} w_{i}\right\|^{2}, w \in \mathbb{R}^{N}\tag{17} {αi,wi}i=1Kminwi=1Kαiwi2,wRN(17)在使用的时候, w i w_i wi可以看作网络的权重,但是会引入尺度因子 α i \alpha_i αi,把参数量扩大 K K K倍,因此这种方法把原始的二值网络变复杂,很难训,容易陷入局部最优解。

本论文中,使用 w q \mathrm{w}^q wq来逼近 w \mathrm{w} w
w ≈ 1 2 K − 1 w q ,   w ∈ [ − 1 , 1 ] N (18) \mathrm{w} \approx {1 \over{2^K-1}}\mathrm{w}^q,\ w\in [-1,1]^N\tag{18} w2K11wq, w[1,1]N(18)式中, w q \mathrm{w}^q wq是一个或正或负的奇数,且它的绝对值不大于 2 K − 1 2^K-1 2K1,相对于上面的方案,这种方案更能够直接得到量化的权重。

你可能感兴趣的:(模型量化)