我们可以定义被应用于这些状况(如不雅指定为列表的词典,则可能是多个状况)的预处理步调,比如,为了对视觉输入进行下采样。下面的例子来自 Arcade Learning Environment 预处理器,大年夜多半 DQN 实现都这么竽暌姑:
这个 stack 中的每一个预处理器都有一个类型,以及可选的 args 列表和/或 kwargs 词典。比如 sequence 预处理器会取比来的四个状况(即:帧)然后将它们堆叠起来以模仿马尔可夫属性。随便一提:在应用比如之前说起的 LSTM 层时,这显然不是必须的,因为 LSTM 层可以经由过程内部状况建模和交换时光依附。
摸索
摸索可以在 configuration 对象中定义,其可被智能体应用到其模型决定地点的动作上(以处理多个动作,同样,会给出一个规范词典)。比如,为了应用 Ornstein-Uhlenbeck 摸索以获得持续的动作输出,下面的规范会被添加到设备中。
config = Configuration( ... exploration=dict( type='OrnsteinUhlenbeckProcess', kwargs=dict( sigma=0.1, mu=0, theta=0.1 ) ) ...)
config = Configuration( ... exploration=dict( type='EpsilonDecay', kwargs=dict( epsilon=1, epsilon_final=0.01, epsilon_timesteps=1e6 ) ) ...)
用 Runner 效用函数应用智能体
让我们应用一个智能体,这个代码是在我们测试情况上运行的一个智能体:https://github.com/reinforceio/tensorforce/blob/master/tensorforce/environments/minimal_test.py,我们将其用于持续积分——一个为给定智能体/模型的工作方法验证行动、不雅察和更新机制的最小情况。留意我们所有的情况实现(OpenAI Gym、OpenAI Universe、DeepMind Lab)都应用了同一个接口,是以可以很直接地应用另一个情况运行测试。
environment = MinimalTest(continuous=False)network_config = [ dict(type='dense', size=32)]agent_config = Configuration( batch_size=8, learning_rate=0.001, memory_capacity=800, first_update=80, repeat_update=4, target_update_frequency=20, states=environment.states, actions=environment.actions, network=layered_network_builder(network_config))agent = DQNAgent(config=agent_config)runner = Runner(agent=agent, environment=environment)def episode_finished(runner): if runner.episode % 100 == 0: print(sum(runner.episode_rewards[-100:]) / 100) return runner.episode < 100 \ or not all(reward >= 1.0 for reward in runner.episode_rewards[-100:])runner.run(episodes=1000, episode_finished=episode_finished)假设你是计算机体系、天然说话处理或其它应用范畴的研究者,你必定对强化进修有一些根本的懂得,并且有兴趣精深度强化进修(deep RL)用来控制你的体系的某些方面。
为了完全,我们明白给出了在一个情况上运行一个智能体的最小轮回:
episode = 0episode_rewards = list()while True: state = environment.reset() agent.reset() timestep = 0 episode_reward = 0 while True: action = agent.act(state=state) state, reward, terminal = environment.execute(action=action) agent.observe(reward=reward, terminal=terminal) timestep += 1 episode_reward += reward if terminal or timestep == max_timesteps: break episode += 1 episode_rewards.append(episode_reward) if all(reward >= 1.0 for reward in episode_rewards[-100:]) \ or episode == max_episodes: break
正如在引言中说的一样,在一个给定应用处景中应用 runner 类取决于流程控制。如不雅应用强化进修可以让我们合理地在 TensorForce 中萌芽状况信息(比如经由过程一个队列或收集办事)并返回动作(到另一个队列或办事),那么它可被用于实现情况接口,并是以可以应用(或扩大)runner 效用函数。
别的值得说起的一点是声明式的中间设备对象使得我们可以直接用超参数优化为强化进修模型的所有组件设备接口,尤其还有收集架构。
我们欲望你能发明 TensorForce 很有效。到今朝为止,我们的重点照样让架构先就位,我们认为这能让我们更持续一致地实现不合的强化进修概念和新的办法,并且避免摸索新范畴中的深度强化学惯用例的不便。
在如许一个快速成长的范畴,要决定在实际的库中包含哪些功能是很艰苦的。如今的算法和概念是异常多的,并且看起来在 Arcade Learning Environment (ALE) 情况的一个子集上,每周都有新设法主意获得更好的结不雅。但也有一个问题存在:很多设法主意都只在易于并行化或有特定 episode 构造的情况中才有效——对于情况属性以及它们与不合办法的关系,我们还没有一个精确的概念。然则,我们能看到一些明显的趋势:
- 策略梯度和 Q 进修办法混淆以晋升样本效力(PGQ、Q-Prop 等):这是一种合乎逻辑的工作,尽管我们还不清跋扈哪种混淆策略将占优势,然则我们认为这将成为下一?「标准办法」。我们异常有兴趣懂得这些办法在不合应用范畴(数据丰富/数据稀少)的实用性。我们一个异常主不雅的看法是大年夜多半应悠揭捉?究者都偏向于应用 vanilla 策略梯度的变体,因为它们易于懂得、实现,并且更重要的是比新算法更稳健,而新算法可能须要大年夜量的微调才能处理潜在的数值不稳定性(numerical instabilities)。一种不合的看法长短强化进修研究者可能只是不知道相干的新办法,或者不肯意辛苦去实现它们。而这就鼓励了 TensorForce 的开辟。最后,值得推敲的是,应用范畴的更新机制往往没有建模状况、动作和回报以及收集架构重要。
推荐阅读
【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路! 1、常用的重要目次Linux和Windows操作体系中的文件体系些不合,在进修应用linux之前,可以或许懂得这个不>>>详细阅读
本文标题:基于TensorFlow打造强化学习API:TensorForce是怎样炼成的?
地址:http://www.17bianji.com/lsqh/36233.html
1/2 1

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