網易伏羲GDC分享-模仿學習在遊戲人工智慧的運用經驗

遊資網發表於2021-07-21
7月19日,遊戲開發者大會(GDC)正式開幕,這是一場全球遊戲開發者的盛會。開幕當天,網易伏羲實驗室的研究員王蒙博士進行了精彩的分享,他於2018年正式加入網易,目前主要負責模仿學習在遊戲中的研究和應用落地工作,在AAAI、IJCAI、COG等AI和遊戲相關國際頂會上發表多篇論文。

網易伏羲實驗室在人工智慧領域積極探索,推出了遊戲行業人工智慧解決方案,橫跨AI反外掛、AI競技機器人、AI 對戰匹配以及 AI 劇情動畫製作四大AI能力,實現了AI 技術在遊戲行業的新突破。本次分享的內容就是源於AI競技機器人在遊戲中的運用經驗

網易伏羲GDC分享-模仿學習在遊戲人工智慧的運用經驗

以下是分享實錄:

王蒙(懷沙):大家好,我是來自網易伏羲實驗室強化學習組的研究員王蒙,很高興能夠有機會參加本次GDC AI峰會,今天我分享的主題是“Beyond Pre-training: Experiences of Applied Imitation Learning in Game AI”,亦即我們將模仿學習應用在遊戲場景下的一些經驗和體會

近年來,強化學習在遊戲領域獲得了快速的發展,在圍棋、Atari、Dota、星級爭霸等一系列複雜的遊戲中都達到了人類頂尖選手的水平。強化學習主要通過智慧體與遊戲環境不斷互動獲得大量樣本,並根據這些樣本來優化自身總獎勵回報的方式去優化自身的策略。模仿學習是另一種解決序列決策問題的思路,與強化學習不同,模仿學習一般都是從事先收集的人類資料中去模仿人類解決問題的過程,來優化自身的策略。下圖給出了模仿學習和強化學習的一些異同
網易伏羲GDC分享-模仿學習在遊戲人工智慧的運用經驗

遊戲天然就會有大量的人類玩家參與,因此也是一個應用模仿學習的理想場景,在AlphaGo,AlphaStar等頂尖強化學習AI的開發過程中,都有模仿學習的影子。在這些工作中,模仿學習一般會用來預訓練一個基礎的AI,以便於減小智慧體訓練過程中的探索空間,即先通過學習人類專家的資料(棋譜,遊戲replay資料)等,得到一個具有一定水平的預備AI,然後再在此AI的基礎上,引入強化學習訓練來繼續提升該AI的水平。除了這種常規的模仿學習應用方式以外,我們還進行了更多的探索,嘗試將模仿學習和強化學習結合起來去解決一些更復雜的問題,得到了一些有趣的結果。我分享的主要內容可以分為以下四個方面:直接應用模仿學習及其效果、模仿學習預訓練對強化學習的加速作用、基於模仿學習進行不同風格AI的訓練、模仿學習和強化學習相結合來得到更像人的AI。

網易伏羲GDC分享-模仿學習在遊戲人工智慧的運用經驗

為了應用模仿學習,我們收集了逆水寒遊戲流派競武玩法中的玩家運算元據,後續的演算法訓練場景也主要是在該玩法中進行的。

首先來介紹下我們單獨應用模仿學習演算法進行AI訓練的情況,由於收集到的全部玩家的資料量相對是比較大的,並且玩家的水平也不盡相同,我們首先需要從中篩選出一些高質量的資料。在這一部分,我們的規則相對比較簡單,主要可以分為兩部分:一部分是保證一場戰鬥資料的完整性(如:排除非正常結束的戰鬥),另一部分是保證較高的戰鬥水平(如:低rank玩家擊敗高rank玩家)。在得到資料後,我們還需要對資料進行解析,獲得可以用於智慧體的(state, action)資料對。對於state部分,首先我們會以與敵人的距離和角度以及與地圖中心的距離和角度的形式記錄玩家的相對位置。對於技能相關資訊,我們將記錄每個技能的可用情況;最後,對於每個玩家,還有一些與玩家狀態相關的屬性資訊,例如血量、魔法值、buffers 和 debuffers等,我們將所有這些資訊都記錄在名為 status 的部分中。action可以分為兩部分,第一部分包括移動、跳躍和躲避相關的動作。對於移動和跳躍,我們為每一個設定了八個離散的方向,包括向上、向後、向左、向右以及向左、向左、向左、向後、向後,對於躲避,我們只使用上,後,左,右四個主要方向。action的第二部分是技能,我們為每個技能設定一個動作,併為需要目標的技能手動設定目標。我們要解決的下一個問題是每個玩家的資料有限,而不同的玩家可能會有相互矛盾的行為模式,如果我們將所有資料混合在一起訓練一個模型,這些相互矛盾的資料很可能會影響訓練效果。為了解決這個問題,我們引入了特徵增強並新增了一些重要的資訊來幫助模型區分來自不同玩家的資料。經過多次實驗,我們發現每場戰鬥花費的時間和每場戰鬥如何結束是兩個重要的因素,因此我們為每個state新增了兩個維度,分別代表了戰鬥時間和戰鬥結果。此外,由於我們沒有使用 LSTM 或 GRU 等序列模型,我們新增了玩家或智慧體在上一步執行的動作來捕獲序列資訊。

網易伏羲GDC分享-模仿學習在遊戲人工智慧的運用經驗

將玩家的日誌解析為(state, action)資料對後,我們發現資料中不同動作的頻率差異很大。下圖中的左上分佈圖顯示了原始資料中每個動作的原始頻率。我們可以看到,除了幾個技能外,移動動作在這個分佈中占主導地位。我們使用以下兩個規則對資料進行預處理,以使動作的分佈更加平衡。

  • 首先,如果玩家連續向一個方向行走超過10幀,我們將只保留第一幀和最後一幀。這將大大減少移動動作的數量。
  • 接下來,如果技能幀前後5幀都是移動幀,我們會將這些移動幀都改成技能幀,因為我們假設對於人類玩家來說,如果在這一幀施放技能是合適的,那麼前五幀和後五幀也可能適合這個技能,因為人類的反應時間可能已經超過五幀所對應的時間了。經過這些預處理,雖然還有很多移動動作,但是動作的分佈更加均衡,如下圖的左下分佈圖所示。

網易伏羲GDC分享-模仿學習在遊戲人工智慧的運用經驗

最終,在僅使用模仿學習的情況下,我們得到了一個相當於中級強化學習AI的模型,其對我們的中級強化學習 AI 的勝率約為 47.3%,該中級強化學習AI 線上上超過了90% 的人類玩家。

在嘗試了純模仿學習之後,我們想看看模仿學習是否可以加速強化學習的訓練過程。由於模仿學習模型類似於強化學習中的actor,所以我們引入了基於Actor-Critic的IMPALA作為我們的強化學習演算法。一開始,我們只是將預先訓練好的模仿學習模型載入到actor中,然後繼續用強化學習演算法進行訓練。但是訓練總是在強化學習階段的早期就崩潰了。在對程式碼和模型進行分析之後,發現訓練崩潰的主要原因是在模仿學習轉向強化學習的初始階段,actor和critic的能力並不匹配。具體來說,當actor載入我們的模仿學習模型時,已經具有了較強的能力了,但是由於critic網路在模仿學習階段並沒有被訓練過,仍然在使用隨機權重引數,導致了critic無法正確評估actor決策的優劣,從而導致訓練過程崩潰。為了解決這個問題,我們在強化學習訓練的初始階段增加了一個額外的critic訓練階段。在這個階段中,雖然預訓練的模仿學習模型被載入到了actor中,但它的權重會被凍結,只有critic網路的引數會被更新。這個階段會持續一段時間,直到我們發現critic穩定下來之後,才會切換到actor和critic同步訓練的模式。

網易伏羲GDC分享-模仿學習在遊戲人工智慧的運用經驗

在最終結果上,我們比較了兩種不同的情況:

  • 首先,我們比較了引入reward shaping的情況下模仿學習的加速效果,結果如下圖左表所示,與從頭開始訓練相比,預訓練的模仿學習模型可以節省約50%的迭代次數。
  • 其次,我們移除了強化學習中reward shaping,驗證在這種更難的情況下模仿學習的加速效果,結果如下圖右表所示,與從頭開始訓練相比,預訓練的模仿學習模型可以節省80%的迭代次數。

網易伏羲GDC分享-模仿學習在遊戲人工智慧的運用經驗

接下來,我們嘗試通過模仿學習來訓練具有不同行為模式的AI。解決方案的整體流程如下圖所示。

網易伏羲GDC分享-模仿學習在遊戲人工智慧的運用經驗

在收集了玩家資料後,我們會為每場戰鬥設計一些特徵,然後利用聚類演算法以無監督的方式將資料分成幾類。最後,我們可以對這些類別中的每一個應用模仿學習,產生一個對應模型,每個模型代表相應類別的戰鬥風格。在這個過程中,首先要做的是設計聚類所需的特徵。我們將特徵分為三個部分。

  • 第一個是戰鬥資訊,包括戰鬥時間和戰鬥結果,如前所述。
  • 第二部分是玩家資訊,包括玩家造成的傷害、玩家的動作分佈以及玩家的等級和裝備評分。這些資訊描繪了玩家的屬性和技能偏好。
  • 最後一部分是序列資訊,包括兩個玩家之間的距離序列、玩家到地圖中心的距離序列、玩家血量序列和玩家buffer序列。由於我們要聚類的物件是一場戰鬥,亦即一系列(state, action)資料對組成的序列,這部分資料提供了聚類演算法所需的序列資訊。

網易伏羲GDC分享-模仿學習在遊戲人工智慧的運用經驗

利用這些特徵,我們嘗試了不同的聚類引數,並通過將聚類結果壓縮到3 維來進行視覺化,發現將資料聚成 5 個類別對於我們的資料來說已經足夠了。我們通過模仿學習基於每個類別的資料訓練了一個模型。通過觀察這些模型與強化學習模型對戰的過程,我們發現在不同類別的資料上訓練出來的模型確實會有不同的戰鬥模式,例如有的會更喜歡用輕功,而有的則更擅長使用閃避類技能。具體戰鬥過程可以參見我們報告中的視訊。

最後,我們嘗試將模仿學習和強化學習結合起來,來修復強化學習AI中的一些不像人的行為。下圖展示了一個這樣的例子。

網易伏羲GDC分享-模仿學習在遊戲人工智慧的運用經驗

在一場戰鬥開始時,強化學習AI 更喜歡呆在原地等待對手靠近自己,而不是像人類一樣逐漸接近對手。需要注意的是,雖然這種行為模式不像人類,但實際上AI學習到這樣的策略是合理的。因為如果敵人離強化學習AI很遠,敵人也不會傷害到他,從reward的角度來看,留在原地等待敵人靠近是合理的。但是如果敵人被人類玩家控制,看到一個每次開場都一動不動的對手肯定會感覺到比較奇怪。目前處理這種問題的方法一般是引入一條額外的規則來約束強化學習AI,例如“在一場戰鬥開始時向敵人移動”,這將迫使強化學習AI 與敵人保持適當的距離。但在實踐中,這樣的規則很容易被玩家利用,從而以一些意想不到的方式擊敗強化學習AI(另一種可能的方式是通過reward shaping重新訓練一個AI,成本會更高並且結果也存在著很高的不確定性)。針對這種情況,我們嘗試將模仿學習和強化學習結合在一起來解決這個問題。規則仍然是必要的,我們將規則和強化學習AI結合在一起,然後讓其進行多場對戰來收集資料。然後,我們會載入強化學習AI並使用模仿學習基於上述資料對其進行微調訓練,這一步的目的是教會模型學習該規則。接下來,我們將載入微調模型並使用原始獎勵執行額外的強化學習訓練過程,這一步的目的是確保規則不會被人類玩家利用。通過這種方法,我們可以修復強化學習 AI 不像人的一些行為,同時儘可能降低其被人類玩家利用的風險。訓練結果可以參照我們報告中的視訊。

在這個過程中,我們還發現了一些意想不到的有趣結果。下表顯示了 AI 在額外強化學習過程之前和之後的規則滿足率。從表的第二行可以看出,通過模仿學習微調的模型的規則滿足率都非常高。但是在第三行,我們可以看到規則1的滿足率大幅下降。規則1的意思是,當對手浮空時,玩家應該施放技能A。我們的專家提供了這個規則,因為技能A會延長對手的浮空時間。但是在強化學習訓練之後,我們的 AI 在這種情況下似乎更喜歡技能 B。通過進一步的技能分析,我們發現技能A的施法時間是技能B的兩倍。雖然技能A會延長對手的控制時間,但技能B會產生更多的傷害。因此在這種情況下使用技能B有可能是正確的,我們的AI嘗試著自行去糾正這個規則。

網易伏羲GDC分享-模仿學習在遊戲人工智慧的運用經驗

對於第三條規則,我們的專家認為,當對手被凍結時,玩家應該施放技能C,因為技能C會對被凍結的物體造成雙倍傷害。在強化學習訓練之後,我們的 AI 仍然保持了這種行為模式。

網易伏羲GDC分享-模仿學習在遊戲人工智慧的運用經驗

以上就是我這次分享的全部內容,在我們的工作過程中,越來越發現模仿學習和強化學習是可以互補的,模仿學習除了為強化學習提供預訓練模型之外,還有更多非常有潛力的應用場景,當然,也存在著很多困難和挑戰等待著我們去解決。在後續的工作中,我們會嘗試在更復雜(大型多人戰場)、更多樣(體育遊戲、動作遊戲)的遊戲場景中驗證模仿學習的效果。

相關文章