2017年9月4日 星期一

Unity遊戲開發中的AI - 基於Q-Learning的強化學習

作者:Arthur Juliani 原文
潤稿:Kelvin Lo


歡迎來到Unity AI系列文章第二篇,我們上次已經為大家介紹了遊戲開發中的AI - 入門,今天這篇文章將延續上次的內容繼續探討如何將它擴展到一個
完整能強化學習問題的吃角子老虎機。在這個過程裡,我們會展示如何利用一個Agent透過Q函數學習,來預估長期在特定條件下採取特定行為的值。本例僅使用一個簡單的網格空間(gridworld)以及一個Q-Representation列表。這原理可以應用於任何遊戲上。

Q-Learning演算法

情境老虎機回顧
強化學習(Reinforcement Learning)的目的是在特定環境下訓練一個Agent代理,通過學習來實現特定環境的最大化預期利益。在"遊戲開發中的AI -入門"一文中,環境是相對靜態的,環境狀態也很單純,就是代理躲在3個箱子其中之一,而行為就是選擇打開哪個寶箱。我們的演算法為每一對狀態行為學習Q函數,Q函數則對應在該狀態下隨著時間前進採取某種行為而獲得的預期利益。這樣的問題通常被稱為“情境老虎機”(Contextual Bandit)。

強化學習問題

要將前面的情境老虎機問題轉換為強化學習問題,還缺少兩個關鍵因素:稀有獎勵與狀態轉換。稀有獎勵是指代理並非每次採取行為都可以獲得獎勵。有時獎勵會“延遲”,因為有些行為可能不是必須的,也可能要在一系列非必須行為之後才能獲得獎勵。更具體的展示是,代理可能跟隨正確路徑,但只有到達終點才能獲得獎勵,而非走過的每一步都有獎。儘管中途沒有獎勵,但走過的每一步對到達終點來說都至關重要。我們需要一種方式來執行“信用分配”,即讓代理知道早期的行為是有價值的,儘管只是間接價值。

第二個缺失的因素是強化學習中狀態之間的轉換。有了狀態轉換之後,我們的行為不再是只根據獎勵函數R(s, a) ⇨ r來獲得獎勵,還會根據狀態轉換函數P(s, a) ⇨ s’來產生新的狀態。具體範例是,沿著路徑走過的每一步都會使代理到達路徑的新位置,也就是新的狀態。因此我們希望代理不僅要學習採取行動優化目前可能的獎勵,還要採取行動向可能提供更多獎勵的狀態移動。

貝爾曼更新

雖然新增的兩個複雜元素初看起來並不相關,但確是直接相關聯的。兩個元素都隱含了影響代理的未來最終狀態及其可能獲得的獎勵。通過這種質樸的理解,我們可以利用這種關係來學習在這些情形下應採取的最優行為。即在一個“真正”最優的Q-函數(只存在於理論)中,目當狀態的估值和行為可以被分解為直接獎勵r加上在下一狀態中代理採取行動的最大預期獎勵乘以一個折扣係數:

 

 這就是貝爾曼方程(Bellman Equation)也被稱作動態規劃方程式(Dynamic Programming Equation),由理查·貝爾曼(Richard Bellman)發現,可以按如下形式表述:




此處的𝛄 (gamma)是一個折扣因數,決定了代理對未來可能獲得獎勵的關注程度。如果值為1.0,則代理對未來所有的獎勵一視同仁,在永無止境的訓練中,估值可能會增加到無窮大。為此,𝛄應在0到1之間取值,典型取值範圍是0.7-0.99。

貝爾曼方程有效的原因在於:它提供了一種自動更新Q-函數的方法。Q*(s, a)是一個優化Q-函數。但即使當前的下一狀態的次優Q-value估值也有助於讓當前狀態的估值更加精確。由於每一步都主要依賴於真正的獎勵,所以可以相信Q-value估值自身會緩慢改進,並不斷趨近真實值。我們可以使用貝爾曼方程進行新的Q-Learning更新:



這個方程和之前情境老虎機中使用的更新演算法類似,不同點是Q-target現在包含下一步中未來期望獎勵的折扣值。


探索

為了讓代理更充分地探索狀態空間,我們使用了一種名為epsilon-greedy的探索更新形式。使用時將epsilon-greedy中ϵ初值設置為1.0,每次代理採取行動將該值減少一部分,而當代理選擇行動時,可選最貪婪的行動argmax(Q(s, a)),或者採用概率為ϵ的隨機行動(在搜索初期增加隨機性,提高搜索範圍空間,隨著代理積累經驗,逐步降低隨機影響)。直覺就是訓練開始時,代理的Q-value 估值與真實值相差較大,但通過對整個世界的學習後,ϵ值減少,Q-函數就慢慢與真實環境的Q-函數更一致,而使用Q函數採取行動的精確性也不斷提高。

Unity GridWorld


藍色的方塊是代理,紅色是障礙物,綠色是目標位置,綠色和紅色的球體代表GridWorld中每種狀態的估值。


為了演示Q-Learning代理,我們使用Unity建立了一個簡單的GridWorld環境。其中包含:
  1. 一個在世界中隨機位置出現的代理;
  2. 一個隨機的目標位置,我們希望代理通過學習向目標移動;
  3. 隨機放置的障礙物,我們希望代理學會躲避;

環境狀態(s)是一個整數,代表網格位置,四個行為(a)包括上、下、左、右,獎勵(r)規則為:移動到帶有目標的狀態時+1,移動到帶有障礙物的狀態時-1,為了鼓勵代理快速移動到目標,每次移動時-0.05。每個階段會在移動100次後,或者在代理到達既非目標又非障礙物的狀態時(碰到障礙時)結束。代理的Q-value存儲在表中,行代表狀態,列代表可採取的行為。

你可以點擊這裡直接從網頁看結果,也可以點擊這裡下載這個Unity專案,然後自己修改並應用於自己的遊戲。隨著代理不斷探索環境,不同顏色的球將會出現在網格世界的每個狀態中,這對應當前狀態下代理的平均Q-value估值,一旦代理完成優化策略的學習,這些球就會形成從開始到目標位置的直接值漸變。

後續計畫

此處的代理和環境代表了Q-Learning問題的經典表格,如果不符合你的需求也不用太擔心,Q-Learning演算法從90年代被提出至今,它已經歷了一系列重大的改進,Q學習可被應用於更加多變的動態場景中。Deepmind的Deep Q網路的一個主要示例,就是用於學習直接從圖元中進行幾十種不同的ATARI遊戲,像這裡僅用一個查閱資料表根本不可能實現的壯舉。為了實現這個目標,他們用到了一個由Deep Neural Network(DNN)網路控制的代理。通過神經網路,它可以學習將廣義Q-函數應用于完全不可見的狀態,例如顯示器上少見的圖元組合。

在後面的幾周中,我們會公佈一系列演算法的介面和展示專案,可以在Unity遊戲和模擬應用中訓練類似的深度強化學習代理。您可以查看影片,先簡要瞭解這些工具的功能。初次發佈版本將有些限制,主要用於研究、工業以及遊戲的QA測試。我們非常樂於看到在Unity中利用現代深度學習方法來學習遊戲行為,希望當此項技術成熟時,可以引爆機器學習技術在遊戲開發中的潛力,例如控制遊戲中複雜的NPC行為與遊戲動態等等。我們尚處於探索深度學習技術應用于遊戲開發的初期階段,也希望大家陪伴我們一起踏入後續的旅程。


沒有留言:

張貼留言

著作人