一、量化基础:什么是模型量化?为什么需要量化?量化的数学原理与数据类型

1.1 到底什么是模型量化?

模型量化,说白了就是给模型“减肥”。

我刚开始接触这个概念时,觉得它挺玄乎的。后来做了一次实际部署,才真正理解它的价值。

想象一下,你训练好的神经网络,里面全是密密麻麻的权重和激活值。这些值默认是用 32 位浮点数(FP32)存的。每个数占 4 个字节。一个 100MB 的模型,光参数就占了 100MB 空间。

量化要做的,就是用更少的位数来表示这些数。比如用 8 位整数(INT8),每个数只占 1 个字节。模型体积直接缩到原来的四分之一。

嗯,这里要注意:量化不是简单地截断。它有一套数学方法,尽量让精度损失降到最低。

核心定义:模型量化是将神经网络中的权重和激活值从高精度数据类型(如 FP32)映射到低精度数据类型(如 INT8)的过程,同时尽量保持模型原有的推理精度。

1.2 为什么非要量化不可?

你可能会问:FP32 跑得好好的,干嘛要折腾?

原因其实很现实。我在项目中遇到过这样的情况:模型在 GPU 上跑得飞快,一换到手机或嵌入式设备上,直接卡成幻灯片。

量化能解决三个核心痛点:

  • 模型体积缩小:FP32 转 INT8,体积直接降到 1/4。下载更快,存储更省。
  • 推理速度提升:INT8 的计算比 FP32 快得多。尤其在支持 INT8 加速的硬件上,速度能翻倍。
  • 功耗大幅降低:低精度计算消耗的能量更少。这对移动设备和 IoT 设备至关重要。

举个例子。我之前部署一个人脸检测模型到手机端。FP32 版本 50MB,推理一次 200ms。量化到 INT8 后,体积变成 12.5MB,推理时间降到 50ms。用户几乎感觉不到延迟。

我的经验:量化不是万能的。如果你的模型对精度极其敏感(比如医疗影像诊断),量化后需要仔细验证。我一般会先做小规模测试,确认精度损失在可接受范围内,再全量部署。

1.3 量化的数学原理

量化的数学原理,其实就是一个映射问题。

怎么把 FP32 的值域映射到 INT8 的值域?

最常用的方法是 均匀量化。公式很简单:

// 量化公式
q = round(r / S) + Z

// 反量化公式
r = (q - Z) * S

其中:
r 是原始的浮点值
q 是量化后的整数值
S 是缩放因子(scale)
Z 是零点偏移(zero point)

S 和 Z 怎么算?

假设原始浮点值的范围是 [r_min, r_max],目标整数的范围是 [q_min, q_max]:

S = (r_max - r_min) / (q_max - q_min)
Z = round(q_min - r_min / S)

举个例子。假设 r_min = 0.0,r_max = 10.0,量化到 INT8(范围 0~255):

S = (10.0 - 0.0) / (255 - 0) ≈ 0.0392
Z = round(0 - 0.0 / 0.0392) = 0

那么 r = 5.0 量化后:
q = round(5.0 / 0.0392) + 0 = round(127.55) = 128

反量化回来:

r = (128 - 0) * 0.0392 ≈ 5.0176

你看,5.0 变成了 5.0176,误差很小。这就是量化的代价——精度损失。

注意:量化误差是不可避免的。关键是要控制误差在可接受范围内。我曾经遇到过一个模型,量化后精度掉了 5 个点,后来发现是某个层的激活值分布太广,导致量化精度不够。调整了量化范围后,精度损失降到了 0.5%。

1.4 常见的数据类型

做量化,你得先了解这些数据类型:

数据类型 位数 表示范围 精度 典型用途
FP32 32 ±3.4×10³⁸ 高 训练、高精度推理
FP16 16 ±6.5×10⁴ 中 混合精度训练、推理加速
INT8 8 -128~127 或 0~255 低 推理加速、边缘部署

FP32:标准单精度浮点数。精度最高,但计算慢、占空间大。训练时基本都用它。

FP16:半精度浮点数。精度比 FP32 低,但计算速度快一倍。我常用它做混合精度训练——前向传播用 FP16,反向传播用 FP32。这样既快又稳。

INT8:8 位整数。精度最低,但计算最快。部署到移动端或嵌入式设备时,INT8 是首选。

你想想看,为什么 INT8 这么受欢迎?因为它能在几乎不影响用户体验的前提下,把模型跑得飞快。

1.5 知识体系总览

下面这张图,帮你理清本章的核心逻辑:

模型量化知识体系 模型量化 什么是量化? 为什么需要量化? 数学原理 低精度表示 映射过程 体积缩小 速度提升 均匀量化 S 和 Z 计算 常见数据类型:FP32 / FP16 / INT8 核心目标:在精度损失可控的前提下,实现模型体积、速度、功耗的最优平衡 —— 我习惯把这叫做“量化三角权衡”

这张图把本章的核心内容串起来了。从“什么是量化”出发,到“为什么需要量化”,再到“数学原理”,最后落到“数据类型”。你跟着这个脉络走,就能建立起对量化的整体认知。

我的建议:刚开始学量化,别急着看复杂的算法。先把这张图里的概念吃透。搞清楚“量化到底在做什么”、“为什么做”、“怎么做”。基础打牢了,后面学各种量化方法(比如 PTQ、QAT)会轻松很多。