在进行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, \\如下图所示 Arl1int8Aql1Arl1,WrlWql,Wrl,WrlArl1Arl,Aql
int8训练
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=rifmaprweight,
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(qoutZout)=Sifmap(qifmapZifmap)Sweight(qweightZweight)
整理可得
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(qifmapZifmap)(qweightZweight)+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=SoutSifmapSweight
总之,经过一番化简整理,可以得到简单的int8数据之间的乘法(当然M需要稍微进行处理)
从上面的式子可以看出,Z应该是整型。

相关文章:

  • 2021-10-17
  • 2021-07-29
  • 2021-06-16
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-19
  • 2022-12-23
猜你喜欢
  • 2021-12-01
  • 2021-08-28
  • 2021-06-02
  • 2021-10-15
  • 2022-02-19
  • 2021-12-23
  • 2021-08-25
相关资源
相似解决方案