當前位置:
首頁 > 最新 > 利用TensorFlow對複雜目標進行強化學習

利用TensorFlow對複雜目標進行強化學習

強化學習(RL)是關於訓練智能體來完成一些任務。一般認為這能夠達成某個目標,例如,我們可能想要訓練機器人來打開一扇門。強化學習可以作為一個框架,允許機器人用試錯的方法來學習打開門。但是,如果我們更感興趣的是讓智能體不僅只是解決一個目標,而是一個可能隨時間變化的目標集合,又會怎麼樣呢?

在本文以及GitHub上對應的notebook文件中,我將介紹和演示機器學習中傳統的強化學習範式,以及一種新出現的用於擴展強化學習的範式,它可以應對複雜的隨著時間變化的目標。

首先,我將演示如何構建一個簡單的Q-learning智能體,它由一個單一的獎勵信號為引導,在一個環境里自我導航來投遞包裹。然後我將展示Q-learning這個簡單的公式在更複雜的行為情況下會出現的問題。為了獲得更大的靈活性,我將描述如何構建一類強化學習智能體,它可以對 「直接未來預測」(DFP)的各種目標進行優化。所有使用TensorFlow的代碼都在這個iPython Jupyter Notebook文件中。

能獲得最大累積獎勵的Q-learning

強化學習涉及到智能體通過和環境進行交互來隨著時間的推移獲得最大的回報。典型的形式化這一過程的方式是:一個智能體從環境中接收一個狀態(s),再產生一個動作(a)。給定這個狀態和動作對,環境就會反饋給智能體一個新的狀態(s)以及一個回報(r)。這樣強化學習的問題就變成了如何發現一個從狀態到行為的映射,從而能產生最大的累積獎勵的問題。

解決問題的一種方法叫做Q-learning。在這個方法中,我們學習一個狀態動作對(s,a)和值估計(v)之間的直接映射。這個值估計應該與在狀態(s)期間採取行動(a)的折扣預期獎勵相對應。使用Bellman方程,我們可以迭代地更新對所有可能狀態動作對的Q(s,a)的估計。這種迭代更新Q值的能力來自於優化Q函數的以下特性:

Q*(s, a) = r + γmaxa』Q(s』, a』)

此公式意味著給定狀態和動作的當前Q值可以分解為當前的獎勵,加上下一狀態下的預期未來獎勵。通過收集經驗,我們可以訓練一個神經網路來預測更精確的Q值,並且通過採取行動來優化期望值。在理想情況下,最終我們可以根據環境獲得最大的累積獎勵。利用一個通用的函數逼近器(如神經網路),我們可以將我們的Q估計泛化到未見過的狀態,從而使我們可以學習任意大的狀態空間的Q函數。

基於目標的強化學習的快遞無人機場景

Q-learning和其他傳統的公式化的強化學習演算法都是只學習一個單一的獎勵信號,因此一次只能應對一個單一的「目標」。例如,我們希望一架無人機學習如何將包裹投遞到城市各個地點。這個「快遞無人機」的場景將是下面我們在討論基於目標的強化學習的指導範式。

在這種環境中,智能體在5×5的網格中佔據一個位置,而快遞目的地佔據另外一個位置。該智能體可以在任意四個方向上移動(向上、下、左、右)。如果我們想讓無人機去學習投遞包裹,我們只需要在無人機成功地飛到一個標記的位置並進行投遞後,給一個+1的正獎勵即可。

圖1.簡單的無人機快遞環境的渲染。來源:Arthur Juliani

圖1所示的內容可以用來幫助我們直觀地理解智能體正在學習什麼。我們使用一個簡單的狀態表示,即一個5×5的網格和RGB像素(總共75個值)來表示這個環境。這把使用一台筆記本電腦來進行訓練學習的過程從數小時降到幾分鐘。每一循環無人機走100步。在每一循環的開始,我們會隨機分配智能體和投遞的地點。

使用TensorFlow進行Q-learning

下面所示的Q-learning的TensorFlow的實現是該演算法的一個非同步版本。它允許多個智能體並行地學習。這種方法同時加速了訓練的過程和健壯性。實現的代碼在這個Jupyter Notebook文件里。

使用由4個worker的機器進行訓練。在每個worker進行6000次循環的訓練後,我們最終得到的性能曲線應該類似於圖2所示。智能體在每次循環可以持續投遞大約20個包裹。考慮到我們這個環境的尺寸大小,可以認為這是在100步中近似最優投遞數量。點擊這裡觀看動畫演示。

圖2.性能曲線。在4個worker上每個worker進行6000次循環後的表現。來源:Arthur Juliani。

直接未來預測

一個真實世界中的無人機並不能無休止地投遞包裹,因為它的電池容量是有限的,需要經常性地充電。每次移動,智能體的電池電量都會略有下降。因為電池容量有限,耗盡電量就意味著從空中掉下來,不再能夠遞送包裹——沒有投遞更多的包裹就意味著沒有更多的獎勵。

我們可以在環境中增加一個位置,讓我們的智能體飛到這個位置來給它的電池充電。現在所有的智能體都需要在電池電量不足時,學會飛到充電站去充電,其他時候就正常地投遞包裹。

創造一個最優的獎勵函數

在有足夠的時間和正確的超參數調優的情況下,Q-learning演算法可能最終會發現,對電池充電有利於在長期內投遞更多的包裹。這涉及到要學習採取一系列複雜的沒有立刻的獎勵的行動,並學會理解更大的獎勵在後面。在這種情況下,增加鼓勵電池獎勵行為的信號是一個誘人的選擇。一種簡單粗暴的方法可以是提供一個獎勵(比如+0.5)給飛行到指定的位置充電。然而在這種情況下,我們的智能體會學到的是總飛去充電,因為每次充電的時候都保證有獎勵。我們現在遇到的問題是想出一個獎勵函數來描述我們認為最優的行為。雖然對於一些問題來說這很簡單,但不正確的獎勵函數卻常常會帶來意想不到的後果。想看一些例子的話,可以看看最近的這篇OpenAI的文章《Faulty Reward Functions(有缺陷的獎勵函數)》。

改變目標

如果我們想要避免有缺陷的獎勵工程的坑,我們需要一個更直觀的方式來將任務的結構傳達給智能體。事實證明,通過給智能體提供一個明確的同時也能根據事件和特定的時刻變化的目標,我們可以更好地得到我們想要的動態行為。在考慮電池的情況下,只要電量低於一定的值,我們就可以把目標從「投遞包裹」改為「給電池充電」。這樣我們就不用擔心獎勵方程,神經網路可以只專註於學習環境的動態本身。

圖3.在加入電池充電情況下的投遞環境。來源:Arthur Juliani

形式化目標搜索

為了使這個概念可行,我們需要讓描述更正式一些。在強化學習中,實現目標的形式有多種。我關注的是在2017年International Conference on Learning Representations會議上發表的一篇論文。這篇論文的題目是《Learning to Act by Predicting the Future(通過預測未來來學習行動)》。而這正是我們想要訓練我們的智能體去做的事情!

首先,有一點需要申明的是,這裡展示的模型並不完全是論文作者——Alexey Dosovitskiy和Vladlen Koltun在他們的論文中描述的內容。在論文中,他們將其網路稱為「直接未來預測」(DFP)。我們所做的類似於DFP。我調整了一些因素,以使它們對本文中討論的例子更加直觀。

在原論文中,作者訓練他們的智能體去玩第一人稱射擊遊戲「Doom」。這是一個令人印象深刻但比本文介紹的內容更複雜的環境。

圖4.「直接預測未來」的網路架構圖。來自論文Dosovitskiy and Koltun (2016),授權使用

這裡我們並不是訓練智能體去完成狀態(s)到Q值估計Q(s,a)的映射,然後獲得環境反饋的獎勵(r)。相對的,在狀態(s)之外,我們還維護了一套測量(m)和目標(g),然後訓練網路來預測每個行動(a)導致的未來測量(f)的變化。

訓練我們的網路來預測期望的未來

在無人機場景里,我們需要維護兩個測量值:電池剩餘電量和投遞的包裹數量。我們沒有預測像Q-learning這樣的值函數,而是訓練網路來預測在未來的1、2、4、8、16和32步後期望的電量的和投遞數量的變化。這可以寫成公式:

f=

其中,T是我們的時間偏移量列表,[1, 2, 4, …等]。

在這個範式中,不再有明確的獎勵。相反,衡量成功與否的標準是目標和測量的一致程度。在投遞無人機的場景下,這將意味著最大化投遞包裹的數量和確保電量低的時候去充電。

如果我們的智能體在預測行為的未來測量方面是完美的,那麼我們只需要採取優化我們感興趣的測量值的操作。我們的目標允許我們在任何給定的時間指定我們關心的測量值。

制定更複雜的目標

由於我們並不是簡單地預測像Q-learning中的單個標量值,我們可以制定更複雜的目標。設想我們有一個測量向量[電池,投遞]。如果我們想要最大化電池電量而忽略投遞,那麼我們的目標向量將是[1,0],這會對應於未來電池的正測量值,而不在乎投遞量。

但如果我們是想最大化投遞量,我們的目標向量就會是[0,1]。因為是我們(而不是環境或網路本身)制定了目標,我們就可以隨時按照我們認為合適的那一步去改變它。通過這種方式,只要電池測量低於某個閾值(在我們的例子中是30%),我們就可以明確地從優化投遞量改變目標為優化剩餘電量。通過這種方式結合目標和測量,我們現在可以基於人類操作員的願望,隨時靈活地調整智能體的行為。這與Q-learning相反。在Q-learning中,Q值在經過訓練就是固定的,只有一種行為模式是可能的。

這個新公式以幾種方式改變了我們的神經網路。不僅只有一個狀態,我們還會提供給網路當前的測量和目標作為輸入。我們的網路現在將輸出一個形式為[測量 X 行動 X 偏移量]的預測張量,而不再是Q值。通過計算預測未來的變化的和與目標乘積,我們可以選擇最能滿足目標的行動:

a=gT?∑p(s,m,g)

其中 ∑p(s,m,g)是對未來時間步驟的網路輸出的求和,也是目標向量的轉置。

通過利用簡單的回歸損失來預測未來的真實測量變化,我就可以訓練這種新型的智能體:

Loss=∑[P(s,m,g,a)?f(m)]2

其中P(s、m、g、a)是指所選動作的網路的輸出。

到此我們總結一下。我們有一個智能體可以熟練地投遞包裹,並同時維持一定的電量。我們將再次使用在TensorFlow中的非同步實現。可用的模型notebook文件可以在這裡下載。

TensorFlow的非同步實現

在每個worker(共4個worker)進行了1萬次循環訓練後,我們最終得到了如圖5所示的訓練曲線。該智能體已經學會了保持一定的電量 (平均每一循環的長度接近100步),以及在一次循環中提供近乎最優的包裹投遞數量。點擊這裡觀看動畫演示。

圖5.每一循環的投遞量(左圖),和每一循環里的步驟數(右圖)。來源:Arthur Juliani

需要注意的是,這裡提供的環境是真實世界場景的一個非常簡化的版本。一個網格化的環境可以讓網路在一個合理的時間內完成訓練,從而達到演示目標學習的目的。現實世界中的無人駕駛機很可能會利用平滑、連續控制,而這顯然是一個視覺上更加複雜的世界。

增強這一技術

如果您能夠接觸到更強大的計算資源,我鼓勵你嘗試使用更複雜的環境,例如OpenAI universe提供的環境。一個簡單的變化是通過使用卷積層來為視頻流提供一個更好的編碼器,而不是使用本文里用的全連接層。但是,基本的架構應該是可擴展的。

我希望本教程能夠為讀者了解強化學習能夠解決的各種問題提供一些見解,以及在新環境中重新制定任務所帶來的好處。這裡描述的多目標方法可能並不是在所有情況下都是最好的方法,但是它提供了另一種可能的方法來設計智能體去應對世界上複雜的任務。

這篇博文是O』Reilly和TensorFlow的合作產物。請閱讀我們的編輯獨立聲明。

This article originally appeared in English: "Reinforcement learning for complex goals, using TensorFlow".


Arthur Juliani是一位交叉研究認知神經科學和深度學習的研究人員。他目前正在俄勒岡大學攻讀博士學位。

?

由O"Reilly和Intel共同舉辦的AI Conference 2018北京站承諾:

將會為您帶來一場史無前例的、全球領先人工智慧創新人士雲集的會議,讓中國的人工智慧人才與全球人工智慧思想領袖面對面地近距離交流。

大幕即將拉開,敬請關注!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 OReillyData 的精彩文章:

2018,不容錯過的世界人工智慧大會——AI Conference

TAG:OReillyData |