亮点
提出一个新的无需重训练的量化方法(post-training quantization,与之对应的就是量化感知训练)。利用矩阵傅里叶展开求量化导致的误差,证明同一层的权重误差是会互相影响的,因此量化最优解并非rounding-to-nearest quantization。
核心公式
推导
假设
Δ
ω
\varDelta \omega
Δω 是量化前后的差值,那么,量化对
L
\mathcal{L}
L(loss函数)的影响为:
E
[
L
(
x
,
y
,
w
+
Δ
ω
)
−
L
(
x
,
y
,
w
)
]
≈
a
E
[
Δ
ω
⋅
(
∇
w
L
(
x
,
y
,
w
)
)
T
+
1
2
Δ
ω
T
⋅
∇
w
2
L
(
x
,
y
,
w
)
⋅
Δ
ω
]
=
Δ
ω
T
⋅
g
(
w
)
+
1
2
Δ
ω
T
⋅
H
(
w
)
⋅
Δ
ω
(1)
\begin{aligned} &\mathbb{E}[\mathcal{L}(x,y,w+\varDelta \omega) - \mathcal{L}(x,y,w)]\\ &\overset{a}{\approx}\mathbb{E}[\varDelta \omega \cdot (\nabla _w\mathcal{L}(x,y,w))^T+\frac{1}{2}\varDelta \omega^T \cdot \nabla _w^2\mathcal{L}(x,y,w) \cdot \varDelta \omega]\\ &= \varDelta \omega^T \cdot g^{\left( w \right)} +\frac{1}{2}\varDelta \omega^T \cdot H^{\left( w \right)}\cdot \varDelta \omega\end{aligned}\tag{1}
E[L(x,y,w+Δω)−L(x,y,w)]≈aE[Δω⋅(∇wL(x,y,w))T+21ΔωT⋅∇w2L(x,y,w)⋅Δω]=ΔωT⋅g(w)+21ΔωT⋅H(w)⋅Δω(1)
这是很简单的矩阵傅里叶2阶展开之后得到的化简式,不作详细证明。
易知
g
(
w
)
g^{\left( w \right)}
g(w)是权重的梯度,
H
(
w
)
H^{\left( w \right)}
H(w)是Hessian矩阵(向量的二阶微分公式)。当网络被训练好的时候,
g
(
w
)
g^{\left( w \right)}
g(w)趋向于0,所以可以不考虑。所以量化带来的主要误差是由
H
(
w
)
H^{\left( w \right)}
H(w)引入的。
文中做了一个简单假设:
Δ
ω
T
=
[
Δ
ω
1
Δ
ω
2
]
(2)
\varDelta \omega^T = [\varDelta \omega _1 \ \varDelta \omega _2]\tag{2}
ΔωT=[Δω1 Δω2](2)
H
(
w
)
=
[
1
0.5
0.5
1
]
(3)
H^{\left( w \right)} = \left[ \begin{matrix} 1& 0.5\\ 0.5& 1\\ \end{matrix} \right] \tag{3}
H(w)=[10.50.51](3)
则
Δ
ω
T
⋅
H
(
w
)
⋅
Δ
ω
=
Δ
ω
1
2
+
Δ
ω
2
2
+
Δ
ω
1
Δ
ω
2
(4)
\varDelta \omega^T \cdot H^{\left( w \right)}\cdot \varDelta \omega = \varDelta \omega^2 _1 + \varDelta \omega^2_2 + \varDelta \omega_1\varDelta \omega_2\tag{4}
ΔωT⋅H(w)⋅Δω=Δω12+Δω22+Δω1Δω2(4)
由式(4)可知,(1)式的最优化不仅与权重差值的绝对值有关,也与差值的符号有关。文中的描述为:
“为了最小化量化对任务损失的总体影响,我们需要在对角线项和非对角线项的贡献之间进行权衡。舍入到最接近的方法忽略了非对角线的贡献,这使得它常常不是最优的。”
然后作者尝试了100次的随机舍入量化,发现比起rounding-to-nearest,确实有更优的方法存在,并且精度的提升与
1
2
Δ
ω
T
⋅
H
(
w
)
⋅
Δ
ω
\frac{1}{2}\varDelta \omega^T \cdot H^{\left( w \right)}\cdot \varDelta \omega
21ΔωT⋅H(w)⋅Δω的下降相关。
接着就提出了他们的量化方法:Adaround。假设量化后的权重为
w
^
i
(
l
)
\hat{w}_{i}^{\left( l \right)}
w^i(l),那么它的取值有两种:
w
^
i
(
l
)
ϵ
{
w
^
i
(
l
)
,
f
l
o
o
r
,
w
^
i
(
l
)
,
c
e
i
l
}
(5)
\hat{w}_{i}^{\left( l \right)}\epsilon \left\{ \hat{w}_{i}^{\left( l \right) ,floor}, \hat{w}_{i}^{\left( l \right) , ceil} \right\} \tag{5}
w^i(l)ϵ{w^i(l),floor,w^i(l),ceil}(5)
其中
w
^
i
(
l
)
,
f
l
o
o
r
=
s
(
l
)
⋅
c
l
i
p
(
⌊
w
i
(
l
)
s
(
l
)
⌋
,
n
,
p
)
(6)
\hat{w}_{i}^{\left( l \right) ,floor}=s^{\left( l \right)}\cdot clip\left( \lfloor \frac{w_{i}^{\left( l \right)}}{s^{\left( l \right)}} \rfloor ,n,p \right) \tag{6}
w^i(l),floor=s(l)⋅clip(⌊s(l)wi(l)⌋,n,p)(6)
w
^
i
(
l
)
,
c
e
i
l
=
s
(
l
)
⋅
c
l
i
p
(
⌈
w
i
(
l
)
s
(
l
)
⌉
,
n
,
p
)
(7)
\hat{w}_{i}^{\left( l \right) ,ceil}=s^{\left( l \right)}\cdot clip\left( \lceil \frac{w_{i}^{\left( l \right)}}{s^{\left( l \right)}} \rceil ,n,p \right) \tag{7}
w^i(l),ceil=s(l)⋅clip(⌈s(l)wi(l)⌉,n,p)(7)
clip函数就是让小于
n
n
n的数均为
n
n
n,大于
p
p
p的数均为
p
p
p,中间数为自身。则
Δ
w
i
(
l
)
=
w
(
l
)
−
w
^
i
(
l
)
(8)
\varDelta w_{i}^{\left( l \right)}=w^{\left( l \right)}-\hat{w}_{i}^{\left( l \right)}\tag{8}
Δwi(l)=w(l)−w^i(l)(8)
假设
s
(
l
)
s^{\left( l \right)}
s(l)为定值来优化舍入方式,那么当优化
Δ
w
i
(
l
)
\varDelta w_{i}^{\left( l \right)}
Δwi(l)的cost function时,
w
^
i
(
l
)
\hat{w}_{i}^{\left( l \right)}
w^i(l)只为式(5)中的两个值。
此时优化问题转化为:
a
r
g
min
Δ
w
E
[
L
(
x
,
y
,
w
+
Δ
ω
)
−
L
(
x
,
y
,
w
)
]
(9)
\underset{\varDelta w}{arg\min}\ \mathbb{E}[\mathcal{L}(x,y,w+\varDelta \omega) - \mathcal{L}(x,y,w)]\tag{9}
Δwargmin E[L(x,y,w+Δω)−L(x,y,w)](9)
经过化简并舍去梯度项,最终为:
a
r
g
min
Δ
w
(
l
)
E
[
Δ
ω
T
⋅
H
(
w
)
⋅
Δ
ω
]
(10)
\underset{\varDelta w^{\left( l \right)}}{arg\min}\ \mathbb{E}[\varDelta \omega^T \cdot H^{\left( w \right)}\cdot \varDelta \omega]\tag{10}
Δw(l)argmin E[ΔωT⋅H(w)⋅Δω](10)
上式中下标
i
i
i代表着单个权重,没有下标则是当前层所有权重的优化,随着层大小的提升,式(10)的求解会越来越复杂,文中描述其为NP-hard问题。
接着就是一个有意思的化简了,
根据
z
(
l
)
=
W
(
l
)
x
(
l
−
1
)
(11)
z^{\left( l \right)}=W^{\left( l \right)}x^{\left( l-1 \right)}\tag{11}
z(l)=W(l)x(l−1)(11)
其中,
W
(
l
)
W^{\left( l \right)}
W(l)是权重矩阵,
x
(
l
−
1
)
x^{\left( l-1 \right)}
x(l−1)是输入向量,
z
(
l
)
z^{\left( l \right)}
z(l)是当前层预激活结果,即激活函数之前的输出。
上图中,
W
i
,
j
(
l
)
W_{i,j}^{\left( l \right)}
Wi,j(l)我的理解是当前层
l
l
l,第
i
i
i个卷积核的第
j
j
j个通道,所以式(11)就变为了
z
i
(
l
)
=
W
i
,
j
(
l
)
x
j
(
l
−
1
)
(12)
z^{\left( l \right)}_i=W^{\left( l \right)}_{i,j}x^{\left( l-1 \right)}_j\tag{12}
zi(l)=Wi,j(l)xj(l−1)(12)
也就是说,第
i
i
i个卷积核的第
j
j
j个通道的矩阵与输入图像的第
j
j
j个通道的输入相乘就可得到第
i
i
i个通道的输出。也就是说,
i
,
j
i,j
i,j并不相关,想要得到所有输出,需要在第
i
i
i个卷积核的情况下遍历所有通道。即,
∀
i
ϵ
[
1
,
I
]
\forall i\epsilon \left[ 1, I \right]
∀iϵ[1,I],遍历所有
j
j
j,
j
ϵ
[
1
,
J
]
j\epsilon [ 1,J ]
jϵ[1,J]。
所以
H
(
w
)
H^{\left( w \right)}
H(w)的矩阵形式为:
H
(
W
(
l
)
)
=
E
[
∇
W
(
l
)
2
L
]
(13)
H^{\left( W^{\left( l \right)} \right)}=\mathbb{E}[\nabla _{W^{\left( l \right)}}^{2}\mathcal{L}]\tag{13}
H(W(l))=E[∇W(l)2L](13)
而
∇
W
(
l
)
2
L
=
[
∂
2
L
∂
W
1
2
∂
2
L
∂
W
1
∂
W
2
⋯
∂
2
L
∂
W
2
∂
W
1
⋱
⋮
⋱
∂
2
L
∂
W
n
2
]
(14)
\nabla _{W^{\left( l \right)}}^{2}\mathcal{L} = \left[ \begin{matrix} \frac{\partial ^2\mathcal{L}}{\partial W_{1}^2}& \frac{\partial ^2\mathcal{L}}{\partial W_{1}\partial W_{2}}& \cdots& \\ \frac{\partial ^2\mathcal{L}}{\partial W_{2}\partial W_{1}}& \ddots& & \\ \vdots& & \ddots& \\ & & & \frac{\partial ^2\mathcal{L}}{\partial W_{n}^2}\\ \end{matrix} \right] \tag{14}
∇W(l)2L=⎣⎢⎢⎢⎢⎡∂W12∂2L∂W2∂W1∂2L⋮∂W1∂W2∂2L⋱⋯⋱∂Wn2∂2L⎦⎥⎥⎥⎥⎤(14)
这是Hessian矩阵的展开。
而
∂
2
L
∂
W
i
∂
W
m
=
[
∂
2
L
∂
W
i
,
1
∂
W
m
,
1
∂
2
L
∂
W
i
,
1
∂
W
m
,
2
⋯
∂
2
L
∂
W
i
,
2
∂
W
m
,
1
⋱
⋮
⋱
∂
2
L
∂
W
i
,
n
∂
W
m
,
n
]
(15)
\frac{\partial ^2\mathcal{L}}{\partial W_{i}\partial W_{m}} = \left[ \begin{matrix} \frac{\partial ^2\mathcal{L}}{\partial W_{i,1}\partial W_{m,1}}& \frac{\partial ^2\mathcal{L}}{\partial W_{i,1}\partial W_{m,2}}& \cdots& \\ \frac{\partial ^2\mathcal{L}}{\partial W_{i,2}\partial W_{m,1}}& \ddots& & \\ \vdots& & \ddots& \\ & & & \frac{\partial ^2\mathcal{L}}{\partial W_{i,n}\partial W_{m,n}}\\ \end{matrix} \right] \tag{15}
∂Wi∂Wm∂2L=⎣⎢⎢⎢⎢⎢⎡∂Wi,1∂Wm,1∂2L∂Wi,2∂Wm,1∂2L⋮∂Wi,1∂Wm,2∂2L⋱⋯⋱∂Wi,n∂Wm,n∂2L⎦⎥⎥⎥⎥⎥⎤(15)
根据上面的推导,易知:
∂
2
L
∂
W
i
∂
W
m
=
[
x
1
2
x
1
x
2
⋯
x
2
x
1
⋱
⋮
⋱
x
n
x
n
]
⋅
∂
2
L
∂
z
i
∂
z
m
(16)
\frac{\partial ^2\mathcal{L}}{\partial W_{i}\partial W_{m}} =\left[ \begin{matrix} x_1^2& x_1x_2& \cdots& \\ x_2x_1& \ddots& & \\ \vdots& & \ddots& \\ & & & x_nx_n\\ \end{matrix} \right] \cdot\frac{\partial ^2\mathcal{L}}{\partial z_i\partial z_m}\tag{16}
∂Wi∂Wm∂2L=⎣⎢⎢⎢⎡x12x2x1⋮x1x2⋱⋯⋱xnxn⎦⎥⎥⎥⎤⋅∂zi∂zm∂2L(16)
由此,易知:
H
(
W
(
l
)
)
=
E
[
∇
W
(
l
)
2
L
]
=
E
[
x
(
l
−
1
)
x
(
l
−
1
)
T
⊗
∇
z
(
l
)
2
L
]
(17)
H^{\left( W^{\left( l \right)} \right)}=\mathbb{E}[\nabla _{W^{\left( l \right)}}^{2}\mathcal{L}]=\mathbb{E}[x^{\left(l-1\right)}{x^{\left( l-1 \right)}}^T\otimes \nabla _{z^{\left( l \right)}}^{2}\mathcal{L}]\tag{17}
H(W(l))=E[∇W(l)2L]=E[x(l−1)x(l−1)T⊗∇z(l)2L](17)
这是第二个核心公式。从(17)中可以看出, ∇ z ( l ) 2 L \nabla _{z^{\left( l \right)}}^{2}\mathcal{L} ∇z(l)2L带来了主要的计算复杂度,所以作者做出了第二个假设: ∇ z ( l ) 2 L \nabla _{z^{\left( l \right)}}^{2}\mathcal{L} ∇z(l)2L是一个对角矩阵,即:
H
(
W
(
l
)
)
=
E
[
x
(
l
−
1
)
x
(
l
−
1
)
T
⊗
d
i
a
g
(
∇
z
(
l
)
2
L
i
,
i
)
]
(18)
H^{\left( W^{\left( l \right)} \right)}=\mathbb{E}[x^{\left(l-1\right)}{x^{\left( l-1 \right)}}^T\otimes diag\left(\nabla _{z^{\left( l \right)}}^{2}\mathcal{L_{i,i} }\right)]\tag{18}
H(W(l))=E[x(l−1)x(l−1)T⊗diag(∇z(l)2Li,i)](18)
将(18)代入(10),可得:
这步推导是利用了对角矩阵的特点,(a)是第三个假设,
∇
z
(
l
)
2
L
k
,
k
=
c
i
\nabla _{z^{\left( l \right)}}^{2}\mathcal{L_{k,k} }=c_i
∇z(l)2Lk,k=ci是一个输入数据的独立参数,不影响最优化问题的后续求解,所以在第二步舍去。
Δ
W
K
,
:
\varDelta W_{K,:}
ΔWK,:代表矩阵的一行,此时可以发现,最优化问题已经和loss以及后续层没有关系了,只与当前层的权重以及输入有关。在:
a
r
g
min
Δ
W
k
,
:
(
l
)
E
[
(
Δ
W
K
,
:
x
(
l
−
1
)
)
2
]
(19)
\underset{\varDelta W_{k,:}^{\left( l \right)}}{arg\min}\,\, \mathbb{E}\left[ \left( \varDelta W_{K,:}x^{\left( l-1 \right)} \right) ^2 \right] \tag{19}
ΔWk,:(l)argminE[(ΔWK,:x(l−1))2](19)
中,做的是最小化Mean Squared Error(MSE)问题。作者表示虽然其他研究者之前也有这么优化的,但他是第一个用理论推导出来的,是在不了解正在优化的那一层网络其他部分的情况下所能做到的最好的结果。
式(19)中的问题可以通过预先计算 E [ x ( l − 1 ) x ( l − 1 ) T ] \mathbb{E}[x^{\left(l-1\right)}{x^{\left( l-1 \right)}}^T] E[x(l−1)x(l−1)T],然后优化 Δ W K , : \varDelta W_{K,:} ΔWK,:,或者在优化过程中,对每个 Δ W K , : \varDelta W_{K,:} ΔWK,:进行单层前向传递。
核心推导
式(19)对于大规模优化任务还是太复杂了,所以作者用软量化变量将其继续relax。
a
r
g
min
V
∥
W
x
−
W
~
x
∥
F
2
+
λ
f
r
e
g
(
V
)
(20)
\underset{V}{arg\min}\,\, \left\| Wx \right. -\left. \tilde{W}x \right\| _{F}^{2}+\lambda f_{reg}\left( V \right) \tag{20}
Vargmin∥Wx−W~x∥∥∥F2+λfreg(V)(20)
这是弗罗宾尼斯范数(矩阵中元素的平方和),
W
~
\tilde{W}
W~ 是软量化权重:
W
~
=
s
⋅
c
l
i
p
(
⌊
W
s
⌋
+
h
(
V
)
,
n
,
p
)
(21)
\tilde{W} =s\cdot clip\left(\lfloor \frac{W}{s} \rfloor+h\left(V\right), n, p\right)\tag{21}
W~=s⋅clip(⌊sW⌋+h(V),n,p)(21)
矩阵乘法可以替换为卷积
此时 Δ W K , : \varDelta W_{K,:} ΔWK,:的优化问题就变为对 V i , j V_{i,j} Vi,j的优化问题。 h ( V i , j ) h\left(V_{i,j}\right) h(Vi,j)是一个连续变量并且 h ( V i , j ) ϵ [ 0 , 1 ] h\left(V_{i,j}\right)\epsilon[0,1] h(Vi,j)ϵ[0,1],附加项 λ f r e g ( V ) \lambda f_{reg}\left( V \right) λfreg(V)则是为了让 h ( V i , j ) h\left(V_{i,j}\right) h(Vi,j)收敛于0或1,即 h ( V i , j ) ϵ { 0 , 1 } h\left(V_{i,j}\right)\epsilon\left\{ 0,1 \right\} h(Vi,j)ϵ{0,1}。
于是作者利用sigmoid构造了一个函数:
ζ
,
γ
\zeta ,\gamma
ζ,γ都是弹性参数,此时固定为1.1和-0.1,这个式子是从[1]里借过来的,不会梯度消失,利于优化到极值。
而
λ
f
r
e
g
(
V
)
=
∑
i
.
j
1
−
∣
2
h
(
V
i
,
j
)
−
1
∣
β
(22)
\lambda f_{reg}\left( V \right)=\sum_{i.j}^{}{1-\left| 2h\left( V_{i,j} \right) \right.}-\left. 1 \right|^{\beta}\tag{22}
λfreg(V)=i.j∑1−∣2h(Vi,j)−1∣β(22)
β
\beta
β是退火参数,当其值较大时,
h
(
V
i
,
j
)
h\left(V_{i,j}\right)
h(Vi,j)可以自由变化使得MSE最小,在之后的优化中,
β
\beta
β变小以让
h
(
V
i
,
j
)
h\left(V_{i,j}\right)
h(Vi,j)收敛于0或1。
为了解决深度带来的误差(之前的优化都只是对当前层的优化),作者提出:
a
r
g
min
V
∥
f
a
(
W
x
)
−
f
a
(
W
~
x
^
)
∥
F
2
+
λ
f
r
e
g
(
V
)
(23)
\underset{V}{arg\min}\,\, \left\| f_a\left(Wx \right)\right. -\left. f_a\left(\tilde{W}\hat{x}\right) \right\| _{F}^{2}+\lambda f_{reg}\left( V \right) \tag{23}
Vargmin∥fa(Wx)−fa(W~x^)∥∥∥F2+λfreg(V)(23)
x
^
\hat{x}
x^是前面所有层都量化之后的得到的当前层的输入,
f
a
f_a
fa则是激活函数。(23)是最终的优化公式,即AdaRound。
实验结果
不做赘述,直接贴图。图中公式序号与本文序号不对应。
[1]: Louizos, C., Welling, M., and Kingma, D. P. Learning sparse neural networks through l0 regularization. International Conference on Learning Representations (ICLR), 2018.
[2]: Nagel M, Amjad R A, Van Baalen M, et al. Up or down? adaptive rounding for post-training quantization[C]//International Conference on Machine Learning. PMLR, 2020: 7197-7206.