0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

如何利用TensorForce框架快速搭建深度強化學習模型

DPVg_AI_era ? 來源:lp ? 2019-03-29 08:44 ? 次閱讀

深度強化學習已經(jīng)在許多領域取得了矚目的成就,并且仍是各大領域受熱捧的方向之一。本文深入淺出的介紹了如何利用TensorForce框架快速搭建深度強化學習模型。

深度強化學習(Deep Reinforcement Learning, DRL)是目前最熱門的方向之一,從視頻游戲、圍棋、蛋白質(zhì)結構預測到機器人、計算機視覺推薦系統(tǒng)等領域已經(jīng)取得了很多令人矚目的成就且仍在蓬勃發(fā)展中。

AlphaGo第一作者Davild Silver就認為通用人工智能需要強化學習結合深度學習來實現(xiàn),即AGI=DL+RL。

框架

為了便于研究人員快速搭建出強化學習模型,很多機構發(fā)布了強化學習基準算法或框架,其中較早的有OpenAI Baselines [1]、伯克利的rllab [2],最新的有18年谷歌發(fā)布的Dopamine [3]、Facebook發(fā)布的Horizon [4]。具體見下表:

本文介紹的是TensorForce并非由這些大機構發(fā)布,而是由幾個劍橋大學的博士生開發(fā)、維護的。

當時選擇TensorForcce是因為需要在ROS框架下開發(fā),而如上表列出的,它完全支持Python2,且包含很多主流的強化學習算法、支持OpenAI Gym、DeepMind Lab等常用于強化學習算法測試的基準環(huán)境。

TensorForce是架構在TensorFlow上的強化學習API,最早在17年就開源了,并發(fā)布了博客[5]介紹其背后的設計思想及基本應用。

這里簡單介紹一下TensorForce的設計思想。

框架設計的難點在于如何解耦出其它層面的內(nèi)容,盡可能將共用的部分抽象出來。拿強化學習來說,智能體與環(huán)境不斷通過交互試錯來學習,如果由我們從頭自己編程實現(xiàn)某個RL任務,為了方便智能體與環(huán)境很自然地會寫在一起。但作為框架卻不行,需要將智能體從環(huán)境中解耦出來。

TensorForce包括了下面四個層面的概念:

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

Agent在訓練前可以加載model,訓練后保存model,運行時接收state,(預處理后)作為model的輸入,返回action。模型會根據(jù)算法及配置自動更新。Runner將Agent和Environment之間的交互抽象出來作為函數(shù)。Environment根據(jù)應用場景的不同需要自己寫接口,后文會提供一個機器人導航環(huán)境的接口案例。如果是學習或者算法測試,可以使用現(xiàn)成的基準環(huán)境,TensorForce提供了OpenAI Gym、OpenAI Universe和DeepMind Lab的接口。

第一行代碼

下面通過使用近端策略優(yōu)化(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行代碼實現(xiàn)了PPO算法訓練倒立擺,代碼首先定義了環(huán)境和網(wǎng)絡(兩層32個節(jié)點的全連接網(wǎng)絡,激活函數(shù)為relu),然后定義了agent,agent的參數(shù)中states, actions, network三個參數(shù)是必填的,step_optimizer定義了優(yōu)化器,saver和summarizer分別保存模型和訓練過程。最后通過runner來實現(xiàn)agent和environment的交互,總共跑了600個episodes,每個episode的最大步長是200。

runner解耦出了交互過程,實際上是是下面過程的循環(huán):

# 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;

堆疊連續(xù)的四幀,推導出運行信息;

歸一化處理,以便于訓練。

使用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)

環(huán)境搭建

如果要在具體的應用場景中使用TensorForce就需要根據(jù)應用場景手動搭建環(huán)境,環(huán)境的模板為environment.py [7],其中最重要的函數(shù)是execute,該函數(shù)接收agent產(chǎn)生的action,并在環(huán)境中執(zhí)行該action,然后返回next_state,reward,terminal。這里我以搭建的Gazebo中的機器人導航環(huán)境為例,進行介紹。

首先搭建仿真環(huán)境如下圖:

設計環(huán)境的接口及其與agent交互的過程:

仿真開始,init函數(shù)打開Gazebo并加載對應的導航環(huán)境,reset函數(shù)初始化機器人,execute函數(shù)接收到action后通過ROS發(fā)送對應的速度命令,Gazebo中的機器人接收到速度命令后執(zhí)行對應的速度,機器人傳感器返回相應的信息,計算對應的reward,讀取視覺傳感器的RGB圖像作為next_state,判斷是否到達目標點或者碰撞,如果是Terminal為True,該episode結束。完整的代碼見 [8]。

復雜網(wǎng)絡

DRL網(wǎng)絡和算法是智能體最重要的兩部分,一個確定模型結構、一個決定模型更新。上面只介紹了簡單的模型,對于有些復雜網(wǎng)絡需要層疊的方式來定義,如下如:

該網(wǎng)絡的輸入為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))

然后通過層疊的方式來定義網(wǎng)絡結構:

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參數(shù)來定義exploration,默認值為'none',但這并不代表不探索,以PPO為例,模型在輸出的時候不輸出直接的確定性動作(只有DPG才會輸出確定性動作),而是分布,輸出在分布上采樣輸出,這可以看作是一種exploration。

2. 網(wǎng)絡的輸出層是根據(jù)action自動添加的,在network中定義輸入層和隱藏層即可

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

agent.act(action,deterministic=True)

此時agent執(zhí)行greedy策略。而如果模型訓練完成,不再訓練則:

agent.act(action,independent=True)

此時函數(shù)只執(zhí)行act不執(zhí)行observe來更新模型

4. PPO算法相比于DQN,不僅性能好,并且對超參數(shù)更魯棒,建議優(yōu)先選擇PPO

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 人工智能
    +關注

    關注

    1787

    文章

    46051

    瀏覽量

    234943
  • 計算機視覺
    +關注

    關注

    8

    文章

    1685

    瀏覽量

    45810
  • 強化學習
    +關注

    關注

    4

    文章

    263

    瀏覽量

    11157

原文標題:快速上手深度強化學習?學會TensorForce就夠了

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    什么是深度強化學習?深度強化學習算法應用分析

    什么是深度強化學習? 眾所周知,人類擅長解決各種挑戰(zhàn)性的問題,從低級的運動控制(如:步行、跑步、打網(wǎng)球)到高級的認知任務。
    發(fā)表于 07-01 10:29 ?1329次閱讀
    什么是<b class='flag-5'>深度</b><b class='flag-5'>強化學習</b>?<b class='flag-5'>深度</b><b class='flag-5'>強化學習</b>算法應用分析

    深度強化學習實戰(zhàn)

    一:深度學習DeepLearning實戰(zhàn)時間地點:1 月 15日— 1 月18 日二:深度強化學習核心技術實戰(zhàn)時間地點: 1 月 27 日— 1 月30 日(第一天報到 授課三天;提前
    發(fā)表于 01-10 13:42

    深度學習強化學習相結合的深度強化學習DRL

    深度強化學習DRL自提出以來, 已在理論和應用方面均取得了顯著的成果。尤其是谷歌DeepMind團隊基于深度強化學習DRL研發(fā)的AlphaGo,將
    發(fā)表于 06-29 18:36 ?2.8w次閱讀

    如何構建強化學習模型來訓練無人車算法

    本文作者通過簡單的方式構建了強化學習模型來訓練無人車算法,可以為初學者提供快速入門的經(jīng)驗。
    的頭像 發(fā)表于 11-12 14:47 ?4772次閱讀

    深度強化學習的概念和工作原理的詳細資料說明

    深度學習DL是機器學習中一種基于對數(shù)據(jù)進行表征學習的方法。深度學習DL有監(jiān)督和非監(jiān)督之分,都已經(jīng)
    的頭像 發(fā)表于 05-16 09:20 ?3360次閱讀

    深度強化學習到底是什么?它的工作原理是怎么樣的

    深度學習DL是機器學習中一種基于對數(shù)據(jù)進行表征學習的方法。深度學習DL有監(jiān)督和非監(jiān)督之分,都已經(jīng)
    的頭像 發(fā)表于 06-13 11:39 ?5873次閱讀

    機器學習中的無模型強化學習算法及研究綜述

    模型強化學習(Mode- based reinforcement Lear-ning)和無模型強化學習( Model- ree reirη forcement Learning)。
    發(fā)表于 04-08 11:41 ?11次下載
    機器<b class='flag-5'>學習</b>中的無<b class='flag-5'>模型</b><b class='flag-5'>強化學習</b>算法及研究綜述

    模型深度強化學習應用研究綜述

    深度強化學習(DRL)作為機器學習的重要分攴,在 Alphago擊敗人類后受到了廣泛關注。DRL以種試錯機制與環(huán)境進行交互,并通過最大化累積獎賞最終得到最優(yōu)策略。強化學習可分為無
    發(fā)表于 04-12 11:01 ?9次下載
    <b class='flag-5'>模型</b>化<b class='flag-5'>深度</b><b class='flag-5'>強化學習</b>應用研究綜述

    基于深度強化學習的路口單交叉信號控制

    利用深度強化學習技術實現(xiàn)路口信號控制是智能交通領域的硏究熱點?,F(xiàn)有硏究大多利用強化學習來全面刻畫交通狀態(tài)以及設計有效
    發(fā)表于 04-23 15:30 ?21次下載
    基于<b class='flag-5'>深度</b><b class='flag-5'>強化學習</b>的路口單交叉信號控制

    基于深度強化學習仿真集成的壓邊力控制模型

    壓邊為改善板料拉深制造的成品質(zhì)量,釆用深度強化學習的方法進行拉深過程旳壓邊力優(yōu)化控制。提岀一種基于深度強化學習與有限元仿真集成的壓邊力控制模型
    發(fā)表于 05-27 10:32 ?0次下載

    基于深度強化學習的無人機控制律設計方法

    基于深度強化學習的無人機控制律設計方法
    發(fā)表于 06-23 14:59 ?46次下載

    《自動化學報》—多Agent深度強化學習綜述

    多Agent 深度強化學習綜述 來源:《自動化學報》,作者梁星星等 摘 要?近年來,深度強化學習(Deep reinforcement le
    發(fā)表于 01-18 10:08 ?1468次閱讀
    《自動<b class='flag-5'>化學</b>報》—多Agent<b class='flag-5'>深度</b><b class='flag-5'>強化學習</b>綜述

    ESP32上的深度強化學習

    電子發(fā)燒友網(wǎng)站提供《ESP32上的深度強化學習.zip》資料免費下載
    發(fā)表于 12-27 10:31 ?0次下載
    ESP32上的<b class='flag-5'>深度</b><b class='flag-5'>強化學習</b>

    ICLR 2023 Spotlight|節(jié)省95%訓練開銷,清華黃隆波團隊提出強化學習專用稀疏訓練框架RLx2

    模型時代,模型壓縮和加速顯得尤為重要。傳統(tǒng)監(jiān)督學習可通過稀疏神經(jīng)網(wǎng)絡實現(xiàn)模型壓縮和加速,那么同樣需要大量計算開銷的強化學習任務可以基于稀疏
    的頭像 發(fā)表于 06-11 21:40 ?566次閱讀
    ICLR 2023 Spotlight|節(jié)省95%訓練開銷,清華黃隆波團隊提出<b class='flag-5'>強化學習</b>專用稀疏訓練<b class='flag-5'>框架</b>RLx2

    深度學習框架是什么?深度學習框架有哪些?

    深度學習框架是什么?深度學習框架有哪些?? 深度
    的頭像 發(fā)表于 08-17 16:03 ?2473次閱讀