在移动端或边缘设备上,浮点运算成本较高。常见做法是将输入向量和全连接层权重做 INT8 非对称量化(按张量整体 per-tensor),用整数在量化域直接做点积,最后用反量化结果评估与原始浮点结果的误差。 【任务】 对输入向量 x 和权重矩阵 W 分别做 INT8 非对称量化(范围 [-128, 127],不加偏置),输出量化域的 m 个整数点积结果。 将量化后的 x 与 W 分别反量化为 x_dequant、W_dequant,计算二者在浮点域的全连接输出,与原始 x、W 的浮点输出做均方误差 MSE,并输出 round_half_up(MSE × 100000) 的整数。 量化反量化细节(per-tensor): scale = (max(v) - min(v)) 255 若 max(v) == min(v),则 scale = 0,量化结果全为 -128;反量化直接取 min(v) 量化:q = clamp(round((v - min(v)) scale) - 128, -128, 127),round 为就近取偶 反量化:v_dequant = (q + 128) * scale + min(v) MSE 四舍五入采用 half-up(即对 MSE×100000 做 “x+0.5 下取整”)
输入描述:
第一行:n(输入向量维度)第二行:n 个浮点数(输入向量 x)第三行:m n(权重矩阵维度)接着 m 行:每行 n 个浮点数(权重矩阵 W)
输出描述:
第一行:m 个整数(使用 x_quant 与 W_quant 计算的量化域全连接输出)第二行:1 个整数(round_half_up(MSE × 100000))
示例1
输入
3
0 128 255
2 3
0 0 0
255 255 255
说明
- 对 x:min=0, max=255, scale=1 → x_quant=[-128, 0, 127]
- 对 W(按张量整体):min=0, max=255, scale=1 → 第1行量化为[-128,-128,-128],第2行为[127,127,127]
- 量化域点积:
- y0 = (-128)(-128) + 0(-128) + 127*(-128) = 128
- y1 = (-128)127 + 0127 + 127*127 = -127
- 反量化后与原始浮点结果一致,MSE=0,输出 0
加载中...