ReLeQ:一种自动强化学习的神经网络深度量化方法
ReLeQ:一种自动强化学习的神经网络深度量化方法
ReLeQ:一种自动强化学习的神经网络深度量化方法
ReLeQ: An Automatic Reinforcement Learning Approach for Deep Quantization of Neural Networks
量化作为压缩的一种重要手段被广泛应用,而位宽和准确率的矛盾也始终存在。目前解决的方法有如CLIP-Q中的贝叶斯优化器,确定位宽。另一个问题是量化值的选取,在LQ-Net中采取了交替训练的方式。
如果将量化位宽的不同看作不同的决策,那么就可以利用强化学习的思路进行选择,ReLeQ就是其中的一种实现框架。不同层可能重要性不同,对准确率也有不同的敏感度。ReLeQ可以学习最终分类精度相对于每个层权重的量化级别的敏感度,从而确定每个层的位宽,同时保持分类精度。


方法论:用于量化的强化学习
每一层的位宽(bitwidth:qbq_bqb)属于集合{1,2,3,4,5}\{1,2,3,4,5\}{1,2,3,4,5}中,通过确定位宽来训练ReLeQ代理(agent),同时考虑先前层在每个步骤的量化。确定DNN层的准确率敏感度需要了解先前层(previous layers’ )的位宽,层索引,层大小和关于权重分布的统计(如,标准差),即Figure 2中Layer Specific的Static内容。因此,使用LSTM网络来考虑层之间的这种依赖关系。Figure 2a显示了ReLeQ代理的状态空间,分类如下:(i)每层唯一的层特定参数与特定于网络的参数,这些参数在代理在训练过程中表征整个网络。(ii)在训练过程中不会改变的静态参数。在训练过程中更改的动态参数取决于代理在搜索空间时所采取的操作。最后,除了层的属性之外,状态参数反映了关于量化和精度状态的一些指示,其定义如下:
动作空间
论文提供一组离散的量化位宽,ReLeQ代理从中选择以获得奖励反馈。 如Figure 2(b)所示,用于实现的一组位宽是1,2,3,4,5,但是也可以根据需要更改。
奖励函数
文章将奖励函数(Reward formulation)定义为两个状态的函数,分别是准确率状态与量化状态。 以下公式显示了ReLeQ奖励的制定,Figure 2c显示了公式的可视化。

在上述函数中,a和b是超参数,th是精度状态阈值。 当代理接近最佳量化组合时,以这种方式制定奖励产生平滑的奖励梯度。 此外,不同的二维梯度可加快代理的收敛时间。 通过设置阈值以防止不必要或不期望的搜索,进一步减少任务完成。 阈值还使代理能够探索设计空间内更多相关区域。
学习过程
如Figure 1所示,代理逐个遍历所有层,确定每一步的层的量化级别。 在针对给定步骤的每个动作之后,我们执行简短的重训练过程,并使用所得到的验证准确率来计算奖励。为了鼓励较低的比特宽度量化并因此降低成本,代理将所有层的平均量化与上述重新训练的准确度相结合地计入奖励。准确率奖励由相对于全精度准确度的改进或维持的验证准确度确定,而如果代理减少层的位宽,则量化奖励为正。 准确度奖励和量化奖励之间的相互作用使代理能够以最小的准确度损失对网络进行深度量化。
策略和价值网络
代理由两个网络组成,策略网络和价值网络。 所有状态嵌入都作为输入提供给LSTM层,这作为策略和价值网络的第一个隐藏层。 根据论文的评估,LSTM使ReLeQ代理的收敛速度比没有LSTM的情况下快几倍。 除了LSTM之外,策略网络还有两个完全连接的隐藏层,每个隐藏层有128个神经元,最终输出层中的神经元数量等于代理可以选择的可用位宽数量。 而Value网络有两个完全连接的隐藏层,每层隐藏128个和64个神经元。 使用近端策略优化(PPO),用于更新策略和价值网络。
评估

论文测试了MNIST,CIFAR10,SVHN数据集,分别将这些网络量化为平均位宽分别为2.25,5和4,在所有情况下精度损失小于0.3%。

测试的网络都比较简单,准确率损失的也不大。更多的结果在论文中有详细的说明。
状态嵌入
论文也进行了实验来评估使用状态嵌入的有效性。在每次迭代中,重复相同的实验,同时省略一次嵌入状态并保留其余部分。观察到层的尺寸/尺寸是最重要的收敛嵌入。层的标准差是第二重要参数。Figure 5a显示了LeNet的收敛行为,其中权重方差作为状态嵌入的一部分(基线结果),Figure 5b显示了权重方差从状态嵌入中排除时的行为。其余的状态嵌入有助于加速收敛过程。

加速微调
损失函数增加的自定义目标是为了增加泛化性能或对权重值施加一些偏好。以下小节中讨论正则化的使用方式。
Quantization friendly regularization
正则化是增强神经网络泛化性能的常用技术之一。 正则化通过向目标函数添加术语(正则化器)来有效地约束权重参数,该目标函数以软方式捕获期望的约束。 这是通过在优化过程中对权重更新施加某种偏好来实现的。最常用的正则化技术称为权重衰减,其目的是通过限制权重的增长来降低网络复杂性。 通过在目标函数中添加一个惩罚大权重值的术语来实现:
论文提出了一种对量化有利的新型正则化。通过在原始目标函数中添加周期函数(正则化器)来实现所提出的正则化,如Figure 6a。周期性正则化器具有对应于期望量化级别的周期性最小模式。通过基于给定层的特定比特数将周期与量化步长匹配来实现这种对应。其中EoE_oEo是原始损失度量,而λq\lambda_qλq是一个控制权重量化误差有多强的参数。 www是包含网络的所有参数的向量。
为了简单和清楚起见,Figure 6b和6c描绘了假设损耗表面(要最小化的原始目标函数)和2-D重量空间中的额外正则化项的几何草图。 对于重量衰减正则化,在图6b中,褪色的圆形轮廓表明,当我们接近原点时,正则化损失最小化,但这种方式并不在量化点处于小值。而提出的量化友好正则化能在不同量化点处均有较低的正则化值,从而降低损失,加快收敛。
在Figure 7上可以看出加上这一项起到的作用。
总结
整体来看强化学习在量化中仅仅进行了选择量化位宽的作用,而实际量化方式并没有明确说明。所以感觉只是把原来的自动求位宽和剪枝率的方法变了。正则化这一项倒是很新颖,不过不能满足非均匀量化。
ReLeQ:一种自动强化学习的神经网络深度量化方法的更多相关文章
- 强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods)
强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods) 学习笔记: Reinforcement Learning: An Introduction, Richard S ...
- 强化学习(十六) 深度确定性策略梯度(DDPG)
在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Cri ...
- ICML 2018 | 从强化学习到生成模型:40篇值得一读的论文
https://blog.csdn.net/y80gDg1/article/details/81463731 感谢阅读腾讯AI Lab微信号第34篇文章.当地时间 7 月 10-15 日,第 35 届 ...
- 深度强化学习资料(视频+PPT+PDF下载)
https://blog.csdn.net/Mbx8X9u/article/details/80780459 课程主页:http://rll.berkeley.edu/deeprlcourse/ 所有 ...
- EMNLP 2018 | 用强化学习做神经机器翻译:中山大学&MSRA填补多项空白
人工深度学习和神经网络已经为机器翻译带来了突破性的进展,强化学习也已经在游戏等领域取得了里程碑突破.中山大学数据科学与计算机学院和微软研究院的一项研究探索了强化学习在神经机器翻译领域的应用,相关论文已 ...
- 基于Keras的OpenAI-gym强化学习的车杆/FlappyBird游戏
强化学习 课程:Q-Learning强化学习(李宏毅).深度强化学习 强化学习是一种允许你创造能从环境中交互学习的AI Agent的机器学习算法,其通过试错来学习.如上图所示,大脑代表AI Agent ...
- 5G网络的深度强化学习:联合波束成形,功率控制和干扰协调
摘要:第五代无线通信(5G)支持大幅增加流量和数据速率,并提高语音呼叫的可靠性.在5G无线网络中共同优化波束成形,功率控制和干扰协调以增强最终用户的通信性能是一项重大挑战.在本文中,我们制定波束形成, ...
- 告别炼丹,Google Brain提出强化学习助力Neural Architecture Search | ICLR2017
论文为Google Brain在16年推出的使用强化学习的Neural Architecture Search方法,该方法能够针对数据集搜索构建特定的网络,但需要800卡训练一个月时间.虽然论文的思路 ...
- 强化学习之三:双臂赌博机(Two-armed Bandit)
本文是对Arthur Juliani在Medium平台发布的强化学习系列教程的个人中文翻译,该翻译是基于个人分享知识的目的进行的,欢迎交流!(This article is my personal t ...
随机推荐
- Raspberry Pi 4B Web服务器配置
目录 1. 安装nginx 2. 安装PHP 3. 修改nginx配置文件 4. 安装MariaDB数据库 参考资料1:树莓派4B安装PHP7.3 + Nginx + MySQL 教程 参考资料2:[ ...
- 异步机制 - APC
APC : An asynchronous procedure call,异步过程调用,是微软提供的一种在线程上下文中执行代码的机制.当向一个线程插入一个USER APC时,如果线程进入alertab ...
- 网络共享服务—SAMBA服务
SAMBA服务简介 SMB:Server Message Block服务器消息块,IBM发布,最早是DOS网络文件共享协议 Cifs:common internet file system,微软基于S ...
- 移动端—— 兼容PC端,移动端的点击事件
移动设备上不支持鼠标事件,好在webkit内核的移动浏览器支持 touch 事件,所以触摸事件是移动应用中所必须的.touchstart.touchmove.touchend事件可以类比于moused ...
- [转][C#]AutoFac 使用方法总结
AutoFac使用方法总结:Part I 转自:http://niuyi.github.io/blog/2012/04/06/autofac-by-unit-test/ AutoFac是.net平台下 ...
- ios UISegmentedControl 用法举例
UISegmentedControl * segmentControl = [[UISegmentedControl alloc]initWithFrame:CGRectMake(0, 0, 160, ...
- 连接池中的maxIdle,MaxActive,maxWait参数
连接池中的maxIdle,MaxActive,maxWait参数 线程池 name:表示你的连接池的名称也就是你要访问连接池的地址 auth:是连接池管理权属性,Container表示容器管理 typ ...
- 【思考】为什么说Bagging减少variance,Boosting减少bias?(转载)
具体讨论可见于此知乎问题,有很多种理解方向,甚至这一个命题可能本来就不成立!
- PLSQL 经常自动断开失去连接的解决过程
转: PLSQL 经常自动断开失去连接的解决过程 问题背景: 情况是这样的,很多开发同事的PLSQL上班时间开着8个小时,有时候他们出去抽烟后或者中午吃完饭,回来在PLSQL上面执行就报错无响应,然后 ...
- socket之IO多路复用
概述 目的:同一个线程同时处理多个IO请求. 本文以python的select模块来实现socket编程中一个server同时处理多个client请求的问题. web框架tornado就是以此实现多客 ...