摘要。称一个网络为“INT8”,并不能说明其中的数字如何表示。尺度的选择可能抹掉整个小权重通道,即使该通道仍有许多整数编码没有使用。本文通过一个受控线性层、输出误差推导和可复现实验,比较对称逐张量与逐通道量化。我们还构造一个反例:较小的权重误差,并不保证每个输入上的误差都更小。最后区分压缩、工作内存以及在嵌入式硬件上真正测得的性能。
读者需要基础线性代数与概率知识。下文所有实验数字均来自 NumPy 仿真:我们没有在开发板上运行推理,没有测量能耗,也没有训练网络。权重采用约定单位;误差指标对应本教学模型中的变量。
1. 八位并不确定分辨率
整数编码只能取离散值;要把它解释成实数,需要一个映射。在仿射表示 r̂ = s(q−z) 中,s 为正尺度,z 为整数零点。这里使用 z = 0 的对称权重,编码范围为 −127 到 127,不使用 −128。这与 LiteRT 规范中的 INT8 权重约定一致;该规范还区分逐张量与逐轴粒度。规范中的激活值可以使用非零零点,不能将两种情况混为一谈。
Q = 2^(b−1) − 1 s = a / Q q(w) = clip(round(w/s), −Q, Q) w_hat = s q(w)
a 是可表示的最大绝对值,b 是位数。我们舍入到最近整数,恰好居中时采用 NumPy 的向偶数舍入规则。当 |w| ≤ a 时,绝对误差不超过 s/2;当 |w| > a 时发生饱和,误差可能大得多,原来的界不再成立。因此,选择 a 是在中心区域分辨率与尾部覆盖之间权衡。
若 b = 8、a = 10,则 s 约为 0.07874。权重 0.01 会变成零,不是因为八位天然不够,而是因为这个尺度把所有等级分配给了宽得多的区间。若 a = 0.01,同一权重可由编码 127 精确表示。在笼统地把质量损失归咎于“低精度”之前,应先分析尺度的影响。
2. 具有四种自然尺度的线性层
定义 y = Wx,其中有八个输入、四个输出,无偏置。每一行对应一个输出通道。构造共同的基础向量,再乘以四种幅度:
u = [−1, −0.51, −0.11, 0.07, 0.23, 0.49, 0.81, 1] α = [0.01, 0.1, 1, 10] W[c, j] = α[c] u[j] W ∈ R^(4×8), x ∈ R^8, y ∈ R^4
结构经过有意控制:各通道形状相同,只在幅度上不同。它不是从产品中提取的模型,也不代表所有真实网络的分布。其目的是隔离一个明确的误差来源。训练后的网络中,各通道的形状、异常值与敏感程度可能相差很大。
逐张量量化使用单一尺度 s = max|W|/127 = 10/127。逐通道量化使用 sc = maxj|W[c,j]|/127 = αc/127。我们量化并重建权重,同时保留浮点输入。这样可以把权重与激活的影响分开:本实验还不是完全使用整数的推理流水线。
3. 推导输出误差
令 E = Ŵ−W 为误差矩阵。输入 x 对应的输出误差是 Ex。如果 x 的均值为零、协方差为 Σ,那么无需仿真也能计算误差平方范数的期望:
δy = Ex E[||δy||²] = E[xᵀEᵀEx] = tr(EΣEᵀ) Σ = I ⇒ E[||δy||²] = ||E||F² E[(δy_c)²] = ||E[c,:]||² 当 Σ = I
恒等式利用迹的线性性,以及零均值输入满足 E[xxᵀ] = Σ。若均值 μ 非零,还需加上 ||Eμ||²。对整流激活或带偏移的变量,这一点很重要:直接套用各向同性公式可能给出错误预测。
实验使用种子 20260922 生成 100,000 个独立标准高斯向量,将经验均方误差与精确公式比较。采样用于数值检查;表格采用解析值,避免把蒙特卡洛噪声误认为方法差异。该公式不预测分类准确率或非线性网络的质量,只描述这里明确定义的线性层。
4. 结果:一个通道可以完全消失
将通道相对误差定义为 ||E[c,:]||₂/||W[c,:]||₂。它不是预测错误的比例。对于逐张量量化的第一个通道,数值为一,在本例中意味着全部权重都被舍入为零。
| 幅度 α | INT8 逐张量相对误差 | INT8 逐通道相对误差 | 逐张量输出 MSE | 逐通道输出 MSE |
|---|---|---|---|---|
| 0.01 | 100% | 0.1859% | 3.2262×10⁻⁴ | 1.1148×10⁻⁹ |
| 0.1 | 31.7980% | 0.1859% | 3.2621×10⁻³ | 1.1148×10⁻⁷ |
| 1 | 3.7089% | 0.1859% | 4.4380×10⁻³ | 1.1148×10⁻⁵ |
| 10 | 0.1859% | 0.1859% | 1.1148×10⁻³ | 1.1148×10⁻³ |
幅度最大的通道在两种方法中使用相同尺度,因此结果相同。其他通道则通过逐通道尺度保留相对分辨率。相对误差相等并不是普遍规律,而是因为各行都是同一向量的缩放副本。这个受控构造帮助我们识别机制,而不赋予其不具备的普适性。
我们还使用 b = 4、Q = 7、对称区间 −7…7 重复计算。逐通道相对误差升到 7.6444%;逐张量量化则使两个最小通道消失。这是四位编码仿真,不是对运行时 INT4 支持或内存打包的验证。选择四位还是八位,需要在这些局部误差之外评估实际任务。

5. 反例:权重误差更小,并非始终足够
各向同性平均赋予所有输入方向同样的重要性,但应用可能主要访问其中部分方向。取误差矩阵的第一行,逐张量记为 et,逐通道记为 ec,构造与 et 正交、却不与 ec 正交的输入:
z = ec − et (ecᵀet)/(etᵀet) x = z / ||z|| etᵀx = 0,而 ecᵀx 可以不为 0
程序实际构造了这个输入。第一个通道的逐张量误差约为 −3.25×10⁻¹⁹,即数值上的零;逐通道误差约为 3.32×10⁻⁵。权重误差小得多的方法,在这个逐点比较中反而更差。这不是建议使用较差的尺度,而是证明:按某个范数排序,不意味着对每个可能输入都保持同样排序。
若分布已知,tr(EΣEᵀ) 会按照实际访问的方向对误差加权。真实任务还需要测量最终指标:决策阈值附近的小变化可能很重要,远离阈值的较大误差却可能不改变决策。因此,校准和测试应反映实际输入,同时不能反复利用测试集选择尺度。
6. 裁剪:更细的网格可能得到更差的结果
现在使用四个教学激活值:−0.2、0.2、0.8 和 1。保留对称八位网格,比较三个阈值 a。当 a = 0.25 时,步长约为 0.00197,但两个值饱和,MSE 为 0.21625031。当 a = 0.5 时,步长约为 0.00394,MSE 降到 0.08500031。当 a = 1 时,步长更粗,约为 0.00787,但没有饱和,MSE 约为 0.00000744。
区间内分辨率更高,并不保证总误差更低。反过来,一个极大异常值也可能迫使其余数据采用过粗网格。最佳阈值取决于分布与选定损失:最小最大值、百分位数和误差最小化并不是等价标准。这个小集合用于说明现象,不是选择通用校准方案。
7. 从仿真计算到整数内核
Jacob 等人的基础工作,2017 年 arXiv:1712.05877v1讨论仿射表示、零点处理和整数运算推理;第 2–4 节包含方法以及在特定网络和 CPU 上的实验。没有测量,就不能把这些性能结果转移到本例或当代开发板。此外,历史论文采用的约定,也不能自动等同于当前 INT8 规范。
在对称权重的简化情况下,某个输出累加权重编码与减去自身零点后的输入编码的乘积。对应实数因子为 sx·sw,c;若输出也量化,还需重新缩放到 sy。偏置、舍入、饱和与算子融合都是实现的一部分。像本实验这样重建浮点权重再做乘法,可以隔离误差,却没有运行整数内核的这些细节。
累加器也必须正确选定宽度:操作数位数本身不能决定许多乘积求和所需的位宽。若要逐位比较,必须固定中间舍入、饱和与运算顺序。在宣称加速之前,还应确认量化算子确实由预期后端执行,没有转换或回退路径改变执行过程。
8. 内存:权重并不等于整个平台
本层包含 32 个权重。float32 需要 128 字节,INT8 需要 32 字节。如果尺度使用 float32,逐张量还需 4 字节,四通道则需 16 字节。因此仅权重与尺度的总量为 36 或 48 字节,相对于 128 字节分别缩小约 3.56 倍和 2.67 倍,并非恰好四倍。这些是明确限定的理论计数,不是 LiteRT 文件大小,未包括偏置、元数据、对齐和代码。
微控制器上,权重可能位于闪存,而激活、临时缓冲区和运行时状态需要 RAM。TFLite Micro 内存文档区分内存区中的非持久、临时和持久部分,并介绍缓冲区复用。模型文件小,不代表峰值 RAM 一定适合开发板。分析必须考虑哪些张量同时存活。
同样,字节更少并不自动意味着延迟或能耗更低。传感器采集、预处理、传输、可用指令和时钟频率可能主导总时间。以瓦特表示的功率和以焦耳表示的每次推理能量回答不同问题;没有设备测试协议,我们不报告任何性能数字。
9. 复现与建议的设备测试协议
import numpy as np
u = np.array([-1., -.51, -.11, .07, .23, .49, .81, 1.])
W = np.array([.01, .1, 1., 10.])[:, None] * u
for per_channel in [False, True]:
peak = np.max(np.abs(W), axis=1, keepdims=True) if per_channel else np.max(np.abs(W))
scale = peak / 127
Wq = np.clip(np.rint(W / scale), -127, 127) * scale
E = Wq - W
print(np.linalg.norm(E, axis=1) / np.linalg.norm(W, axis=1))
print(np.sum(E**2, axis=1))
下载实验、图表和说明;JSON 结果文件保留尺度、编码、解析误差、蒙特卡洛比较和反例。程序检查无裁剪时的 s/2 上界,并要求解析 MSE 与经验 MSE 相差不超过 3%。这个容差用于检查采样计算,不是一般统计保证。
下一步可以导出真实模型,在与校准集分离的相同测试样本上,比较浮点、逐张量 INT8 和逐通道 INT8;这一步只是建议,尚未执行。应记录开发板及版本、运行时、编译器、算子、时钟、批大小、输入形状、线程与温度条件。测量任务质量、峰值 RAM、延迟中位数及尾部延迟、每次推理能量。还应保存决策发生变化的样本,因为它们比单一平均值更能解释压缩代价。
10. 设计选择与 EL-AI 的方向
在一个假设的预测性维护应用中,数值较小的通道可能有助于识别罕见故障。仅因另一通道决定全局尺度而抹去它,是需要用相关数据调查的风险,而不是本实验已经证明的损害。从局部计算连接到工业决策,需要评估完整系统。
EL-AI 已将技术专题计划扩展到嵌入式平台与机器人。本文培养与该方向相关的理解,并不描述自研开发板、已经上市的 TinyML 产品或公司完成的设备测量。四种语言保留相同实验及其限制。
结论。尺度粒度决定哪些差异能够在整数表示中保留。在这个构造案例中,逐通道尺度保留了被全局尺度抹去的信号,但既不保证对每个输入都更好,也不保证在任意硬件上都有更高性能。可靠评估应把表示误差、输入分布、任务指标与设备测量联系起来。
来源与透明说明
文中链接的原始来源:LiteRT INT8 规范,更新于 2026 年 5 月 28 日;Jacob 等人,预印本 arXiv:1712.05877v1,2017 年 12 月 15 日,第 2–4 节;TFLite Micro 内存管理文档。查阅日期为 2026 年 9 月 22 日。示例、反例和图表均为可复现教学分析,不是训练网络的结果,也不是经过同行评审的研究成果。
文本和翻译借助 AI 完成,不宣称经过人工审校。AI 生成的封面仅作示意,不是 EL-AI 开发板或部署现场的照片。

