深度学习量化技术全景解析:从校准算法到量化算子的完整指南

文章目录

    • 一、量化技术的三层架构
    • 二、第一层:校准算法(Calibration)
    • 三、第二层:量化策略(Strategy)
    • [四、第三层:量化算子(Quantization Scheme)](#四、第三层:量化算子(Quantization Scheme))
      • [1. asymmetric_affine(非对称仿射量化)](#1. asymmetric_affine(非对称仿射量化))
      • [2. dynamic_fixed_point(动态定点量化)](#2. dynamic_fixed_point(动态定点量化))
      • [3. perchannel_symmetric_affine(逐通道对称仿射量化)](#3. perchannel_symmetric_affine(逐通道对称仿射量化))
    • 五、三层关系总结
    • [六、完整数值示例:FP32 → INT8](#六、完整数值示例:FP32 → INT8)
      • 示例设定
      • 各层选择
      • [Step 1:校准(normal)](#Step 1:校准(normal))
      • [Step 2:计算 scale 和 zero_point](#Step 2:计算 scale 和 zero_point)
      • [Step 3:量化计算(FP32 → INT8)](#Step 3:量化计算(FP32 → INT8))
      • [Step 4:反量化(INT8 → FP32)](#Step 4:反量化(INT8 → FP32))
    • 七、总结

本文系统梳理神经网络量化中的核心概念,并通过一个完整的数值示例,展示从 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. 量化算子决定具体映射方式

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


相关推荐
console.log('npc')4 分钟前
问题跟踪与知识沉淀:从任务到知识的闭环)
前端·javascript·人工智能
程序员清风9 分钟前
从 Issue 到实施计划:让 AI 先理解再动手
人工智能·issue
秦禹辰12 分钟前
ClipSketch AI把视频改造成图文漫画:选关键帧、生成手绘分镜、融合IP形象并自动写小红书文案
人工智能·tcp/ip·音视频
梦想出海-Phoebe13 分钟前
ChatGPT 2026年10月更新汇总:GPT-6.1 Terra、AI短信助手与新功能解析
人工智能·chatgpt
乌恩大侠15 分钟前
从纳秒级同步到厘米级定位:基于 NVIDIA Aerial、SRS 与多 O-RU 的 5G/6G UL-TDOA 实现原理与工程实践
人工智能·5g·o-ru·ai-ran
霸道流氓气质17 分钟前
智能表单生成器:结构化输出契约、JSON Schema 驱动渲染与 EAV/JSONB 混合存储的 Vue3 + Spring AI 生产级实战
人工智能·spring·json
lpfasd12329 分钟前
Mac mini M6(24GB)本地大模型部署实战:选型考量、踩坑记录与全链路搭建
人工智能
云上工程笔记39 分钟前
2026年如何保障Token传输过程中的数据安全与隐私?加密、脱敏、审计与权限指南
人工智能
2601_9707038339 分钟前
工业除湿机选型与安全使用研究报告:把铭牌数字放回工况里
大数据·人工智能
进击的横打1 小时前
【人工智能】AI将推翻了传统软件开发吗
人工智能