让 AI 做量化误差卡:舍入以后,还可能被范围边界截住
看见“4位量化”时,很容易只想到文件变小。要理解它改变了什么,可以让AI为五个数字制作来回转换卡:先写成有限整数,再还原到实数,逐项记录丢掉了多少。这个练习也能识别“误差永远不超过半格”的过度概括。
AI模型生成的概念插图:连续曲线与离散台阶;不是模型测量图、软件截图或真实器件照片。
这次的四位规则是什么
采用无符号四位整数,范围0到15;步长s=0.2,零点z=5。先计算x/s并舍入到最近整数,恰在中间时选择偶数;再加5,最后把小于0的结果截成0,大于15的截成15。反量化为x̂=0.2×(q−5)。实数0因此映射到整数5,而不是整数0。
ONNX的QuantizeLinear文档列出了整数类型的饱和范围及最近偶数舍入约定。本文固定一个标量步长,只演示这种仿射映射,不把它当作所有量化模型的统一格式。可还原的两端是−1与2,相邻格点相差0.2。
把五张卡翻回来
输入依次为−1.14、−0.1、0.3、0.94、2.18。除以0.2后得到−5.7、−0.5、1.5、4.7、10.9;舍入为−6、0、2、5、11;加零点后为−1、5、7、10、16;截断后才得到整数0、5、7、10、15。
反量化结果是−1、0、0.4、1、2。按“还原值减原值”计算,误差分别为+0.14、+0.1、+0.1、+0.06、−0.18。每一步已用十进制定点计算独立复核,避免二进制小数恰好靠近舍入中点时掩盖规则。
特别看−0.1:它除以步长等于−0.5,最近偶数是0,加零点后为5。若先加5再把4.5舍入到偶数,会得到4,结果不同。本练习的舍入对象是x/s,零点是之后添加的整数,顺序不能随意换。
半步长保证有适用范围
中间三项没有发生饱和,绝对误差都不超过0.1,也就是半个步长。两端输入落在可还原范围之外,截断把它们推到端点,误差达到0.14和0.18。继续增大输入,端点不再移动,误差还会继续增加。
所以观察误差时应把“落到最近格点”和“超过表示范围”分开登记。增大步长能覆盖更宽的区间,却会让格点更疏;缩小步长能提高区间内分辨率,却可能截掉更多极端值。选择范围需要代表实际分布的资料,不能只凭这五个数字定模型配置。
让AI交可复查的转换清单
“输入[−1.14,−0.1,0.3,0.94,2.18],用uint4范围[0,15]、s=0.2、z=5做仿射量化。先对x/s最近偶数舍入,再加z并饱和,最后反量化。逐项列所有中间值、是否饱和、带符号误差及绝对误差;解释−0.1的平局,分别判断半步长误差界。”
真实模型还可能按通道或分组使用不同尺度,并保留额外元数据。四位数值能怎样打包、推理速度是否改善、任务质量下降多少,都需要对具体实现另测;这张卡只把数值变化讲清楚。
资料核对日期:2026年10月2日。算例为原创教学设计,没有进行真实模型训练或性能测试。


