我们知道,卷积层的前向计算公式可以表示为输入和卷积层参数的卷积运算,简化为:
O
=
I
∗
W
O=I*W
O=I∗W对于量化计算,我们希望找到一组对应的量化值
I
q
I^q
Iq和
W
q
W^q
Wq,使其满足:
O
=
I
∗
W
≈
α
I
q
∗
β
W
q
=
α
β
(
I
q
∗
W
q
)
O=I*W≈\alpha I^q*\beta W^q=\alpha \beta (I^q*W^q)
O=I∗W≈αIq∗βWq=αβ(Iq∗Wq)上式中,
α
\alpha
α和
β
\beta
β是浮点型标量系数。 因此浮点型的卷积操作可以退化成对应量化值
I
q
I^q
Iq和
W
q
W^q
Wq的整型卷积操作,大大提升计算的效率。
卷积层输入量化 前面已经说过,我们可以采用最简单的线性均匀量化来确定上面所说的量化值,输入
I
I
I被量化到[0,
2
k
2^k
2k-1]区间,由均匀量化公式可得重建公式为:
I
≈
I
~
=
[
I
‾
−
I
m
i
n
Q
s
I
]
∗
Q
s
I
+
I
m
i
n
(1)
I≈ \widetilde{I}=[\cfrac{\overline{I}-I_{min}}{Qs_I}]*Qs_I+I_{min} \tag 1
I≈I=[QsII−Imin]∗QsI+Imin(1) 式中,
Q
s
I
Qs_I
QsI为量化区间步长,[.]为取整公式
Q
s
I
=
I
m
a
x
−
I
m
i
n
2
k
−
1
Qs_I = \cfrac{I_{max}-I_{min}}{2^k-1}
QsI=2k−1Imax−Imin
I
‾
\overline{I}
I为截断的输入值
I
m
i
n
i
f
I
<
I
m
i
n
I
‾
=
{
I
o
t
h
e
r
s
I
m
a
x
i
f
I
>
I
m
a
x
\qquad \qquad \qquad I_{min} \qquad if \, I<I_{min} \\ \overline{I}=\{ I \qquad others \\ \qquad \qquad \qquad I_{max} \qquad if \, I>I_{max}
IminifI<IminI={IothersImaxifI>Imax 特别的,上面提到,通常卷积层的输入为非负数,因此有
I
m
i
n
=
0
I_{min}=0
Imin=0,上面的重建公式简化为
I
≈
I
~
=
[
I
‾
Q
s
I
]
∗
Q
s
I
=
I
q
∗
Q
s
I
I≈ \widetilde{I}=[\cfrac{\overline{I}}{Qs_I}]*Qs_I=I^q*Qs_I
I≈I=[QsII]∗QsI=Iq∗QsI 则有,输入
I
I
I对应的量化值为
I
q
=
[
I
‾
Q
s
I
]
,
α
=
Q
s
I
(2)
I^q=[\cfrac{\overline{I}}{Qs_I}],\alpha=Qs_I \tag 2
Iq=[QsII],α=QsI(2)
卷积层参数量化 同样的,对于每个
C
∗
K
∗
K
C*K*K
C∗K∗K维的卷积核参数,被均匀量化到[-(
2
k
/
2
2^k/2
2k/2),
2
k
/
2
−
1
2^k/2-1
2k/2−1]区间中,其量化后到重建公式为:
W
n
≈
W
n
~
=
[
W
n
‾
Q
s
W
n
]
∗
Q
s
W
n
(3)
W_n≈\widetilde{W_n}=[\cfrac{\overline{W_n}}{Qs_Wn}]*Qs_Wn \tag 3
Wn≈Wn=[QsWnWn]∗QsWn(3) 式中,
n
∈
{
1
,
2
,
.
.
.
N
}
n \in\{1,2,...N \}
n∈{1,2,...N},N为输出通道数。
Q
s
W
n
Qs_Wn
QsWn为量化区间步长,[.]为取整公式
Q
s
W
n
=
2
∗
W
n
m
a
x
2
k
−
2
Qs_Wn = \cfrac{2*Wn_{max}}{2^k-2}
QsWn=2k−22∗Wnmax
W
n
m
a
x
=
∣
W
n
∣
m
a
x
Wn_{max}=|W_n|_{max}
Wnmax=∣Wn∣max ,
W
n
‾
\overline{W_n}
Wn为截断的参数值
−
W
n
m
a
x
i
f
W
n
<
−
W
n
m
a
x
W
n
‾
=
{
W
n
o
t
h
e
r
s
W
n
m
a
x
i
f
W
n
>
W
n
m
a
x
\qquad \qquad \qquad \qquad \qquad-Wn_{max} \qquad if \, W_n<-Wn_{max} \\ \overline{W_n}=\{ W_n \qquad others \\ \qquad \qquad \qquad \qquad \qquad Wn_{max} \qquad if \, W_n>Wn_{max}
−WnmaxifWn<−WnmaxWn={WnothersWnmaxifWn>Wnmax 参数
W
n
Wn
Wn对应的量化值为
W
n
q
=
[
W
n
‾
Q
s
W
n
]
,
β
=
Q
s
W
n
(4)
W_n^q=[\cfrac{\overline{W_n}}{Qs_Wn}],\beta=Qs_Wn \tag 4
Wnq=[QsWnWn],β=QsWn(4)
:1.根据量化重建公式(1)将输入
I
I
I表示为量化后的重建值
I
~
\widetilde{I}
I
:2. for each n in N: 根据量化重建公式(3)将卷积层参数
W
n
W_n
Wn表示为量化后的重建值
W
n
~
\widetilde{W_n}
Wn
:3.用重建后的输入值和参数进行值卷积计算
O
=
I
~
∗
W
n
~
O=\widetilde{I}*\widetilde{W_n}
O=I∗Wn
反向传播
: 1.计算
∂
L
∂
b
i
a
s
\cfrac{\partial L}{\partial bias}
∂bias∂L : 2.通过
I
~
\widetilde{I}
I计算
∂
L
∂
W
~
\cfrac{\partial L}{\partial\widetilde{W}}
∂W∂L,同时将被截断的
W
~
\widetilde{W}
W对应的梯度置零,避免其梯度传播 : 3.通过
W
~
\widetilde{W}
W计算
∂
L
∂
I
~
\cfrac{\partial L}{\partial\widetilde{I}}
∂I∂L,同时将被截断的
I
~
\widetilde{I}
I对应的梯度置零,避免其梯度传播