AAAI2020接收了一篇來自騰訊的強化學習論文Mastering Complex Control in MOBA Games with Deep Reinforcement Learning[1],通過對系統架構的設計和算法的創新,騰訊改進的強化學習系統在王者榮耀1v1場景下能夠擊敗頂尖職業選手,本文,我們就來看一下這個強化學習系統的詳細內容吧!
摘要
多人在線競技遊戲( Multi-player Online Battle Aren,MOBA),是一個控制操作非常複雜的強化學習問題。在MOBA遊戲1 v 1場景下涉及的狀態和動作空間,要遠比傳統的1 v 1遊戲複雜的多,所以,這也導致在這個問題中很難搜索到達到人類水平的控制策略。因此,在這篇文章中騰訊AI Lab分別在系統設計和算法方面都做了大量的優化。
系統設計方面:設計的強化學習系統具有低耦合且擴展性較高的優點,這樣他就可以實現在大規模問題上進行高效探索的可能性。
算法方面:在算法方面,加入了控制解耦、動作掩膜、目標註意力機制,同時對經典PPO算法進行了改進。
通過這些誒方面的改進,在王者榮耀1 v 1測試場景下,人工智能智能體能夠擊敗頂尖的職業玩家。
PPO: Proximal Policy Optimization,中文翻譯為近端優化策略,它是一種基於Policy Gradient的強化學習算法。
系統設計
考慮到複雜的智能體控制會引起隨機梯度的高方差這個問題,較大的訓練批次有助於加速訓練過程。因此,在本文中,設計了一個可伸縮、松耦合的系統架構,這樣可以實現數據並行的功能。在這個系統中,包括4個模塊,
- 強化學習的學習系統(RL Learner)
- AI服務器(AI Server)
- 調度模塊(Dispatch Module)
- 內存池(Memory Pool)
系統概述
上圖中展示的就是完整的強化學習系統,它包括4個部分。其中,AI服務器(AI Server with Game Env)和調度模塊,本質上都是屬於硬件層面,都是由AI服務器組成(後續AI服務器指代AI Server with Game Env)。其中,AI服務器實現了AI模型與環境的交互功能。調度模塊是一個由多個AI服務器組成的工作站,它的功能是樣本的收集、壓縮、傳輸等。內存池是用於數據存儲,它為RL Learner提供了訓練樣例。
通過這樣的設計,這些模塊之間可以實現
解耦,可以靈活的配置,因此,研究人員就可以把注意力專注於算法設計方面。各模塊詳細的介紹如下。
AI Server
AI Server包含了遊戲環境和AI模型之間的一種交互邏輯,AI Server首先基於softmax分佈進行採樣,然後探索一個策略,然後根據採樣的策略施加動作給遊戲核心。遊戲核心執行之後會連續返回獎懲值(Reward)和下一個狀態。
調度模塊
如同前面提到的那樣,調度模塊是由多個AI Server綁定到一起組成的工作站,它的功能是從AI服務器收集數據,這些數據包括獎懲值、特徵、動作概率。
這些數據首先會被壓縮並打包,然後傳輸給內存池。
內存池
內存池同樣也是服務器,其內部實現了內存高效的循環隊列,它用於數據的存儲,能夠支持各種長度的樣本,並且能夠根據生成時間進行數據採樣。
RL Learner
RL Learner是一個分佈式的訓練系統,為了使用加速策略更新,系統中集成多個RL Learner並行的從內存池中讀取數據。為了降低IO成本,RL Learner使用共享內存而不是socket來與內存池進行通信,這樣可以達到2-3倍的速度提升。
最終,RL Learner訓練的模型會被同步到AI Server中。
在這個系統中,經驗的生成和參數的學習是解耦的,這種靈活的機制可以讓AI Server和RL Learner具有很強的伸縮性。另外,為了解決AI Server和RL Learner之間的通信瓶頸,RL Learner訓練的模型會從主節點以點對點的方式同步到AI Server中。另外,調度模塊和內存池的加入,使得數據的存儲和傳輸更加流暢。
算法設計
為了更加高效的訓練網絡,提出了幾項新的策略,
- 注意力機制
- 應用LSTM
- 改進PPO
- action mask
注意力機制的引入能夠有助於在遊戲對戰中的目標選擇。
LSTM被用於英雄連擊時組合動作的學習,這對於造成傷害至關重要。
改進PPO包括兩個方面:第一,通過控制依賴項的結構,提出了多標籤PPO算法;第二,提出dual-clips PPO算法,這樣能夠保證大批量處理過程中的收斂性。
動作掩碼(action mask)是在先驗的遊戲知識上提出的一種指導算法,它能夠指導強化學習的探索過程。
到這裡先對算法部分有一個大概的認識,下面,對照上圖解釋一下詳細的算法流程。
輸入包括3個方面的特徵,
- 圖像特徵
- 可觀測到的屬性特徵,例如,玩家選擇的英雄、對手選擇的英雄、英雄的生命值等
- 可觀測到的遊戲狀態信息,例如,遊戲時間、被摧毀的塔
然後對這3種特徵分別運用卷積、全連接+激活、全連接進行編碼,生成、、,這裡需要注意的是經過一系列的全連接和激活運算之後被分割成了兩個部分:單元的表示和目標的注意力鍵值。
隨後利用全連接和LSTM對策略進行建模,、、,這些編碼經過LSTM映射之後生成,隨後通過全連接預測出一個動作a,動作按鈕包括移動、攻擊、技能釋放等。
到這裡,就把從觀測信息到施加動作整個流程給串起來了,但是,實際的訓練過程中遠不止這些,在很多細節處非常複雜,所以,需要進一步的詳細優化。
在MOBA遊戲中,一個動作往往有多個不同的標籤,因此,很難對不同標籤之間的關係進行建模,例如,技能類型與技能方向之間的相關性。
為了解決這個問題,文中提出一種獨立的對待每一個標籤的方式(控制關係依賴的解耦),這樣就能消除不同標籤之間的相關性(多標籤PPO)。
解耦之後就帶來兩個好處,
- 簡化策略結構
- 增加了動作的多樣性
然而,隨著它帶來優點的同時,它也帶來了一項弊端:由於MOBA遊戲中動作和狀態空間巨大,動作的解耦進一步增加了訓練的複雜性。
為了提高訓練的效率,動作掩碼(action mask)就被引用進了策略的輸出層。它是建立在人類玩家豐富先驗知識的基礎之上,加入了動作之間的相關性,這樣就可以減少強化學習中的探索過程。
簡而言之,action mask的應用能夠之間剔除一些不合理的地方,在一些不需要探索的地方就不去探索,這樣能夠減少訓練的複雜性,這裡不合理的地方 包括4個方面,
- 物理禁區,例如,地圖中的障礙物
- 技能和攻擊的可用性,例如,在冷卻時間內不可使用
- 被對手英雄技能或者裝備控制•英雄和物品本身的一些限制
到了這裡,就還有一項沒有提及--dual-clips PPO算法。
介紹這個改進算法之間首先要簡單介紹一些原始的PPO算法的思想:PPO算法是一種基於Policy Gradient的強化學習算法,根據OpenAI[2]的解釋,之前的Policy Gradient算法對步長非常敏感,策略更新過程中如果步長過小,那麼策略 更新的速度會非常緩慢。反之,如果策略更新步長過大,那麼策略更新波動會非常劇烈,很難收斂。
因此,PPO就應運而生了,它採用新策略與老策略之間的比值來限制策略的更新幅度,這樣策略的更新對步長就不再那麼敏感。簡而言之,PPO在原來Policy Gradient加入了一個關鍵的部分,策略比值,
但是,比值可能會非常大,這樣他就會導致最大化RL目標函數時產生過大的偏差。
雖然,近幾年針對這個問題提出了一些PPO算法的改進算法,但是大多數都屬於on-policy策略,而本文設計的架構是一種off-policy框架,所以,這些改進算法就不再適用於這樣的場景。因此,本文提出了一種支持大規模分佈式訓練的dual-clip PPO算法。
實驗結果
從上表中可以看出,分別用貂蟬、狄仁傑、露娜、韓信、花木蘭幾個不同類型的英雄對比了AI和專業級選手的結果,發現從各項指標方面AI都佔據絕對的優勢。
另外,在看一下多次比賽之後AI的勝率高達99.81%。
閱讀更多 Jackpop 的文章