(本文首发于公众号)
好久没更新了,一方面是因为工作繁忙,另一方面主要是懒。
之前写过几篇关于神经网络量化的文章,主要是对 Google 量化论文以及白皮书的解读,但有一些细节的问题当时没有提及。这篇文章想补充其中一个问题:关于 ElementwiseAdd (简称 EltwiseAdd) 和 Concat 的量化。
EltwiseAdd量化
EltwiseAdd 的量化主要是在论文的附录里面提及的。过程不是太复杂,如果了解量化的基本原理的话,完全可以自己推导出来。

回忆一下量化的基本公式:
r = S ( q − Z ) (1) r=S(q-Z) \tag{1} r=S(q−Z)(1)
(看不懂的可以再参考一下我之前的文章)
这里面 r r r 是实数域中的数值 (一般是 float), q q q 则是量化后的整型数值 (常用的是 int8)。
EltwiseAdd 就是对两个 tensor 的数值逐个相加。假设两个 tensor 中的数值分别是 r 1 r_1 r1、 r 2 r_2 r2,相加得到的和用 r 3 r_3 r3 表示,那全精度下的 EltwiseAdd 可以表示为:
r 3 = r 1 + r 2 (2) r_3 = r_1 + r_2 \tag{2} r3=r1+r2(2)
用量化的公式代入进去后可以得到:
S 3 ( q 3 − Z 3 ) = S 1 ( q 1 − Z 1 ) + S 2 ( q 2 − Z 2 ) (3) S_3(q_3-Z_3)=S_1(q_1-Z_1)+S_2(q_2-Z_2) \tag{3} S3(q3−Z3)=S1(q1−Z1)+S