算子量化技术基本概念
INT8量化分为非对称量化与对称量化。对称量化是非对称量化的一个特例, 通常对称量化的性能会优于非对称量化, 而精度上非对称量化更优。
非对称量化
如上图所示, 非对称量化其实就是把[min,max]范围内的数值定点到[-128, 127]或者[0, 255]区间。
从int8到float的量化公式表达如下:
其中r是真实的值, float类型; q是量化后的值, INT8或者UINT8类型;
S表示scale, 是float; Z是零点, 是INT8类型;
当量化到INT8时,
=127,
=-128; UINT8时,
=255,
=0。
反过来从float到int8的量化公式如下:
对称量化
对称量化是非对称量化Z=0时的特例, 公式表达式如下所示:
A)threshold是阈值, 可以理解为张量的范围是[-threshold, threshold];
B)这里
, 通常是激活函数情况;
C)对于weight, 一般
;
D)对于UINT8, Tensor范围是[0, threshold], 此时
。
Scale转换
公式表达:
其中取值是一个非负数
,其中
取值[0.5,1],
是一个非负数。
换个表述来说, 就是浮点数Scale, 可以转换成乘法与rshift, 如下表达:
举例说明:
乘法支持的位数越高, 就越接近Scale, 但是性能会越差。一般芯片会用32位或8位的乘法。
量化推导
可以用量化公式, 对不同的OP进行量化推导, 得到其对应的INT8计算方式。
对称与非对称都用在激活函数上, 对于权重一般只用对称量化。
卷积
卷积的表达式简略为:
代入int8量化公式, 推导如下:
非对称量化特别注意的是, Pad需要填入
。
对称量化时, Pad填入0, 上述推导中
与
皆为0。
在PerAxis(或称PerChannal)量化时, 会取Filter的每个OC做量化, 推导公式不变, 但是会有OC个乘法、rshift。
内积
表达式与推导方式与卷积相同
Add
加法的表达式为:
代入int8量化公式, 推导如下:
加法最终如何用TPU实现, 与TPU具体的指令有关。
这里对称提供的方式是用INT16做中间缓存;
在网络中,输入A、B已经是量化后的结果
、
,因此非对称是先反量化成float, 做加法后再重量化成INT8
平均池化
平均池化的表达式可以简写为: 其中
,其中
代入int8量化公式, 推导如下:
其中
LeakyReLU
LeakyReLU(泄漏ReLU)的表达式可以简写为:
代入int8量化公式, 推导如下:
对称量化时,
, 非对称量化时,
。通过向后校准操作后, , 此时Sx/Sy = 1。
当为对称量化时,
与
均为0。
Pad填充
Pad的表达式可以简写为:
代入int8量化公式, 推导如下:
通过前向校准操作后,
, 此时
/
= 1。
对称量化时,
与
均为0, pad填入 round(value/
), 非对称量化时, pad填入round(value/
+
)。
PReLU
PReLU的表达式可以简写为:
代入int8量化公式, 推导如下:
通过向后校准操作后,
, 此时
/
= 1。
一共有多个乘法与1个rshift。当为对称量化时,
与
均为0。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2023-04-09 CPU开发与存算一体技术
2022-04-09 服务器技术基础
2021-04-09 Mobileye独创性创新
2021-04-09 EyeQ进展The Evolution of EyeQ
2020-04-09 自动驾驶抱团组合
2020-04-09 三维成像结构光
2020-04-09 三维场景图:用于统一语义、三维空间和相机的结构