神经网络量化
- 神经网络量化 推荐度:
- 相关推荐
神经网络量化
引言:一般神经网络量化有两个目的:
- 为了加速,在某些平台上浮点数计算比较耗费时间,替换为整形可以加快运算
- 为了部署,某些平台上只支持整形运算,比如在芯片中
如果是第1个目的,则使用常规的量化手段就可以满足,将浮点数运算变成整形运算+较少的浮点运算
但是如果是第2个目的,那就需要对量化手段做一下改变。
如果是初学者,大家可以先看我的另一篇博客,这里有详细介绍【精选】神经网络量化----吐血总结-CSDN博客量化技术是连接学院派和工程派之间的桥梁,效果再好的网络速度不快,那么也不会在工业上普及,因此量化技术还是很有发展潜力的。_神经网络量化
目录
1. 关于量化,我们需要了解哪些可以人为设计
1.1 缩放因子
1.2 权重初始化
1.3 损失
1.4 标签的变换
1.5 s设置后的收敛问题
1. 关于量化,我们需要了解哪些可以人为设计
1.1 缩放因子
以对称量化举例,输入、权重、输出可以表示为
,,,
在训练时设置约束,可以将他们的关系表示为
,
其中的f可以为四舍五入、向下取整或者向上取整,变换一下或许更加清晰:
那么如果你的平台只支持整形的四则运算以及移位操作,而是个浮点数,那么就需要对做一个巧妙的设计,比如在训练时直接将这个比值表示为a*2^b,这样就将与浮点数的运算表示为与整形的乘法和移位操作了,又或者将s都限制为2^m,这样就将与浮点数的运算表示为移位操作了。
1.2 权重初始化
为了配合1.1中的对s做限制,初始化是个关键的步骤,好的初始化可以快速收敛,我个人比较喜欢torch.nn.init.xavier_normal_,这个初始化会根据扇入扇出来使得输入输出的方差保持一致,这样s1,s3不会有太大的变动。
1.3 损失
例如,在二分类中,通过的做法是最后一层使用sigmoid+BCE损失,由于sigmoid的存在会导致输入的分布过于分散,所以可以将sigmoid+BCE替换为MSE。
1.4 标签的变换
为了配合s的设置,还需要将标签变换一下,使得输出分布尽量沿原点对称且集中,比如二分类中,标签为0、1,那么可以修改为-0.5,+0.5.
1.5 s设置后的收敛问题
可以将溢出的数据的梯度设置为0。
2. 举例说明
接下来我会找一个典型的芯片部署的问题来进行说明,,,
- 解决因为LSP问题而导致的无法上网故障的方法
- win7系统如何关闭开机自动启动的放大镜
- CRM销售管理软件哪个好,如何选?(二)
- Vant4 List列表组件
- 营销互动类小游戏策划与开发
- 振南技术干货集:研发版本乱到“妈不认”? Git!(5)
- 微信小程序内部跳到外部小程序
- 轻量级 SSO 方略:基于 OIDC 规范(二)
- Android自定义控件:一款多特效的智能loadingView
- 1 Supervised Machine Learning Regression and Classification
- 谷歌:编写干净的代码以减少认知负荷
- Docker的安装配置与使用
- 嵌入式杂记
- 关于反弹Shell个人的一些理解与学习收获
- 3D造型渲染软件DAZ Studio mac中文版介绍
- 阿里云国际站:应用实时监控服务
- 考研数学笔记:线性代数中抽象矩阵性质汇总