模型量化数学公式讲解

量化(Quantization)的核心数学原理,简单说就是用“便宜的整数”来近似“昂贵的浮点数”,从而让AI模型跑得更快、更省内存。
1. 公式里的每个角色是谁?
-
x(原始浮点数):比如
0.5234,这是模型原本的“高精度”体重,计算慢但精确。 -
q(量化后的整数):比如
42,这是转换后的“低精度”体重,计算快但会损失一点精度。 -
min & max:待转换数据中的最小值和最大值,它们划定了转换的“边界”。
-
S(缩放系数/Scale):“步长”。它决定了浮点数每变动多少,整数就跳一格。计算公式是
S = (max - min) / (整数范围)。
2. 量化公式:q = round((x - min) / S)
大白话:先看当前数x离起点min有多远,再除以“步长”S,算出它占了多少个格子,最后四舍五入取整。
例子(假设你想把温度计度数压缩成刻度):
假设原始数据范围是 min=0.0 到 max=100.0,我们要映射到 0~100 的整数(步长S=1)。
-
如果
x = 50.5,(50.5 - 0) / 1 = 50.5,四舍五入得q = 51。 -
你看,浮点数变成了一个整数。
3. 反量化公式:x′ = S × q + min
大白话:拿着压缩后的整数q,乘以“步长”S,再挪回起点min,就能找回一个近似值。
接上面的例子:q = 51,反算 x′ = 1 × 51 + 0 = 51.0。
原本的 50.5 变成了 51.0,损失了 0.5 的精度,但换来了存储空间的节省。
4. 你给的例子(FP32 [-1.0, 1.0] → INT8 [-128, 127])
这个例子更真实,因为INT8的整数范围不是对称的(是-128到127,共256个数)。
-
计算步长 S:
(1.0 - (-1.0)) / 255 ≈ 0.00784。(注意分母是255,因为从-128到127共有255个间隔) -
实际操作:
假设浮点数x = 0.5: -
1.量化:
q = round((0.5 - (-1.0)) / 0.00784) = round(191.3) = 191 - 2.存储:现在模型里只存整数
191(只占1个字节)。反量化(计算时):x′ = 0.00784 × 191 + (-1.0) ≈ 0.497。 - 3.最终算出来的
0.497和原来的0.5非常接近,但计算速度却快了好几倍。
更多推荐






所有评论(0)