MetaQNN : 与Google同场竞技,MIT提出基于Q-Learning的神经网络搜索 | ICLR 2017
论文提出MetaQNN,基于Q-Learning的神经网络架构搜索,将优化视觉缩小到单层上,相对于Google Brain的NAS方法着眼与整个网络进行优化,虽然准确率差了2~3%,但搜索过程要简单地多,所以才能仅用100GPU days就可以完成搜索,加速240倍。论文本身是个很初期的想法,可以看到搜索出来的网络结构还是比较简单的,也需要挺多的人工约束。整体而言,论文的输出的搜索思想还是很重要的,有很多参考的地方
来源:晓飞的算法工程笔记 公众号
论文: Designing Neural Network Architectures using Reinforcement Learning
Introduction
论文提出MetaQNN算法,使用基于强化学习的meta-modeling procedure来自动化CNN结构搭建过程。该方法首先搭建一个全新的Q-learning代理,学习如何发现性能好的CNN结构,发现过程先按顺序选择网络每层的参数,然后对搜索到的网络进行训练和测试,并将测试准确率作为reward,在学习过程中使用了经验回放(experience replay)进行加速
Background
将代理学习最优路径的任务为有限环境(finite-horizon)内的马尔可夫决策过程(Markov Decision Process, MDP),将环境限制为有限的能够保证代理在一定time step后停止。限制离散的有限状态空间$\mathcal{S}$以及动作空间$\mathcal{U}$,对于状态$s_i \in S$,存在可供代理选择的选择的动作集$\mathcal{U}(s_i)\in \mathcal{U}$。由于环境的随机转移性,状态$s_i$选择动作$u\in \mathcal{U}(s_i)$转移到$s_j$的概率为$p_{s^{'}|s,u()}(s_j|s_i,u)$,这可能是代理未知的。在每个time step $t$时,代理的reward $r_t$可能也是随机的,由状态$s$转移到$s\prime$以及动作$u$的概率$p_{s\prime|s,u}(s_j|s_i,u)$决定
代理的目标是最大化所有可能路径的期望reward,即${\max}_{\mathcal{T}i \in \mathcal{T}}R{\mathcal{T}}$,单个路径的reward计算如公式1
尽管限制了状态空间和动作空间,代理仍然能组合出大量的路径,所以用强化学习来进行优化。将最大化问题迭代成多个子问题,优化每个子问题到最优解。对于状态$s_i\in S$以及后续动作$u\in \mathcal{U}(s_i)$,定义最大化期望reward为$Q*(s_i,u)$,$Q(\cdot)$为action-value函数,单个$Q^(s_i,u)$称为Q-values,Q-values的最优解为公式2,即Bellman’s Equation,为当前动作的回报的期望与下个状态的Q值最大的动作的加权求和
一般不能直接学习到概率来求解Bellman’s Equation,可以转化为迭代式优化,如公式3,为Q-learning的一种简单形式。只要每种转移采样足够多次${\lim}_{t\to \infty}Q_t(s,u)=Q^*(s_i,u)$,就可以很好地逼近公式2,更新公式包含两个参数:
- $\alpha$为Q-learning rate,决定新信息对旧信息的权重
- $\gamma$为折扣率(discount factor), 决定短期reward对于长期reward的权重
Q-learning是model-free的,代理的学习过程不用构造环境变量的估计,也是off policy的,意味着可以在非最优的整体行为分布下依然可以学习到最优的策略。论文使用$\epsilon$-greedy策略,以概率$\epsilon$选取随机动作,以概率$1-\epsilon$选取贪婪动作${\max}_{u\in \mathcal{U}(s_i)}Q_t(s_i, u)$,将$\epsilon$逐渐从1降为0,这样代理能从探索(exploration)阶段慢慢变为榨取(exploitation)阶段。由于探索阶段花费较大,所以使用经验回放来加速收敛,使用记录探索的路径和reward给予代理进行公式3学习
Designing Neural Network Architectures with Q-learning
代理的学习任务即按顺序地选取神经网络层,图2(a)展示了灵活的状态空间和动作空间,图2(b)则为代理可能选择的潜在路径并用该路径构造网络
将层选择过程建模为马尔可夫决策过程,假设一个网络中表现好的层也能在别的网络中有很好的表现。代理按顺序通过$\epsilon$-greedy策略进行选择直到达到停止状态,从代理的路径中构建CNN网络,然后进行训练并将准确率反馈给代理,将准确率和网络存到回放存储(replay memory)中,定期从回放存储中采样进行公式3的Q-values更新
MetaQNN主要包含三个设计理念:
- 减少CNN层定义来简化状态参数
- 定义代理可选择的动作集,用以状态转移
- 平衡state-action空间大小和模型容量的关系,代理需要大量探索进行收敛
The State Space
每个状态为一组层相关参数,如表1所示,共有6种层类型,网络每层都预有一个layer depth来表示当前层的位置,从而进行action的约束,保证网络为有向无环图(DAG)
为了避免感受域大于特征图大小,每层有一个representation size(R-size),为特征图大小,根据R-size进行两个action的约束,限制R-size为n的状态的action的感受域必须小于或等于n来保证输出不会太小,而为了更好的约束,将R-size值分为3个离散区间,但这有可能导致生成的状态在另一个不同的区间,如图A1所示
The Action Space
对代理的动作进行了限制,从而约束state-action空间大小和简化学习过程:
- 允许代理在任何节点终止,可以从非终止状态直接转移到终止状态。另外,只允许层$i$转移到层$i+1$,保证无环,最大层仅能转移为终止层
- 限制全连接层的数量最多为两层,防止参数过多,另外全连接层转移到全连接层必须满足consecutive FC的限制,而且全连接层只能转移为neurons不大于转移前的全连接层或终止状态
- 卷积状态能转移到其它任何状态,而池化状态只能转移到非池化状态,只有Representation size为$[8,4)$和(4,1]的层能转移到全连接层
Q-Learning Training Procedure
设置公式3的Q-Learning rate($\alpha$)为0.001,discount factor($\gamma$)为1,$\epsilon$的下降如表2,在$\epsilon=1$的探索阶段训练大量的网络,其它值则保证代理在压榨前有充足的时间来继续探索,在$\epsilon=0.1$时停止
在整个训练过程使用回放字典(replay dictionary)存放网络结构及其测试的准确率,如果采样的网络有已经测试过的,则直接拿之前的准确率,不再重新训练,在当前批次网络采样和训练完后,从回放字典中随机选取100个网络对所有转移的进行公式3的Q-value更新,更新顺序以时间倒序先对后面的Q-value进行更新
Result
共使用10GPU训练8-10天,从所有模型中选取10个进行更长时间的训练
Model Selection Analysis
Prediction Performance
CONCLUSION
论文提出MetaQNN,基于Q-Learning的神经网络架构搜索,将优化视觉缩小到单层上,相对于Google Brain的NAS方法着眼与整个网络进行优化,虽然准确率差了2~3%,但搜索过程要简单地多,所以才能仅用100GPU days就可以完成搜索,加速240倍。但论文本身是个很初期的想法,可以看到搜索出来的网络结构还是比较简单的,没有残差连接和并行层,也需要挺多的人工约束。整体而言论文的输出的搜索思想还是很重要的,有很多参考的地方
APPENDIX E -- Top Topologies Selected by Algorithm
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】
MetaQNN : 与Google同场竞技,MIT提出基于Q-Learning的神经网络搜索 | ICLR 2017的更多相关文章
- AmoebaNet:经费在燃烧,谷歌提出基于aging evolution的神经网络搜索 | AAAI 2019
论文提出aging evolution,一个锦标赛选择的变种来优化进化算法,在NASNet搜索空间上,对比强化学习和随机搜索,该算法足够简洁,而且能够更快地搜索到更高质量的模型,论文搜索出的Amoeb ...
- 伯克利、OpenAI等提出基于模型的元策略优化强化学习
基于模型的强化学习方法数据效率高,前景可观.本文提出了一种基于模型的元策略强化学习方法,实践证明,该方法比以前基于模型的方法更能够应对模型缺陷,还能取得与无模型方法相近的性能. 引言 强化学习领域近期 ...
- 如何用简单例子讲解 Q - learning 的具体过程?
作者:牛阿链接:https://www.zhihu.com/question/26408259/answer/123230350来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 强化学习9-Deep Q Learning
之前讲到Sarsa和Q Learning都不太适合解决大规模问题,为什么呢? 因为传统的强化学习都有一张Q表,这张Q表记录了每个状态下,每个动作的q值,但是现实问题往往极其复杂,其状态非常多,甚至是连 ...
- 深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统
深度学习与计算机视觉(11)_基于deep learning的快速图像检索系统 作者:寒小阳 时间:2016年3月. 出处:http://blog.csdn.net/han_xiaoyang/arti ...
- SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
数据结构实验之图论二:基于邻接表的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descript ...
- NASH:基于丰富网络态射和爬山算法的神经网络架构搜索 | ICLR 2018
论文提出NASH方法来进行神经网络结构搜索,核心思想与之前的EAS方法类似,使用网络态射来生成一系列效果一致且继承权重的复杂子网,本文的网络态射更丰富,而且仅需要简单的爬山算法辅助就可以完成搜索,耗时 ...
- 深度学习基础-基于Numpy的卷积神经网络(CNN)实现
本文是深度学习入门: 基于Python的实现.神经网络与深度学习(NNDL)以及动手学深度学习的读书笔记.本文将介绍基于Numpy的卷积神经网络(Convolutional Networks,CNN) ...
- Lucene5.5.4入门以及基于Lucene实现博客搜索功能
前言 一直以来个人博客的搜索功能很蹩脚,只是自己简单用数据库的like %keyword%来实现的,所以导致经常搜不到想要找的内容,而且高亮显示.摘要截取等也不好实现,所以决定采用Lucene改写博客 ...
随机推荐
- spring boot 过滤器 前后端分离跨域sessionId不一致
import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.http ...
- 逐浪CMS全面升级为.NET Core 3.0性能大提升
微软发布了.Net Core 3.0正式版,逐浪CMS也在第一时间做了全面升级,并做了一系列的优化和调整,性能大幅提升,并解决了一些历史遗留问题,添加了一些新的功能.如后台固有小程序功能做了升级,功能 ...
- c++中比较好用的黑科技
切入正题,上黑科技 一.黑科技函数(常用的我就不写了,例如sort函数) 1.next_permutation(a+1,a+1+n) a[1-n]全排列 2.reverse(a+1,a+1+n) 将a ...
- 面试总被问分布式ID怎么办? 滴滴(Tinyid)甩给他
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 一口气说出 9种 分布式ID生成方式,面试官有点懵了 面试总被问 ...
- 等宽字体的妙用-loading 点点点动画
原理 ch等宽字体 + text-indent 动画负缩进 显示效果如 loading . loading .. loading ... loading . loading .. loading .. ...
- HTML5&CCS3(3)基本HTML结构
3.1 开始编写网页 每个HTML文档都应该包含以下基本成分: DOCTYPE: html元素(包含lang属性.该属性不是必需的,但推荐加上): head元素: 说明字符编码的meta元素: tit ...
- 菜鸟对java和Go的理解
1.go对比java go通过结构体嵌套+接口实现类似面向对象中的继承和多态.个人认为尤其是go的接口抓住了多态的本质.而Go提倡的面向接口的思想也可能使得架构上更加解耦. 2.关于Go不要通过共享内 ...
- vue中的$props、$attrs和$listeners研究 [包装iview组件]
$props:当前组件接收到的 props 对象.Vue 实例代理了对其 props 对象属性的访问. $attrs:包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 ...
- GPU Skinning不生效问题
1)GPU Skinning不生效问题2)勾选凸包报的警告问题3)Unity 2019 图片压缩格式选择4)Android Export打包对压缩的影响5)Android内存中的Unknown部分泄漏 ...
- VS2019 C++动态链接库的创建使用(1) - 创建使用dll
静态库:函数和数据被编译进一个二进制文件,通常扩展名为.lib,在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来创建最终的可执行文件. ...