在进行int8量化感知训练时,权重和特征是这样传递的,浮点型的特征
A
r
l
−
1
经
过
量
化
后
变
成
i
n
t
8
比
特
的
A
q
l
−
1
,
然
后
再
反
量
化
为
A
r
′
l
−
1
,
W
r
l
也
是
同
样
,
量
化
为
W
q
l
,
再
反
量
化
为
W
r
′
l
,
于
是
,
W
r
′
l
和
A
r
′
l
−
1
这
两
个
浮
点
数
进
行
卷
积
运
算
,
加
上
偏
置
后
结
果
为
浮
点
数
A
r
l
,
再
经
过
量
化
,
可
得
A
q
l
,
如
下
图
所
示
A^{l-1}_r经过量化后变成int8比特的A^{l-1}_q,然后再反量化 \\为A^{l-1}_{r'},W^l_r也是同样,量化为W^l_q,再反量化为W^{l}_{r'}, \\于是,W^l_{r'}和A^{l-1}_{r'}这两个浮点数进行卷积运算,加上 \\偏置后结果为浮点数A^{l}_r,再经过量化,可得A^l_q, \\如下图所示
Arl−1经过量化后变成int8比特的Aql−1,然后再反量化为Ar′l−1,Wrl也是同样,量化为Wql,再反量化为Wr′l,于是,Wr′l和Ar′l−1这两个浮点数进行卷积运算,加上偏置后结果为浮点数Arl,再经过量化,可得Aql,如下图所示 deq是反量化操作,q则是量化操作。 由于梯度反向传播时对精度要求较高,因此训练时更新的是浮点型的权重,即量化之前的权重,在训练时,卷积运算是浮点型的权重和特征进行计算,如图中的Conv单元,而在训练结束推断时,为了使用int8进行推断,我们将上图中的deq、conv、q单元整体看成一个量化后的卷积运算单元,这样,这个新的卷积运算单元的输入是int8的权重和特征,输出也是int8。 再看是如何计算的 设反量化操作deq为 r=S(q-Z) 则训练时的浮点卷积运算为
r
o
u
t
=
r
i
f
m
a
p
∗
r
w
e
i
g
h
t
,
∗
为
卷
积
或
矩
阵
乘
法
运
算
,
带
入
上
式
得
r_{out}=r_{ifmap}*r_{weight}, \\*为卷积或矩阵乘法运算,带入上式得
rout=rifmap∗rweight,∗为卷积或矩阵乘法运算,带入上式得
S
o
u
t
(
q
o
u
t
−
Z
o
u
t
)
=
S
i
f
m
a
p
(
q
i
f
m
a
p
−
Z
i
f
m
a
p
)
∗
S
w
e
i
g
h
t
(
q
w
e
i
g
h
t
−
Z
w
e
i
g
h
t
)
S_{out}(q_{out}-Z_{out})=S_{ifmap}(q_{ifmap}-Z_{ifmap})*S_{weight}(q_{weight}-Z_{weight})
Sout(qout−Zout)=Sifmap(qifmap−Zifmap)∗Sweight(qweight−Zweight) 整理可得
q
o
u
t
=
M
(
q
i
f
m
a
p
−
Z
i
f
m
a
p
)
∗
(
q
w
e
i
g
h
t
−
Z
w
e
i
g
h
t
)
+
Z
o
u
t
q_{out}=M(q_{ifmap}-Z_{ifmap})*(q_{weight}-Z_{weight})+Z_{out}
qout=M(qifmap−Zifmap)∗(qweight−Zweight)+Zout 其中
M
=
S
i
f
m
a
p
∗
S
w
e
i
g
h
t
S
o
u
t
是
一
个
浮
点
数
。
M=\dfrac{S_{ifmap}*S_{weight}}{S_{out}}是一个浮点数。
M=SoutSifmap∗Sweight是一个浮点数。 总之,经过一番化简整理,可以得到简单的int8数据之间的乘法(当然M需要稍微进行处理) 从上面的式子可以看出,Z应该是整型。 上边的分析中没有设计到激活函数,若使用ReLu激活函数,则如下图
INT8量化感知训练原理分析
关注
打赏