本文系统梳理神经网络量化中的核心概念,并通过一个完整的数值示例,展示从 FP32 到 INT8 的完整转换过程。


一、量化技术的三层架构

神经网络量化是一个系统工程,可以分为三个递进的层次:

校准算法(怎么定范围)
        ↓
量化策略(怎么用)
        ↓
量化算子(怎么映射)

二、第一层:校准算法(Calibration)

校准算法解决的核心问题:“如何确定最优的量化范围?”

算法 核心思想 适用场景
normal 直接使用 min/max 线性映射 快速部署、数据分布均匀
kl_divergence 最小化 FP32 与 INT8 的 KL 散度 高精度要求、TensorRT
moving_average 训练中用滑动平均统计范围 量化感知训练(QAT)

三、第二层:量化策略(Strategy)

量化策略定义整个网络的量化方式

常规量化

  • 全模型统一位宽(如全 INT8)
  • 优点:实现简单、硬件友好
  • 缺点:某些层精度损失较大

混合量化

  • 不同层使用不同位宽或量化方式
  • 例如:Conv 用 INT8,Attention 用 FP16
  • 优点:精度更高
  • 缺点:实现复杂、调度开销大

四、第三层:量化算子(Quantization Scheme)

量化算子是具体的数学映射方法

1. asymmetric_affine(非对称仿射量化)

q = round(x / scale) + zero_point
  • ✅ 支持非零 zero_point
  • ✅ 最适合激活值
  • ❌ 硬件实现稍复杂

2. dynamic_fixed_point(动态定点量化)

  • 小数点位置动态调整
  • 适合 RNN/LSTM
  • 推理时可转为静态定点

3. perchannel_symmetric_affine(逐通道对称仿射量化)

  • 每个通道独立 scale
  • 无 zero_point
  • ✅ 最适合权重量化
  • ✅ 硬件友好、精度高

五、三层关系总结

量化策略
├── 常规量化
│   └── 校准算法(normal / KL / moving_average)
│       └── 量化算子(asymmetric_affine 等)
└── 混合量化
    ├── 权重:perchannel_symmetric_affine
    ├── 激活:asymmetric_affine
    └── RNN:dynamic_fixed_point

六、完整数值示例:FP32 → INT8

示例设定

某层激活值:

x = [-0.5, 0.2, 1.3, 2.0]

各层选择

层级 选择
校准算法 normal(min/max)
量化策略 常规量化
量化算子 asymmetric_affine

Step 1:校准(normal)

x_min = -0.5
x_max = 2.0

Step 2:计算 scale 和 zero_point

INT8 范围:[0, 255]

scale = (x_max - x_min) / (255 - 0)
      = 2.5 / 255
      ≈ 0.009804

zero_point = round(-x_min / scale)
           = round(0.5 / 0.009804)
           = 51

Step 3:量化计算(FP32 → INT8)

公式:

q = clip(round(x / scale) + zero_point, 0, 255)
FP32 计算过程 INT8
-0.5 round(-0.5/0.009804) + 51 0
0.2 round(0.2/0.009804) + 51 71
1.3 round(1.3/0.009804) + 51 184
2.0 round(2.0/0.009804) + 51 255

Step 4:反量化(INT8 → FP32)

x̂ = (q - zero_point) × scale
INT8 反量化结果 误差
0 -0.500 0.000
71 0.196 -0.004
184 1.304 +0.004
255 2.000 0.000

最大误差 < 0.01


七、总结

  1. 校准算法决定量化范围
  2. 量化策略决定网络级方案
  3. 量化算子决定具体映射方式

三者共同决定了量化模型的精度、速度和硬件兼容性


Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐