量化(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 非常接近,但计算速度却快了好几倍。
Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐