量化:激活离群值与校准策略
量化最容易被简化成“把 FP16 换成 INT8/INT4”。但真正决定成败的,常常不是权重,而是 activation。权重是训练后固定的;activation 会随着每个 prompt、每张图、每段上下文和每个 batch 动态变化。
这页先回答“激活离群值与校准策略”在「量化」里的位置:它解决什么局部问题,依赖哪些前置,最后会影响哪类工程或研究判断。
前置:先懂张量、线性层和基本推理成本;遇到 FP8、KV Cache、outlier 时回前置页补概念。 必要时先回 量化入口、基础知识 或 术语表。
主线关系:把数值格式、误差来源、校准/训练方法、kernel 和服务部署连成一条效率链,而不是只比较 bit 数。
activation outlier 指的是某层激活里少数特别大的值。它们会迫使 scale 变粗,让大多数普通值挤在很少的量化格子里。于是平均误差可能看起来还行,但关键细节已经丢了。
先复习量化误差从哪里来
均匀量化:
反量化:
误差:
| 符号 | 含义 |
|---|---|
| 原始浮点激活或权重 | |
| 低比特整数 | |
| 反量化后的近似值 | |
| scale,一个量化格子的宽度 | |
| zero-point | |
| 量化误差 |
读作什么:量化误差来自三处:rounding 会把值吸到最近格点;clip 会把超出范围的值截断;后续层会把前面的误差继续放大或改变方向。
outlier 怎样把 scale 拉粗
对称量化里,一个常见 scale 选择是:
| 符号 | 含义 |
|---|---|
| $\max( | x |
| 正向最大可表示整数 | |
| 每个整数格子覆盖的真实数值宽度 |
小账:假设大多数 activation 在 ,但有一个 outlier 是 。INT4 的 ,则:
这意味着 到 的主体区域总共不到一个整数格子的宽度。很多不同的小值反量化后会变得几乎一样。
“不裁掉任何 outlier”听起来安全,但它会让 scale 变大,牺牲主体区域分辨率。低比特量化经常是在 clipping error 和 rounding resolution 之间折中。
clipping 和 resolution 的权衡
如果设置截断阈值 ,可以把量化范围限制在 :
| 符号 | 含义 |
|---|---|
| 截断阈值 | |
| 截断后的值 | |
| 截断后重新计算的 scale |
读作什么: 小,主体值分辨率更细,但 outlier 被裁得更狠; 大,outlier 保留更多,但普通值分辨率更粗。
| 阈值选择 | 好处 | 风险 |
|---|---|---|
| 很大 | 少 clipping | 主体值全挤在少数格子里 |
| 很小 | 主体值更细 | 关键 outlier 被截断 |
| 任务校准 | 按真实数据折中 | 依赖校准集代表性 |
为什么 LLM 里 activation outlier 常见
| 来源 | 直觉 | 后果 |
|---|---|---|
| 残差叠加 | 多层信息不断累积 | 某些通道幅度越来越大 |
| LayerNorm/RMSNorm 后通道不均衡 | 归一化不保证每个通道同等温和 | 少数 hidden channel 变成尖峰 |
| 稀有 token | 罕见符号、代码、数字、格式触发异常路径 | 校准集没覆盖时容易线上掉点 |
| 长上下文 | 历史信息和位置影响累积 | 后半段 token 分布不同于短校准 |
| 多模态输入 | 图像、表格、UI、视频特征分布异质 | 局部细节通道特别敏感 |
一句话:权重分布是静态的,activation 分布是输入驱动的。校准集越不像真实流量,activation scale 越可能选错。
per-tensor、per-channel、group-wise 怎么选
设激活:
| 符号 | 含义 |
|---|---|
| batch size | |
| token 数或时间步 | |
| hidden dimension | |
| 某层 activation |
| 粒度 | scale 覆盖范围 | 适合什么 | 风险 |
|---|---|---|---|
| per-tensor | 整个 | 简单 baseline | 一个 outlier 拖全局 |
| per-token | 每个 token | 输入动态变化大 | 在线统计开销 |
| per-channel | 每个 hidden 通道 | 通道差异明显 | scale 读取增加 |
| group-wise | 每组通道 | 精度和系统折中 | group size 影响质量和 kernel |
读作什么:更细的粒度能把 outlier 影响限制在更小范围,但会增加 scale 元数据和 kernel 复杂度。
校准本质上在选什么
校准不是随便喂几条样本。它是在用一小批代表性输入,估计线上会出现的张量范围、scale、zero-point、截断阈值和敏感通道。
常见目标包括:
| 目标 | 公式或直觉 | 适合场景 |
|---|---|---|
| MSE | 直接控制数值误差 | |
| KL divergence | 让量化后分布接近原分布 | 分类或概率分布校准 |
| 输出误差 | 关注层输出 | |
| 任务代理损失 | 用困惑度、准确率或任务分数选配置 | 更贴近实际使用 |
| 符号 | 含义 |
|---|---|
| 原始张量 | |
| 量化再反量化张量 | |
| 原始线性层输出 | |
| 量化后线性层输出 |
读作什么:最小 MSE 不一定等于最高任务质量。任务越复杂,越要用真实任务桶参与校准和选择。
动态量化和静态量化
| 类型 | scale 什么时候确定 | 优点 | 代价 |
|---|---|---|---|
| 动态量化 | 推理时按当前输入计算 | 适应输入变化 | 每次请求多统计和 Q/DQ 开销 |
| 静态量化 | 校准阶段提前固定 | 推理路径固定,更易优化 | 校准集不准会掉点 |
| weight-only | 权重离线量化,activation 高精 | 稳、部署成熟 | 计算核心未必低比特 |
读作什么:动态更灵活,静态更容易快。生产选择不是绝对优劣,而是看输入分布变化、目标延迟和 kernel 支持。
SmoothQuant 为什么能帮 activation
线性层:
SmoothQuant 使用:
| 符号 | 含义 |
|---|---|
| 对角缩放矩阵 | |
| outlier 被平滑后的 activation | |
| 接收难度迁移后的权重 |
读作什么:输出保持不变,但 activation 的量化难度降低。因为权重是静态的,放大后的权重可以离线处理;activation 是动态的,线上更难临时补救。

图源:SmoothQuant,Figure 2。原论文图意:activation outlier 会减少有效量化 bit;SmoothQuant 把一部分难度从 activation 迁移到 weight。
图里的 activation 尖峰就是本页说的 outlier。它们不一定多,但会决定 scale。SmoothQuant 的价值在于先改变数值分布形态,再做量化。
outlier channel 是否应该保高精
有些系统会对严重 outlier 通道做特殊处理:
| 策略 | 做法 | 适合什么 |
|---|---|---|
| 高精保留 | 少数通道继续 FP16/BF16 | 极敏感层或安全模块 |
| channel splitting | 把 outlier 通道拆分分摊 | 降低单通道峰值 |
| mixed precision | 不同层不同 bit | 生产服务质量保护 |
| rotation/shift | 变换分布后再量化 | outlier 集中明显 |
核心逻辑:不是所有维度都值得同等低比特对待。保护少数关键通道,常常比全层提高 bit 更划算。
校准集怎么选
一个好的校准集不一定大,但必须像真实流量。
| 场景 | 校准集必须覆盖 |
|---|---|
| 聊天/助手 | 短问答、长指令、多轮、工具返回、拒答/安全样本 |
| RAG | 长文档、表格、引用、噪声 chunk、跨段检索 |
| 代码 | 长文件、特殊符号、缩进、罕见库名 |
| 数学 | 长推导、公式、边界条件 |
| VLM | 小字、表格、截图、低清图、图表 |
| VLA | 轨迹片段、失败恢复、细动作、遮挡、长 horizon |
如果校准集只有短、干净、常见的样本,scale 会过于乐观。上线后遇到长上下文、代码块、复杂表格或机器人异常状态时,activation 分布可能完全不同。
KV cache 里的离群问题
KV cache 也是 activation 的一种动态状态。长上下文中,K/V 张量会随层数、位置、输入内容变化。
| 符号 | 含义 |
|---|---|
| 层数 | |
| batch 或并发序列 | |
| 上下文长度 | |
| KV head 数 | |
| 每个 head 维度 | |
| 每个元素字节数 |
读作什么:KV cache 低比特能显著省长上下文显存,但如果 K/V 的量化误差改变注意力分布,模型可能丢长程细节、引用错位或推理不稳。
评测时看什么
| 检查项 | 为什么重要 |
|---|---|
| per-layer activation range | 找出 outlier 严重层 |
| scale/amax 日志 | 观察校准和线上是否分布漂移 |
| 任务桶回归 | 平均分掩盖长尾失败 |
| 长上下文专项 | KV 和后段 token 最容易出问题 |
| kernel trace | 确认动态统计和 Q/DQ 没吃掉收益 |
| 高风险样本回放 | 找安全头、动作头、OCR、代码等局部能力退化 |
一个财务文档 VLM 例子
常规问答样本里,量化模型几乎不掉分;但上线后,复杂发票的税率、小数点、跨页金额关联频繁出错。排查发现校准集里缺少高分辨率表格和低清扫描件,activation scale 主要适配了普通段落问答,导致表格结构和小字通道的分辨率不足。
解决思路不是盲目提高全模型 bit,而是:
- 补充表格、小字、低清图、跨页金额样本做校准。
- 对视觉 connector、OCR 相关层和结构头保守混合精度。
- 按字段级准确率、金额误差、跨页一致性单独回归。
本页结论
activation outlier 是低比特量化中最容易让初学者低估的问题。它让 scale 变粗,让普通值失去分辨率,也让校准集质量变成部署成败的关键。理解 outlier 后,再看 AWQ、SmoothQuant、KV cache quant 和混合精度,就会发现它们都在处理同一个核心问题:把有限的数值表示能力分给最需要的地方。
- 回到本专题入口:量化,确认这页在整条路线中的位置。
- 按导航顺序继续:QLoRA 与量化训练。
- 概念或符号卡住时,先查 术语表,再回到当前页。
- Title: 量化:激活离群值与校准策略
- Author: Charles
- Created at : 2025-12-25 09:00:00
- Updated at : 2025-12-25 09:00:00
- Link: https://charles2530.github.io/2025/12/25/ai-files-quantization-activation-outliers-and-calibration-strategies/
- License: This work is licensed under CC BY-NC-SA 4.0.