24分鐘讓AI跑起飛車類遊戲

本文由雲+社區發表html

做者:WeTest小編git

WeTest 導讀

本文主要介紹如何讓AI在24分鐘內學會玩飛車類遊戲。咱們使用Distributed PPO訓練AI,在短期內能夠取得不錯的訓練效果。github


本方法的特色:算法

  1. 純遊戲圖像做爲輸入
  2. 不使用遊戲內部接口
  3. 可靠的強化學習方法
  4. 簡單易行的並行訓練

1. PPO簡介

PPO(Proximal Policy Optimization)是OpenAI在2016年NIPS上提出的一個基於Actor-Critic框架的強化學習方法。該方法主要的創新點是在更新Actor時借鑑了TRPO,確保在每次優化策略時,在一個可信任的範圍內進行,從而保證策略能夠單調改進。在2017年,DeepMind提出了Distributed PPO,將PPO進行相似於A3C的分佈式部署,提升了訓練速度。以後,OpenAI又優化了PPO中的代理損失函數,提升了PPO的訓練效果。網絡

本文不介紹PPO的算法細節,想學習的同窗能夠參考如下三篇論文:框架

【1】Schulman J, Levine S, Abbeel P, et al. Trust region policy optimizationC//International Conference on Machine Learning. 2015: 1889-1897.分佈式

【2】Heess N, Sriram S, Lemmon J, et al. Emergence of locomotion behaviours in rich environmentsJ. arXiv preprint arXiv:1707.02286, 2017.函數

【3】Schulman J, Wolski F, Dhariwal P, et al. Proximal policy optimization algorithmsJ. arXiv preprint arXiv:1707.06347, 2017.學習

2. 圖像識別

2.1 遊戲狀態識別

遊戲狀態識別是識別每一局遊戲關卡的開始狀態和結束狀態。在飛車類遊戲中,開始狀態和結束狀態的標誌如圖1所示。由於紅色框中的標誌位置都固定,所以咱們使用模板匹配的方法來識別這些遊戲狀態。優化

img
1.jpg

圖1 遊戲狀態標誌

從開始狀態到結束狀態之間的圖像是遊戲關卡內的圖像,此時進行強化學習的訓練過程。當識別到結束狀態後,暫停訓練過程。結束狀態以後的圖像都是UI圖像,咱們使用UI自動化的方案,識別不一樣的UI,點擊相應的按鈕再次進入遊戲關卡,開始下一輪的訓練過程,如圖2所示。

img
2.png

圖2 遊戲流程

2.3 遊戲圖像識別

咱們對遊戲關卡中的圖像識別了速度的數值,做爲強化學習中計算激勵(Reward)的依據,如圖3所示。速度識別包括三個步驟:

第一步,圖像分割,將每一位數字從識別區域中分割出來。

第二步,數字識別,用卷積神經網絡或者模板匹配識別每一位圖像中的數字類別。

第三步,數字拼接,根據圖像分割的位置,將識別的數字拼接起來。

img
3.jpg

圖3 圖像各個區域示意圖

3. AI設計

3.1 網絡結構

咱們使用的網絡結構如圖4所示。輸入爲遊戲圖像中小地圖的圖像,Actor輸出當前時刻須要執行的動做,Critic輸出當前時刻運行狀態的評價。AlexNet使用從輸入層到全鏈接層以前的結構,包含5個卷積層和3個池化層。Actor和Critic都有兩個全鏈接層,神經元數量分別爲1024和512。Actor輸出層使用softmax激活函數,有三個神經元,輸出動做策略。Critic輸出層不使用激活函數,只有一個神經元,輸出評價數值。

img
4.jpg

圖4 網絡結構示意圖

3.2 輸入處理

咱們將小地圖圖像的尺寸變爲121X121,輸入到AlexNet網絡後,在第三個池化層能夠得到2304維的特徵向量(57622=2304)。將這個特徵向量做爲Actor和Critic的輸入。咱們使用在ImageNet上訓練後的AlexNet提取圖像特徵,而且在強化學習的過程當中沒有更新AlexNet的網絡參數。

3.3 動做設計

咱們目前在設計飛車類遊戲動做時,使用離散的動做,包括三種動做:左轉、右轉和NO Action。每種動做的持續時間爲80ms,即模擬觸屏的點擊時間爲80ms。這樣的動做設計方式比較簡單,便於AI快速地訓練出效果。若是將動做修改成連續的動做,就能夠將漂移添加到動做中,讓AI學習左轉、右轉、漂移和NO Action的執行時刻和執行時長。

3.4 激勵計算

若是將遊戲的勝負做爲激勵來訓練AI,勢必會花費至關長的時間。在本文中,咱們根據遊戲圖像中的速度數值,計算當前時刻的激勵。假定當前時刻的速度爲Vp,前一時刻的速度爲Vq,那麼激勵R按照如下方式計算:

If Vp ≥ Vq , R = 0.25X(Vp - Vq)

If Vp < Vq , R = -0.25X(Vq - Vp)

If Vp > 250 , R = R + 5.0

If Vp < 50 , R = R - 5.0

這樣的激勵計算方式可使AI減小撞牆的機率,而且鼓勵AI尋找加速點。

4. 訓練環境

4.1 硬件

咱們搭建了一個簡單的分佈式強化學習環境,能夠提升採樣效率和訓練速度,硬件部署方式如圖5所示。

img
5.jpg

圖5 硬件部署方式

主要包含如下硬件:

1)3部相同分辨率的手機,用於生成數據和執行動做。

2)2臺帶有顯卡的電腦,一臺電腦Proxy用於收集數據、圖像識別以及特徵提取,另外一臺電腦Server用於訓練AI。

3)1個交換機,鏈接兩臺電腦,用於交換數據。

4.2 軟件

Ubuntu 14.04 + TensorFlow 1.2 + Cuda 7.0

5. 分佈式部署

咱們使用的分佈式部署方式如圖6所示。

img
6.jpg

圖6 分佈式部署方式

在Proxy端設置三個proxy進程,分別與三部手機相鏈接。

在Server端設置一個master進程和三個worker線程。master進程和三個worker線程經過內存交換網絡參數。master進程主要用於保存最新的網絡參數。三個proxy進程分別和三個worker線程經過交換機傳輸數據。

proxy進程有6個功能:

1)從手機接收圖像數據;

2)識別當前遊戲狀態;

3)識別速度計算激勵;

4)利用AlexNet提取圖像特徵;

5)發送圖像特徵和激勵到worker線程,等待worker線程返回動做;

6)發送動做到手機;

worker線程有5個功能:

1)從proxy進程接收圖像特徵和激勵;

2)從master進程拷貝最新的網絡參數;

3)將Actor輸出的動做發送到proxy進程;

4)利用PPO更新網絡參數;

5)將更新後的網絡參數傳輸到master進程;

6. 實驗

6.1 參數設置

PPO的訓練參數不少,這裏介紹幾個重要參數的設置:

1)學習速率:Actor和Critic的學習率都設置爲1e-5

2)優化器:Adam優化器

3)Batch Size: 20

4)採樣幀率:10幀/秒

5)更新次數:15次

6)激勵折扣率:0.9

6.2 AI效果

視頻連接:v.qq.com/x/page/q135…

6.3 數據分析

表1和表2分別對比了不一樣並行數量和不一樣輸入數據狀況下AI跑完賽道和取得名次的訓練數據。最快的訓練過程是在並行數量爲3和輸入數據爲小地圖的狀況下,利用PPO訓練24分鐘就可讓AI跑完賽道,訓練7.5小時就可讓AI取得第一名(和內置AI比賽)。而且在減小一部手機採樣的狀況下,也能夠達到相同的訓練效果,只是訓練過程耗時更長一點。另外,若是將輸入數據從小地圖換成全圖,AI的訓練難度會有必定程度的增長,不必定能達到相同的訓練效果。

表1 AI跑完賽道的數據對比

輸入數據 並行數量 訓練時間 訓練次數 訓練局數

全圖 2 100分鐘 4200次 78局

小地圖 2 40分鐘 1700次 32局

全圖 3 78分鐘 3900次 72局

小地圖 3 24分鐘 1400次 25局

表2 AI取得名次的數據對比

輸入數據 並行數量 訓練時間 訓練次數 訓練局數 名次

小地圖 2 9小時 19000次 354局 1

全圖 3 60小時 98000次 1800局 4-6小地圖 3 7.5小時 17800次 343局 1

如7展現了利用PPO訓練AI過程當中激勵的趨勢圖,曲線上每個點表示一局累計的總激勵。訓練開始時,AI常常撞牆,總激勵爲負值。隨着訓練次數的增長,總激勵快速增加,AI撞牆的概率很快下降。當訓練到1400屢次時,總激勵值超過400,此時AI恰好能夠跑完賽道。以後的訓練過程,總激勵的趨勢是緩慢增加,AI開始尋找更好的動做策略。

img
7.jpg

圖7 AI訓練過程當中激勵的趨勢圖

7. 總結

本文介紹瞭如何使用Distributed PPO在24分鐘內讓AI玩飛車類遊戲。當前的方法有必定訓練效果,可是也存在不少不足。

目前,咱們想到如下幾個改進點,之後會逐一驗證:

1)將AlexNet替換爲其餘卷積神經網絡,如VGG、Inception-V3等等,提升特徵提取的表達能力。

2)提升並行數量,添加更多手機和電腦,提升採樣速度和計算速度。

3)增長Batch Size,使用較長的時間序列數據訓練AI。

4)將離散動做替換爲連續動做,增長漂移的學習。

5)多個關卡同時訓練,提升AI的泛化能力。

參考文獻:

【1】Schulman J, Levine S, Abbeel P, et al. Trust region policy optimizationC//International Conference on Machine Learning. 2015: 1889-1897.

【2】Heess N, Sriram S, Lemmon J, et al. Emergence of locomotion behaviours in rich environmentsJ. arXiv preprint arXiv:1707.02286, 2017.

【3】Schulman J, Wolski F, Dhariwal P, et al. Proximal policy optimization algorithmsJ. arXiv preprint arXiv:1707.06347, 2017.

【4】morvanzhou.github.io/tutorials/m…

此文已由騰訊雲+社區在各渠道發佈

獲取更多新鮮技術乾貨,能夠關注咱們騰訊雲技術社區-雲加社區官方號及知乎機構號

相關文章
相關標籤/搜索