麻將AI難在哪?微軟宣佈公開麻將AI Suphx的十段秘籍
日前,微軟亞洲研究院在arXiv平台上正式發表了關於麻將AI系統Suphx的論文,公佈了Suphx背後的包括決策流程、模型架構、訓練算法等核心技術細節。那麼,麻將AI到底有哪些難點?Suphx這一在遊戲AI領域具有跨越性的突破具體是如何實現的?近日,微軟亞洲研究院Suphx研發團隊在arXiv平台上正式發表論文,公佈了Suphx背後的核心技術。
麻將AI面臨的挑戰
麻將AI系統Suphx主要基於深度強化學習技術。儘管深度強化學習在一系列遊戲AI中取得了巨大的成功,但想要將其直接應用在麻將AI上殊為不易,面臨著若干挑戰。
挑戰一:麻將的計分規則通常都非常複雜,在如天鳳平台等競技麻將中,計分規則更加複雜。
首先,一輪麻將游戲通常有8局甚至更多,每一局結束後四位玩家都會有這一局的得分(可能為正,可能為負)。當一整輪遊戲都結束後,四位玩家按照所有局的累計得分排名,計算這一輪遊戲的點數獎勵。在天鳳平台上,排在一二名的玩家會得到一定數目的點數,排在第三位的玩家點數不變,排在第四位的玩家會被扣去一定數目的點數。因此玩家的點數和段位都可能會起起落落,當點數增加到一定程度時段位上升,而點數扣到0時則會被降段。因此,為了提高段位,玩家需要盡量多的排在第一位或者第二位,盡量避免被排在第四位。
有趣的是,由於一輪遊戲的最終點數是由多局的累計得分決定,所以高手可能會策略性地輸掉一些局,也就是說,某一局的輸贏並不能直接代表玩家打的好不好,所以不能直接使用每局的得分來作為強化學習的獎勵反饋信號。微軟亞洲研究院的研究員們找到了一種其他的方法,會在後文中解釋。
其次,天鳳平台上每一局遊戲的計分規則都需要根據贏家手裡的牌型來累計計算得分,牌型有非常多的可能,例如清一色、混一色、門清等等,不同牌型的得分會相差很大。這樣的計分規則比象棋、圍棋等遊戲要復雜得多。麻將高手需要謹慎選擇牌型,以在胡牌的概率和胡牌的得分上進行平衡,從而取得第一、二位或者擺脫第四位。
挑戰二:從博弈論的角度來看,麻將是多人非完美信息博弈。麻將一共有136張牌,每一位玩家只能看到很少的牌,包括自己的13張手牌和所有人打出來的牌,更多的牌是看不到,包括另外三位玩家的手牌以及牆牌。面對如此多的隱藏未知信息,麻將玩家很難僅根據自己的手牌做出一個很好的決策。
挑戰三:麻將除了計分規則復雜之外,打法也比較複雜,需要考慮多種決策類型,例如,除了正常的摸牌、打牌之外,還要經常決定是否吃牌、碰牌、槓牌、立直以及是否胡牌。任意一位玩家的吃碰槓以及胡牌都會改變摸牌的順序,因此研究員們很難為麻將構建一棵規則的博弈樹(game tree)。即使去構建一棵博弈樹,那麼這棵博弈樹也會非常龐大,並且有不計其數的分支,導致以前一些很好的方法,如蒙特卡洛樹搜索(MCTS)、蒙特卡洛反事實遺憾最小化(MCCFR)算法等都無法直接被應用。
Suphx 的決策流程及模型架構
Suphx的打牌策略包含5個需要訓練的模型,以應對麻將復雜的決策類型——丟牌模型、立直模型、吃牌模型、碰牌模型以及槓牌模型,5個模型都基於深度殘差卷積神經網絡。另外Suphx還有一個基於規則的贏牌模型決定在可以贏牌的時候要不要贏牌。
圖1:Suphx決策流程
這些模型的輸入包含了兩大類信息:
1. 當前可觀測的信息,例如玩家自己的手牌、公開牌(包括丟出來的牌、碰的牌、明槓的牌),以及每個玩家的累計得分、座位、段位等等。
2. 對將來進行預測的信息,比如打某張牌還需要拿幾張牌才能胡牌、能夠贏多少分、胡牌概率有多大,等等。
Suphx訓練算法
Suphx訓練過程分為三個主要步驟:首先使用來自天鳳平台的高手打牌記錄,通過監督學習來訓練這5個模型,然後使用自我博弈強化學習以及由微軟亞洲研究院Suphx研發團隊設計的兩個技術解決麻將本身的獨特性所帶來的挑戰,最後在實戰時採用在線策略自適應算法來進一步提高Suphx的能力。
分佈式強化學習
Suphx的整個訓練過程十分複雜,需要多GPU和多CPU協同,因此Suphx研發團隊採用了分佈式架構(圖2所示)。架構包括一個參數服務器以及多個自我博弈節點,每個節點裡包含了多個麻將的模擬器以及多個推理引擎來進行多個策略之間的博弈(即打麻將)。每個自我博弈節點定期將打牌的記錄發送給參數服務器,參數服務器會利用這些打牌記錄來訓練提高當前策略。每過一段時間,自我博弈節點就會從參數服務器拿回最新的策略,用來進行下一階段的自我博弈。
圖2:分佈式訓練
全局獎勵預測
麻將的計分規則很複雜——玩家每局有得分,一輪遊戲根據多局累計分數的排名計算點數。如何讓麻將AI知道自己打得好不好呢?
無論是每局得分還是一輪遊戲的最終點數,都不適合用來做強化學習訓練的反饋信號。以最終獎勵點數作為反饋信號不能區分打得好的局和打得差的局,因此研究員們需要對每局都單獨提供強化學習的訓練信號。但單獨計算每局分數也未必能反映出一局打的好壞,因為頂級玩家會策略性輸牌,比如,在一輪遊戲的最後一兩局中,累計得分排位第一的選手在累計分數領先較大的情況下,會有意識地讓排位第三或第四的選手贏下這一局,不讓排第二位的玩家贏,這樣就可以穩穩地保住總排位第一。也就是說,某一局得分為負不一定意味著策略不好。
因此,為了給強化學習訓練提供有效的信號,需要將最終的遊戲獎勵適當地歸因到每一輪的遊戲中。Suphx研發團隊引入了一個全局獎勵預測器,它可以基於本局的信息和之前的所有局信息預測出最終的遊戲獎勵。在Suphx中,獎勵預測器是一個遞歸神經網絡 (GRU),訓練數據來自於高手玩家在天鳳平台的歷史記錄。預測器訓練好後,對於自我博弈生成的遊戲,Suphx研發團隊用當前局預測的最終獎勵和上一局預測的最終獎勵之間的差值作為該局強化學習訓練的反饋信號。
先知教練
麻將中存在著豐富的隱藏信息,如其他玩家的手牌、牆牌等,如果不能獲得這些隱藏信息,那麼就很難確保某個動作(例如丟三萬)的好壞,這也是麻將很難的一個根本原因。在這種情況下,雖然Suphx可以通過強化學習來提高策略,但學習速度會非常慢。
為了加快強化學習訓練的速度,Suphx研發團隊引入了一個“先知”,它可以看到所有的信息,包括(1)玩家自己的私有手牌,(2)所有玩家的公開牌,(3)其他公共信息, (4)其他三個玩家的私有手牌,(5)牆牌。只有(1)(2)和(3)是正常的玩家可以獲得的,而(4)和(5)是只有“先知”才能獲得的額外的”完美”信息。
圖3:左邊為正常可觀測信息,右邊為完全信息(包括對手手牌牆牌這些“完美”信息)
有了這些“不公平”的完美信息,“先知”在經過強化學習訓練後,很容易成為麻將超級高手,安定段位也很容易就可以超過20段。如何利用“先知”來引導和加速AI的訓練呢?實驗表明,簡單的知識萃取(knowledge distillation)或者模仿學習(imitation learning)並不能很好地把“先知”的“超能力”轉移到AI系統上——對於一個只能獲取有限信息的正常AI來說,它很難模仿一個訓練有素的“先知”的行為,因為“先知”的能力太強,普通AI無法理解。比如,“先知”看到了其他玩家的手牌,知道每個玩家胡什麼牌,所以它可以打出絕對安全的牌,避免點炮,然而正常的AI並沒有這些信息,它可能完全不能理解為什麼“先知”會打這張牌,所以也不能學到這種行為。因此,研究人員需要一個更聰明的方法,用“先知”來引導正常AI的訓練。
在Suphx中,Suphx研發團隊首先使用包括完美信息在內的所有特徵來對“先知”進行強化學習訓練,在這一步中控制“先知”的學習進度,不能讓其過於強大。然後,通過對完美特徵增加mask逐漸使“先知”最終過渡到正常AI。接著,繼續訓練正常AI並進行一定數量的迭代,採用衰減學習率和拒絕採樣的技巧來調整訓練過程,讓AI的技術不斷精進。
參數化的蒙特卡洛策略自適應
對一個麻將高手來說,初始手牌不同時,打牌策略也會有很大的不同。例如,如果初始手牌好,他會積極進攻,以獲得更多的得分;如果初始手牌不好,他會傾向防守,放棄胡牌,以減少損失。這與此前的圍棋AI和星際爭霸等遊戲AI有很大的不同。所以,如果能夠在對戰過程中對線下訓練的策略進行調整,那麼就可以得到更強的麻將AI。
蒙特卡洛樹搜索(MCTS)是圍棋等遊戲AI中一種成熟的技術,以提高對戰時的勝率。然而遺憾的是,如前所述,麻將的摸牌、打牌順序並不固定,很難建立一個規則的博弈樹。因此,MCTS不能直接應用於麻將AI。在Suphx中,Suphx研發團隊設計了一種新的方法,命名為參數蒙特卡洛策略自適應(pMCPA)。
當初始的手牌發到麻將AI手中時,通過模擬來調整離線訓練好的策略,使其更適應這個給定的初始手牌。微軟亞洲研究院的實驗表明,相對麻將隱藏信息集的平均大小10的48+次方倍而言,模擬的次數不需要很大,pMCPA也並不需要為這一局手牌收集所有可能後續狀態的統計數據。由於pMCPA是一種參數化的方法,所以微調更新後的策略可以幫助研究團隊將從有限的模擬中獲得的知識推廣泛化到未見過的狀態。
天鳳平台在線實戰
在經歷這樣的訓練後,Suphx就可以“出道”了。Suphx已在天鳳平台特上房和其他玩家對戰了5000多場,達到了該房間目前的最高段位10段,其安定段位達到了8.7段(如圖4所示),超過了平台上另外兩個知名AI以及頂級人類選手的平均水平。
圖4:天鳳平台“特上房”安定段位對比
在實戰中Suphx非常擅長防守,它的4位率和點炮率(deal-in rate)都尤其低(如圖5)。此外,Suphx“牌風”比較鮮明,也另闢蹊徑地創造了許多新的策略和打法,例如它特別擅長保留安全牌,傾向於胡混一色等等。圖6展示了Suphx在天鳳平台實戰時保留安全牌的一個例子。當前時刻Suphx(南家)需要丟牌,人類玩家在這時通常會丟北風,但是Suphx丟掉一張7條,這在人類玩家看起來會覺得很不尋常,因為7條是一張好牌,丟掉7條會使得胡牌的進度變慢。Suphx之所以丟掉7條而留住北風,是因為北風是一張安全牌,這樣在未來某一時刻,如果有人突然立直要胡牌了,Suphx可以打出北風而不點炮,這樣後面還有機會胡牌;如果它在前面已經把北風丟掉,那這個時候為了打出一張安全牌就不得不拆掉手裡的好牌,從而大大降低了胡牌的可能。
圖5:Suphx在對戰中的一些統計數據,包括1/2/3/4位率、胡牌率以及點炮率(注:上表格中的Bakuuchi即東京大學/HEROZ研發的麻將AI“爆打”)
圖6:Suphx(南邊位置)保留安全牌北風
許多觀看 Suphx比賽的玩家表示在觀戰過程中受到了啟發,甚至有麻將愛好者將Suphx稱作“麻將教科書”、“Suphx老師”,通過學習Suphx的打法來提升和豐富自己的麻將技巧。
“我已經看了300多場Suphx的比賽,我甚至不再觀看人類玩家的比賽了。我從Suphx身上學到了很多新技術,它們對於我的三人麻將打法有著非常大的啟發,”麻將選手太くないお在社交媒體上說,他是第一位在四人麻將和三人麻將中均取得天鳳位的頂級玩家。
據介紹,Suphx在天鳳平台上取得的成績只是一個開始,未來,微軟亞洲研究院將為Suphx引入更多新技術,繼續推動麻將AI和不完美信息遊戲研究的前沿。