利用Deep Reinforcement Learning訓練王者榮耀超強AI

        2019年12月20號,騰訊AI Lab發佈了一篇paper,稱他們利用深度強化學習技術訓練了出了一個超強AI,該AI能輕鬆擊敗頂尖水平的職業選手。在論文的最後貼出了AI與多名職業選手的交戰情況:

從上圖可知,每位選手使用自己最擅長的英雄與AI進行1V1對戰,無一例外都輸給了AI,除了TS的Nuan Yang使用韓信拿下了一個AI人頭外,其餘玩家都沒能擊殺AI一次。那麼騰訊到底是怎樣訓練自己AI的呢?在發佈的這篇paper中介紹了整個訓練系統的框架以及算法流程,下面就來關注一下騰訊是如何完成自己超強AI訓練的吧。

(一)知識背景

        當前使用AI玩對抗性遊戲的主要分兩種:以星際爲首的RTS遊戲,和以DOTA爲首的MOBA遊戲。兩種遊戲側重的學習難點不同:對於星際類的遊戲來說,單個unit的行爲較爲簡單,主要學習的是如何進行兵力組選擇和進攻策略;而對於DOTA類的遊戲來說,對於一個英雄的操作來說是相當複雜的(涉及到技能連招,攻擊目標選擇,走位等等),因此這類遊戲主要學習的是單英雄的操控。
論文中介紹,訓練AI的方法同樣也是基於actor-critc的神經網絡,但在此基礎上針對性的做出了一些改進:

  1. 利用人類先驗知識來減少動作探索空間。
  2. 將一個人爲操作下的多個子操作獨立開來。
  3. 設定攻擊目標選定網絡,用於選定攻擊目標。
  4. 使用改進PPO算法,論文中稱爲dual-clip PPO。
  5. 使用LSTM來學習英雄技能連招的釋放。
  6. 在系統設計方面,爲了快速產生大規模的數據樣本,使用多個不同遊戲場景同時產生數據並存到Memory Pool中,並使用多個RL學習器並行學習。

在訓練完成後,期望訓練AI能夠完成進攻、誘導、防禦、欺騙和技能連招釋放的能力。由於遊戲中英雄之間技能相差非常大,因此對每個英雄來說都需要訓練一個獨立的控制AI。對於每一個英雄,AI Lab使用18,000個CPU核以及48張P40顯卡(¥14600一張)進行訓練學習。每張GPU每秒可訓練80000個樣本數據,算下來每天訓練的數據等於人類500年的學習量。

(二)系統架構

        爲了加快訓練速度,這就需要加大batch size。針對這個問題,AI Lab設計了四個特別的模塊,這些模塊之間彼此獨立:Reinforcement Learning Learner、AI Server、Dispatch Module 和 Memory Pool。

AI Server 是爲了獲取樣本數據而設計的模塊,在Server中涵蓋了AI與環境之間交互的所有邏輯。Server會產生多組episodes,在這些episodes中我方AI使用來自RL Learner的行爲策略,而對手的行爲則是使用Boltzman 探索算法(一種基於遊戲狀態特徵提取的算法)進行預測。

Dispatch Module 的用於對Server 產生的sample數據(回報、特徵、行爲選擇概率等)進行收集,將這些數據進行壓縮後存儲到Memory Pool中去。一個Dispatch Module可以連接多個AI Server以便於接收多個Server的輸出數據以增加Dispatch Moudule的利用率(畢竟壓縮加傳輸速度要遠遠快於Server生成一個episode的速度)。

Memory Pool 主要用於對訓練數據的存儲。它使用一個循環隊列來存儲數據,根據數據生成時間進行排序。由於是循環隊列模式,因此支持變長樣本。

RL learner 是一個分佈式的訓練環境,由於需要大規模的batch size,多個RL learners分別去獲取Memory Pool中的樣本數據,並將這些Learners捆綁在一起(當成一個大的RL Learner)。那麼每個Learner都會得到不同的梯度結果,如何去統一這些梯度結果呢?該論文使用 ring allreduce algorithm 對所有梯度值進行平均。將平均後的值當成每一個Leaner的梯度進行計算。

(三)算法結構

        訓練AI使用基於actor-critc的神經網絡,其輸入有3個:遊戲畫面向量fif_i,所有種類單位的狀態向量集fuf_u和遊戲狀態向量fgf_g(包括遊戲進行時間、炮臺數量等遊戲環境信息);輸出動作有6個:技能按鈕的選擇、移動搖桿x偏移、移動搖桿y偏移、技能搖桿x偏移、技能搖桿y偏移和選擇哪一個目標對象。論文在普通actor-critic的基礎上針對性的做出了一些改進:

  1. 設定攻擊目標選定網絡,用於選定攻擊目標。
  2. 使用LSTM來學習英雄技能連招的釋放。
  3. 將一個人爲操作下的多個子操作獨立開來。
  4. 利用人類先驗知識(action mask)來減少動作探索空間。
  5. 使用改進PPO算法,論文中稱爲dual-clip PPO。

整個算法結構如下圖,下面針對每一個點進行闡述:

3.1 Target Attention

        爲了實現任務目標的選取,算法中構建了一個目標選擇模塊(target attention)。整個算法流程如上圖所示:首先需要提取出圖片特徵fif_i、向量特徵fuf_u以及遊戲狀態信息fgf_g,其中fif_i由卷積層hih_i提取而得,fuf_ufgf_g都是由全連接層提取而得。其中,每個unit都有一個fuf_u向量,但由於unit的數量是會變的(比如兵線和炮塔的數量都會隨着時間變化),因此通過max-pooling的方法將同一類的unit映射爲一個定長向量。此外,每一個fuf_u向量在經過若干層全連接層後都會被拆分成兩個輸出——一個輸出representation of unit用於代表該類單位的特徵用於後面的action選擇,另一個輸出attention keys將被用於幫助target attention做決策。這裏可以理解爲:由於Attention模塊是直接接收了fuf_u向量作爲輸入的,因此可認爲,在選擇哪一個敵方單位作爲target的時候,目標選擇模塊會根據每一類unit的當前狀態信息attention keys作爲參考來進行決策。

3.2 利用LSTM學習技能連招釋放

        當有了每類unit的表徵信息representation of unit後,我們將所有的表徵向量、圖片向量huh_ufuf_u經過了一個convolution層得到的結果)和遊戲狀態向量hgh_gfgf_g經過一個全連接層後得到的結果)全部聯合起來,並輸入一個LSTM網絡,該網絡用於5個基本行爲決策(包含了如何進行技能連招搭配):技能按鈕的選擇、移動搖桿x偏移、移動搖桿y偏移、技能搖桿x偏移、技能搖桿y偏移。由於LSTM具有處理時序信息的能力,因此它能夠學會釋放技能Button的選擇順序。

3.3 Decoupling of Control Dependencies

        這個部分主要功能是將一個人爲操作分解爲若干個獨立的子操作。這部分的思想和簡單:人爲在釋放技能的時候不但要選擇釋放哪一個技能,還需要拖動技能按鈕來選擇釋放方向,這是一個人爲操作。但如果把這個人爲操作直接當作一個action的話,action space會非常大(技能按鈕和方向的組合),因此將一個人爲操作分解爲多個獨立的子行爲(技能選擇是一個action,釋放方向又是另一個獨立的action),這樣就減少了動作空間。

3.4 Action Mask

        action mask的引入是爲了對動作空間進行剪枝以降低探索收斂的難度。action mask是指利用一些人類的先驗知識來告訴AI"不應該"做什麼。由於在王者的遊戲環境中,動作空間非常巨大,因此探索空間也就很大,這時候加入人爲只是的引導就能夠使AI在學習的時候進行"有效探索"。舉例來說,如果一個AI在靠近野區牆壁的時候,企圖探索"往牆壁裏面行進"這個行爲時,action mask會直接告訴AI這個action是不必要的,一定不會有好的reward效用,因此AI就會放棄這一次的"無用探索"。

3.5 Dual-Clip PPO

        在傳統的PPO算法中,爲了避免計算出的修正係數πθ(as)πθold(as)\frac{\pi_{\theta}(a|s)}{\pi_{{\theta}old}(a|s)}過大(下面用r(θ)r(\theta)表示修正係數),會進行一個"上限"限定,當超過這個上限就直接被clip掉,公式如下:
L(θ)=min(r(θ)A^t,clip(r(θ),1ε,1+ε)A^t) L(\theta) = min(r(\theta)\hat{A}_t, clip(r(\theta), 1-\varepsilon, 1+\varepsilon)\hat{A}_t)
這樣是work的,但是卻忽略了A^t\hat{A}_t爲負時的情況,由於取得是min()min(),因此若A^t\hat{A}_t爲負時會變成梯度絕對值越大越被選擇,這樣就就違背了"梯度上限"的設計初衷。爲此,該論文在原本的clip基礎上又做了一次負值的下限clip:
L(θ)=max( min(r(θ)A^t, clip(r(θ), 1ε, 1+ε)A^t), cA^) L(\theta) = max(\ min(r(\theta)\hat{A}_t,\ clip(r(\theta),\ 1-\varepsilon,\ 1+\varepsilon)\hat{A}_t),\ c\hat{A})
其中,cc是一個超參數,用於限定clip下限,下圖(a)爲原本的PPO算法,(b)爲dual-PPO算法。

(四)實驗配置

        至此,算法和系統部分就介紹完了,最後我們來看一看王者訓練模型時的一些參數設置吧:

  • ε\varepsilon in dual-PPO \rightarrow 0.2
  • cc in dual-PPO \rightarrow 3
  • γ\gamma in actor-critic \rightarrow 0.997
  • Learning rate of Adam Optimizer \rightarrow 0.0001
  • Using GAE (generalized advantage estimator) to calculate the reward which λ\lambda \rightarrow 0.95

其中,GAE是一種有效減少梯度估計方差的方法,現在已經被廣泛應用在各種策略梯度估計的方法上。以上便是這篇論文介紹的全部內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章