导航:首页 > 网络安全 > 如何理解策略梯度更新神经网络

如何理解策略梯度更新神经网络

发布时间:2022-08-19 22:28:10

‘壹’ 最强alphago怎样炼成

最强alphago怎样炼成
Q: Deepmind Zero的训练为什么如此稳定?深层次的增强学习是不稳定和容易遗忘的,自我对局也是不稳定和容易遗忘的,如果没有一个好的基于模仿的初始化状态和历史检查点,二者结合在一起应该是一个灾难...但Zero从零开始,我没有看到论文中有这部分的内容,你们是怎么做到的呢?
David Silver:在深层增强学习上,AlphaGo Zero与典型的无模式算法(如策略梯度或者Q学习)采用的是完全不同的算法。通过使用AlphaGo搜索,我们可以极大改进策略和自我对局的结果,然后我们会用简单的、基于梯度的更新来训练下一个策略及价值网络。比起基于简便的基于梯度的策略改进,这样的做法会更加稳定。
Q:我注意到ELO等级分增长的数据只与到第40天,是否是因为论文截稿的原因?或者说之后AlphaGo的数据不再显着改善?
David Silver:AlphaGo已经退役了!这意味着我们将人员和硬件资源转移到其他AI问题中,我们还有很长的路要走呐。
Q:关于论文的两个问题:
Q1:您能解释为什么AlphaGo的残差块输入尺寸为19x19x17吗?我不知道为什么每个对局者需要用8个堆叠的二进制特征层来描述?我觉得1、2个层就够了啊。虽然我不是100%理解围棋的规则,但8个层看起来也多了点吧?
Q2:由于整个通道使用自我对局与最近的/最好的模型进行比较,你们觉得这对于采用参数空间的特定SGD驱动轨迹对否会有过拟合的风险?
David Silver:说起来使用表征可能比现在用的8层堆叠的做法更好!但我们使用堆叠的方式观察历史数据有三个原因:1)它与其他领域的常见输入一致;2)我们需要一些历史状态来表示被KO;3)如果有一些历史数据,我们可以更好地猜测对手最近下的位置,这可以作为一种关注机制(注:在围棋中,这叫“敌之要点即我之要点”),而第17层用于标注我们现在究竟是执黑子还是白子,因为要考虑贴目的关系。
Q:有了强大的棋类引擎,我们可以给玩家一个评级——例如Elo围棋等级分就是通过棋手对局的分析逐步得出的,那么AlphaGo是否可以对过去有等级分前的棋手的实力进行分析?这可能为研究人类的认知提供一个平台。
Julian Schrittwieser:感谢分享,这个主意很棒!
我认为在围棋中这完全可以做到,或许可以用最佳应对和实际应对的价值差异或者政策网络给每一手位置评估得到的概率来进行?我有空的时候试一下。
Q: 既然AlphaGo已经退役了,是否有将其开源的计划?这将对围棋社区和机器学习研究产生巨大的影响。还有,Hassabis在乌镇宣称的围棋工具将会什么时候发布?
David Silver:现在这个工具正在准备中。不久后你就能看到新的消息。
Q:AlphaGo开发过程中,在系统架构上遇到的最大障碍是什么?
David Silver:我们遇到的一个重大挑战是在和李世石比赛的时候,当时我们意识到AlphaGo偶尔会受到我们所谓的“妄想”的影响,也就是说,程序可能会错误理解当前盘面局势,并在错误的方向上持续许多步。我们尝试了许多方案,包括引入更多的围棋知识或人类元知识来解决这个问题。但最终我们取得了成功,从AlphaGo本身解决了这个问题,更多地依靠强化学习的力量来获得更高质量的解决方案。
围棋爱好者的问题
Q:1846年,在十四世本因坊迹目秀策与十一世井上幻庵因硕的一盘对局中,秀策下的第127手让幻庵因硕一时惊急两耳发赤,该手成为扭转败局的“耳赤一手”。如果是AlphaGo,是否也会下出相同的一首棋?
Julian Schrittwieser:我问了樊麾,他的回答是这样的:
当时的围棋不贴目,而AlphaGo的对局中,黑棋需贴7.5目。贴目情况不同造成了古今棋局的差异,如果让AlphaGo穿越到当年下那一手,很有可能下的是不同的另一个地方。
Q:从已发布的AlphaGo相互对局看,执白子的时间更为充裕,因而不少人猜测,7.5目的贴目太高了(注:现代围棋的贴目数也在不断变化,如在30年前,当时通行的是黑子贴白子5.5目)。
如果分析更大的数据集,是否可以对围棋的规则得出一些有趣的结论?(例如,执黑或者执白谁更有优势,贴目应该更高还是更低)
Julian Schrittwieser:从我的经验和运行的结果看,7.5目的贴目对双方来说是均势的,黑子的胜率略高一些(55%左右)。
Q:你能给我们讲一下第一手的选择吗?ALphaGo是否会下出我们前所未见的开局方式?比如说,第一手下在天元或者目外,甚至更奇怪的地方?如果不是,这是否是一种“习惯”,或者说AlphaGo有强烈的“信念”认为星位、小目、三三是更好的选择?
David Silver:在训练中我们看到ALphaGo尝试过不同方式的开局——甚至刚开始训练的时候有过第一手下在一一!
即便在训练后期,我们仍然能看到四、六位超高目的开局,但很快就恢复到小目等正常的开局了。
Q:作为AlphaGo的超级粉丝,有一个问题一直在我心中:AlphaGo可以让职业棋手多少子?从论文中我们知道AlphaGo可以下让子棋,我也知道AlphaGo恐怕让不了柯洁两子,但我想你们一定很好奇,你们是否有做内部测试?
David Silver:我们没有和人类棋手下让子棋。当然,我们在测试不同版本的时候下过让子棋,在AlphaGo Master>AlphaGo Lee>ALphaGo Fan这三个版本中,后一个版本均可让三子击败前一个版本。但是,因为AlphaGo是自我训练的,所以尤其擅长打败自己的较弱的前一版本,因此我们不认为这些训练方式可以推广到和人类选手的让子棋中。
Q:你们有没有想过使用生成对抗网络(GAN)?
David Sliver:从某种意义来讲,自我对弈就是对抗的过程。每一次结果的迭代都是在试图找到之前版本的“反向策略”。
传言终结者
Q:我听说AlphaGo在开发初期被引导在某一个具体的方向训练以解决对弈中展现出的弱点。现在它的能力已经超过了人类,是否需要另外的机制来进一步突破?你们有做了什么样的工作?
David Silver:实际上,我们从未引导过AlphaGo来解决具体的弱点。我们始终专注于基础的机器学习算法,让AlphaGo可以学习修复自己的弱点。
当然你不可能达到100%的完美,所以缺点总会存在。 在实践中,我们需要通过正确的方法来确保训练不会落入局部最优的陷阱,但是我们从未使用过人为的推动。
关于DeepMind公司
Q:我这里有几个问题:在DeepMind工作是什么感受?AlphaGo团队成员都有谁?你能介绍一下AlphaGo团队工作分配的情况吗?下一个重大挑战是什么?
David Silver:在DeepMind工作感觉好极了:)——这不是一个招聘广告,但我感觉每天可以在这里做我喜欢的事实在是太幸运了。有很多(多到忙不过来!:))很酷的项目去参与。
我们很幸运有许多大牛在AlphaGo工作。您可以通过查看相应的作者列表来获取更详细的信息。
Q: 你觉得本科生是否可以在人工智能领域取得成功?
Julian Schrittwiese:当然。我本人就只有计算机科学学士学位,这一领域变化迅速,我认为您可以从阅读最新的论文和试验中来进行自学。另外,去那些做过机器学习项目的公司实习也是很有帮助的。
关于算法的扩展和其他项目
Q:Hassabis今年三月份在剑桥的一个演讲中表示,AlphaGo项目未来目标之一是对神经网络进行解释。我的问题是:ALphaGo在神经网络结构上取得了什么样的进展,或者说,对AlphaGo,神经网络仍然是神秘的黑盒子?
David Silver:不仅仅是ALphaGo,可解释性是我们所有项目的一个非常有意思的课题。Deepmind内部有多个团队从不同方式来探索我们的系统,最近有团队发表了基于认知心理学技术去尝试破译匹配网络内部发生了什么,效果非常不错!
Q: 很高兴看到AlphaGo Zero的好成绩。我们的一篇NIPS论文中也提到了对于深度学习和搜索树之间效率的相似问题,因此我对于在更长的训练过程中的行为尤其感兴趣。
AlphaGo的训练过程中,创建学习目标的蒙特卡洛树搜索的贪心算法、策略网络的贪心算法、以及在训练过程中价值功能变化的贪心算法之间的相对表现如何?这种自我对局学习的方法是否可以应用在最近的星际争霸 II API中?
David Silver:感谢介绍您的论文!真不敢相信这篇论文在我们4月7日投稿的时候已经发布了。事实上,它与我们的学习算法的策略组件非常相似(尽管我们也有一个值组件),您可以参考我们的方法和强化学习中的讨论,也很高兴看到在其他游戏中使用类似方法。
Q:为什么早期版本的AlphaGo没有尝试自我对弈?或者说,AlphaGo之前也尝试过自我对弈但效果不好?
我对这个领域的发展和进步程度感到好奇。相比起今天,在两年前在设计一个自主训练的AlphaGo的瓶颈在哪里?今天我们见到的“机器学习直觉”又是经历了什么样的系统迭代过程?
David Silver:创建一个可以完全从自我学习的系统一直是加强学习的一个开放性问题。 我们最初的尝试包括你能查到的许多类似的算法,是相当不稳定的。 我们做了很多尝试,最终AlphaGo Zero算法是最有效的,而且似乎已经破解了这个特定的问题。
Q:你认为机器人什么时候能够有效解决现实世界关于高度、尺寸方面的问题(例如,自己学习如何抓取任何形状、尺寸、位置垃圾的设备)?策略梯度方法是否是实现这一目标的关键点?
Julian Schrittwieser:这主要是由于价值/政策网络上的双重改进,包括更好的训练和更好的架构。具体参见论文图4对不同网络架构的比较。
Q:据说击败柯洁的ALphaGo Master的功耗只是击败李世石的AlphaGo Lee的1/10。你们做了什么样的优化呢?
Julian Schrittwieser:这主要是由于价值/政策网络上的双重改进,包括更好的训练和更好的架构。具体参见论文图4对不同网络架构的比较。(你确认不是上一个问题的答案吗)
Q:看起来在增强学习中使用或模拟Agent的长期记忆是一个很大的障碍。 展望未来,您觉得我们是否能以一种新的思维方式解决这一点? 还是说需要等待我们技术可以实现一个超级网络?
Julian Schrittwieser:是的,长期记忆可能是一个重要的因子,例如在“星际争霸”游戏中,你可能已经做出了上千个动作,但你还要记住你派出的侦察兵。
我认为现在已经有了令人振奋的组件(神经图灵机!),但是我认为我们在这方面仍有很大的改进空间。
Q:David,我看过你的演讲视频,你提到增强学习可以用于金融交易, 你有没有真实世界的例子? 你会如何处理黑天鹅事件(过去没有遇到过的情况)?
David Silver:已经发表增强学习用于现实世界的财务算法的论文非常少见,但有一些经典论文值得一看,例如Nevmyvaka、Kearns在2006写的那篇和Moody、Safell在2001年写的那篇。
Q:你们和Facebook几乎同时研究围棋问题,你们能更快获得大师级表现的优势是什么?
对于那些无法获得像AlphaGo如此多的训练数据的领域如何开展机器学习或者增强学习?
David_Silver:Facebook更侧重于监督学习,我们选择更多地关注强化学习,因为我们认为AlphaGo最终将超越人类的知识。 我们最近的结果实际上表明,监督学习方法可以让人大吃一惊,但强化学习绝对是远远超出人类水平的关键之处。

‘贰’ 这个神经网络训练有没有梯度消失,或者梯度爆炸,具体怎么看阿

增加网络的非线性能力,从而拟合更多的非线性过程。ReLU在一定程度上能够防止梯度消失,但防止梯度消失不是用它的主要原因,主要原因是求导数简单。一定程度是指,右端的不会趋近于饱和,求导数时,导数不为零,从而梯度不消失,但左端问题依然存在,一样掉进去梯度也会消失。所以出现很多改进的ReLU。

‘叁’ BP神经网络的MATLAB训练Gradient是什么意思Performance是什么意思,大神能解释一下吗谢谢了

Gradient是梯度的意思,BP神经网络训练的时候涉及到梯度下降法,表示为梯度下降的程度与训练过程迭代次数(步长)的关系。Performance是神经网络传递误差大小的意思,表示为均方差与训练过程迭代次数(步长)的关系。

‘肆’ 如何更好的理解分析深度卷积神经网络

局部连接的概念参考局部感受域,即某个视神经元仅考虑某一个小区域的视觉输入,因此相比普通神经网络的全连接层(下一层的某一个神经元需要与前一层的所有节点连接),卷积网络的某一个卷积层的所有节点只负责前层输入的某一个区域(比如某个3*3的方块)。这样一来需要训练的权值数相比全连接而言会大大减少,进而减小对样本空间大小的需求。

权值共享的概念就是,某一隐藏层的所有神经元共用一组权值。

这两个概念对应卷积层的话,恰好就是某个固定的卷积核。卷积核在图像上滑动时每处在一个位置分别对应一个“局部连接”的神经元,同时因为“权值共享”的缘故,这些神经元的参数一致,正好对应同一个卷积核。

顺便补充下,不同卷积核对应不同的特征,比如不同方向的边(edge)就会分别对应不同的卷积核。

综述

总体来说就是重复卷积-relu来提取特征,进行池化之后再作更深层的特征提取,实质上深层卷积网络的主要作用在于特征提取。最后一层直接用softmax来分类(获得一个介于0~1的值表达输入属于这一类别的概率)。

‘伍’ TensorForce是怎样炼成的

TensorForce是怎样炼成的

本文将围绕一个实际的问题进行介绍:应用强化学习的社区可以如何从对脚本和单个案例的收集更进一步,实现一个强化学习 API——一个用于强化学习的 tf-learn 或 skikit-learn?在讨论 TensorForce 框架之前,我们将谈一谈启发了这个项目的观察和思想。如果你只想了解这个 API,你可以跳过这一部分。我们要强调一下:这篇文章并不包含对深度强化学习本身的介绍,也没有提出什么新模型或谈论最新的最佳算法,因此对于纯研究者来说,这篇文章可能并不会那么有趣。

开发动机

假设你是计算机系统、自然语言处理或其它应用领域的研究者,你一定对强化学习有一些基本的了解,并且有兴趣将深度强化学习(deep RL)用来控制你的系统的某些方面。

对深度强化学习、DQN、vanilla 策略梯度、A3C 等介绍文章已经有很多了,比如 Karpathy 的文章对策略梯度方法背后的直观思想就进行了很好的描述。另外,你也能找到很多可以帮助上手的代码,比如 OpenAI 上手智能体、rllab以及 GitHub 上许多特定的算法。

但是,我们发现在强化学习的研究框架开发和实际应用之间还存在一个巨大的鸿沟。在实际应用时,我们可能会面临如下的问题:

•强化学习逻辑与模拟句柄的紧密耦合:模拟环境 API 是非常方便的,比如,它们让我们可以创建一个环境对象然后将其用于一个 for 循环中,同时还能管理其内部的更新逻辑(比如:通过收集输出特征)。如果我们的目标是评估一个强化学习思想,那么这就是合理的,但将强化学习代码和模拟环境分开则要艰难得多。它还涉及到流程控制的问题:当环境就绪后,强化学习代码可以调用它吗?或者当环境需要决策时,它会调用强化学习智能体吗?对于在许多领域中实现的应用强化学习库,我们往往需要后者。

•固定的网络架构:大多数实现案例都包含了硬编码的神经网络架构。这通常并不是一个大问题,因为我们可以很直接地按照需求加入或移除不同的网络层。尽管如此,如果有一个强化学习库能够提供声明式接口的功能,而无需修改库代码,那么情况就会好得多。此外,在有的案例中,修改架构(出人意外地)要难得多,比如当需要管理内部状态的时候(见下文)。

•不兼容状态/动作接口:很多早期的开源代码都使用了流行的 OpenAI Gym 环境,具有平坦的状态输入的简单接口和单个离散或连续动作输出。但 DeepMind Lab 则使用了一种词典格式,一般具有多个状态和动作。而 OpenAI Universe 则使用的是命名关键事件(named key events)。理想情况下,我们想让强化学习智能体能处理任意数量的状态和动作,并且具有潜在的不同类型和形状。比如说,TensorForce 的一位作者正在 NLP 中使用强化学习并且想要处理多模态输入,其中一个状态在概念上包含两个输入——一张图像和一个对应的描述。

•不透明的执行设置和性能问题:写 TensorFlow 代码的时候,我们很自然地会优先关注逻辑。这会带来大量重复/不必要的运算或实现不必要的中间值。此外,分布式/异步/并行强化学习的目标也有点不固定,而分布式 TensorFlow 需要对特定的硬件设置进行一定程度的人工调节。同样,如果最终有一种执行配置只需要声明可用设备或机器,然后就能在内部处理好其它一切就好了,比如两台有不同 IP 的机器可以运行异步 VPG。

明确一下,这些问题并不是要批评研究者写的代码,因为这些代码本来就没打算被用作 API 或用于其它应用。在这里我们介绍的是想要将强化学习应用到不同领域中的研究者的观点。

TensorForce API

TensorForce 提供了一种声明式接口,它是可以使用深度强化学习算法的稳健实现。在想要使用深度强化学习的应用中,它可以作为一个库使用,让用户无需担心所有底层的设计就能实验不同的配置和网络架构。我们完全了解当前的深度强化学习方法往往比较脆弱,而且需要大量的微调,但这并不意味着我们还不能为强化学习解决方案构建通用的软件基础设施。

TensorForce 并不是原始实现结果的集合,因为这不是研究模拟,要将原始实现用在实际环境的应用中还需要大量的工作。任何这样的框架都将不可避免地包含一些结构决策,这会使得非标准的事情变得更加恼人(抽象泄漏(leaky abstractions))。这就是为什么核心强化学习研究者可能更倾向于从头打造他们的模型的原因。使用 TensorForce,我们的目标是获取当前最佳研究的整体方向,包含其中的新兴见解和标准。

接下来,我们将深入到 TensorForce API 的各个基本方面,并讨论我们的设计选择。

创建和配置智能体

这个示例中的状态和动作是更一般的状态/动作的短形式(short-form)。比如由一张图像和一个描述构成多模态输入按如下方式定义。类似地,也可以定义多输出动作。注意在整个代码中,单个状态/动作的短形式必须被持续不断地用于与智能体的通信。

配置参数依赖于所用的基本智能体和模型。

TensorForce 目前提供了以下强化学习算法:

•随机智能体基线(RandomAgent)

•带有 generalized advantage estimation 的 vanilla 策略梯度(VPGAgent)

•信任区域策略优化(TRPOAgent)

•深度 Q 学习/双深度 Q 学习(DQNAgent)

•规范化的优势函数(NAFAgent)

•对专家演示的深度 Q 学习(DQFDAgent)

•Asynchronous Advantage Actor-Critic(A3C)(可以隐含地通过 distributed 使用)

最后一项的意思是说并没有 A3CAgent 这样的东西,因为 A3C 实际上描述的是一种异步更新的机制,而不是一种特定的智能体。因此,使用分布式 TensorFlow 的异步更新机制是通用 Model 基类的一部分,所有智能体都衍生于此。正如论文《Asynchronous Methods for Deep Reinforcement Learning》中描述的那样,A3C 是通过为 VPGAgent 设置 distributed flag 而隐含地实现的。应该指出,A3C 并不是对每种模型而言都是最优的分布式更新策略(对一些模型甚至完全没意义),我们将在本文结尾处讨论实现其它方法(比如 PAAC)。重要的一点是要在概念上将智能体和更新语义的问题与执行语义区分开。

我们还想谈谈模型(model)和智能体(agent)之间的区别。Agent 类定义了将强化学习作为 API 使用的接口,可以管理传入观察数据、预处理、探索等各种工作。其中两个关键方法是 agent.act(state) 和 agent.observe(reward, terminal)。agent.act(state) 返回一个动作,而 agent.observe(reward, terminal) 会根据智能体的机制更新模型,比如离策略记忆回放(MemoryAgent)或在策略批处理(BatchAgent)。注意,要让智能体的内在机制正确工作,必须交替调用这些函数。Model 类实现了核心强化学习算法,并通过 get_action 和 update 方法提供了必要的接口,智能体可以在相关点处内在地调用。比如说,DQNAgent 是一个带有 DQNModel 和额外一行(用于目标网络更新)的 MemoryAgent 智能体。

神经网络配置

强化学习的一个关键问题是设计有效的价值函数。在概念上讲,我们将模型看作是对更新机制的描述,这有别于实际更新的东西——在深度强化学习的例子中是指一个(或多个)神经网络。因此,模型中并没有硬编码的网络,而是根据配置不同的实例化。

在上面的例子中,我们通过编程创造了一个网络配置作为描述每一层的词典列表。这样的配置也可以通过 JSON 给出,然后使用一个效用函数将其变成一个网络构建器(network constructor)。

默认的激活层是 relu,但也还有其它激活函数可用(目前有 elu、selu、softmax、tanh 和 sigmoid)。此外也可以修改层的其它性质.

我们选择不使用已有的层实现(比如来自 tf.layers),从而能对内部运算施加明确的控制,并确保它们能与 TensorForce 的其余部分正确地整合在一起。我们想要避免对动态 wrapper 库的依赖,因此仅依赖于更低层的 TensorFlow 运算。

我们的 layer 库目前仅提供了非常少的基本层类型,但未来还会扩展。

到目前为止,我们已经给出了 TensorForce 创建分层网络的功能,即一个采用单一输入状态张量的网络,具有一个层的序列,可以得出一个输出张量。但是在某些案例中,可能需要或更适合偏离这样的层堆叠结构。最显着的情况是当要处理多个输入状态时,这是必需的,使用单个处理层序列无法自然地完成这一任务。

我们目前还没有为自动创建对应的网络构建器提供更高层的配置接口。因此,对于这样的案例,你必须通过编程来定义其网络构建器函数,并像之前一样将其加入到智能体配置中。

内部状态和 Episode 管理

和经典的监督学习设置(其中的实例和神经网络调用被认为是独立的)不同,强化学习一个 episode 中的时间步取决于之前的动作,并且还会影响后续的状态。因此除了其每个时间步的状态输入和动作输出,可以想象神经网络可能有内部状态在 episode 内的对应于每个时间步的输入/输出。下图展示了这种网络随时间的工作方式:

这些内部状态的管理(即在时间步之间前向传播它们和在开始新 episode 时重置它们)可以完全由 TensorForce 的 agent 和 model 类处理。注意这可以处理所有的相关用例(在 batch 之内一个 episode,在 batch 之内多个 episode,在 batch 之内没有终端的 episode)。

在这个示例架构中,稠密层的输出被送入一个 LSTM cell,然后其得出该时间步的最终输出。当向前推进该 LSTM 一步时,其内部状态会获得更新并给出此处的内部状态输出。对于下一个时间步,网络会获得新状态输入及这个内部状态,然后将该 LSTM 又推进一步并输出实际输出和新的内部 LSTM 状态,如此继续……

对于带有内部状态的层的自定义实现,该函数不仅必须要返回该层的输出,而且还要返回一个内部状态输入占位符的列表、对应的内部状态输出张量和一个内部状态初始化张量列表(这些都长度相同,并且按这个顺序)。

预处理状态

我们可以定义被应用于这些状态(如果指定为列表的词典,则可能是多个状态)的预处理步骤.

这个 stack 中的每一个预处理器都有一个类型,以及可选的 args 列表和/或 kwargs 词典。比如 sequence 预处理器会取最近的四个状态(即:帧)然后将它们堆叠起来以模拟马尔可夫属性。随便一提:在使用比如之前提及的 LSTM 层时,这显然不是必需的,因为 LSTM 层可以通过内部状态建模和交流时间依赖。

探索

探索可以在 configuration 对象中定义,其可被智能体应用到其模型决定所在的动作上(以处理多个动作,同样,会给出一个规范词典)。比如,为了使用 Ornstein-Uhlenbeck 探索以得到连续的动作输出,下面的规范会被添加到配置中。

用 Runner 效用函数使用智能体

让我们使用一个智能体,这个代码是在我们测试环境上运行的一个智能体,我们将其用于连续积分——一个为给定智能体/模型的工作方式验证行动、观察和更新机制的最小环境。注意我们所有的环境实现(OpenAI Gym、OpenAI Universe、DeepMind Lab)都使用了同一个接口,因此可以很直接地使用另一个环境运行测试。

Runner 效用函数可以促进一个智能体在一个环境上的运行过程。给定任意一个智能体和环境实例,它可以管理 episode 的数量,每个 episode 的最大长度、终止条件等。Runner 也可以接受 cluster_spec 参数,如果有这个参数,它可以管理分布式执行(TensorFlow supervisors/sessions/等等)。通过可选的 episode_finished 参数,你还可以周期性地报告结果,还能给出在最大 episode 数之前停止执行的指标。

正如在引言中说的一样,在一个给定应用场景中使用 runner 类取决于流程控制。如果使用强化学习可以让我们合理地在 TensorForce 中查询状态信息(比如通过一个队列或网络服务)并返回动作(到另一个队列或服务),那么它可被用于实现环境接口,并因此可以使用(或扩展)runner 效用函数。

更常见的情况可能是将 TensorForce 用作驱动控制的外部应用库,因此无法提供一个环境句柄。对研究者来说,这可能无足轻重,但在计算机系统等领域,这是一个典型的部署问题,这也是大多数研究脚本只能用于模拟,而无法实际应用的根本原因。

另外值得提及的一点是声明式的中心配置对象使得我们可以直接用超参数优化为强化学习模型的所有组件配置接口,尤其还有网络架构。

进一步思考

我们希望你能发现 TensorForce 很有用。到目前为止,我们的重点还是让架构先就位,我们认为这能让我们更持续一致地实现不同的强化学习概念和新的方法,并且避免探索新领域中的深度强化学习用例的不便。

在这样一个快速发展的领域,要决定在实际的库中包含哪些功能是很困难的。现在的算法和概念是非常多的,而且看起来在 Arcade Learning Environment (ALE) 环境的一个子集上,每周都有新想法得到更好的结果。但也有一个问题存在:许多想法都只在易于并行化或有特定 episode 结构的环境中才有效——对于环境属性以及它们与不同方法的关系,我们还没有一个准确的概念。但是,我们能看到一些明显的趋势:

•策略梯度和 Q 学习方法混合以提升样本效率(PGQ、Q-Prop 等):这是一种合乎逻辑的事情,尽管我们还不清楚哪种混合策略将占上风,但是我们认为这将成为下一个“标准方法”。我们非常有兴趣理解这些方法在不同应用领域(数据丰富/数据稀疏)的实用性。我们一个非常主观的看法是大多数应用研究者都倾向于使用 vanilla 策略梯度的变体,因为它们易于理解、实现,而且更重要的是比新算法更稳健,而新算法可能需要大量的微调才能处理潜在的数值不稳定性(numerical instabilities)。一种不同的看法是非强化学习研究者可能只是不知道相关的新方法,或者不愿意费力去实现它们。而这就激励了 TensorForce 的开发。最后,值得考虑的是,应用领域的更新机制往往没有建模状态、动作和回报以及网络架构重要。

•更好地利用 GPU 和其他可用于并行/一步/分布式方法的设备(PAAC、GA3C 等):这一领域的方法的一个问题是关于收集数据与更新所用时间的隐含假设。在非模拟的领域,这些假设可能并不成立,而理解环境属性会如何影响设备执行语义还需要更多的研究。我们仍然在使用 feed_dicts,但也在考虑提升输入处理的性能。

•探索模式(比如,基于计数的探索、参数空间噪声……)

•大型离散动作空间、分层模型和子目标(subgoal)的分解。比如 Dulac-Arnold 等人的论文《Deep Reinforcement Learning in Large Discrete Action Spaces》。复杂离散空间(比如许多依赖于状态的子选项)在应用领域是高度相关的,但目前还难以通过 API 使用。我们预计未来几年会有大量成果。

•用于状态预测的内部模块和基于全新模型的方法:比如论文《The Predictron: End-To-End Learning and Planning》。

•贝叶斯深度强化学习和关于不确定性的推理

总的来说,我们正在跟踪这些发展,并且将会将此前错过的已有技术(应该有很多)纳入进来;而一旦我们相信一种新想法有变成稳健的标准方法的潜力,我们也会将其纳入进来。在这个意义上,我们并没有与研究框架构成明确的竞争,而是更高程度的覆盖。

‘陆’ 梯度下降算法是指什么 神经网络

梯度下降算法是神经网络在每代更新网络权值的一种方法。
神经网络还有很多其他更新权值的方法,不只这一种

阅读全文

与如何理解策略梯度更新神经网络相关的资料

热点内容
转转的网络服务器是哪里 浏览:309
峰尚网络科技有限公司在哪里 浏览:635
网络信号干扰器上市公司 浏览:401
猎头网络平台有哪些优势 浏览:25
网络值班室要哪些东西 浏览:274
网络连接完wlan口不可连接 浏览:620
手机天线问题会导致网络问题吗 浏览:9
日本网络播放器有哪些 浏览:621
电脑保持网络连接 浏览:614
小米路由器设置不支持无线网络 浏览:773
电大和函授网络哪个含金量高 浏览:535
大理制造业网络营销 浏览:565
网络打印机选了无线网络安装 浏览:945
移动公司网络异常怎么回事 浏览:882
手机有无线网络功能 浏览:195
wifi有连接无网络 浏览:671
chinanet网络有wifi上不了网 浏览:469
邯郸阿里巴巴网络推广哪个好 浏览:877
中国移动电视网络信号怎么样 浏览:988
移动网络为e网 浏览:571

友情链接