进一步思虑
这个示例中的状况和动作是更一般的状况/动作的短情势(short-form)。比如由一张图像和一个描述构成多模态输入按如下方法定义。类似地,也可以定义多输出动作。留意在全部代铝闼楝单个状况/动作的短情势必须被持续赓续地用于与智能体的通信。
states = dict( image=dict(shape=(64, 64, 3), type='float'), caption=dict(shape=(20,), type='int'))
设备参数依附于所用的根本智能体和模型。每个智能体的完全参数列表可见于这个示例设备:https://github.com/reinforceio/tensorforce/tree/master/examples/configs
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 智能体。
def observe(self, reward, terminal): super(DQNAgent, self).observe(reward, terminal) if self.timestep >= self.first_update \ and self.timestep % self.target_update_frequency == 0: self.model.update_target()
神经收集设备
强化进修的一个关键问题是设计有效的价值函数。在概念上讲,我们将模型看作是对更新机制的描述,这有别于实际更新的器械——在深度强化进修的例子中是指一个(或多个)神经收集。是以,模型中并没有硬编码的收集,而是根据设备不合的实例化。
在膳绫擎的例子中,我们经由过程编程创造了一个收集设备作为描述每一层的词典列表。如许的设备也可以经由过程 JSON 给出,然后应用一个效用函数将其变成一个收集构建器(network constructor)。这里给出了一个 JSON 收集规范的例子:
[ { "type": "conv2d", "size": 32, "window": 8, "stride": 4 }, { "type": "conv2d", "size": 64, "window": 4, "stride": 2 }, { "type": "flatten" }, { "type": "dense", "size": 512 }]
和之前一样,这个设备必须被添加到该智能体的设备(configuration)对象中:
from tensorforce.core.networks import from_jsonagent_config = Configuration( ... network=from_json('configs/network_config.json') ...)
默认的激活层是 relu,但也还有其它激活函数可用(今朝有 elu、selu、softmax、tanh 和 sigmoid)。此外也可以修改层的其它性质,比如,可以将一个稠密层(dense layer)改成如许:
[ { "type": "dense", "size": 64, "bias": false, "activation": "selu", "l2_regularization": 0.001 }]Runner 效用函数可以促进一个智能体在一个情况上的运行过程。给定随便率性一?智能体和情况实例,它可以治理 episode 的数量,每个 episode 的最大年夜长度、终止前提等。Runner 也可以接收 cluster_spec 参数,如不雅有这个参数,它可以治理分布式履行(TensorFlow supervisors/sessions/等等)。经由过程可选的 episode_finished 参数,你还可以周期性地申报结不雅,还能给出在最大年夜 episode 数之前停止履行的指标。
[ { "type": "dense", "size": 32 }, { "type": "lstm" }]
推荐阅读
【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路!
1、常用的重要目次Linux和Windows操作体系中的文件体系些不合,在进修应用linux之前,可以或许懂得这个不>>>详细阅读
本文标题:基于TensorFlow打造强化学习API:TensorForce是怎样炼成的?
地址:http://www.17bianji.com/lsqh/36233.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示