Distiller:量化算法
Posted Yan_Joy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Distiller:量化算法相关的知识,希望对你有一定的参考价值。
量化算法
注意:
对于任何需要量化感知训练的以下方法,请参阅这里,了解如何使用Distiller的机制调用它。
基于范围的线性量化(Range-Based Linear Quantization)
让我们在此分解使用的术语:
- 线性(Linear): 表示通过乘以数字常数(比例因子)来量化浮点值。
- 基于范围(Range-Based): 意味着为了计算比例因子,我们查看张量值的实际范围。 在最原始的实现中,我们使用张量的实际最小/最大值。或者,我们使用一些基于张量范围/分布的推导来得出更窄的最小/最大范围,以便去除可能的异常值。这与此处描述的其他方法形成对比,我们可以将其称为基于截断的(clipping-based),因为它们在张量采用截断函数。
非对称(Asymmetric)与对称(Symmetric)
在这种方法中,我们可以使用两种模式 - 非对称和对称。
非对称模式
在非对称模式下,我们将浮点范围中的最小值/最大值映射到整数范围的最小值/最大值。除了比例因子之外,这通过使用零点(也称为量化偏差,或偏移)来完成。
让我们用 x f x_f xf表示原始浮点张量,用 x q x_q xq表示量化张量,用 q x q_x qx表示比例因子,用 z p x zp_x zpx表示零点,以及用 n n n表示量化的比特。然后,我们得到:
x q = r o u n d ( ( x f − m i n x f ) 2 n − 1 m a x x f − m i n x f ⎵ q x ) = r o u n d ( q x x f − m i n x f q x ) ⎵ z p x = r o u n d ( q x x f − z p x ) x_q = round\\left ((x_f - min_x_f)\\underbrace\\frac2^n - 1max_x_f - min_x_f_q_x \\right) = round(q_x x_f - \\underbracemin_x_fq_x)_zp_x = round(q_x x_f - zp_x)\\ xq=round⎝⎜⎜⎛(xf−minxf)qx maxxf−minxf2n−1⎠⎟⎟⎞=round(qxxf−zpx minxfqx)=round(qxxf−zpx)
我们实际上使用 z p x = r o u n d ( m i n x f q x ) zp_x = round(min_x_fq_x) zpx=round(minxfqx)。这意味着零可以通过量化范围中的整数精确表示。例如,对于具有零填充的层(zero-padding),这很重要。通过四舍五入零点,我们有效地“微调”浮动范围中的最小值/最大值,以获得零的精确量化。
请注意,在上面的推导中,我们使用无符号整数来表示量化范围。也就是说, x q ∈ [ 0 , 2 n − 1 ] x_q \\in [0,2 ^ n-1] xq∈[0,2n−1]。如果需要,可以使用有符号整数(可能由于硬件考虑因素。这可以通过减去 2 n − 1 2 ^ n-1 2n−1来实现。
让我们看看卷积或全连接层如何在非对称模式下量化(我们分别用 x , y , w x,y,w x,y,w和 b b b表示输入,输出,权重和偏置):
y
f
=
∑
x
f
w
f
+
b
f
=
∑
x
q
+
z
p
x
q
x
w
q
+
z
p
w
q
w
+
b
q
+
z
p
b
q
b
=
y_f = \\sumx_f w_f + b_f = \\sum\\fracx_q + zp_xq_x \\fracw_q + zp_wq_w + \\fracb_q + zp_bq_b =
yf=∑xfwf+bf=∑qxxq+zpxqwwq+zpw+qbbq+zpb=
=
1
q
x
q
w
(
∑
(
x
q
+
z
p
x
)
(
w
q
+
z
p
w
)
+
q
x
q
w
q
b
(
b
q
+
z
p
b
)
)
= \\frac1q_x q_w \\left( \\sum (x_q + zp_x) (w_q + zp_w) + \\fracq_x q_wq_b(b_q + zp_b) \\right)
=qxqw1(∑(xq+zpx)(wq+zpw)+以上是关于Distiller:量化算法的主要内容,如果未能解决你的问题,请参考以下文章
开源 | Intel发布神经网络压缩库Distiller:快速利用前沿算法压缩PyTorch模型
装delphi2010,用)RAD Studio 2010 V14.3615 iso ,为啥我用Delphi.Distiller.v1.85破解工具破解不了,