MNN量化—ADMM优化算法
作者:糖心他爸
链接:https://zhuanlan.zhihu.com/p/81243626
来源:知乎
目录
量化的模型建立
ADMM算法
量化的模型建立
现在我们知道了如何做量化推断,下一步是如何去建立量化模型,或者说我们应该用一个什么样的方式才能求得量化权重和量化输入呢?现在已知我们的输入为fp32,我们想用int8来对原fp32的数据进行表示,其中的转化关系假设为:
fp32和int8值之间的转化关系
对于每个数据块,我们都希望用一个尺度因子来对其进行int8的刻画,这个尺度因子就是上面式子中的s。经过上面式子之后,我们就能找到int8值和fp32值的一个对应关系。下面我们看看具体的从fp32到int8的值求解过程,这里假设我们已经知道了尺度因子s和阶段关系,那么int8的值我们可以通过如下式子获得:
int8值的求解过程
其中E是一个分段函数,表示如下。在数轴上看这个函数,是一个分段线性函数,且每个分段的导数为0,在阶梯跳跃处的整数点不可导。这个性质是一个很好用的性质,文中后续将会用到这个性质。
截断函数
在经过了这一系列过程后,我们就由fp32值得到了int8的值,我们进一步抽象这个过程,为了后面的数学推导做准备。为此,我们再定义一个函数f,我们称之为编码函数;反过来f的逆,我们称之为反编码函数,由上式我们很容易得到:
所以,在进行int8值的量化编码时候,我们执行了如下操作,
int8的编码过程,由于进行了数据截断,该过程不可逆,所以这个是一个信息损失的过程,为了度量损失的程度,我们下面将会介绍两种思路,也是MNN中解决该问题的两种算法。其目的都是为了,尽量的在编码过程中减少信息的损失。一种是从概率分布的角度出发的,目的是让编码后的数据分布和编码前的数据分布尽可能的一致,采用的概率分布度量为KL-散度;另一种是从最优化优化角度出发的,目的是让编码后的数据在进行反编码后的结果,尽可能和原数据接近,采用的度量可以是L2、L1或是广义范数,但由于L2度量的优化算法求解方便,我们后面也主要基于L2度量进行讨论。
ADMM算法
MNN中的ADMM算法是从优化的角度出发,来保证编码前后数据尽可能相似的方法。
首先定义一个目标:也就是希望编码后的数据(int8)经过反编码后,跟原数据的”距离“尽可能的接近。该描述可以通过如下数学公式进行刻画:
进一步的,假设我们这里选定的度量D为L2度量,f和E的选取跟文章一开始时候介绍的一致,我们可以将上面式子转化如下目标函数:
所以,求解尺度因子s的过程,就变成了极小化上述目标函数的过程。而且,上面我们也提到过,E的函数性质很有特点,其在阶段域内整点处处不可导,其余点处处导数为0。利用该阶段函数的特点,我们很容对上述目标函数进行求解。不过先别急,我们先算算上面目标函数相对于s的导数,如下:
由于E函数的特点,我们知道E关于s的隐函数求导,在可导处的函数值处处为0,不可导的地方我们先忽略掉(工程实现只需要避免奇点即可)。我们可以将上述式子再进一步简化如下:
再得到目标函数关于s的导数公式以后,后续的求解就非常简单了,我们给出几种求解思路。
第一种,比较直接的方法,可以采用梯度下降法,流程简单如下:
## 给定s的初值(可以统计数据的min、max进行强映射初始化)
1、 计算L关于s的梯度
2、 更新s的值
3、 判断终止条件
4、 更新步长
第二种,稍微麻烦点,由第一种算法我们可以知道,步长的选取是启发性的,收敛性虽然基本都能 得到保证,但如果我们想自适应的计算最优步长,可以采用golden-search的求解方式,求解过程跟梯度下降法很接近,如下:
## 给定s的初值(可以统计数据的min、max进行强映射初始化)
1、 计算L关于s的梯度
2、 计算最优步长
3、 更新s的值
4、 判断终止条件
第三种方式,类似一阶收敛(梯度下降、golden-search)和二阶收敛(牛顿等)我就不再拓展了;我们这里介绍一下MNN中采用的优化算法,ADMM(交替方向法)。在得到L关于s的梯度公式后,如下图:
其进行了一个概念转化,求解L的极小化问题,转化成求解L关于s的导数为0的数学问题。但由于函数E中还包含了未知数s,MNN在求解这个数据问题的时候,采用了ADMM的思想,先freezeE中的s变量,进行s值的求解;然后再通过求解后的s去估计E的值,如此反复直到s值收敛到最优。于是上述的式子要弱化为如下公式:
所以迭代的过程就变成了交替迭代求解如下两个公式的过程,
ADMM的迭代过程
于是算法流程可构造如下:
## 给定s的初值(可以统计数据的min、max进行强映射初始化)
1、 计算E的值
2、 更新s的值
3、 判断终止条件
关于三种算法的终止条件判断,可以采用l2 loss的方式即||L(k+1) - L(L(k)) || / N。也可以采用相对变化率的方式,即当前迭代变化和上次迭代变化的比值。不过其实不判断问题也不大,如MNN中的源码实现中是按照最大固定迭代次数来实现的。
MNN量化—ADMM优化算法相关推荐
- 期货股票量化软件:种群优化算法:蝙蝠算法(BA)
1. 概述 蝙蝠是种神奇的动物. 科学家认为,最早的蝙蝠出现在 65-100 亿年前,曾与恐龙并肩生活. 蝙蝠是唯一有翅膀的哺乳动物. 蝙蝠的种类拥有 1300 多种. 除了极地高寒地区之外,它们几乎 ...
- 【大论文】可扩展机器学习的并行与分布式优化算法综述_亢良伊2017
一.基础知识: 1.目标函数 机器学习要优化的目标函数一般表现为一下形式: 函数J(θ)为目标函数,f为表示真实值与拟合值之差的损失函数,r(θ)为正则项(防止过拟合问题,主要分为L1正则项.L2正则 ...
- 文献翻译__人工智能时代医学图像重建中的凸优化算法(第4、5、6章)
文章下载–我的Gitee Convex optimization algorithms in medical image reconstruction-in the age of AI 人工智能时代医 ...
- 【最全干货】从SGD到NadaMax,十种机器学习优化算法原理及实现
点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 作者丨永远在你身后@知乎 来源丨https://zhuanlan.zhihu.com/p/81 ...
- 算法组合 优化算法_算法交易简化了风险价值和投资组合优化
算法组合 优化算法 Photo by Markus Spiske (left) and Jamie Street (right) on Unsplash Markus Spiske (左)和Jamie ...
- AVS 分像素运动估计优化算法
-249- AVS 分像素运动估计优化算法 杨涵悦 1,张兆杨1,滕国伟2 (1. 上海大学通信学院,上海 200072:2. 上海广电(集团)有限公司中央研究院,上海 200233) 摘要:针对AV ...
- 【Pytorch神经网络基础理论篇】 07 线性回归 + 基础优化算法
一.线性代数 回归是指一类为一个或多个自变量与因变量之间关系建模的方法.在自然科学和社会科学领域,回归经常用来表示输入和输出之间的关系. 在机器学习领域中的大多数任务通常都与预测(prediction ...
- 协同过滤算法_利用数据分析量化协同过滤算法的两大常见难题
点击上方"蓝色字体",选择 "设为星标" 关键讯息,D1时间送达! 推荐系统自从问世以来解决了许多不同的商业产品问题,深受广大互联网从业者的喜爱.传统的互联网电 ...
- 混合整数分布式蚁群优化算法-MIDACO介绍和试用
混合整数分布式蚁群优化算法-MIDACO MIDACO是数值优化问题的求解器.MIDACO可以应用于连续(NLP非线性规划).离散/整数(IP整数规划)和混合整数规划(MINLP)问题.MIDACO可 ...
- dnn解读_论文学习+解读1--受优化算法启发的DNN网络设计
今天学习论文:[Optimization Algorithm Inspired Deep Neural Network Structure Design]https://zhouchenlin.git ...
最新文章
- [转]Eclipse中的Web项目自动部署到Tomcat
- ARMV8/ARMV9指令集概述(翻译)
- 亲测有效的网易云音乐歌单转换到apple music 的方法!
- CSS3中弹性盒布局的最新版
- java writablesheet_jxl加边框,jxl合并单元格,单元格的设置,单元格居中
- mysql_根据身份证号识别性别、年龄、所在省份
- 用CSS制作细线表格
- 华为研发项目管理方法(HRDPM)核心五法则
- Proteus器件查找
- 原理与结构解析——智能门锁方案
- 新媒体运营与营销秘笈
- 怎样用MATLAB画二次函数曲线,matlab画二次函数图像
- 关于Ultraiso一直显示“设备忙”的解决办法
- U盘安装Win Server 2008
- Photoshop CS2/CS5/CS6/CC2015/CC2018/CC2017/CC2019软件安装及按照包
- 【论文笔记】LARA:基于GAN的解决冷启动问题的推荐系统
- Top Rock Bands
- 香港的房价到底贵得有多吓人?用数据挖掘告诉你真相
- java springboot微信公众号接收回复消息和超过5秒被动回复消息
- find排除文件 linux_Linux find命令排除某个路径
热门文章
- ubuntu下载安装nginx+nginx-rtmp-module
- 数据库修改服务器,服务器数据库修改
- Symantec BE 安装及备份oracle 完整版
- angularjs源码笔记(1.3)--directive ctrl attrs
- POJ 3257 Cow Roller Coaster 二维背包
- web前端开发技术的优化策略
- sentry-前端应用监控工具
- iPhone苹果手机iOS14更新升级到iOS15需要多久?
- 6.通信原理 ——数字基带传输系统(第七版 樊昌信 曹丽娜编著)
- java newtonsoft.json_Newtonsoft.Json(Json.Net)学习笔记