1. Job Roadmap
  2. Home
  3. Problem Set
  4. codenotelist
  5. Forum
  6. course
  7. Shore Share Sessions
  8. Record
  1. Login
  2. Sign Up
  3. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
    ZhContent TextSol AI分析

解题思路

本题要求将输入向量与权重矩阵分别做 INT8 非对称量化(per-tensor),用量化后的整数直接做全连接(矩阵–向量乘),并用反量化后的结果评估与原始浮点计算之间的误差。

核心要点如下:

  1. 量化(asymmetric, INT8) 对张量 vvv(可为向量 xxx 或矩阵 WWW)做 per-tensor 量化:

P4464.第2题-全连接层INT8非对称量化实现

    1000ms Tried: 1477 Accepted: 344 Difficulty: 6 所属公司 : 华为
    算法与标签>机器学习算法

题目内容

【背景】在移动设备部署深度学习模型时,浮点运算会消耗大量计算资源。通过 INT8 非对称量化,可将全连接层的浮点运算转化为整数运算,显著提高推理速度。实际应用中:

  • 量化后模型大小缩小 4 倍(32bit→8bit)
  • 整数运算指令比浮点指令快 2-4 倍
  • 广泛应用于移动端 NLP 模型(如 BERT 最后一层分类头)
  • 在物联网设备上可降低能耗并减少内存占用

【题目要求】请实现以下功能:

  1. 量化和全连接层计算:对输入向量 x 和权重矩阵 W 执行 INT8 非对称量化,使用量化后的整数值 xquantx_{quant}xquant​和WquantW_{quant}Wquant​ 进行全连接层计算,输出计算结果。为简化起见,本题中全连接层不考虑偏置。
  2. 计算量化误差:对量化的整数进行反量化得到 xdequantx_{dequant}xdequant​和 WdequantW_{dequant}Wdequant​并进行全连接层计算,与原始浮点 x、W 的全连接层计算结果进行比较,计算两个全连接层输出之间的均方误差(MSE),并将 MSE × 100000 后四舍五入后输出。

【算法原理】

1、INT8 非对称量化:

1)尺度:scalev=(max(v)−min(v))/255scale_v=(max(v)-min(v))/255scalev​=(max(v)−min(v))/255,当max(v)==min(v) max(v)==min(v)max(v)==min(v),即张量 v 的所有值相等时,scalev=0scale_v=0scalev​=0。

2)量化,对张量 v(向量 x 或矩阵 W)进行量化得到vquantv_{quant}vquant​,量化后的整数区间为 [-128,127]:

vquant=clamp(round((v−min(v))/scalev)−128,−128,127)v_{quant} = clamp(round((v - min(v))/scale_v) - 128, -128,127)vquant​=clamp(round((v−min(v))/scalev​)−128,−128,127) ,当scalev=0时量化结果为vquant=−128当 scale_v = 0 时量化结果为v_{quant} = -128 当scalev​=0时量化结果为vquant​=−128。

其中 round () 采用就近取偶。

round(x)={⌊x⌋,{x}<12,⌊x⌋+1,{x}>12,2⋅⌊x+12⌋,{x}=12.\text{round}(x)= \begin{cases} \lfloor x \rfloor, & \{x\} < \frac{1}{2}, \\ \lfloor x \rfloor + 1, & \{x\} > \frac{1}{2}, \\ 2 \cdot \lfloor \frac{x+1}{2} \rfloor, & \{x\} = \frac{1}{2}. \end{cases}round(x)=⎩⎨⎧​⌊x⌋,⌊x⌋+1,2⋅⌊2x+1​⌋,​{x}<21​,{x}>21​,{x}=21​.​

其中:{x}=x−⌊x⌋\{x\} = x - \lfloor x \rfloor{x}=x−⌊x⌋,⌊x⌋\lfloor x \rfloor⌊x⌋ 表示向下取整。

clamp(t,lo,hi)={lo,t<lohi,t>hit,else\text{clamp}(t, lo, hi)= \begin{cases} lo, & t < lo \\ hi, & t > hi \\ t, & else \end{cases}clamp(t,lo,hi)=⎩⎨⎧​lo,hi,t,​t<lot>hielse​

3)反量化,对 vquantv_{\text{quant}}vquant​ 进行反量化后得到 vdequantv_{\text{dequant}}vdequant​:

vdequant=(vquant+128)⋅scalev+min⁡(v)v_{\text{dequant}} = (v_{\text{quant}} + 128) \cdot \text{scale}_v + \min(v)vdequant​=(vquant​+128)⋅scalev​+min(v),当 scalev=0\text{scale}_v = 0scalev​=0 时,反量化值 vdequant=min⁡(v)v_{\text{dequant}} = \min(v)vdequant​=min(v),即为原始输入的最小值。

2、全连接层计算,以输入向量xxx和权重矩阵WWW为例,全连接层输出Y。

Y=x⋅WTY = x\cdot W^TY=x⋅WT

3、量化误差,计算原始浮点输入的全连接层输出 YfloatY_{\text{float}}Yfloat​ 和反量化数据的全连接层输出 YdequantY_{\text{dequant}}Ydequant​ 之间的均方误差(MSE):

MSE=1m∑i=0m−1(Yfloat,i−Ydequant,i)2MSE = \frac{1}{m} \sum_{i=0}^{m-1} (Y_{\text{float},i} - Y_{\text{dequant},i})^2MSE=m1​∑i=0m−1​(Yfloat,i​−Ydequant,i​)2,m 为权重矩阵的行数。

输入描述

第一行: n (输入向量 x 的维度)第二行: n 个浮点数 (输入向量 x)第三行: m n (权重矩阵 W 的维度)接下来 m 行:每行 n 个浮点数 (权重矩阵 W)

输出描述

第一行: m 个整数 (使用量化数据 xquantx_{quant}xquant​和 WquantW_{quant}Wquant​计算的全连接层输出)

第二行: 1 个整数 (量化误差 MSE,注意是 MSE × 100000 后四舍五入输出整数)

样例1

输入

3
1.0 2.0 3.0
2 3
0.1 0.2 0.3
0.4 0.5 0.6

输出

13082 12929
0 

说明

3 # n=3 (输入向量维度)

1.0 2.0 3.0 # x = [1.0, 2.0, 3.0]

2 3 # m=2, n=3 (权重矩阵 2×3)

0.1 0.2 0.3 # W 第 1 行 = [0.1, 0.2, 0.3]

0.4 0.5 0.6 # W 第 2 行 = [0.4, 0.5, 0.6]

量化输入向量 X: xquantx_{quant}xquant​= [-128, 0, 127]

量化权重矩阵 W: WquantW_{quant}Wquant​= [[-128, -77, -26], [25, 76, 127]]

量化域整数运算:输出第一行结果: 13082 12929

计算MSE

原始浮点输出:

Y_float [0] = 1.0×0.1 + 2.0×0.2 + 3.0×0.3 = 0.1 + 0.4 + 0.9 = 1.4

Y_float [1] = 1.0×0.4 + 2.0×0.5 + 3.0×0.6 = 0.4 + 1.0 + 1.8 = 3.2

反量化后: Y_dequant = Y_float

MSE: 输出第二行结果: 0

样例2

输入

7 
0.3 -1.1 2.2 -3.3 4.4 -5.5 6.6 
3 7 
0.2 -0.3 0.4 -0.1 0 0.5 -0.6 
-1.5 1.2 -0.9 0.6 -0.3 0.1 0 
3 -2 1 -0.5 0.25 -0.125 0.0625

输出

-5476 -7406 8954
933

说明

7 # n=7 (输入向量维度)

0.3 -1.1 2.2 -3.3 4.4 -5.5 6.6 # x = [0.3, -1.1, 2.2, -3.3, 4.4, -5.5, 6.6]

3 7 # m=3, n=7 (权重矩阵 3×7)

0.2 -0.3 0.4 -0.1 0 0.5 -0.6 # W 第 1 行

-1.5 1.2 -0.9 0.6 -0.3 0.1 0 # W 第 2 行

3 -2 1 -0.5 0.25 -0.125 0.0625 # W 第 3 行

输出:

量化域整数运算输出: -5476 -7406 8954

MSE 输出: 933

登录后即可使用 AI 分析。

模式
倒计时时长
:

最长 10 小时 59 分;应用后按此时长重新开始。

提示:点击提交记录在左侧题面区域查看详情
题库
AI分析设置
留空使用官方API Key,每天有次数限制(自定义API Key仅限会员和管理员使用,不限次数)
会员和管理员可切换模型;切到 Kimi/智谱/通义/豆包时需填写对应供应商 API Key
升级会员,可将运行与提交冷却时间缩短至 1 秒起

Status

  • Judging Queue
  • Service Status

Development

  • Open Source

Support

  • Help
  • Contact Us

About

  • About
  • Privacy
  • Terms of Service
  • Copyright Complaint
  1. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
  2. Legacy mode
  3. Theme
    1. Light
    2. Dark
  1. 京ICP备2025123107号-1
  2. Worker 1, 66ms
  3. Powered by Hydro v5.0.0-beta.18 Community
CLOSE


ScanQRCodePrompt

请使用微信扫描下方二维码完成注册

Forgot password or username?