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:一种自动强化学习的神经网络深度量化方法的更多相关文章

  1. 强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods)

    强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods) 学习笔记: Reinforcement Learning: An Introduction, Richard S ...

  2. 强化学习(十六) 深度确定性策略梯度(DDPG)

    在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Cri ...

  3. ICML 2018 | 从强化学习到生成模型:40篇值得一读的论文

    https://blog.csdn.net/y80gDg1/article/details/81463731 感谢阅读腾讯AI Lab微信号第34篇文章.当地时间 7 月 10-15 日,第 35 届 ...

  4. 深度强化学习资料(视频+PPT+PDF下载)

    https://blog.csdn.net/Mbx8X9u/article/details/80780459 课程主页:http://rll.berkeley.edu/deeprlcourse/ 所有 ...

  5. EMNLP 2018 | 用强化学习做神经机器翻译:中山大学&MSRA填补多项空白

    人工深度学习和神经网络已经为机器翻译带来了突破性的进展,强化学习也已经在游戏等领域取得了里程碑突破.中山大学数据科学与计算机学院和微软研究院的一项研究探索了强化学习在神经机器翻译领域的应用,相关论文已 ...

  6. 基于Keras的OpenAI-gym强化学习的车杆/FlappyBird游戏

    强化学习 课程:Q-Learning强化学习(李宏毅).深度强化学习 强化学习是一种允许你创造能从环境中交互学习的AI Agent的机器学习算法,其通过试错来学习.如上图所示,大脑代表AI Agent ...

  7. 5G网络的深度强化学习:联合波束成形,功率控制和干扰协调

    摘要:第五代无线通信(5G)支持大幅增加流量和数据速率,并提高语音呼叫的可靠性.在5G无线网络中共同优化波束成形,功率控制和干扰协调以增强最终用户的通信性能是一项重大挑战.在本文中,我们制定波束形成, ...

  8. 告别炼丹,Google Brain提出强化学习助力Neural Architecture Search | ICLR2017

    论文为Google Brain在16年推出的使用强化学习的Neural Architecture Search方法,该方法能够针对数据集搜索构建特定的网络,但需要800卡训练一个月时间.虽然论文的思路 ...

  9. 强化学习之三:双臂赌博机(Two-armed Bandit)

    本文是对Arthur Juliani在Medium平台发布的强化学习系列教程的个人中文翻译,该翻译是基于个人分享知识的目的进行的,欢迎交流!(This article is my personal t ...

随机推荐

  1. 一句话题解&&总结

    CF79D Password: 差分.两点取反,本质是匹配!最短路+状压DP 取反是套路,匹配是发现可以把操作进行目的化和阶段化,从而第二次转化问题. 且匹配不会影响别的位置答案 sequence 计 ...

  2. 走进JavaWeb技术世界开篇:JavaWeb技术汇总

    微信公众号[Java技术江湖]一位阿里 Java 工程师的技术小站.(关注公众号后回复”Java“即可领取 Java基础.进阶.项目和架构师等免费学习资料,更有数据库.分布式.微服务等热门技术学习视频 ...

  3. 动态连通性问题——算法union-find

    问题定义:问题的输入是一列整数对,其中每个整数都表示一个某种类型的对象,一对整数p,q可以被理解为"p和q是相连的".我们假设“相连”是一种对等的关系. 这也意味着它具有: 1.自 ...

  4. java课后实验性问题4

    课后作业一: 使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象? 设计思路:定义类的构造函数时使静态变量i进行i++,即每构 ...

  5. What do you do as a DevOps?

    https://ilhicas.com/2019/08/11/What-you-as-a-Devops.html Introduction In this post I'll just explain ...

  6. 从零搭建配置Cuckoo Sandbox

    1.安装依赖 $ sudo apt-get install git mongodb libffi-dev build-essential python-django python python-dev ...

  7. 推荐一个加载动图的网站loading.io

    推荐一个非常好玩的loading gif的资源网站:https://loading.io/ 里面有各种loading的动图.

  8. C语言递归之在每个树行中找最大值

    题目描述 您需要在二叉树的每一行中找到最大的值. 示例 输入: / \ / \ \ 输出: [, , ] 题目要求 /** * Definition for a binary tree node. * ...

  9. 关于使用Arduino做开发的理解

    转载自arduino中文社区 https://www.arduino.cn/thread-5414-1-1.html 见到很多人对Arduino的开发方法 .应用场景有误解,特别开个帖子说明下. 误解 ...

  10. OpenCV2.源码_编译&调试

    1.VS 调试第三方库源码 - writeeee的专栏 - CSDN博客.html(https://blog.csdn.net/writeeee/article/details/82692770) Z ...