北山气象站的老师傅老周,最近被一台电报机难住了。站里的精密温度仪能读出 23.4571°C 这种小数点后四位的高精度数值,可山下电报站的线路老掉牙,每条报文只能传 0 到 255 之间的整数。几千万种可能的温度读数,要硬塞进 256 个整数码里,这活儿不比把大象塞进冰箱轻松。老周琢磨了一宿,想出个主意:像给温度计重新画刻度那样,把整条温度轴均匀切成 256 格,每个真实温度“就近”对到离它最近的刻度线上——发报时只报刻度编号,对方收到编号再按刻度反推温度。这套“刻度和编号”的编解码规则,在 AI 领域就叫量化:把高精度的 FP32 浮点数翻译成 8 比特(INT8)整数,让模型体积缩小四倍、推理速度提升数倍。可新的问题来了:刻度尺到底怎么摆?把 0 放在正中间、左右各 128 格(对称量化),还是让刻度贴着实际温度范围滑过去(非对称量化)?老周画废了十几张图纸才搞明白两种摆法各自的优劣。今天我们就跟着老周,把这根刻度尺的学问一次讲透。

岗位关联

一句话价值:掌握 INT8 对称与非对称量化的选型技巧,你就能在模型部署时把显存和延迟砍到原来的四分之一,同时把精度损失压到接近零——这是推理优化工程师吃饭的核心手艺。

目录
  1. 可视化演示
  2. 一、量化基础原理
  3. 二、对称量化方案
  4. 三、非对称量化方案
  5. 四、量化误差分析
  6. 五、硬件指令之争
  7. 六、逐通道与逐张量量化
  8. 七、方案选型与部署优化
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示自注意力机制中Query与Key的点积计算、Softmax归一化以及Value加权求和的完整流程,支持交互调节温度参数。

本节配有交互动效(进入视口后自动加载,约 3KB)。

注意力机制 Query与所有Key计算点积得到注意力分数 Softmax归一化为概率分布 Attn(Q,K,V)=softmax(QKᵀ/√d)V 温度参数控制分布的锐度

一、量化基础原理

老周的第一步,是明白“画刻度”这件事的本质。精密温度仪的量程是零下几十度到零上几十度,能分辨千分之一度;而电报机只认 0 到 255 的整数码。他必须设计一张“刻度表”:把整根温度轴切成 256 格,每格宽度相等,然后给每格编一个整数号。发报时,真实温度落到哪格就报哪个号;对方拿到号,乘以每格宽度,就能还原出近似温度。

这张刻度表翻译成数学语言,就是量化的核心公式。其中 缩放因子 S 相当于“每格刻度代表多少摄氏度”——它等于真实数据范围除以整数码范围;零点 Z 则回答“整数码 0 贴在这根尺子的哪个位置”。这两个参数一旦定下来,量化(实数变整数码)和反量化(整数码还原实数)就都有了规矩。在 AI 里,真实数据就是神经网络的权重和激活值,它们像温度一样,是连续变化的浮点数。

老周把这套规则写进电报本,第一条就成功了——温度报文从 12 字节缩到 1 字节。但他很快发现,刻度怎么摆,直接决定还原出来的温度准不准,于是开始了两种摆法的实验。

q = \mathrm{round}\left(\frac{r}{S}\right) + Z, \qquadr \approx S\,(q - Z)
公式解读:把实数 $r$ 除以缩放因子 $S$,四舍五入后加上零点 $Z$,就得到 INT8 整数码 $q$;反过来用 $S(q-Z)$ 就能还原出近似的实数。
  1. 缩放因子$S$ 表示每挪动一个整数码,真实值变化多少,等于数据范围除以整数码范围 $S = \dfrac{r_{\max} - r_{\min}}{q_{\max} - q_{\min}}$。刻度越密,$S$ 越小,精度越高。
  2. 位置换算把实数 $r$ 除以 $S$,折算成它以 $S$ 为单位的“第几格”:$\dfrac{r}{S}$。
  3. 舍入取整用 $\mathrm{round}(\cdot)$ 就近取到最近的整数刻度,舍入是量化误差的唯一来源:$q' = \mathrm{round}\left(\dfrac{r}{S}\right)$。
  4. 零点平移加上零点 $Z$,把整数码整体平移到约定的区间(如 $[0,255]$):$q = q' + Z$。
  5. 反量化还原解码端用 $r \approx S(q-Z)$ 得到近似实数,误差不会超过“半个刻度”。

二、对称量化方案

老周的第一版刻度尺,是一架“天平”:把 0 摄氏度钉在正中间,左边 128 格量零下,右边 128 格量零上,两边严格对称。放上尺子他才发现一个尴尬事——白天采样的温度全在零上,0 到 20 多度,左侧 128 格刻度连一次都没用上。相当于花一半钱买了块永远不用的表盘。

这种“天平摆法”在 AI 里就是对称量化:令零点 Z = 0,缩放因子只看数据绝对值的峰值,然后向正负两个方向对称展开。权重矩阵的数值通常围绕 0 大致对称,所以这一招在权重上相当好使;但遇到 ReLU 激活这种“全是正数”的数据,负半轴的刻度就白白浪费了。对称量化的最大优点是省事:映射时不需要任何加减法,反量化也只需乘一次 S,硬件实现极其干净。

老周对着这张“天平尺”叹了口气:电报是发出去了,但下午 23 度的温度,还原出来误差总比预期大。他意识到,刻度全挤在正半轴那一小段,每格“太宽”了。

q=round(rS),S=rmax⁡127,r∈[−rmax⁡, rmax⁡]q = \mathrm{round}\left(\frac{r}{S}\right), \qquad S = \frac{r_{\max}}{127}, \qquad r \in \left[-r_{\max},\, r_{\max}\right]
公式解读:零点直接取 0,范围以 0 为中心向两侧对称展开,缩放因子由单侧峰值决定,量化就是简单的“除以 S 再取整”。
  1. 零点固定令 $Z=0$,实数 0 精确对应整数 0,量化式里没有零点项:$q=\mathrm{round}(r/S)$。
  2. 对称边界取 $\max(|r_{\min}|,|r_{\max}|)$ 作为半径,数据范围变成 $[-r_{\max},\, r_{\max}]$,强制关于 0 对称。
  3. 缩放因子$S = \dfrac{r_{\max}}{127}$,把对称范围压进 $-128$ 到 $127$ 的整数码区间。
  4. 量化映射$q = \mathrm{round}(r/S)$ 直接取整,完全不需要加减零点。
  5. 反量化$r \approx S q$ 只乘一次,硬件一个乘法器就能搞定。

三、非对称量化方案

老周的第二版刻度尺,是一把能滑动的软尺——像裁缝量腰围那样,把尺子起始端贴在实际最小值上,末端贴在实际最大值上,中间切出 256 格。温度全在 3 到 23 度?那把 3 度贴到编码 0,23 度贴到编码 255,一格大约只有 0.08 度,比对称方案细了三倍多。这就是非对称量化:零点 Z 不再固定为 0,而是随数据范围自由移动。

非对称量化让缩放因子只覆盖数据的真实跨度,所以同样 256 个编码,每格更窄、精度更高。代价是:量化时要多做一步“加零点”,反量化时多做一步“减零点”,整数运算从单次乘法变成乘加两步;而且量化参数从 1 个变成 2 个,软件和硬件都要多记一笔账。可对激活值这种“天生偏正”的数据来说,这笔账花得值。

老周用滑动软尺重新发了十天的报文,回来一对比,温度还原误差肉眼可见地变小了。可就在他准备把软尺方案定为标准时,电报站站长泼来一盆冷水:“我们那台机器,只认天平式的编码!”

S = \frac{r_{\max} - r_{\min}}{255}, \qquadZ = \mathrm{round}\left(-\frac{r_{\min}}{S}\right), \qquadq = \mathrm{round}\left(\frac{r}{S}\right) + Z
公式解读:先统计数据的实际最小值和最大值,用跨度除以 255 求出缩放因子,再反推让最小值映射到编码 0 的零点偏移量。
  1. 数据范围统计张量实际最小值 $r_{\min}$ 与最大值 $r_{\max}$,范围 $[r_{\min}, r_{\max}]$ 完全贴合数据,不浪费一格。
  2. 缩放因子$S = \dfrac{r_{\max} - r_{\min}}{255}$,把整段真实跨度平均分给 256 个整数码。
  3. 零点计算$Z = \mathrm{round}\left(-\dfrac{r_{\min}}{S}\right)$,让最小值 $r_{\min}$ 恰好映射到编码 0。
  4. 量化映射$q = \mathrm{round}(r/S) + Z$,比对称方案多一步加法。
  5. 反量化$r \approx S(q-Z)$,比对称方案多一步减法。

四、量化误差分析

在纠结“换尺子还是换机器”之前,老周先认真算了算误差账。他发现,无论哪种刻度尺,误差的根源都是同一个:真实温度落在两条刻度之间,只能就近报到其中一条上。这就像往墙上贴身高贴纸——身高 161.4 厘米,只能贴在 161 或 162 的标记上,偏差最多半厘米。量化误差的本质,就是“刻度之间的缝隙”。

缝隙有多宽,完全由缩放因子 S 决定。最大误差正好是半个量化步长,也就是 $S/2$;如果误差在半个格子里大致均匀分布,均方误差(MSE)约等于 $S^2/12$。这意味着:S 翻一倍,MSE 变成四倍!对称量化遇到全正数据时,范围被硬生生拉宽一倍,S 翻倍,误差平方级恶化。而离群值更是个“刻度杀手”:一个异常大的温度尖峰,会把整把尺子拉宽,让正常数据的刻度全部变稀。

老周把误差账拍在站长桌上:天平尺(对称)在全是正数的温度数据上,误差是非对称软尺的好几倍。站长看完挠挠头:“道理我懂,可机器真不支持那套滑尺编码——除非你愿意等我把机器拆了改造。”

Δ=S2,MSE≈S212\Delta = \frac{S}{2}, \qquad \mathrm{MSE} \approx \frac{S^2}{12}
公式解读:量化误差以半个步长为上界,均匀分布假设下均方误差与步长平方成正比,所以步长是精度的总开关。
  1. 量化步长$S$ 是相邻两个整数码之间的真实值差,所有误差都围绕 $S$ 产生。
  2. 最大误差舍入取最近的刻度,偏差最多半个刻度:$\Delta = \dfrac{S}{2}$。
  3. 均匀近似假设误差在半格内均匀分布,均方误差为 $\dfrac{S^2}{12}$。
  4. 误差对比$S$ 翻倍则 $\mathrm{MSE}$ 变 4 倍,“少浪费刻度”直接决定量化精度。

五、硬件指令之争

老周这才意识到,刻度尺不是想怎么画就怎么画,得看“机器认不认”。电报站的机器是一台老式编码器,芯片里的乘加单元只做固定格式的整数乘累加。神经网络推理的核心恰恰就是海量乘累加:把输入激活和权重逐项相乘,再累加求和——也就是整数矩阵乘。量化的最终目的,是让这些乘累加全部用 INT8 整数完成,避开浮点运算。

仔细一算老周就明白了:对称量化因为零点为 0,整数乘累加的结果直接乘上两个缩放因子就得到真实输出,干干净净;非对称量化则要在累加结果上处理零点的三类修正项——减掉权重的零点贡献、减掉激活的零点贡献、再加回它们的交叉项。也就是说,非对称方案每做一次矩阵乘,都要额外算三个修正项;硬件指令若没专门优化,这些修正会拖慢加速效果。GPU 上的 TensorRT、一些 DSP 和 NPU,常常只对对称量化提供深度优化的快速指令,甚至直接不支持非对称。

权衡之下,老周列了一张表:数据偏正、精度吃紧时,用软尺(非对称);机器只认天平(对称)时,先想办法把刻度量身定做——于是他想到了“一间房一支温度计”的新招。

y=SaSw(∑j=1nqa,j qw,j  −  Zw∑j=1nqa,j  −  Za∑j=1nqw,j  +  n ZaZw)y = S_a S_w \left( \sum_{j=1}^{n} q_{a,j}\,q_{w,j} \;-\; Z_w \sum_{j=1}^{n} q_{a,j} \;-\; Z_a \sum_{j=1}^{n} q_{w,j} \;+\; n\,Z_a Z_w \right)
公式解读:$y$ 是真实域的输出,$q_a, q_w$ 分别是量化后的激活和权重,$Z_a, Z_w$ 是各自的零点;若两者都为零,所有修正项消失,只剩整数乘累加。
  1. 矩阵乘展开对 $n$ 个元素逐项相乘再累加,得到核心整数乘累加 $\sum_{j=1}^{n} q_{a,j}\,q_{w,j}$。
  2. 零点修正非对称时,需减掉 $Z_w \sum q_a$ 和 $Z_a \sum q_w$,再加回常数项 $n Z_a Z_w$。
  3. 对称特化令 $Z_a=Z_w=0$,则所有修正项归零,只剩简单的 $\sum q_a q_w$。
  4. 缩放合并外层统一乘 $S_a S_w$,对称方案的计算量与非对称相比少了一大截。

六、逐通道与逐张量量化

老周负责的气象站有一栋 64 间房的观测楼。第一版方案是整栋楼共用一个刻度尺——不管哪个房间,都用同一套最小值和最大值来画刻度,这叫“楼级”刻度。可实际上,一楼的锅炉房温度长期 30 度上下,顶楼的仪器房温度只有 8 度左右,共用一把尺子,两边的刻度都被对方“拖宽”了。老周灵机一动:给每间房各配一支温度计,各自按自己房间的温度范围画刻度,这栋楼总共 64 支温度计——对应 AI 里的逐通道量化。

逐通道量化,就是给权重张量的每个输出通道独立计算一套缩放因子和零点,而不是整层共用一套(逐张量量化)。因为每个通道的数值分布差异可能很大,独立画刻度能让每把尺子都紧贴各自的数据,精度显著提升。代价是要多存 64 组量化参数,并且推理时每条通道要分别反量化,存储和计算开销都涨了。工程上的黄金组合是:权重用逐通道量化(权重离线就能算好,开销可控),激活用逐张量量化(激活只有在运行时才知道分布,逐通道维护成本太高)。

老周给 64 间房各配了一支温度计后,整体误差又小了一截。他终于攒齐了全部零件:天平尺、软尺、房间刻度、还有一堆待验证的校准数据。剩下的问题是——什么时候用哪一套?

S_c = \frac{r_{\max,c} - r_{\min,c}}{q_{\max} - q_{\min}}, \qquadq_c = \mathrm{round}\left(\frac{r_c}{S_c}\right) + Z_c
公式解读:下标 $c$ 表示第 $c$ 个输出通道,每个通道用自己的最小最大值求缩放因子,互不干扰地完成量化。
  1. 通道划分把权重张量按输出通道 $c$ 切分成若干独立数据块,各自当一个小数据集。
  2. 逐通道统计对第 $c$ 个通道单独统计 $r_{\min,c}$、$r_{\max,c}$,不和其他通道混算。
  3. 独立缩放每个通道算出自己的 $S_c$ 和 $Z_c$,刻度彼此独立。
  4. 开销权衡精度更高,但量化参数从 1 组变成 $C$ 组,反量化时要逐通道处理,存储和计算都更重。

七、方案选型与部署优化

老周最后总结出一套“看天吃饭”的选型流程。第一步看分布:把校准数据(一段有代表性的温度记录)画成直方图,如果数据明显偏在零的一侧(像 ReLU 之后的激活),非对称量化能把步长缩小近一半;如果数据本身围绕 0 对称(像权重),对称量化并不吃亏。第二步看硬件:目标芯片只提供对称指令,那就别硬上非对称,先考虑把数据整体平移、让分布关于 0 对称,再走对称量化;芯片支持零点修正,才放心用非对称。第三步做校准:统计范围时别傻乎乎用 min/max——一次百年不遇的极端高温会把整把尺子拉宽,改用 99.9% 百分位截断离群值,让主体数据享受更密的刻度。

部署优化的完整配方通常是:权重逐通道对称量化、激活逐张量非对称量化、校准集选有代表性的数据并做百分位截断、必要时用量化感知训练(QAT)微调权重去适应量化噪声。这样组合下来,INT8 模型往往能把精度损失压到 1% 以内。

老周最终把三种方案都写进了《电报编码手册》:默认用软尺(非对称),机器不认就平移后上天平(对称),精度还不达标就给每间房配温度计(逐通道)。一个月后,气象站的报文又快又准,站长亲自给他发了朵小红花。你看,量化的学问说到底就一句话:刻度怎么摆,决定了精度与速度的取舍——而你,现在已经是比老周更懂刻度的人了。

S_{\text{sym}} \approx \frac{2\,r_{\max}}{255}, \qquadS_{\text{asym}} = \frac{r_{\max} - r_{\min}}{255} \quad (\,r_{\min} \ge 0\,)
公式解读:统一按 256 级折算,对称量化为了覆盖负半轴,等效步长约为非对称的两倍;这就是全正数据下非对称更准的根本原因。
  1. 对称半径$S_{\text{sym}}$ 的分子是 $2\,r_{\max}$,因为刻度要从 $-r_{\max}$ 画到 $r_{\max}$,把无用的负半轴也算进去了。
  2. 非对称跨度$S_{\text{asym}}$ 的分子是实际跨度 $r_{\max}-r_{\min}$,当 $r_{\min}\ge 0$ 时它明显小于 $2r_{\max}$。
  3. 步长对比全正数据下 $S_{\text{sym}} \approx 2\,S_{\text{asym}}$,均方误差约为非对称方案的 4 倍。
  4. 选型依据数据单侧分布且硬件支持时优先非对称;硬件只支持对称时,先整体平移数据再对称量化,可以挽回大部分精度。

AI 应用场景

场景一:云端推理引擎的 INT8 加速

阶段:模型压缩与部署优化

解决的问题:大模型用 FP32 推理,显存占用高、吞吐上不去。传统做法是直接减半精度(FP16),但带宽依然紧张。用 INT8 量化把权重和激活都压成 8 比特整数,模型体积缩小四倍,矩阵乘走整数指令,吞吐提升 2 到 4 倍。

具体案例:某团队用 TensorRT 优化 BERT 在线服务:权重走逐通道对称量化,激活用校准集统计分布后做逐张量非对称量化,并用 99.9% 百分位截断离群值。上线后显存占用降 72%,P99 延迟降 55%,GLUE 分数只掉了 0.3 个点。

场景二:大模型 KV Cache 量化

阶段:长序列推理优化

解决的问题:大模型生成长文本时,Key/Value 缓存随序列长度线性膨胀,成为显存瓶颈。KV 数值分布偏正且有尖峰,非常适合非对称量化:把每个 head 的 K、V 各自独立统计范围,用非对称 INT8 压缩缓存,显存占用直接减半,还能容纳更长的上下文。

具体案例:某开源推理框架对 7B 模型开启 KV Cache 非对称 INT8 量化后,相同显存下上下文长度从 4K 扩展到 8K,配合逐 head 量化,困惑度只上升 0.5%。

场景三:端侧 NPU 的指令适配

阶段:芯片软件栈适配

解决的问题:手机端 NPU 的整数指令往往只支持对称量化,直接上非对称方案会触发慢速回退路径。解决思路是“先平移再对称”:把 ReLU 后的激活整体减掉一个常数使其关于 0 对称,再走对称量化指令,误差可控且速度拉满。

具体案例:某视觉模型部署到自研 NPU 时,原方案用非对称量化延迟翻倍;改为对激活做通道级平移补偿后走对称指令,推理帧率提升 180%,mAP 仅下降 0.8%。

Python 演示

python38 行
import numpy as np  def quantize_asymmetric(data, bits=8):    qmin, qmax = 0, 2**bits - 1    rmin, rmax = float(np.min(data)), float(np.max(data))    scale = (rmax - rmin) / (qmax - qmin)    zero_point = qmin - round(rmin / scale)    q = np.clip(np.round(data / scale) + zero_point, qmin, qmax)    return q.astype(np.int32), scale, zero_point  def quantize_symmetric(data, bits=8):    qmax = 2**(bits - 1) - 1    bound = max(abs(float(np.min(data))), abs(float(np.max(data))))    scale = bound / qmax    q = np.clip(np.round(data / scale), -qmax - 1, qmax)    return q.astype(np.int32), scale, 0  def dequantize(q, scale, zero_point):    return scale * (q - zero_point)  np.random.seed(42)# 模拟 ReLU 之后的激活:全部为正,近似指数分布acts = np.random.exponential(scale=1.0, size=20000).astype(np.float32) qa, sa, za = quantize_asymmetric(acts)qs, ss, _ = quantize_symmetric(acts)ra = dequantize(qa, sa, za)rs = dequantize(qs, ss, 0) mse_a = float(np.mean((ra - acts)**2))mse_s = float(np.mean((rs - acts)**2))print("asymmetric: scale=%.5f zero_point=%d mse=%.6f" % (sa, za, mse_a))print("symmetric  : scale=%.5f zero_point=%d mse=%.6f" % (ss, 0, mse_s))print("symmetric_mse / asymmetric_mse = %.2f" % (mse_s / mse_a))
目的:用同一份“ReLU 之后的正数激活”数据,分别跑对称与非对称量化,对比二者缩放因子和量化均方误差,直观验证“全正数据下非对称更准”的结论。
  1. scale = (rmax - rmin) / (qmax - qmin)非对称的缩放因子:用真实跨度除以 256,每格代表多少真实值。
  2. zero_point = qmin - round(rmin / scale)算零点:让最小值恰好映射到编码 0,保证 0 不被截断。
  3. q = np.clip(np.round(data / scale) + zero_point, qmin, qmax)量化三件套:除以步长、四舍五入、夹紧到 [0, 255]。
  4. bound = max(abs(float(np.min(data))), abs(float(np.max(data))))对称方案先取两侧绝对值的峰值,再向正负对称展开。
  5. scale = bound / qmax对称步长:由于多包了一个负半轴,全正数据下它明显偏大。
  6. return scale * (q - zero_point)反量化:还原出近似实数,误差大小由步长决定。
  7. mse_s = float(np.mean((rs - acts)**2))用均方误差做公平对比,验证理论上的“4 倍差距”。

常见误区

误区既然非对称能贴紧数据范围,那是不是所有场景都该用非对称?对称量化只是落后方案。

正解当数据本身就围绕 0 近似对称时(典型如卷积权重),对称量化的范围和非对称几乎重合,两者精度几乎没差别,而对称还有计算更省的巨大优势。非对称的真正收益只在数据明显单侧或偏斜时出现。选型要看分布,不能无脑选非对称。

为何常见:大家往往拿“ReLU 激活”这类典型正数据举例,讲多了就以为非对称压倒一切,忽略了权重这类对称分布的常见场景。

误区量化范围当然要覆盖所有数据,取 global min 和 global max 最保险,一个数都不能丢。

正解一个极端离群值会把整把刻度尺拉宽,让 99% 的正常数据刻度变稀、误差变大。正确做法是用百分位(如 99.9%)截断离群值,牺牲极少数异常点,换取主体数据更密的刻度和更小的整体误差。

为何常见:“全覆盖才精准”符合直觉,但量化误差是整体统计量,少数离群值对整体 MSE 的危害远大于它们被截断带来的损失。

误区对称量化是“关于 0 对称”,那数据里没有负数就没法做对称量化。

正解对称量化只是把刻度尺摆成以 0 为中心,数据全是正数照样能做,只是负半轴刻度全浪费、步长变大、误差变大。如果硬件只支持对称指令,还可以先把数据整体平移使其关于 0 对称,再走对称量化。

为何常见:把“分布对称”和“刻度对称”两件事混在了一起,以为刻度的摆法取决于数据里有没有负数。

误区逐通道对每个通道单独画刻度,精度一定更高,那所有层都无脑用逐通道,效果肯定最好。

正解逐通道只对权重这类“离线可知”的张量划算;激活要到运行时才有数据,逐通道维护成本高、反量化延迟大,通常用逐张量。而且逐通道要存 C 组参数、做 C 次反量化,小模型上可能得不偿失。黄金组合是权重逐通道、激活逐张量。

为何常见:看到了逐通道的精度收益,却忽略了它带来的参数与运算开销,没有结合张量类型和部署硬件做权衡。

面试题

Q1. 关于 INT8 对称量化,下列说法正确的是?

单选题 · easy

  • A.零点固定为零,无需偏移← 正确答案
  • B.零点取量化范围的中点
  • C.零点随数据分布自动调整
  • D.零点等于缩放因子的倒数

答案:A。对称量化的核心就是令零点 Z=0,量化式简化为 q=round(r/S),没有零点偏移项。B、C、D 描述的都不是对称量化的特征,零点与范围中点、缩放因子倒数都没有必然关系。

Q2. 非对称量化相比对称量化最主要的优势是?

单选题 · easy

  • A.硬件加速实现更简单
  • B.贴合单侧分布步长更小← 正确答案
  • C.完全消除所有量化误差
  • D.无需任何校准数据即可用

答案:B。非对称量化让缩放因子只覆盖数据实际跨度,对 ReLU 激活这类单侧数据,步长大幅缩小、误差变小。硬件更简单是对称的优势;量化误差只能减小不能消除;校准数据是估算范围的必需品。

Q3. 对一个取值范围在 [0, 6] 的激活张量做对称量化(范围展开为 [-6, 6]),相比范围 [0, 6] 的非对称量化,量化步长会怎样变化?

单选题 · mid

  • A.步长保持不变
  • B.步长缩小为一半
  • C.步长扩大为两倍← 正确答案
  • D.步长扩大为四倍

答案:C。对称量化范围是 12(从 -6 到 6),非对称是 6(从 0 到 6),256 个编码不变时,对称的步长恰好是非对称的两倍。步长翻倍会导致均方误差扩大约四倍,这正是全正数据下对称量化精度差的原因。

Q4. 关于量化误差,下列说法正确的有哪些?

多选题 · mid

  • A.最大误差约等于半个步长← 正确答案
  • B.缩小步长可以降低误差← 正确答案
  • C.误差只来自浮点溢出
  • D.离群值会拉大误差幅度← 正确答案

答案:ABD。量化误差来自舍入,真实值落到两刻度之间最多偏差 S/2,所以 A 正确;步长是误差的总开关,B 正确;离群值会把刻度尺拉宽、步长变大,D 正确。误差主要来自舍入而不是浮点溢出,C 错误。

Q5. 为什么卷积权重通常用对称量化也能保持良好的精度?

单选题 · mid

  • A.权重分布近似关于零对称← 正确答案
  • B.权重全部是非负数值
  • C.权重精度要求本就低
  • D.对称量化步长天然最小

答案:A。训练好的卷积权重数值围绕 0 上下波动,分布近似对称,此时对称量化的范围和非对称几乎重合,不浪费刻度,精度自然有保障。若权重全非负(B),对称反而会浪费一半刻度。

Q6. 非对称量化中引入零点 Z 的核心作用是什么?

单选题 · mid

  • A.让实数零映射到整数零点← 正确答案
  • B.放大缩放因子提升速度
  • C.将范围扩展到十六位整数
  • D.消除舍入误差的累积

答案:A。零点 Z 决定了整数码 0 对应哪个真实值,从而让刻度尺能贴住任意数据范围,尤其保证真实 0 被精确保留——这对卷积中大量 padding 的 0 至关重要。它不改变位数、不放大步长、也无法消除舍入误差。

Q7. 关于逐通道与逐张量量化,理解正确的有哪些?

多选题 · hard

  • A.每输出通道独立算缩放因子← 正确答案
  • B.全部通道共享同一组参数← 正确答案
  • C.逐通道必然更慢更耗内存
  • D.权重常用逐通道提升精度← 正确答案

答案:ABD。逐通道量化给每个输出通道独立统计范围、单独算缩放因子(A 对);逐张量则是整层共享一组参数(B 对);权重离线可知分布,用逐通道成本可控且精度收益明显(D 对)。C 太绝对,激活逐张量时不会明显变慢,权重逐通道开销也可控。

Q8. 校准激活范围时遇到少量极端离群值,正确的处理方式是?

单选题 · hard

  • A.用最小最大值全范围包住
  • B.用百分位截断保护主体← 正确答案
  • C.直接放弃该层量化操作
  • D.将离群数值直接清零

答案:B。离群值会把刻度尺拉宽,让主体数据刻度变稀。正确做法是用 99.9% 等高百分位截断离群值,牺牲极少数极端点换取整体 MSE 下降。全范围包住(A)恰恰会放大误差;放弃量化(C)或清零(D)都过于极端。

Q9. 把一个 FP32 实数映射为 INT8 整数码时,核心依赖是哪两个参数?

单选题 · easy

  • A.缩放因子与零点参数← 正确答案
  • B.学习率与批量大小参数
  • C.步长与动量两个参数
  • D.均值与方差两个参数

答案:A。量化映射 q=round(r/S)+Z 中只有两个自由参数:缩放因子 S 决定每格宽度,零点 Z 决定整数码与真实值的对齐位置。学习率、动量是训练超参数,均值方差是归一化统计量,都与量化映射无关。

Q10. 在只支持对称量化指令的 NPU 上部署激活全部非负的模型,为降低量化误差可采取哪些措施?

多选题 · extreme

  • A.平移激活使其关于零对称← 正确答案
  • B.换用支持零点偏移的硬件← 正确答案
  • C.将该层权重改为非对称量化
  • D.使用逐通道对称量化减步长← 正确答案

答案:ABD。硬件只支持对称时,先把激活整体减去一个常数使其关于 0 对称,再走对称指令,可大幅缩小步长(A 对);换支持零点的硬件(B 对)或改用逐通道对称量化让每通道刻度更密(D 对)也有效。C 无效——硬件根本不支持非对称,改权重非对称无法执行。