NEC:Neural Episodic Control 阅读


本文是google的DeepMind团队发布在arXiv上的文章,翻译过来是神经情景控制,相比于深度强化学习,可显著提高学习速度。

文章下载链接为:Neural Episodic Network

阅读本文需要了解的一些知识:

深度增强学习Deep Reinforcement Learning是将深度学习与增强学习结合起来从而实现从Perception感知到Action动作的端对端学习End-to-End Learning的一种全新的算法。简单的说,就是和人类一样,输入感知信息比如视觉,然后通过深度神经网络,直接输出动作,中间没有hand-crafted engineering的工作。深度增强学习具备使机器人实现真正完全自主的学习一种甚至多种技能的潜力。

上面这张图(来自David Silver的课程ppt)可以很清楚的看到整个交互过程。事实上,这就是人与环境交互的一种模型化表示。在每个时间点time-step Agent都会从可以选择的动作集合A中选择一个动作a_t执行.如果对文中的st、at、rt感到困惑的话,多看几遍这张图。DQN以及本文中提出的NEC的目标都是获取尽可能多的reward(rt)。每个时间片,Agent都是根据当前的观察来确定下一步的动作。观察Observation的集合就作为Agent的所处的状态State,因此,状态State动作Action存在映射关系,也就是一个state可以对应一个action,或者对应不同动作的概率(常常用概率来表示,概率最高的就是最值得执行的动作)。状态与动作的关系其实就是输入与输出的关系,而状态State到动作Action的过程就称之为一个策略Policy。

本文中将几个特定的词进行如下翻译,在不影响理解的情况下翻译为中文,否则在文中直接用英文表示,如有错误,欢迎指正:
1.value function 价值函数
2.semi-tabular representation 半表格表示
3.agent 代理
4.reward 反馈 也可以理解为奖励
5.memory module 内存模块
6.Differentiable Neural Dictionary (DND) 可微分神经字典
在阅读本文前,建议提前阅读此文章:一个 Q-learning 算法的简明教程

***********************************************************************************************************************************

0 Abstract

深度强化学习能够在广泛的环境中获得超越人类的表现,但是这样的方法是非常低效的,需要大量的数据才能取得合理的表现。我们提出的NEC是一个深度强化学习代理(agent),能够快速吸收新得到的经验并且基于此采取行动。我们的agent使用了一种价值函数(value)的半表格表示(semi-tabular representation):一种过去经验的缓冲器,其包含了该价值函数的缓慢变化的状态表示和快速更新的估计。我们通过在广泛环境中的研究表明:我们的代理的学习速度可以显著快于当前最佳的通用深度强化学习代理。

1 Introduction

深度强化学习尽管已经在很多复杂的环境中取得了优于人类的最好的结果,但是尽管这些agent的表现非常优秀,同时也需要比人类多好几个数量级的与环境之间的交互。例如:在Atari2600环境中,DQN需要玩该游戏超过200hours才能获得人类玩家2小时就能获得的分数。
强化学习(RL)较低的学习速率有以下几个合理的解释,并且在这篇文章中我们致力于解决这些问题:
  • 1.SGD优化需要较低的学习率。由于神经网络的全局近似性质,高学习率导致灾难性干扰。而低学习率意味着经验只能慢慢进入神经网络。
  • 2.对于一个神经网络那些具有稀疏反馈(reward)信号的环境很难被建模,因为可能只有非常少的情况下reward 不为0。这可以被看作是一种类型不平衡的形式,低反馈样本超过未知数量的高反馈样本。 因此,神经网络在预测较大的反馈方面不成比例地表现不佳,使得agent难以选择reward 最高的行为。
  • 3.通过value-bootstrapping技术,反馈信号传播,如Q-learning,导致经过先前与环境交互的历史,反馈信息一次只传播一步。如果变化出现时更新以相反的方向发生,那么这可能非常有效。然而为了训练不相关的小批量DQN-style,算法在随机选择的变化(transition)上训练,并且为了进一步稳定训练,需要使用缓慢更新的目标网络进一步减缓reward 传播。
/*这三点是本文总结的RL为什么学习效率低下的原因,总的来说就是与学习率较低、稀疏反馈信号以及反馈信号传播较慢这几个方面有关。
此处省略一段。*/

在这篇论文中,我们提出了NEC,一个解决深度强化学习(DRL)的上述局限的方法,并且在广泛的环境中使得学习速率得到了很大的提升。最重要的是,我们的agent能够在经验丰富的时候迅速锁定非常成功的策略,而无需像DQN与A3C那样等待许多步的优化。
我们的工作部分受到以下这些工作的启发:海马回(负责人类记忆的部分)在决策中的假设作用(Lengyel & Dayan);one-shot learning(Vinyals);利用神经网络学习稀疏事件。我们的代理使用其具有环境记忆的几个特征的环境的经验的半表格表示(semi-tabular representation),例如长期记忆,序列和基于上下文的查找。半表格表示是一个仅追加memory,将缓慢更改的key绑定到快速更新的value,并使用key上的基于上下文的查找来检索agent选择action的有用value(这部分内容在3.1部分会详细介绍,此处的key、value、memory、action都有特殊含义,故不予翻译)。 因此,agent的momory与传统的基于表的RL方法从state(状态)和action(动作)映射到value(价值)估计的方式大致相同。 与其他用于加强学习的神经内存架构相比,memory的一个独特方面(在第3节更详细的解释)是从memory获取的值能够比其他深层神经网络更快得多的更新。这有助于减轻应用于整个网络的随机梯度下降(SGD)的典型的缓慢的权重更新,并且使人想起快速权重的工作(Ba et al.;Hinton & Plaut),尽管与其相比我们的架构是相当不同的。另一个独特的方面是不同于其它memory architectures(内存架构) 如LSTM和DNC,我们的memory architectures不会尝试去学习何时去向memory中写入,因为这学习起来非常缓慢并且会耗费大量时间。相反,我们选择将所有的经验写入memory,并允许它与现有的memory architectures(内存架构)相比增长非常大。 使用基于kd-tree的最近邻,从这个large memory读取是高效的。
/*下面一段是讲了论文的组织结构,比较简单,不解释了。*/

2 Deep Reinforcement Learning

/*这部分内容很关键,介绍了深度强化学习(DRL)的一些思想和方法,是这篇文章提出的NEC的基础,只有彻底了解这部分内容,才能理解3的内容。这部分的内容不在拘泥于原文,会对其中提到的方法、思想和公式进行阐述。*/
/*在阅读这部分内容前建议先阅读此博客内容Deep Reinforcement Learning 基础知识(DQN方面),该博客对深度强化学习部分的内容讲解很透彻清晰,下文中提到的Q函数在其中都有讲解,只看原文是很难理解的。*/

强化学习的action-value函数(动作价值函数,是说是在策略\pi下的动作价值)定义为:
其中,a是agent在初始状态s下采取的初始动作action,rt表示在action a执行后的反馈,γ 是折扣因子,在(0,1)这个范围之间,就是说一般当下的反馈是比较重要的,时间越久,影响越小。
DQN agents使用Q-learning来学习value function Q(st,at),确定对于每个状态ststep t哪个action at是最佳选择。之后此agent根据这个价值函数执行一个贪心策略,以便权衡探索和利用:以概率α,agent随机地选择一个action,否则选择动作 at=argmax Q(st,a)。

在DQN中,动作值函数Q(st,at)由卷积神经网络(CNN)参数化,卷积神经网络将状态st的2D像素表示作为输入,并输出包含该状态下每个动作的值的向量。当agent观察到变化,DQN存储(st, at,rt,st+1)元组到一个replay buffer(重放缓存),这部分内容将用于之后的训练。这个神经网络通过最小化该网络的输出(为Q(st, at))与Q-learning的目标输出yt的平方误差来进行训练。

其中,

即L(w)=E[(r+γmaxQ(s′,a′,w)−Q(s,a,w))2]

/*
此处yt衡量了在上一步的action后,当前状态下可能达到的最大反馈;Q(st, at)表示在上一步的action后的状态st下,采取使得输出Q(st,at)最大化的action能够达到的最大反馈,优化此L(w)使其不断减小,即最后要达到这样一种效果:agent在执行完一个action后,根据Q-learning求得的目标输出与根据CNN求得的Q(st,at)相同,此时CNN训练完成。
能计算动作价值函数是不够的,因为我们需要的是最优策略,现在求解最优策略等价于求解最优的value function,找到了最优的value function,自然而然策略也就可以找到。(当然,这只是求解最优策略的一种方法,也就是value-based approach,由于DQN就是value-based,因此这里只讲这部分,以后我们会看到还有policy-based和model-based方法。一个就是直接计算策略函数,一个是估计模型,也就是计算出状态转移函数,从而整个MDP过程得解。
NEC也采用了Q-learning的这种value-based方法来进行求解。
*/
maxQ(st+1,a)是根据上一步计算得到的CNN计算得到的,即未经过本次的输入参数更新的CNN,卷积神经网络CNN在训练过程中是定期更新参数的。目标网络和来自重放缓冲区的不相关样本的使用对稳定训练至关重要。
/*下面两段提到一些DQN的扩展和优化的方法,如Double DQN、Prioritised Replay、Q*(λ)、Retrace(λ),以及A3C,这些方法都是深度强化学习的方法,在本论文4 Experiment部分将NEC与这些方法的表现做了比较
这部分内容不在解释。*/

3 Neural Episodic Control 

我们的agent有三个组件构成:
  • 处理像素图像的卷积神经网络
  • 一组内存模块(每个action一个)
  • 一个最终的网络,用来从actions内存中读出数据到Q(s,a)价值函数中。

3.1 Differentiable Neural Dictionary (DND)

每个action都有一个简单的 内存模块Ma=(Ka,Va),其中Ka,Va是动态大小的向量阵列,每个都包含相同数量的向量。存储器模块用作从键到对应值的任意关联,非常类似于程序中的字典数据类型。 因此,我们将这种内存模块称为可微分神经字典(DND)。在DND上有两种操作:查询和写入,如图1所述。在DND上执行查找将键h映射到输出值

o:o=∑ wi vi  (1)

其中vi是Va中的第i个元素,

wi =k(h,hi)/∑_j k(h,hj )(2)

其中hiKa的第i个元素,k(x,y)是一个核函数,eg:高斯函数或者反向核函数。因此,DND中的查找的输出是存储器中的值的加权和,其权重由查询键和存储器中的相应键之间的归一化内核给出。 为了能够在非常大的存储模块中高效的进行查询,我们将在实践中做出两个近似:首先,我们应该限制(1)到p最近邻(p=50)范围内。其次,我们使用近似最近邻近算法来执行基于kd-tree的查找(Bentley)。

查询DND后,会将新的键值对写入内存。写入的关键字对应于查找的关键字。 相对应的值是特定于应用程序的(下面我们指定NEC agent的更新)。 写入DND的过程是只在尾部追加的:通过分别将键和值附加到数组KaVa的末尾来写入存储器。 如果存储器中已经存在key,则其相应的值将被更新,而不是重复。

请注意,DND是Blundell等人描述的内存模块的可微分版本。 它也是对(Vinyals等人,2016; Kaiser等人,2016)中描述的用于分类的记忆和查找方案的概括。

/*为什么要用CNN处理输入s,然后输出一个向量h?

1.因为输入状态的可能性非常多,输出h相当于对输入s进行降维。

2.输出h是一个嵌入向量,可以计算h之间的距离来衡量这些h之间的相似度。*/

3.2 agent架构

图2显示了单个action的NEC agent的一部分的DND,而算法1描述了NEC算法的总体轮廓。像素状态s由卷积神经网络处理以产生key h。 然后,key h用于从DND查找值,处理存储器阵列的每个元素产生权重wi。 最后,输出DND中的value的加权和。(这一过程可描述为:)在NEC agent中,,DND中的值是对应于最初导致将对应的键值对写入存储器的状态的Q值。 因此,这种架构为单个给定动作a产生Q(s,a)的估计。该agent对每个action都有一个这样的架构(architecture),网络的卷积部分在每个单独的DND Ma之间共享参数。 NEC agent根据最高的Q值估计来决定在每一步中执行哪个action。(即在每一步中,针对每个action,在对应的DND中计算Q-value值(即(1)中得到的o值),执行最高的Q值对应的action)在实际中,训练时我们使用小ε值的ε-贪心策略。

 

图 1.DND上的操作图解。右边是查找操作,即根据CNN得到的h(蓝色竖长条)来计算得到一个o值。左边是写入操作,将h与查找得到的o值写入内存中。

图 2.对单个动作 a 的情景记忆模块(episodic memory module)的架构。表示当前状态的像素进入通过左下方的一个卷积神经网络,然后在右上方输出 Q(s, a) 的一个估计。梯度会流过这整个架构。

3.3添加(s,a)键值对到内存

作为NEC agent,它不断地向其内存添加新的键值对。按照卷积神经网络编码得到的key h的值,键被附加到相应动作的存储器上。现在我们来看key对应的value的问题。在Blundell等人的文章中,蒙特卡罗(Monte Carlo)的返回值被写入内存。我们发现,蒙特卡罗回报(策略)和非策略性备份的混合效果更好,所以对于NEC,我们选择如Mnih等人在文章中使用的那样使用N阶Q-learning。这加入了以下N个策略回馈,并引导了trajectory(轨迹,可以理解为agent执行的一系列动作)剩余部分的折扣回馈和。 那么N阶Q值估计为:

max(Q(st+N,a)通过查询每个动作a的所有存储器Ma并获取返回的最高估计Q值。注意到,最早的可以添加到内存中的这样的值,是在特定(s,a)对发生之后的N步之后了。

/*上面这一段提到了on-policy和off-policy,这部分内容较多,由于时间问题,没来得及对这部分内容深入挖掘,有兴趣的可以查资料学习一下。公式(3)其实就是将2部分的提到的yt=rt部分内容进行了改进,即原来是只求执行当前action后到下一个状态能获得的最大反馈,现在修改为求执行当前action后到N步之后的状态所能获得的最大反馈。*/

      当state-action value已经存在于DND中时(i.e key h已经存在于Ka中),对应的value:存于Va中的value和Qi-value,使用和Q-learning相同的算法进行更新:


/*此处需要注意,根据DND求出的Q(s,a)和此处的Q(N)(st,a)是不同的,Q(s,a)只是为了求出在当前状态下执行每个动作能够得到的一个Q-value值,然后基于这些信息选出一个action 。执行action后环境会给出一个反馈reward,根据这歌反馈可以求出Q(N)(st,a)值。*/

其中,α是Q更新的学习率。如果state尚不存在,将Q(N)(st,a)加入Va中,将h加入到Ka中。我们发现α可以取一个高值,允许具有稳定表示的反复访问状态来快速更新其value 函数估计。此外,批量存储器更新(例如,在episode(情景)结束时)有助于提高计算性能。当我们达到内存的最大容量时,我们将覆盖最少的最近显示为邻居的item(这一句话目前还不太理解,猜测可能是指当memory module无法再添加新的键值对时,则根据当前的状态以及memory module 选择与当前状态最接近的且最少出现的item进行覆盖)

3.4 Learning

Agent的参数通过最小化预测的Q value和Q(N)在从replay buffer上随机取样的小批量数据上的估计之间的L2损失来进行更新。特别地,我们存储元组(st,at,Rt)到replaybuffer,N是N-stepQ 规则的边界值,Rt=Q(N)(st,a)起到在DQN中见到的目标网络的作用(Rt也就是起到了2中DQN部分提到的yt的作用)。这些(st,at,Rt)元组随后经过随机采样得到minibatch以用于训练。注意到在图2中的架构是完全可微分的,因此我们可以通过梯度下降的方法来最小化L2损失。反向传播使用比在之前查询表后更新Q值使用的学习率α更小的学习率α,利用这个L2损失的梯度来更新卷积神经网络的权重和偏差(w和b)和每个特定action的内存里的key值和value值。

4 Experiment

这部分内容是实验部分,作者确定了NEC的一些参数,并将NEC与DQN、A3C、Q*(λ)、Retrace(λ)、Prooritised Replay、MFEC等方法在不同的Atari游戏上的性能进行了对比,比较了性能和学习效率,可以看到NEC的性能非常好,并且能够显著提升学习效率。这部分内容不再阐述,建议直接看原文就好。

5 Relate Work


略。

6 Discussion

我们已经提出了NEC:一个在Atari2600的游戏上相比其他agents学习效率显著提高的深度强化学习agent。NEC的核心是memory结构:一个可微分的神经词典(DND),每个潜在的action一个DND。
我们的实验表明,NEC与以前提出的数据效率要求相比,与环境的交互次数要少一个数量级。我们推测NEC通过结合以下三个特点使得NEC能够更快的学习:DND;N-stepQ估计;CNN提供的状态表示。
内存架构DND快速集成了最近的经验状态表示s和相应的价值估计value,可以将这些信息快速集成到未来的行为中。这样的Memories在许多情景中持续存在,我们使用快速的近似最近邻算法(kd-tree)来确保可以高效地访问这些存储器。通过使用N阶Q值函数来估计Q值在蒙特卡罗value估计和非策略估计之间插值。蒙特卡罗value估计反映了agent实际收到的反馈,非策略估计应该更能代表最优策略的value 函数,但速度要慢得多。通过综合使用这两个估计,NEC可以在这两个估计程序之间进行权衡以及他们的相对优势和劣势(反馈传播速度与最优性能)。最后,通过卷积神经网络提供的缓慢变化的稳定表示,存储在DND中的keys保持相对稳定。我们的工作表明,非参数化方法对于深层加强学习工具来说是一个有希望的补充,特别是在数据效率至关重要的地方。在我们的实验中,我们看到在开始学习的过程中,NEC在学习速度方面优于其他agent。 我们看到,稍后的学习过程中Prooritised Replay的性能要高于NEC。 我们将其纳入未来的工作,以进一步改善NEC,使其长期的最终表现显著优于参数代理。 进一步研究的另一个途径是将本文讨论的方法应用于更广泛的任务,如视觉更复杂的3D世界或现实世界任务,其中数据效率非常重要,因为获取数据的消耗很高

****************************************************************************************************************************************

本博客参考资料:

展开阅读全文

Git 实用技巧

11-24
这几年越来越多的开发团队使用了Git,掌握Git的使用已经越来越重要,已经是一个开发者必备的一项技能;但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、需要恢复Git代码时候就不知所措,这个时候哪些对 Git掌握得比较好的少数人,就像团队中的神一样,在队友遇到 Git 相关的问题的时候用各种流利的操作来帮助队友于水火。 我去年刚加入新团队,发现一些同事对Git的常规操作没太大问题,但对Git的理解还是比较生疏,比如说分支和分支之间的关联关系、合并代码时候的冲突解决、提交代码前未拉取新代码导致冲突问题的处理等,我在协助处理这些问题的时候也记录各种问题的解决办法,希望整理后通过教程帮助到更多对Git操作进阶的开发者。 本期教程学习方法分为“掌握基础——稳步进阶——熟悉协作”三个层次。从掌握基础的 Git的推送和拉取开始,以案例进行演示,分析每一个步骤的操作方式和原理,从理解Git 工具的操作到学会代码存储结构、演示不同场景下Git遇到问题的不同处理方案。循序渐进让同学们掌握Git工具在团队协作中的整体协作流程。 在教程中会通过大量案例进行分析,案例会模拟在工作中遇到的问题,从最基础的代码提交和拉取、代码冲突解决、代码仓库的数据维护、Git服务端搭建等。为了让同学们容易理解,对Git简单易懂,文章中详细记录了详细的操作步骤,提供大量演示截图和解析。在教程的最后部分,会从提升团队整体效率的角度对Git工具进行讲解,包括规范操作、Gitlab的搭建、钩子事件的应用等。 为了让同学们可以利用碎片化时间来灵活学习,在教程文章中大程度降低了上下文的依赖,让大家可以在工作之余进行学习与实战,并同时掌握里面涉及的Git不常见操作的相关知识,理解Git工具在工作遇到的问题解决思路和方法,相信一定会对大家的前端技能进阶大有帮助。
©️2020 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值