程序員是這樣“踢足球”的,深度Q學習在FIFA中的應用

程序員是這樣“踢足球”的,深度Q學習在FIFA中的應用

在這篇文章中,作者將提供一個簡短的描述什麼是強化學習,以及他如何將它應用於FIFA足球遊戲。由於我們無法訪問遊戲代碼,因此我們只能使用我們在遊戲屏幕上看到的內容。在這篇文章中,作者將嘗試教機器人學會"踢"30碼任意球,你可以修改它來嘗試其他球法。首先,讓我們對強化學習先有個基本的瞭解,以及如何通過強化學習來制定我們的任意球方案。

什麼是強化學習?

與監督學習不同,我們不需要人工標註強化學習中的訓練數據。相反,我們要與我們的交互環境進行互動,觀察我們互動的結果。我們多次重複這一過程,獲得或好或壞的例子(經驗)。這就是我們的訓練數據。換句話說,我們通過實驗而不是模仿來學習。

假設我們的環境處於一種特殊狀態S。在採取行動a時,它將變為狀態S'。對於這個特定的行為,你在環境中直接觀察得到的反饋是R。任何行動過後都會有即時的反饋,除非你停止互動。因此,對於當前狀態S,我們將嘗試從所有可能的操作來估算出哪些行動將為我們帶來最大的近期/未來回報,即Q(s,a),又稱Q函數。Q(s,a) = r + γ * Q(s',a')表示我們預期的最終回報。在這裡,γ是一個未知因素,表示對未來預測的不確定性。

程序員是這樣“踢足球”的,深度Q學習在FIFA中的應用

深度Q學習是一種特殊的強化學習技術,它是深度神經網絡學習Q函數的一種特殊方法。它通過給定環境的狀態作為該網絡的圖像輸入,試圖預測所有可能的行為(如迴歸問題)的預期最終回報。選擇最大預測Q值的動作來作為我們在環境中要採取的行動。因此就有了"深度Q學習"這個名字。

如何在FIFA中把深度Q學習和任意球相結合

狀態:通過MobileNet CNN處理遊戲截圖給出了128—維平面特徵圖。128-dimensional flattened feature map

操作:採取以下可能的操作shoot_low, shoot_high, move_left, move_right。

反饋:如果按下踢球鍵,比賽得分增加超過200,表示踢進對方球門,r = + 1。如果踢進我方球門,得分保持不變,r = -1。r=0表示雙方都沒進球。

要求:雙層密集網絡,以特徵圖為輸入,預測所有4個動作的最終回報。

在機器人與遊戲環境交互的強化學習過程中,深度Q學習是它的核心,並還負責預測機器人可以採取的所有可能的行動的預期未來回報。這一模式在整個過程中不斷得到訓練和更新。

程序員是這樣“踢足球”的,深度Q學習在FIFA中的應用

注:如果我們有關於FIFA中踢球方式更充足的數據,我們可以"玩"整個遊戲了,而不是僅限於任意球。但那或許需要訪問我們沒有的遊戲內部代碼。無論如何,讓我們充分利用我們所擁有的資源吧。

具體操作代碼

我們將在Python中使用Tensorflow(Keras)等深度學習工具以及OCR中的pytesseract工具來實現代碼操作。下圖提供了git鏈接,並在存儲庫描述中提供了需求設置說明。

具體鏈接:

https://github.com/ChintanTrivedi/DeepGamingAI_FIFARL

作者推薦下面的代碼。只是為了方便讀者理解,也為了簡潔起見,作者刪除了一些不重要的代碼。運行時請使用git中的完整代碼。現在讓我們看一看下面代碼的四個主要部分。

1.與遊戲環境的交互

我們沒有任何現成的API可以讓我們訪問代碼。那麼,讓我們來做我們自己的API吧!我們將使用遊戲的截圖觀察狀態,模擬按鍵在遊戲環境中採取行動,光學字符識別來讀取我們在遊戲中得到的反饋信息。在FIFA,我們有三種主要的方法:observe(),act(),_get_reward()和一個額外的方法is_over()來檢查是否有任意球。

程序員是這樣“踢足球”的,深度Q學習在FIFA中的應用

程序員是這樣“踢足球”的,深度Q學習在FIFA中的應用

2,收集訓練數據

在整個訓練過程中,我們希望存儲我們的所有得到的信息。我們將用它作為深度Q學習模型的訓練數據。因此,對於我們所採取的每一個操作,我們都會將以及game_over標誌一起存儲。深度Q學習模型學習的目標標籤是每個動作的最終反饋信息。這也是我們迴歸問題的實數。

程序員是這樣“踢足球”的,深度Q學習在FIFA中的應用

程序員是這樣“踢足球”的,深度Q學習在FIFA中的應用

3.訓練過程

現在讓我們開始訓練我們的深度Q學習模型。首先,我們得在探索(在遊戲中採取隨機行動)和開發(採用我們的模型預測行動)中保持平衡。這樣,我們就可以在遊戲中進行反覆試驗,以獲得不同的體驗。而參數epsilon就是平衡探索和開發的呈指數下降的因素。起初,當我們什麼都不知道的時候,我們想做更多的探索。然而隨著經驗的增加,我們現在更多是想做開發。

程序員是這樣“踢足球”的,深度Q學習在FIFA中的應用

程序員是這樣“踢足球”的,深度Q學習在FIFA中的應用

在本文中,作者只對模型進行了訓練。由於時間和性能的限制,作者只做了1000代的訓練。但在未來,作者想把它推向至少5000代。

4.模型定義和訓練過程

深度Q學習的過程核心是具有ReLU激活的雙層密集/完全連接網絡。它將128維特徵映射作為輸入狀態,併為每個可能的動作輸出4個Q值。具有最大預測Q值的動作是根據網絡針對給定狀態的策略所需採取的行動。

程序員是這樣“踢足球”的,深度Q學習在FIFA中的應用

這是執行此代碼的起點,但你必須確保FIFA在第二臺顯示器上以窗口模式運行,並且在技能中:射擊菜單下加載了任意球練習模式。確保遊戲控件與你在FIFA.py腳本中硬編碼的密鑰同步。

結果

雖然機器人尚未掌握所有不同類型的任意球,但它已經很好地學習了一些情況。它幾乎可以在沒有球員的情況下射進球門。然而,在面對少數情況時,它還會不斷出錯。不過這種情況發生的次數正在下降。

程序員是這樣“踢足球”的,深度Q學習在FIFA中的應用

如上圖所示,訓練1000次後,平均進球率從30%提高到50%。這意味著目前的機器人在其所嘗試的任意球中大約有一半得分(作為參考,一個人的平均得分在75%-80%之間)。的確,足球運動有太多不確定的因素,這使得學習變得非常困難。

結語

總的來說,作者認為即使沒有達到人類的表現水準,結果也是相當令人滿意的。從監督學習到強化學習有助於減輕收集訓練數據的痛苦。如果有足夠的時間去探索,它將表現得更好。然而,當遇到不熟悉的情況時,它並不能很好的應對。

這使作者相信,將其作為一個迴歸問題來表述,既不能外推,也不能作為監督學習中的分類問題。也許兩者的結合可以解決這兩種方法的弱點。也許這就是我們在為遊戲構建人工智能的時候看到的最好的結果。


分享到:


相關文章: