在嵌入式设备上运行神经网络推理时,由于硬件资源有限,通常需要将浮点参数压缩为低比特整数表示,以减少存储开销和加速计算。
本题要求你实现一种对称INT8量化方案,分别对激活矩阵 A 和参数矩阵 B 进行量化,然后在整数域完成矩阵乘法,最后还原为浮点结果并输出。
具体规则如下:
1. 原始矩阵
激活矩阵 A 的维度为 M*K,其中每一行代表一个样本向量。参数矩阵 B 的维度为 K*N,其中每一列代表一个输出通道。
2. 量化过程
(1) 对激活矩阵 A 按行量化(per-sample)
对第 i 行,先计算缩放因子:
再对每个元素量化:
(2) 对参数矩阵 B 按列量化(per-channel)
对第 j 列,先计算缩放因子:
再对每个元素量化:
注意:
round 采用 Python round() 的逻辑,即银行家舍入(四舍六入五取偶)。
非 0.5 的情况遵循常规四舍五入;恰好 0.5 时舍入到最接近的偶数。
- clip(x, -127, 127) 将 x 限制在 [-127, 127] 范围内。
3. 量化矩阵乘法
先在整数域计算乘积(结果为INT32):
然后乘以对应的缩放因子还原为浮点数: