0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何利用TensorForce框架快速搭建深度强化学习模型

DPVg_AI_era 来源:lp 2019-03-29 08:44 次阅读

深度强化学习已经在许多领域取得了瞩目的成就,并且仍是各大领域受热捧的方向之一。本文深入浅出的介绍了如何利用TensorForce框架快速搭建深度强化学习模型。

深度强化学习(Deep Reinforcement Learning, DRL)是目前最热门的方向之一,从视频游戏、围棋、蛋白质结构预测到机器人计算机视觉推荐系统等领域已经取得了很多令人瞩目的成就且仍在蓬勃发展中。

AlphaGo第一作者Davild Silver就认为通用人工智能需要强化学习结合深度学习来实现,即AGI=DL+RL。

框架

为了便于研究人员快速搭建出强化学习模型,很多机构发布了强化学习基准算法或框架,其中较早的有OpenAI Baselines [1]、伯克利的rllab [2],最新的有18年谷歌发布的Dopamine [3]、Facebook发布的Horizon [4]。具体见下表:

本文介绍的是TensorForce并非由这些大机构发布,而是由几个剑桥大学的博士生开发、维护的。

当时选择TensorForcce是因为需要在ROS框架下开发,而如上表列出的,它完全支持Python2,且包含很多主流的强化学习算法、支持OpenAI Gym、DeepMind Lab等常用于强化学习算法测试的基准环境。

TensorForce是架构在TensorFlow上的强化学习API,最早在17年就开源了,并发布了博客[5]介绍其背后的设计思想及基本应用。

这里简单介绍一下TensorForce的设计思想。

框架设计的难点在于如何解耦出其它层面的内容,尽可能将共用的部分抽象出来。拿强化学习来说,智能体与环境不断通过交互试错来学习,如果由我们从头自己编程实现某个RL任务,为了方便智能体与环境很自然地会写在一起。但作为框架却不行,需要将智能体从环境中解耦出来。

TensorForce包括了下面四个层面的概念:

Environment <-> Runner <-> Agent <-> Model

Agent在训练前可以加载model,训练后保存model,运行时接收state,(预处理后)作为model的输入,返回action。模型会根据算法及配置自动更新。Runner将Agent和Environment之间的交互抽象出来作为函数。Environment根据应用场景的不同需要自己写接口,后文会提供一个机器人导航环境的接口案例。如果是学习或者算法测试,可以使用现成的基准环境,TensorForce提供了OpenAI Gym、OpenAI Universe和DeepMind Lab的接口。

第一行代码

下面通过使用近端策略优化(Proximal Policy Optimization, PPO)算法训练OpenAI Gym中倒立摆来初识TensorForce的简洁和强大。

from tensorforce.agents import PPOAgentfrom tensorforce.execution import Runnerfrom tensorforce.contrib.openai_gym import OpenAIGym# Create an OpenAIgym environment.environment=OpenAIGym('CartPole-v0',visualize=True)network_spec=[dict(type='dense',size=32,activation='relu'),dict(type='dense',size=32,activation='relu')]agent = PPOAgent(states=environment.states,actions=environment.actions,network=network_spec,step_optimizer=dict(type='adam',learning_rate=1e-3),saver=dict(directory='./saver/',basename='PPO_model.ckpt',load=False,seconds=600),summarizer=dict(directory='./record/',labels=["losses","entropy"],seconds=600),)# Create the runnerrunner=Runner(agent=agent,environment=environment)# Start learningrunner.run(episodes=600, max_episode_timesteps=200)runner.close()

很快,倒立摆能够平衡:

使用TensorBoard查看训练过程(左图是loss,右图是entropy):

上面我们只用了30行代码实现了PPO算法训练倒立摆,代码首先定义了环境和网络(两层32个节点的全连接网络,激活函数为relu),然后定义了agent,agent的参数中states, actions, network三个参数是必填的,step_optimizer定义了优化器,saver和summarizer分别保存模型和训练过程。最后通过runner来实现agent和environment的交互,总共跑了600个episodes,每个episode的最大步长是200。

runner解耦出了交互过程,实际上是是下面过程的循环:

# Query the agent for its action decisionaction = agent.act(state)# Execute the decision and retrieve the current informationobservation, terminal, reward = GazeboMaze.execute(action)# Pass feedback about performance (and termination) to the agentagent.observe(terminal=terminal, reward=reward)

在上述过程中,agent会储存相关信息来更新模型,比如DQNAgent会存储(state, action, reward, next_state)。

视频游戏

TensorForce提供了丰富的observation预处理功能,视频游戏是DRL最先取得突破的方向,以Flappy Bird为例,需要进行四个步骤的预处理:

转化为灰度图,去除不必要的颜色信息;

缩小输入的游戏截屏,resize为80*80;

堆叠连续的四帧,推导出运行信息;

归一化处理,以便于训练。

使用TensorForce可以很方便地进行预处理:

states = dict(shape=(3264, 18723, 3), type='float')states_preprocessing_spec = [dict( type='image_resize', width=80, height=80), dict( type='grayscale'),dict( type='normalize')dict( type='sequence', length=4)]agent = DQNAgent( states=states, actions=actions, network=network_spec, states_preprocessing=states_preprocessing_spec)

环境搭建

如果要在具体的应用场景中使用TensorForce就需要根据应用场景手动搭建环境,环境的模板为environment.py [7],其中最重要的函数是execute,该函数接收agent产生的action,并在环境中执行该action,然后返回next_state,reward,terminal。这里我以搭建的Gazebo中的机器人导航环境为例,进行介绍。

首先搭建仿真环境如下图:

设计环境的接口及其与agent交互的过程:

仿真开始,init函数打开Gazebo并加载对应的导航环境,reset函数初始化机器人,execute函数接收到action后通过ROS发送对应的速度命令,Gazebo中的机器人接收到速度命令后执行对应的速度,机器人传感器返回相应的信息,计算对应的reward,读取视觉传感器的RGB图像作为next_state,判断是否到达目标点或者碰撞,如果是Terminal为True,该episode结束。完整的代码见 [8]。

复杂网络

DRL网络和算法是智能体最重要的两部分,一个确定模型结构、一个决定模型更新。上面只介绍了简单的模型,对于有些复杂网络需要层叠的方式来定义,如下如:

该网络的输入为64*48*3的RGB图像,由卷积层提取特征后与2维的速度信息和运动信息共同输入全连接层进行决策。首先定义state:

states=dict(image=dict(shape=(48,64,3),type='float'),#Observationprevious_act=dict(shape=(2,),type='float'),#velocityrelative_pos=dict(shape=(2,),type='float')#target)

然后定义action即velocity,这里为机器人的线速度(限制在[0,1])和角速度(限制在[-1,1]):

dict(linear_vel=dict(shape=(),type='float',min_value=0.0,max_value=1.0),angular_vel=dict(shape=(),type='float',min_value=-1.0,max_value=1.0))

然后通过层叠的方式来定义网络结构:

network_spec=[[dict(type='input',names=['image']),dict(type='conv2d',size=32,window=(8,6),stride=4,activation='relu',padding='SAME'),dict(type='conv2d',size=64,window=(4,3),stride=2,activation='relu',padding='SAME'),dict(type='pool2d',pooling_type='max',window=2,stride=2,padding='SAME'),dict(type='conv2d',size=64,window=2,stride=2,activation='relu',padding='SAME'),dict(type='flatten'),dict(type='output',name='image_output')],[dict(type='input',names=['image_output','previous_act','relative_pos'],aggregation_type='concat'),dict(type='dense',size=512,activation='relu'),dict(type='dense',size=512,activation='relu'),]]

完整代码见[8]

其它

1. agent会有actions_exploration参数来定义exploration,默认值为'none',但这并不代表不探索,以PPO为例,模型在输出的时候不输出直接的确定性动作(只有DPG才会输出确定性动作),而是分布,输出在分布上采样输出,这可以看作是一种exploration。

2. 网络的输出层是根据action自动添加的,在network中定义输入层和隐藏层即可

3. 如果不再需要exploration而只是exploitation,则运行:

agent.act(action,deterministic=True)

此时agent执行greedy策略。而如果模型训练完成,不再训练则:

agent.act(action,independent=True)

此时函数只执行act不执行observe来更新模型

4. PPO算法相比于DQN,不仅性能好,并且对超参数更鲁棒,建议优先选择PPO

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人工智能
    +关注

    关注

    1791

    文章

    47045

    浏览量

    238031
  • 计算机视觉
    +关注

    关注

    8

    文章

    1696

    浏览量

    45954
  • 强化学习
    +关注

    关注

    4

    文章

    266

    浏览量

    11234

原文标题:快速上手深度强化学习?学会TensorForce就够了

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么是深度强化学习?深度强化学习算法应用分析

    什么是深度强化学习? 众所周知,人类擅长解决各种挑战性的问题,从低级的运动控制(如:步行、跑步、打网球)到高级的认知任务。
    发表于 07-01 10:29 1417次阅读
    什么是<b class='flag-5'>深度</b><b class='flag-5'>强化学习</b>?<b class='flag-5'>深度</b><b class='flag-5'>强化学习</b>算法应用分析

    深度强化学习实战

    一:深度学习DeepLearning实战时间地点:1 月 15日— 1 月18 日二:深度强化学习核心技术实战时间地点: 1 月 27 日— 1 月30 日(第一天报到 授课三天;提前
    发表于 01-10 13:42

    深度学习强化学习相结合的深度强化学习DRL

    深度强化学习DRL自提出以来, 已在理论和应用方面均取得了显著的成果。尤其是谷歌DeepMind团队基于深度强化学习DRL研发的AlphaGo,将
    发表于 06-29 18:36 2.8w次阅读

    如何构建强化学习模型来训练无人车算法

    本文作者通过简单的方式构建了强化学习模型来训练无人车算法,可以为初学者提供快速入门的经验。
    的头像 发表于 11-12 14:47 4867次阅读

    深度强化学习的概念和工作原理的详细资料说明

    深度学习DL是机器学习中一种基于对数据进行表征学习的方法。深度学习DL有监督和非监督之分,都已经
    的头像 发表于 05-16 09:20 3466次阅读

    深度强化学习到底是什么?它的工作原理是怎么样的

    深度学习DL是机器学习中一种基于对数据进行表征学习的方法。深度学习DL有监督和非监督之分,都已经
    的头像 发表于 06-13 11:39 6042次阅读

    机器学习中的无模型强化学习算法及研究综述

    模型强化学习(Mode- based reinforcement Lear-ning)和无模型强化学习( Model- ree reirη forcement Learning)。
    发表于 04-08 11:41 11次下载
    机器<b class='flag-5'>学习</b>中的无<b class='flag-5'>模型</b><b class='flag-5'>强化学习</b>算法及研究综述

    模型深度强化学习应用研究综述

    深度强化学习(DRL)作为机器学习的重要分攴,在 Alphago击败人类后受到了广泛关注。DRL以种试错机制与环境进行交互,并通过最大化累积奖赏最终得到最优策略。强化学习可分为无
    发表于 04-12 11:01 9次下载
    <b class='flag-5'>模型</b>化<b class='flag-5'>深度</b><b class='flag-5'>强化学习</b>应用研究综述

    基于深度强化学习的路口单交叉信号控制

    利用深度强化学习技术实现路口信号控制是智能交通领域的硏究热点。现有硏究大多利用强化学习来全面刻画交通状态以及设计有效
    发表于 04-23 15:30 21次下载
    基于<b class='flag-5'>深度</b><b class='flag-5'>强化学习</b>的路口单交叉信号控制

    基于深度强化学习仿真集成的压边力控制模型

    压边为改善板料拉深制造的成品质量,釆用深度强化学习的方法进行拉深过程旳压边力优化控制。提岀一种基于深度强化学习与有限元仿真集成的压边力控制模型
    发表于 05-27 10:32 0次下载

    基于深度强化学习的无人机控制律设计方法

    基于深度强化学习的无人机控制律设计方法
    发表于 06-23 14:59 46次下载

    《自动化学报》—多Agent深度强化学习综述

    多Agent 深度强化学习综述 来源:《自动化学报》,作者梁星星等 摘 要 近年来,深度强化学习(Deep reinforcement le
    发表于 01-18 10:08 1603次阅读
    《自动<b class='flag-5'>化学</b>报》—多Agent<b class='flag-5'>深度</b><b class='flag-5'>强化学习</b>综述

    ESP32上的深度强化学习

    电子发烧友网站提供《ESP32上的深度强化学习.zip》资料免费下载
    发表于 12-27 10:31 0次下载
    ESP32上的<b class='flag-5'>深度</b><b class='flag-5'>强化学习</b>

    ICLR 2023 Spotlight|节省95%训练开销,清华黄隆波团队提出强化学习专用稀疏训练框架RLx2

    模型时代,模型压缩和加速显得尤为重要。传统监督学习可通过稀疏神经网络实现模型压缩和加速,那么同样需要大量计算开销的强化学习任务可以基于稀疏
    的头像 发表于 06-11 21:40 662次阅读
    ICLR 2023 Spotlight|节省95%训练开销,清华黄隆波团队提出<b class='flag-5'>强化学习</b>专用稀疏训练<b class='flag-5'>框架</b>RLx2

    深度学习框架是什么?深度学习框架有哪些?

    深度学习框架是什么?深度学习框架有哪些?  深度
    的头像 发表于 08-17 16:03 2714次阅读