筆記網站
筆記網站
# 前言
這是一份關於計畫的紀錄,由我的指導教授與學長提供的資料開始進行研究,主要是要撰寫一個基於深度學習與強化學習麻將對局的程式,希望可以寫出一個臺灣麻將與日本麻將。
# 參考論文
- 應用深度學習與強化學習於臺灣麻將對局程式之研究
Research on Applying Deepp Learning and Reinforcement Learning to Taiwanese Mahjong Program- 指導教授:黃國展
- 撰寫者:陳昕斈
# 麻將研究摘要
麻將是一個多人不完美信息遊戲,使整場遊戲隨機性高而複雜,提供許多不確定性,如:隱藏信息、偶然性、同時移動。
日本麻將已經引入深度神經網路,如: Microsoft Suphx,但臺灣大多基於傳統啟發方式或遊戲樹搜尋方法,因此由我學長開啟研究,而我接續下去。
麻將對接平臺
- 日本麻將:天鳳
- 臺灣麻將:交通大學提供的伺服器平臺
知名麻將程式
- 日本麻將
- 微軟麻將 AI「Microsoft Suphx」(Super Phoenix)
- 臺灣麻將
- Rowlet
- VeryLongCat
- SimCat
- FatesGate
- Seofon_v2
# Introduction
# 策略選擇臺灣麻將 vs. 日本麻將
- 日本麻將規則更加複雜,包含很多小規則與細節,注重策略與技巧,需要更深入的思考、運用牌紀、記憶力、策略以及靈活的頭腦。
- 臺灣麻將風格更加迅速和競爭,注重胡牌和計分,要積極的態度與競爭心。
最佳的贏法:
- 日本麻將:
- 希望可以胡較大的番數,獲得較多的分數,較不注重自摸
- 不會特別希望是自摸,因為算分方式是,自己依舊獲得 胡牌番數的分數,而其他人扣除 胡牌番數的分數 / 3 的分數
- 因為上述規則,對手需要更加去思考,盡量丟出不讓你胡牌的牌,讓自己就算沒有獲勝,也不會損失太多或是流局
- 臺灣麻將:
- 比較不注重番數,因為自摸效益更大,更希望可以自摸
- 自摸的分數計算方式是,自己可以獲得 胡牌臺數的分數 * 3,而其他人扣除 胡牌臺數的分數
- 因為上規則,會更希望快速組成牌組,期望可以自摸,更以快速獲勝的方式,來減少放槍的機率,從而不注重胡牌番數
臺灣麻將的策略導向是:追求快速獲勝,試圖找到最快的贏牌策略,以取代可能由於丟棄一張滿足其他玩家贏牌條件的牌而帶來的潛在負面影響,玩家傾向於將個人成功置於丟棄可能使對手受益的牌所帶來的損失之上。
# 技術概述
- 相比較其他臺灣麻將程式(依賴啟發式方法、樹搜尋方法、模擬方法),研究把監督式深度學習和強化式學習引入的潛力。
- 基於 Suphx & 卷積神經網絡。
- 整合了由深度強化學習訓練的神經網絡模型,以及 SimCat 提出的 flatMC 模擬方法。
- 神經網絡模型在模擬過程中有效地過濾和選擇樹節點,減少了無效模擬的次數。
# Background and Related Works
# 臺灣麻將比賽
每年有三次比賽,分別由三個不同的學術組織主辦:
- 臺灣電腦遊戲協會 (TCGA,Taiwan Computer Game Association)
- 臺灣人工智慧協會 (TAAI,Technologies and Applications of Artificial Intelligence)
- 國際電腦遊戲協會 (ICGA,International Computer Games Association)
比賽規則三個相同。
四名玩家共參加 384 輪比賽,不考慮連勝,以最終得分決定勝負。
計分系統為獲勝玩家分配 1000 分的基本分,每個獎勵積分提供 500 分。
獎勵積分算法:
案例 | 獎金積分 | 說明 |
---|---|---|
莊家 | 1 | 做莊家者,獲勝多算一分,其他人獲勝也多算一分 |
門清 | 1 | 胡牌時,沒有吃牌、碰牌、明槓 |
自摸 | 1 | 胡牌的牌由自己摸進 |
斷么九 | 1 | 沒有一、九或東、南、西、北、白板、發財、紅中的情況下獲勝 |
海底撈月 | 1 | 摸牌牆最後一張牌,在流局前,而自摸者多計一臺,因摸到槓牌造成其結果為最後一張牌時,亦以海底撈月計之 |
門風刻 | 1 | 拿自己所屬的風位的刻子,以開門為東風逆時針依序為東、南、西、北 |
三元牌 | 1 | 中、發、白任一個刻子 |
雙龍袍 | 1 | 在一個牌局中,有兩個相同花色的序數,如:一萬兩萬三萬有兩組 |
槓上開花 | 1 | 因摸到暗槓或加槓而補牌,補牌後恰巧胡牌 |
搶槓 | 1 | 聽牌時,因別人加槓而加槓那張牌,恰巧是可以胡的牌 |
全求 | 2 | 贏牌時只剩下一張對子,其餘牌均為吃牌、碰牌或槓牌 |
平胡 | 2 | 只用序數牌獲勝,不使用碰牌、槓牌或是字牌,也不能為獨聽或自摸 |
混帶么 | 2 | 所有的順子、刻子和眼睛都至少有一張一、九或字牌 |
三色同順 | 2 | 以三個相同順序的順子取勝,每個順子來自不同款式,如果手牌完全隱藏,則獲得雙倍積分(4 分) |
一條龍 | 2 | 以一種花色的完整順字(從 1 到 9)取勝,如果手牌完全隱藏,則獲得雙倍積分(4 分) |
雙雙龍抱 | 2 | 以兩對有兩個相同花色的序數取勝,如:一萬、兩萬、三萬有兩組和五筒、六筒、七筒有兩組 |
三暗刻 | 2 | 有三個暗藏的刻子,包括暗槓 |
三色同刻 | 2 | 以三個相同數字的刻子或是槓取勝,每個序列來自不同款式 |
門清自摸 | 3 | 以全暗手和自摸取勝 |
碰碰胡 | 4 | 以全部刻子和槓取勝 |
混一色 | 4 | 手牌中除字牌外僅有一種花色牌 |
純帶么 | 4 | 所有的順子、刻子和眼睛都至少有一張一、九 |
混老頭 | 4 | 牌面中只有一、九和字牌所組成,所以不可能有順子,不計碰碰胡 |
小三元 | 4 | 擁有中、白、發,任組成 2 組刻子(三張相同)和 1 組眼睛(兩張相同)之牌型 |
四暗刻 | 6 | 指 4 組暗刻或暗槓組成的胡牌 |
四槓子 | 6 | 胡牌只需要 4 個暗槓加上 1 個眼睛,所以胡牌時是 4 * 4 + 2 = 18 張牌 |
大三元 | 8 | 胡牌時有中、發、白三元牌,三副刻子的情況 |
小四喜 | 8 | 胡牌時有「風牌」的三副刻子及眼睛 |
清一色 | 8 | 由一種花色的序數排組成的牌型 |
字一色 | 8 | 胡牌完全由字牌「東、南、西、北、中、發、白」所組成 |
五暗刻 | 8 | 胡牌時手中有五副刻子,包括暗槓,計碰碰胡 |
清老頭 | 8 | 牌面中只有一、九所組成,所以不可能有順子,不計碰碰胡 |
大四喜 | 16 | 胡牌時有四副「風刻」組成的牌 |
天胡 | 16 | 只適用於莊家,當莊家在牌局第一輪抓完後立即胡牌,不計門清、自摸、獨聽、槓上開花,其餘另計 |
地胡 | 16 | 適用於莊家之外其他玩家,在第一輪抓玩牌就自模,不計自摸、門清、不求人,其餘另計 |
人胡 | 16 | 牌局一開始,第一輪內還沒摸牌前,沒有發生吃、碰、槓的情況就胡他人的牌,不另計門清之外,其餘都另計 |
特殊隨機規則:
為減少麻將中隨機性帶來的運氣影響,每組牌要打四輪,由四位玩家輪流進行,這樣可以確保每位玩家至少有一次獲得同一套牌的機會。
違例規則:
每個動作無論是打牌還是摸牌,都有三秒時間限制,如果玩家超過這一個時間限制,將受到懲罰,不可以在該回合中做任何選擇,具體如下:
- 他的所有棄牌將被隨機決定。
- 他的吃牌、碰牌、槓牌會被跳過。
這種懲罰會阻止玩家獲勝,也會增加其他玩家獲勝的機會,所以避免超過時限至關重要。
# 比賽規則
由坐在方桌四個方向的四名玩家進行遊戲,對特定玩家而言,坐在其右邊的玩家稱為下家,左邊的玩家稱為上家,對面的玩家稱為對家。
臺灣麻將總共使用 136 張牌,由 34 張不同牌各四張組成。
分成 3 種花色與 7 種特殊牌:
- 一萬~九萬:
![Imgur](https://i.imgur.com/P2PSCZi.png) - 一筒~九筒:
![Imgur](https://i.imgur.com/ZXiWekT.png) - 一條~九條:
![Imgur](https://i.imgur.com/SXoCvif.png) - 字牌:東、南、西、北、白板、發財、紅中
![Imgur](https://i.imgur.com/HIz257H.png)
開局前布置
- 每輪開始都會先建造牌牆,牌牆的牌面朝下堆疊,認了玩家都不知道最初牌的信息。
- 堆疊方式是總共有 4 堆,每一堆由 2 個牌疊一起為單位,有 17 個,四堆最後會在四名玩家前面呈現正方形排列。
開局摸牌
- 每位玩家開局會先抽 16 張牌作為起手牌,起手牌由莊家擲 3 個骰子,用骰子決定起手牌的抽取位置。
- 從摸牌的位置開始,玩家由逆時針方向輪流摸牌,直到他們手中牌集滿 16 張為止,牌牆則按順時針方向抽取。
開始遊玩
- 每輪遊戲,四名玩家按逆時針方向輪流進行摸牌和打牌,抽到的牌為玩家的一部分,屬於玩家的私人信息,打牌則是從玩家手中選一張牌丟掉,成為公開信息。
其他動作:
除了上述的摸牌和打牌的動作,還有以下幾種:
- 打牌: 把你不要的牌支打進海底,就叫做「打牌」。
- 摸牌: 上家打牌後,無吃、碰 ( 不可明槓上家出的牌,因此不考慮槓的情形 ) 時,就可以再摸一張牌,就叫做「摸牌」。
- 吃牌: 當牌的組合無法自摸獲得時,可拿上家丟出來的牌來組成順子,公開表示放於自己左邊。
- 碰牌: 當你手中有兩支牌和別人打出的牌相同時,就可叫「碰」,又稱為「碰牌」。
- 槓牌: 明槓、暗槓、加槓
- 明槓: 他家打牌之後,如果你手上有三張跟那被打出的牌支一樣的,就可以「槓牌」,這種槓牌叫做「明槓」 。此外,上家出的牌不可用來明槓。
- 暗槓: 如果是手內摸有四張相同的牌,取出槓牌,則叫做「暗槓」
- 加槓: 如果是已經碰牌了,卻又再摸入一張相同的牌支,也可以叫槓牌 — 這種槓牌叫作「加槓」
- 打牌是公開於牌池,摸牌則是不公開放置於自己抽的牌中。
- 上述的吃牌、碰牌、明槓、加槓,都是公開的訊息,應置於自己抽牌的前面,而暗槓的牌是不公開的,但也應該置於自己抽牌的前面。
- 當摸牌、吃牌、碰牌後,都需要打牌,在輪到下一位玩家繼續遊戲,如過是三種槓牌,都需要在牌牆末端抽一張牌,後再打牌。
- 每位玩家依照順序,直至牌牆只剩下 16 張牌為止,若沒有贏家,表示該局和局,若在這之前有人達到胡牌條件,表示他為這場獲勝者。
胡牌條件:
胡牌是要將自己手上的 16 張 + 1 張新摸進來的牌湊出 5 組對子跟 1 對眼睛。
- 對子可以分成:
- 順子: 同花色接續的數字,例如 345 萬、123 條、789 筒。
- 刻子: 相同數字花色,例如:三張 1 筒、三張東風牌、三張紅中牌、三張 2 萬。
- 眼睛是指:
- 兩張同花色相同數字的牌,例如兩張西風、兩張白皮、兩張 9 條。
- 胡牌又可分成兩種:
- 自摸: 如果是自己摸進來的牌而湊齊,則稱為「自摸」,則其他三家皆輸。
- 放槍: 如果是因為其他玩家丟出的牌而湊齊,則丟牌的人稱為「放槍」,只有丟牌即放槍者算輸。
- 計算分數是在胡牌之後進行的,由兩個規則決定分數:基本規則和獎勵規則。
- 基本規則: 決定了只需獲勝就可以獲得的基本分數。
- 獎勵規則: 在滿足某些特殊條件時,可以累積額外的分數。
- 獲勝牌局的最終得分是通過基本規則和獎勵規則獲得總分,計算出獲勝牌局的分數後,在不是自摸的情況下,只有放槍的玩家需要支付給獲勝的玩家,在自摸的情況下,所有玩家都需要向獲勝玩家支付點數,因此自摸利潤相當於非自摸的三倍。
# 近期比賽中的臺灣麻將人工智慧程式
# VeryLongCat
介紹
是國立陽明交通大學開發的,在 2020 年、2021 年 TCGA、2021 年、2022 年 TAAI 和 2022 年 ICGA 比賽中獲得冠軍。
在其他未獲得冠軍的比賽中,也保持著前三名,可以說是近年來臺灣麻將的霸主。
技術
VeryLongCat 是利用 Expectimax 搜索演算法建構一個搜索深度為 n 的樹,目的是找到獲勝期望值最高的棄牌候選者。
- n 值通常根據 MTW 或 MTW 加 1 的數量確定。
- 樹擴展過程中的每一步都包括兩個階段:抽牌和棄牌。
在抽牌階段,從某個節點擴展出的子節點代表所有可能的抽牌結果,即牌牆中剩餘的牌型。
- 如果子節點的手牌符合獲勝條件,則返回值為 1。
- 如果為滿足獲勝條件,樹會繼續擴展,值到達到預定深度 n,此時如果仍未滿獲勝條件,返回值為 0。
在棄牌階段,從一個節點擴展出的子節點代表所有棄牌選擇,即玩家手中的不同牌型。樹形擴展階段結束後,返回階段開始,每個子節點的返回值是所獲得的返回值與從牌池中抽出該張牌的概率乘積。
最後,將選擇期望值的最高棄牌候選者進行操作。
潛在的問題
儘管 VeryLongCat 證明了 Expectimax 搜尋演算法的有效性,但他面臨著另一個挑戰,即無法在歸地時間內完成擴展,結果將不是完整的。
這就限制了 Expectimax 搜尋演算法在時間有限的比賽中的適用性。
因此在存在單張牌(即在數值或花色上,範圍在正負兩之內沒有其他相符的牌)時避免使用 Expectimax 搜尋算法。
# SimCat
介紹
國立陽明交通大學開發的另一個臺灣麻將程式。
在 2020 年 TAAI 、2020 年 ICGA 比賽中獲得冠軍,2023 年 TCGA、2021 年 TAAI、2021 年、2022 年 ICGA 比賽中獲得亞軍。
技術
在 SimCat 的 FlatMC 中,首先識別潛在的出牌選擇,每個可能的出牌都會進行 𝑛 次模擬。在深度為 𝑚 的模擬中,記錄成功完成的次數(即贏得局面的次數)。獲勝次數最多的行動被視為勝率最高。
- 在每次模擬中,玩家最多可以抽取 𝑚 張牌,由變數 𝑖 表示,範圍從 0 到 𝑚 。
- 因此,模擬過程中維護一個狀態變數 𝑆𝑖,表示第 𝑖 次抽牌後的狀態,其中包含至少一套手牌信息。𝑆0 表示初始手牌。
在每次模擬中,從牌池中抽取四張牌,分別為 𝑡𝑙、𝑡𝑂、𝑡𝑈 和 𝑡𝐶。前三張牌 𝑡𝑙、𝑡𝑂、𝑡𝑈 分別代表玩家左對手、對面對手和右對手的出牌,而 𝑡𝐶 代表玩家抽到的牌。
- 如果玩家的當前手牌,加上 𝑡𝑙、𝑡𝑂、𝑡𝑈,滿足贏牌的條件,則呼叫後更新的手牌被儲存在 𝑆𝑖+1 中。
- 𝑆𝑖+1 也儲存了玩家在抽牌 𝑡𝐶 後的手牌。模擬僅檢查 𝑆𝑖 中的每一手牌是否滿足贏牌的條件,而不考慮出牌。
- 如果在 𝑖 超過 𝑚 後未達成贏牌手牌,則認為模擬失敗,勝利次數保持不變。
- SimCat 還處理了多餘塊的情境,將兩張牌綁在一起並在進行額外深度為 𝑚 + 1 的模擬之前將其丟棄。
# FatesGate
介紹
由國立台北大學開發的臺灣麻將程式。
與 VeryLongCat 和 SimCat 相比,FatesGate 是一個相對較新的臺灣麻將項目,近兩年才參加比賽。
不過也在 2022 年 TAAI 獲得亞軍、2022 年 ICGA 獲得季軍,表現也相當不錯。
技術
與 SimCat 相似,他主要利用蒙地卡羅模擬(MCS),並採用基於規則的方法來減少棄牌候選者,並盡量減少無效模擬。
FatesGate 引入了計算獲勝條件進度的優化方法。
在棄牌階段,他採用深度優先搜索方法(DFS)來搜索所有可能的分牌組合,考慮了對子、不完整的對子、眼和單張牌的狀態,以確定最合適的拆分方法,從而選擇有效的棄牌候選者。
- 如果遇到牌塊過多的情況,他還會應用額外的分配規則。
此外,FatesGate 還採用了一種防禦策略,在牌池剩餘 R 張牌時,抵禦對手的贏牌。
# Seofon_v2
介紹
由國立臺灣師範大學開發的臺灣麻將程式。
其前身 Zei 在 2020 年 TCGA、2020 年 ICGA、2020 年 TAAI 比賽獲得亞軍。
另一位前身 Seofon 則是在 2021 年 ICGA 比賽獲得冠軍,2021 年 TCGA 和 2022 TAAI 分別獲的亞軍和季軍。
而 Seofon_v2 在 2022 TAAI 比賽中獲得亞軍,進一步鞏固了他在臺灣麻將中的地位。
技術
他繼承了 Zei 和 Seofon 的方法,即利用數據庫查詢來快速確定獲勝條件的進展情況,並評估不同選擇對獲勝可能性的影響,從而找出有希望的棄牌候選者。
Seofon_v2 利用評估功能為每個棄牌候選者分配分數,並根據這些分數做出判斷。
他還加入臺灣麻將特有的策略,例如:提高獲得高分牌的概率和處理槓的概念。
設計策略是通過利用防禦招式和根據棄牌信息尋找安全牌,避免成為對手的致勝目標。
潛在的問題
Seofon_v2 主要是依靠數據庫查詢來快速確定獲勝條件的進度,並將這種方法與人類專業知識開發的規則方法相結合。
雖然這種方法能使人工智能擁有接近人類麻將玩家的技能,但他在為人工智能程式提供超越人類遊戲能力的機會相對有限。
# 日本麻將的深度強化學習
目前大多數臺灣麻將人工智慧程式依賴啟發式方法、樹搜索方法和模擬方法為主,尚未使用深度強化學習的相關方法。不過新興的深度強化學習算法已成功應用於許多其他遊戲,並取得了優於人類頂尖選手的顯著性能,如:日本麻將。
# 深度學習和強化學習
深度學習(DL)是機器學習中一個相對較新的分支,他利用深度神經網路(DNN)來解決的各種問題。
- 神經網路由多層組成,包括接收輸入信息的輸入層、產生輸出訊息的輸出層以及輸入輸出層之前的若干的隱藏層。
- 每一層都由多個神經元組成,這些神經元從上一層接收信息,經過加權求和後,每個神經元產生一個輸出。
- 神經網路的構造允許使用反向傳播,根據預測輸出與實驗結果之間的差異自動調整神經網路的權重。
- DNN 通常是指具有更多隱藏層的神經網路,這樣可以更有效地學習輸入數據中包含的基本信息,從而提高性能。
與需要專家知識進行特徵提取的傳統機器學習方法相比,DL 通過反向傳播算法實現了自動特徵學習。
- 雖然 DL 通常需要更多計算,但隨著近年來 GPU 技術的成熟,這些重大挑戰已得到解決。
- 因此,人們提出了各種 DNN 模型來解決不同應用領域的機器學習問題。
- 例如:卷積神經網路 (CNN) 通過卷積運算用於圖像分析中的特徵提取、遞歸神經網路 (RNN) 能夠處理序列信息並捕捉序列中元素之間的關係。
除了 DL 外,之前一些關於遊戲人工智慧的研究還將 DL 與強化學習 (RL) 結合起來,這一領域現在被稱為深度強化學習 (Deep Reinforement Learning,DRL),以進一步提高遊戲性能。
監督式學習、非監督式學習和強化學習是機器學習的三大分支。
- 強化式學習不同於監督式學習無需對資料進行標記。
- 非監督式學習主要專注於解決聚類分析、關聯規則和維度縮減的問題。
- 強化學習則主要關注決策問題,研究智能代理如何在環進中採取最優的行動,以最大限度的提高積累獎金的概念。
強化式學習的基本框架,由五個部分組成:代理、環境、狀態、行動和獎勵。
- 在強化學習中,代理通過與環境的交互作用進行迭代學習。
- 在環境的每個狀態下,代理都會根據狀態信息和決策決定下一步行動。
- 然後,環境根據所採取的行動更新狀態,並向代理提供獎勵。
強化學習以模型學習的目標能夠被劃分成兩大類: Model-based 和 Model-free。
Model-based
- Agent 依靠學習 state 在 action 下的轉換
- 透過了解 environment 的運行,並透過演算法對策略進行規劃
- 較適用於簡單的 environment,在一些複雜的 environment 中準確性可能會較差,且 model-based 在模型的建立需要較大量的數據和計算成本
Model-Free
- 又能分為: Value-based 與 Policy-based。
- Value-based
- Value-based 透過學習價值函數去估計累計獎勵,並透過此價值函數去找出最有價值的行動
- 常見的 Value-based 比如 Q-learning 與 Deep Q-Network
- 由於 Value-based 是透過價值函數去找出策略,容易在策略中忽略細節
- Policy-based
- Policy-based 是直接讓 Agent 學習行動的策略,通常會將 action 的選擇以條件蓋率分佈呈現,並透過疊帶更新參數來更新策略
- 常見策略優化方法有 policy gradient 與 Proximal Policy Optimization
- Policy-based 直接學習策略模型更能夠去學習細節以及發現隱含的規則
深度強化學習已被廣泛應用於各個領域,特別是在遊戲方面,它往往能取得最先進的性能,這方面的例子包括 AlphaGo,以及後來的 AlphaGo Zero、AlphaZero 和 MuZero 等模型,他們都是深度強化學習的著名應用。
- MuZero 的特點是能夠自動學習環境模型,這種能力對於具有複雜事件和交互的畫面遊戲來說非常有利,因為再此類遊戲中,環境模型很難建立,或者模擬環境需要大量計算,不過傳統的策略遊戲來說,這種能力並不是必需的。
- 傳統遊戲,如:國際象棋,可以輕鬆建構和模擬環境模型遊戲規則,對於這些策略遊戲,AlphaZero 可能是一個更適合的框架。
# AlphaZero 作為遊戲的通用學習算法
AlphaZero 是 DeepMind 於 2018 年提出的一種深度強化學習方法 (Deep Reinforcement learning Method),AlphaZero 延續並優化了 AlphaGo Zero 的作法並且增加其通用性使其能應用於更多的領域比如說象棋或將棋。。
AlphaZero 使用的主要技術包括 DCNN (Deep Convolutional Neural Network,深度卷積神經網路)、MCTS (Monte Carlo Tree Search,蒙地卡羅樹搜尋) 和 RL (Reinforcement Learning,強化學習)。
採用 DCNN 對策略函數(Policy Function)和價值函數(Value Function)進行建模
- 策略函數定義了在給定狀態下選擇每個可能動作的概率分佈
- 價值函數衡量了在某個狀態下執行動作的長期回報期望值。
DCNN 模型用於輔助 MCTS 的應用。
MCTS 是 MCS 的延伸,MCTS 是一個迭代的過程,包括四個階段: selection (選擇)、expansion (擴展)、simulation (模擬) 和 backpropagation (反向傳播)。
- 在選擇階段,DCNN 模型提供的策略函數和價值函數被用來輔助節點選擇。
- 在模擬階段,價值函數用於評估節點價值,即遊戲狀態。
學習參考文件
AlphaZero 利用 RL,不需要專家資料集進行監督式訓練,從零開始進行訓練,在整個訓練過程中,策略函數和價值函數會逐步改善,最終超越人類水平。
# 日本麻將 AI Suphx
以往許多關於博弈人工智能的研究都在 DL 模型中使用了 CNN。
CNN 在各種棋類遊戲 (如:國際象棋和圍棋) 中分析博弈狀態並做出有效決策方面表現出卓越的能力,這是因為棋類遊戲的結構狀態與二維圖像相對應,而二維圖像正是 CNN 所擅長的。因此,在之前關於日本麻將人工智慧的研究中心,提出了一種平面結構,將麻將遊戲狀態轉換為適合 CNN 得形式。
建議平面結構安排麻將遊戲狀態,例如:主要方法是將麻將場面資訊展開成 4 × 34 的形式,其中 34 表示所有的牌型種類,4 代表每種牌各有 4 張,這個矩陣僅會有 0 跟 1 組成,當這個種類的牌存在則會在 plane 中多填一個 1,要被填入的 1 會從上而下填入。
這個版面會用於表現單一資訊,比如手牌或某位玩家的棄牌。
而將多數的場面資訊收集下來轉換成許多 Planes 之後,便能將這些 Planes 作為 CNN 的輸入,用於深度神經網路的訓練。
Suphx 是微軟亞洲研究院開發的日本麻將人工智能。它主要架構採用了 CNN,並結合了監督式學習和強化學習技術,目前,Suphx 代表了日本麻將人工智能的最先進水平。
在監督式學習的部分,Suphx 收集了所需的資料集訓練,來源於日本麻計平台「天鳳」。
它還採用了上述平面結構作為輸入數據格式,具體來說,Suphx 將三維 N × 4 × 34 數據中的平面串聯成二維 4N × 34 格式。
它針對麻將中的五種不同動作分別訓練模型:棄牌、叫牌、碰牌、槓牌以及日本麻將規則特有的立直這五個行動都各自訓練一個模型。
在監督式學習階段之後,以強化式學習進行訓練,Suphx 在訓練中使用了擁有完整的全局資訊的 Oracle agent 來幫助日本麻將環境不易收斂的問題,完整的全局資訊包含原本無法被 Normal agent 能夠得到的資訊,並且在訓練的過程中 Oracle agent 會逐漸失去完整的全局資訊並逐漸成為 Normal agent。
此外,Suphx 提出 parametric Monte-Carlo policy adaption (pMCPA) 來解決 Monte Carlo Tree Search 無法直接適用於日本麻將的問題,pMCPA 會在開局時對於初始手牌進行模擬,並根據模擬出來的結果去調整 offline policy,讓 policy 能夠更適用於每一局的真實情況。
儘管 Suphx 取得了巨大的成功,但其所使用的資源也是非常龐大的,比如在 RL 階段中每個 agent 都訓練了 1.5 million games,並個別使用了 44 GPUs 以及兩天的時間,這導致要重現她的成功是相對困難的。
# An Integrated Approach to Taiwanese Mahjong
接下來介紹我們開發的臺灣麻將人工智能程式 Rowlet 的研究工作,該程序在 TCGA 2023 臺灣麻將比賽中獲得了冠軍。
在麻將中,主要有五個動作:棄牌、叫牌、碰牌、槓牌和胡牌。
- 儘管所有的動作都對最終的遊戲結果產生影響,但棄牌是最為關鍵的一個,並成為許多先前研究工作的焦點。
- 本論文中,也將把重點放在如何做出最佳棄牌決策上。
Rowlet 採用了一種混合方法來建構其臺灣麻將人工智能能力,它將監督式學習和強化學習與現有的常用方法 (如: flatMC) 相結合。
# 神經網路架構和輸入資料結構
在輸入表示方面,採用基於平面的方法,類似於 Suphx,利用二維資料格式。
然而,由於臺灣麻將與日本麻將在一些遊戲規則上有所不同,相應的人工智慧程式通常也會採用不同的策略。
- 在日本麻將中,策略通常圍繞防守戰術展開,需要解決各種問題
- 而臺灣麻將程式通常採用更快速的決策原則
因此,與針對日本麻將開發的 Suphx 相比,我們輸入信息相對簡單。
我們模型的輸入包括九種信息:玩家的手牌、四位玩家的棄牌和四位玩家的叫牌。
- 這些輸入訊息結構為 [36 × 34] 平面結構。
在我們的研究工作中,還測試了另一種更簡潔的表示方式,僅包括玩家的手牌和玩家視野之外的牌 - 因此具有 [8 × 34] 的結構。
我們研究中使用的神經網絡架構受到 Suphx 的啟發,採用 CNN 作為核心模型。
典型的 CNN (卷積神經網絡) 由四個部分組成: convolutional layer (卷積)、pooling layer (池化)、activation function (激活函數,線性整流單元 Rectified Linear Unit,ReLU) 和 fully connected layer (全連接層)。
- Convolutional layer 是 CNN 的主要核心,通過卷積操作從輸入數據中提取特徵,它減少了參數的數量並提高了模型的性能。
- Pooling layer 通過提取重要信息來減小特徵圖的大小,有效地減少計算的複雜性而不損失重要信息。
- Activation function 引入非線性到模型中,通過捕捉複雜的關係,發揮了提高模型容量的關鍵作用。
- Fully connected layer 通常用於 CNN 的最後幾層,它將前幾層的數據扁平化並執行最終的分類。
學習參考文件
Rowlet 中使用的神經網絡架構,該架構使用了兩種類型的核心:長度為 3 的一維核心和大小為 256 × 1 的二維核心。
- 輸入數據首先在卷積層中與一維核心進行卷積。
- 從這個操作中計算得到的狀態被記錄下來,然後後續的操作重複 50 次。
- 這個操作包括兩次使用一維核心的卷積,並且專注於單一維度。
- 在每個卷積層之後,輸出與先前記錄的狀態連接在一起。
- 在這個重複的操作之後,使用二維核心進行降維。
- 降維後的數據然後通過兩個全連接層,分別具有 1232 和 300 個節點。
- 最後,輸出層生成 34 個值,每個值代表播放特定牌的優先級。
- 較高的值表示播放相應牌的優先級較高。
# 監督式學習
與日本麻將不同,目前沒有公開可用的臺灣麻將監督式學習的數據集。
因此,我們通過以下方式自行生成數據集。
- 首先,我們開發了一個臺灣麻將程序,該程序使用了期望最大搜索算法來進行牌的棄牌,就像 VeryLongCat 中一樣。
- 然後,四個代理運行相同基於期望最大搜索的程序進行一系列遊戲,以記錄遊戲狀態和對它們所做決策的數據,作為監督式學習的數據集。
- 表 3.1 中顯示的手牌總數為 1,245,615。
雖然如表 3.1 所示,分佈不均勻,但它忠實地反映了在實際遊戲中更有可能棄牌榮譽牌和靠近一和九的牌。
因此,在進行監督式學習時,我們從數據集中隨機選擇了 40,000 個實例。
# 強化式學習
從前一節描述的監督式學習中訓練的神經網絡模型開始,進行了強化學習以進一步提升模型的能力。
對於第 3.1 節描述的兩種輸入數據結構,即 [36×34] 和 [8×34]。
- 我們在執行強化學習時選擇了 [36×34],因為我們認為它可以提供更多的遊戲狀態信息,因此可能有助於學習複雜的策略,相較於 [8×34] 的結構。
- 我們選擇了 policy gradient method (策略梯度方法) 來進行強化學習。
- 為了解決潛在的收斂速度慢的問題,我們使用了並行處理來在每次參數更新期間盡可能增加遊戲記錄的數量。
- 為了在策略梯度方法中引入探索,我們使用了 softmax 函數將模型的輸出轉換為選擇動作的概率分佈。
- 為了防止神經網絡模型輸出玩家手中不存在的選擇,我們應用了遮罩技術來過濾掉手中不存在的牌。
在強化學習中,關於獎勵的設計,我們旨在基於快速棄牌和防守對手贏牌的原則來訓練模型。
快速棄牌原則進一步分為三個部分:
- 第一部分涉及在玩家獲勝時分配更大的正獎勵,因為通過贏牌來追求勝利是這個遊戲中最關鍵的規則。
- 第二部分考慮到探索過程中固有的隨機性,這可能使獲得贏牌手牌變得困難。為了應對這一問題,我們設計了一個基於牌組合的獎勵機制。
- 當玩家的牌組合增加時,給予小的正獎勵。
- 相反,如果牌組合減少,給予小的負獎勵。
- 使用較小幅度的獎勵旨在防止模型過於關注牌組合獎勵,而忽略了贏牌的最重要獎勵。
- 另外當玩家叫牌成功增加搭數依然會給予這個 reward
- 原因是雖然這個決定並不是由棄牌 model 去完成,但一個優秀的棄牌決策仍然能夠增加發生能增加搭數叫牌的可能性
- 此外,當由於牌組合減少而給出負獎勵時,這個負獎勵不會向後傳播到先前的動作。
- 我們認為牌組合的減少是此動作中的明顯錯誤,並且極有可能與先前的動作無關。
- 第三部分是針對延遲的贏牌手牌的負獎勵,以防止模型僅追求贏牌手牌而忽略速度,即快速贏牌原則。
- 具體來說,當玩家手中的一些牌與被棄的牌組成胡牌條件時,會給予小的負獎勵。
- 然而,這個負獎勵只在第一次檢測到時給予,同樣的我們不希望模型因為迴避這個負向 reward 而違背我們原本希望其學習的策略。
防放槍相對簡單:
- 當對手基於玩家的棄牌動作宣告贏牌手牌時,會給予玩家較大的負獎勵。
- 然而,這個負獎勵不會向後傳播到先前的動作,因為這些動作並不直接導致失敗,前面動作被假設為正確的。
# Taiwan Mahjong AI Rowlet
受到 AlphaZero 的啟發,我們的臺灣麻將 AI 程序 Rowlet 使用神經網絡模型來協助在 MCS 過程中進行選擇,其中 Simcat 的 flatMC 被採用作模擬技術,並且使用並行處理以減少計算時間。
圖 3.2 描述了 Rowlet 確定其下一步動作的過程。
Figure 3.2 Flowchart of Rowlet’s decision process after drawing
- 該過程始於抽牌。
- 然後,它檢查是否滿足贏牌條件。
- 在 Rowlet 的設計中,如果滿足贏牌條件,它直接選擇宣告贏牌手牌。
- 如果不滿足,則繼續進入下一階段,檢查手牌是否符合加槓或暗槓的條件。
- 當滿足加槓或暗槓的條件時,Rowlet 評估是否執行相應的操作。
- 在評估過程中,它分別識別執行和不執行槓操作的手牌配置,並計算每種情況下的最高贏牌機率。
- 最高贏牌機率的計算包括兩個步驟。
- 首先,諮詢神經網絡模型以選擇 K 個候選牌進行棄牌。
- 其次,應用修改後的 flatMC 算法來模擬這 K 個候選牌的遊戲,並確定具有最高贏牌機率的操作。
- 隨後,Rowlet 比較執行和不執行槓操作的最高贏牌機率,並根據比較結果決定是否繼續執行該操作。
- 如果執行槓操作,玩家將重新抽一張牌並回到圖 3.2 中的第一個狀態。
- 如果不執行,則繼續到棄牌決策階段。
圖 3.3 描述了 Rowlet 在其他玩家棄牌後如何確定其下一步動作。
Figure 3.3 Flowchart of Rowlet’s call tile decision
它涉及檢查三個條件:滿足贏牌條件,滿足碰牌條件和滿足吃牌條件。
- 如果滿足贏牌條件,Rowlet 直接宣告贏牌手牌。
- 如果滿足碰牌或吃牌的條件,過程進入決策階段,以確定是否執行相應的操作。
- 用於碰牌和吃牌的決策方法與用於槓牌的方法相似。
- 它計算最高贏牌機率,並相應地採取行動。
# Discard Decision
在棄牌決策過程中,Rowlet 採用 SimCat 的 flatMC 的改進版本,對以下兩個方面進行了修改:
- 檢查是否可以使用其他玩家的棄牌贏牌
- 對於使用其他玩家的棄牌贏牌的檢查發生在已棄牌的牌 𝑡𝐿,𝑡𝑂 和 𝑡𝑈 的模擬過程中。
- Rowlet 檢查其他玩家棄牌的這些牌是否能夠有助於滿足其贏牌條件,如果條件滿足,則立即返回勝利。
- 檢查抽到的牌是否可用於暗槓
- 對於抽到的牌是否可用於暗槓的檢查處理的是當手牌 𝑆𝑖 中的一張牌 𝑠 滿足與抽到的牌 𝑡𝐶 形成暗槓的條件時的情況。
- 在實際遊戲中,選擇暗槓允許玩家直接抽一張額外的牌,然而,在原始的 flatMC 中,對這部分沒有給予特殊注意。
- 不處理暗槓可能會低估牌 𝑠 的潛在贏牌數。
- 為了解決這個問題,Rowlet 使用循環來重複檢查,將牌 𝑠 添加到抽到的牌 𝑡𝐶 是否滿足暗槓的條件。
- 每次條件滿足時,Rowlet 將 𝑠 存儲到一個新的狀態,表示下一次迭代不選擇暗槓,並將參數更新到 𝑆𝑖+1。
- 然後,Rowlet 從 𝑆𝑖 中移除參與暗槓的四張牌,更新 𝑡𝐶,並返回檢查階段。
OneSim 是 SimCat 的 flatMC 中單次模擬的功能,以下是 Rowlet 中使用的改進版本。
改進的贏牌條件檢查在 8~10 行,改進的暗槓檢查在 21~26 行。
通過使用 [8 x 34] 輸入結構,進行監督式學習的神經網絡來過濾棄牌的候選牌。
在模擬中,僅考慮具有更高值的前 k 個輸出。
與原始的 flatMC 相比,我們改進的 flatMC 中 𝑚 的值設置為 MTW 加一。
因為我們當直接把 𝑚 設定為 MTW 時,模型不會選擇轉牌 (放棄最快胡牌機會,但是能增加比較多進張數後的胡牌機會)。
通過將 𝑚 設置為 MTW 的總數加一,我們觀察到 flatMC 的輸出與神經網絡輸出之間的相關性,如圖 3.4 所示。
我們注意到 flatMC 所做的選擇中,絕大多數可以在神經網絡的前 5 個輸出中找到。
此外,我們觀察到,當手牌中有多個孤立的牌時,flatMC 傾向於對這些孤立的牌收斂到相似的結果。
然而,根據頂尖玩家的經驗,這些孤立的牌可能仍然存在差異,這可能在 MTW 加二次迭代後顯現。
圖 3.4 比較了神經網絡輸出的記錄序列和 flatMC 在 1,000 場比賽中的選擇,其中在 flatMC 中將 𝑚 設置為 MTW 加一,𝑛 設置為 10,000。
Figure 3.4 Comparison of flatMC and neural network outputs
在這 1,000 場比賽中,共有 10,771 手帶有孤立牌,而有 26,127 手沒有孤立牌。
在沒有孤立牌的手中,約有 92% 由 flatMC 做出的選擇可以在神經網絡的前三個輸出中找到,而神經網絡的前五個輸出涵蓋了約 98% flatMC 的選擇。
然而,在存在孤立牌的情況下,神經網絡的前三個輸出對 flatMC 選擇的覆蓋率下降到 81%,而神經網絡的前五個輸出涵蓋了 93% flatMC 的選擇。
根據上述觀察,當存在孤立牌時,Rowlet 使用基於規則的方法來篩選棄牌的候選牌。
具體而言,Rowlet 使用與 VeryLongCat 相同的方法來識別所有孤立的牌,並根據它們的等級進行優先排序,對榮譽牌和靠近一和九的牌給予更大的重視。
此外,在我們的觀察中,即使 flatMC 的選擇超出了神經網絡的前七個輸出,僅探索前五個輸出可能已足夠達到同樣好的結果。
例如,在我們的實驗中,考慮一手牌,其中的牌是 𝐶3𝐶4𝐶5𝐷4𝐷5𝐷7𝐷7𝐵2𝐵3𝐵4𝐵5𝐵6𝐵7𝐵8 ,flatMC 的選擇是 𝐵5,在神經網絡中是第六個輸出,其中所有牌的排名順序是 𝐵2, 𝐵8, 𝐷7, 𝐵3, 𝐷4, 𝐵5, 𝐵6, 𝐷5, 𝐶3, 𝐵7, 𝐵4, 𝐶5, 𝐶4。我們選擇了前十個選擇,對每個進行了模擬,使用 flatMC 進行了 𝑛 = 10,000 次模擬。
每個棄牌候選在 10,000 次模擬中實現獲勝手的次數顯示在圖 3.5 中。
可以觀察到,具有最高勝率的棄牌候選是 𝐵2, 𝐵8 和 𝐵5,其中 𝐵5 也是 flatMC 的選擇,其他兩個是神經網絡的前兩個輸出。
這三個選擇的勝率非常接近,表明僅探索神經網絡的前五個輸出可能足以實現與 flatMC 選擇相當甚至更好的性能。
實際上,根據人類玩家的經驗,𝐵2 和 𝐵8 甚至被認為比 𝐵5 更好。
雖然 𝐵5 可以通過三種可能的順序(𝐵3𝐵4,𝐵4𝐵6,𝐵6𝐵7)由下一位玩家合併,但 𝐵2 只能通過兩種可能的順序(𝐵1𝐵3,𝐵3𝐵4)由下一位玩家合併,而 𝐵8 也只能通過兩種可能的順序(𝐵6𝐵7,𝐵7𝐵9)由下一位玩家合併。
這意味著,即使是由 flatMC 生成的遊戲記錄訓練的,神經網絡的前幾個選擇有可能實現比 flatMC 更好的性能。
Figure 3.5 Comparison of top ten choices’ winning counts
基於以上實驗結果,我們最終選擇在 Rowlet 中設置 𝑘 = 5,以快速選擇前五個棄牌候選,以供 flatMC 進一步探索。
這種過濾方法顯著加快了 flatMC 的過程並節省了計算資源,因為不需要對所有的棄牌候選進行模擬。
在像 TCGA 這樣的麻將比賽中,玩家在確定每個動作時被限制為三秒。
為了獲得準確的模擬結果,增加模擬次數是必要的,但由於時間限制而具有挑戰性。
通過我們的觀察,我們發現模擬階段所需的平均時間主要受到四個因素的影響。
- 前兩個因素是模擬設置中的參數 n 和 m。
- 在這裡,n 代表對每個棄牌候選進行的總模擬次數,而 m 則代表在模擬被視為失敗之前不滿足贏牌條件的最大抽牌數。
- 除了這兩個參數之外,棄牌候選數量和贏牌的可能性也影響著模擬時間。
在 Rowlet 中,我們使用參數 k 從神經網絡的輸出中選擇最多前 k 個有前途的候選者進行進一步的模擬,實現有效的時間縮短。
- 宣布贏牌的可能性受到在模擬中滿足合牌條件(吃、碰、明槓)的所有手牌所需的額外擴展和處理的影響。
- 然而,這種額外的處理也會增加單次模擬的時間。
- 此外,模擬設置中的參數 m 確定了最大抽牌數,這影響了額外擴展的數量,從而影響了模擬時間。
- 在 Rowlet 中,我們將 m 設置為 MTW + 1 的數量,並將 k 固定為 5,表示棄牌候選的數量。
- 呼叫一張牌的可能性基於當前手牌直接確定,無法調整。
- 因此,為了充分利用有限的時間,我們根據 MTW 和呼叫牌的可能性調整參數 n。
# Calling Tile Decision
對於呼叫牌,我們還採用了前一節描述的方法,即由神經網絡輸出修剪的 flatMC。
我們認為這種修剪技術在呼叫牌階段也能取得更好的效果。
以最複雜的呼叫牌選項之一,即吃,為例,最多有四種可能的選擇: 不呼叫牌和三種不同的順子。
每種選擇都需要在棄牌後進行後續的 flatMC 模擬。
選擇不呼叫牌提供了額外的抽牌機會,之後仍需要進行 flatMC 模擬。
因此,最大的 flatMC 模擬次數為 59,包括在不呼叫牌的選擇後的原始 17 個棄牌候選者和每個三種順子選擇的 14 個棄牌候選者。
這遠高於在不呼叫牌的情況下原始 17 個棄牌候選者所需的 flatMC 模擬次數。
通過應用提出的修剪方法,棄牌候選者的最大數量被減少到 4 × n。
在 Rowlet 中,我們將 n 設置為 4,因此有 16 個棄牌候選者。
這意味著我們的神經網絡引導的修剪方法可以將計算工作量有效地減少到原始水平的三分之一以下。
在我們的呼叫牌策略中,我們不考慮明槓。
上述方法也適用於碰牌、加槓和暗槓的情況。
對於這些情況中的每一種,神經網絡都用於識別 𝑛 個呼叫牌和不呼叫牌的棄牌候選者。
在 𝑛 為 4 的情況下,總共需要模擬 8 種情境。
# 性能評估
這一章介紹我們進行的遊戲實驗,以評估 Rowlet 的性能,並討論實驗結果。
# 實驗設計和評估方法
由於臺灣麻將具有固有的隨機性,客觀評估人工智慧代理的性能相對較為困難。
為了客觀評估 Rowlet 和所提出的方法的性能,我們使用了獲勝次數,而不是比賽中使用的得分,作為性能指標,因為在自摸的情況下,得分更容易受到運氣的影響。
具體而言,在比較兩種不同的方法或人工智慧代理時,每個代理將有兩個實例構成遊戲的四名玩家。
例如,在比較方法 A 和方法 B 時,將有兩個代理,𝐴1 和 𝐴2,都實現方法 A,還有另外兩個代理,𝐵1 和 𝐵2,都實現方法 B。
它們將按照 𝐴1 - 𝐵1 - 𝐴2 - 𝐵2 的順序坐下,其中一個代理將有一個實施相同方法的對手,而兩個相鄰的對手則實施另一種方法。
在每個實驗中,我們進行了 1000 輪遊戲,並仔細記錄了各自的勝場和放槓次數。
為了減少隨機性的影響,我們在位置旋轉期間保持了相同的起始狀態。
因此,在實驗期間,方法 A 和方法 B 都經歷了相同的牌局分佈和初始手牌。
每次實驗結束後,收集的勝場和放槍次數被用來計算代表兩種方法相對實力的指標,通過計算不同方法之間勝場和放槍次數之間的比率。
例如,要根據獲勝次數來評估方法 A 與方法 B,獲勝比率的計算方式為 (𝐴1 獲勝次數 + 𝐴2 獲勝次數)/(𝐵1 獲勝次數 + 𝐵2 獲勝次數)。
- 值超過 1 表示方法 A 的實力優於方法 B。
- 值小於 1 表示方法 B 比方法 A 更強。
值與 1 的偏離程度越大,兩種方法之間的實力差異就越大。
另一個相似的指標是放槍的比率,可以根據實驗中收集的放槍次數計算得出,公式為 (𝐴1 放槍次數 + 𝐴2 放槍次數)/(𝐵1 放槍次數 + 𝐵2 放槍次數)。
然而,與前述的獲勝比率相反,較低的放槍比率值較為理想。
- 當值超過 1 時,認為方法 A 在遊戲中犯錯較多,因此方法 B 可能比方法 A 更強。
- 當值小於 1 時,通常可用來表明方法 A 比方法 B 更強。
同樣,值與 1 的偏離程度越大,兩種方法之間的實力差距就越大。
# Experimental Results for Supervised Learning (監督式學習的實驗結果)
進行神經網絡模型訓練的電腦使用了一顆單獨的 GeForce RTX 3070。
兩個具有不同輸入格式的模型,即(8x34)和(36x34),被分別訓練。
每個模型進行了 25 個 epochs,每個 epoch 在大約 118,100 個數據樣本上進行訓練。
驗證使用約 11,810 個數據樣本進行,以計算準確性和損失。
如圖 4.1 和 4.2 所示,兩個模型在準確性方面達到了約 0.74 的收斂,損失也收斂到約 0.7。
結果與我們的期望一致,因為更複雜的模型往往收斂速度較慢。
因此,(8x34)模型比(36x34)模型更早達到了收斂。
然而,兩個模型的最終準確性值僅達到約 0.74,表明該方法存在性能瓶頸。
Figure 4.1 Accuracy evaluation of supervised learning
Figure 4.2 Loss evaluation of supervised learning
除了基於準確性和損失進行模型評估之外,我們還將它們與 VeryLongCat 中使用的 Expectimax 搜索算法進行比較。
需要注意的一點是,Expectimax 搜索算法需要完全擴展才能獲得完整的輸出,因此在比賽中可能超出時間限制,這可能是一個潛在的缺點。
在以下的比較中,為了專注於輸出的質量,我們允許 Expectimax 搜索算法進行完整的擴展,而不施加任何時間限制。
表 4.1 和 4.2 顯示了 Expectimax 搜索算法和我們的兩個神經網絡模型(分別使用(8 × 34),即 N=8,和(36 × 34),即 N=36,的輸入格式)在前面描述的勝指數和放槍指數方面的比較。
這兩個指數將列中的方法與行中的方法進行比較。
因此,顯然 Expectimax 方法優於神經網絡模型。
此外,在兩個神經網絡模型之間,使用(8 × 34)輸入格式的模型表現優於使用(36 × 34)輸入格式的模型。
除了勝指數和放槍指數之外,我們還比較了這些方法所需的平均和最大計算時間,如表 4.3 所示。
對於 Expectimax 方法,我們實現了 VeryLongCat 對孤立牌的預處理,將計算時間大大減少到平均不到 0.5 秒。
然而,仍然可以觀察到在某些情況下,可能需要非常長的計算時間,例如表 4.3 中顯示的超過 228 秒。
另一方面,神經網絡模型的平均和最大計算時間之間僅存在輕微差異,表明更穩定的推理速度是一個重要的優勢。
# Experimental Results for Reinforcement Learning (強化學習的實驗結果)
本節介紹了由強化學習訓練的神經網絡模型的實驗結果。
在訓練過程中,使用了 Intel (R) Xeon (R) Gold 6230 CPU @ 2.10GHz 和 GeForce RTX 2080 Ti 進行訓練。
在每約 50 個 epochs 生成一個新模型,平均每 2 小時生成一個新模型。
圖 4.3 比較了每個生成的模型與原始模型(即使用 (36 × 34) 輸入格式進行監督式學習的模型)的強度,以贏指數為指標。
Figure 4.3 Strength comparison during the reinforcement learning process
在圖 4.3 中,我們可以觀察到深度強化學習(DRL)方法最初經歷了性能的急劇下降,然後持續改善。
在這次實驗中,DRL 方法在訓練的早期階段達到了約 1.18 的最高贏指數。
在中期,贏指數迅速下降,並在 1 和 0.8 之間波動。
接下來,我們選擇了整個強化學習過程中贏指數最高的模型進行進一步的實驗,與其他方法進行比較,包括 Expectimax 以及使用 (8 × 34) 和 (36 × 34) 輸入格式進行監督學習的兩個模型。
以下表格呈現了 1000 回合的實驗結果。
表格 4.4 和 4.5 分別比較了 DRL 模型與其他方法在贏指數和放槍指數方面的表現。
儘管神經網絡模型未能達到非常優越的性能,但它仍然通過 DRL 方法進行學習,並在某種程度上優於這兩個監督學習模型。
然而,DRL 模型與 Expectimax 方法之間仍存在顯著的性能差距。
根據以上實驗結果,深度強化學習被證明是一種有效的方法,相對於監督學習訓練的模型,它可以進一步提升神經網絡模型的性能。
然而,在臺灣麻將方面,DRL 模型仍然無法擊敗傳統方法,即 Expectimax,這是大多數當前競技程序中常用的方法。
# Experimental Results for Rowlet (Rowlet 的實驗結果)
這一節介紹了我們臺灣麻將 AI 代理 Rowlet 與近期參加競賽的程序中使用的兩種主要方法 FlatMC 和 Expectimax 的實驗比較。
我們的 Rowlet 採用了一種混合方法,進一步增強其實力,該方法利用深度強化學習訓練的神經網絡模型來引導改進的 FlatMC 過程。
FlatMC 是 SimCat 中使用的方法,但在以下的實驗中使用的 FlatMC 程序是我們自己實現的,並且包含了並行化技術。
Rowlet 和 SimCat 之間的主要區別在於第 3 章中描述的 OneSim 功能和基於神經網絡模型的修剪機制。
為了確保 Rowlet 和原始 FlatMC 之間的公平比較,我們將 FlatMC 中的參數 m 設置為相同的 MTW + 1 並以相同的方式調整 n。
表 4.6 顯示了根據獲勝指數的性能比較。
Rowlet 優於 FlatMC 和 Expectimax,這表明我們在這篇論文中提出的優化技術,即改進的 OneSim 過程和基於神經網絡模型的 FlatMC 修剪機制,是有效的。
表 4.7 比較了這三種方法的放槍指數。
我們的 Rowlet 還導致較低的放槍指數值,這也有助於 Rowlet 的整體優勢。
表 4.8 比較了原始 FlatMC 和 Rowlet 所需的平均和最大計算時間。
在相同的配置下,顯然 Rowlet 的平均和最大計算時間明顯較低,相比於原始 FlatMC。
Rowlet 在速度上的優勢也有助於提高其實力。
Rowlet 首次參加了 2023 年 TCGA 舉辦的臺灣麻將比賽,並幸運地贏得了冠軍,如圖 4.4 所示。
比賽的第二和第三名分別被 SimCat 和 MeomCaTS 獲得。
MeomCaTS 是由 SimCat 的同一作者開發的一個新的臺灣麻將 AI 代理。
比賽結果揭示了兩個重要的發現。
首先,由於 Rowlet 在 SimCat 中使用的方法,尤其是 FlatMC,競賽結果可能顯示 MCS 方法在臺灣麻將 AI 代理中的潛力,相對於其他搜索或啟發式方法,例如 Expectimax。
其次,比賽結果還展示了我們在 Rowlet 中採用的基於 FlatMC 和神經網絡模型的混合方法的有效性,該方法在本論文中有所介紹。
Figure 4.4 TCGA 2023 Final Table Settlement
與原始的 FlatMC 相比,我們的混合方法利用神經網絡模型進行有效的剪枝,可以通過減少無效的模擬和計算,更好地利用有限的計算資源。
然而,SimCat 對於爆炸性的牌組合做了特殊考慮,而 Rowlet 並未處理此問題。
對於處理爆炸性的牌組合方式的不同可能導致在牌的匹配方面取得不同的結果,這是進一步增強 Rowlet 的未來方向之一。
# 結論與未來方向
儘管在日本麻將 AI 領域進行了許多神經網絡的研究,但在臺灣麻將 AI 中利用神經網絡的研究相對有限。
本論文介紹了我們將深度神經網絡模型引入臺灣麻將 AI 代理的工作。
具體而言,基於神經網絡模型,我們探討並評估了三種不同的可能性,包括監督學習、強化學習,以及將神經網絡模型與 FlatMC 方法整合的混合方法。
由於臺灣麻將缺乏公開的遊戲記錄,我們的監督學習神經網絡模型是基於實現 VeryLongCat 中使用的 Expectimax 方法的 AI 代理生成的數據。Expectimax 方法在之前的幾場比賽中取得了冠軍。
強化學習始於由監督學習訓練的神經網絡模型,並生成一個改進的模型,用於混合方法。
我們進行了一系列的實驗來評估這三種方法。
- 對於基於監督學習的方法,神經網絡模型實現了約 74% 的準確度,與 Expectimax 方法選擇的動作相比。
- 然而,在贏指數和放槍指數方面,監督學習方法無法與 Expectimax 方法相比。
- 這是一個合理的結果,因為神經網絡模型無法學習 Expectimax 方法的完整行為,即 100% 的準確性。
- 基於強化學習的代理性能優於監督學習方法,但仍然不及 Expectimax 方法。
- 最後,我們的 AI 代理 Rowlet 實現的混合方法在贏指數和放槍指數方面都優於 Expectimax 和 flatMC。
除了在實驗中取得更好的表現外,Rowlet 還在 TCGA 2023 年臺灣麻將比賽中贏得了冠軍。
我們的研究工作表明,深度強化學習是開發台灣麻將 AI 代理的一個可行且有前途的方向。
然而,直接用深度神經網絡模型取代傳統的樹搜索方法(例如 Expectimax)是不適當的,因為實驗結果顯示,在贏指數和放槍指數方面,這樣的神經網絡模型仍然無法與傳統的樹搜索方法相媲美。
一個有前途的方向是將深度神經網絡模型集成到傳統的樹搜索方法中(例如 FlatMC),用於引導搜索過程,正如我們的實驗結果和 TCGA 2023 年台灣麻將比賽所展示的那樣。
基於我們在這篇論文中提出的研究工作的經驗,我們還確定了一些值得進一步探索的未來研究方向。
- 首先,在監督學習階段,我們使用了一個相對簡單的輸入結構,這對於基於快速贏取原則的簡單策略可能足夠。
- 然而,要有效地學習高級策略,尤其是在強化學習階段,可能需要更廣泛的輸入結構。
其次,基於強化學習的神經網絡模型的實際表現未達預期,這是一個需要解決的挑戰。
考慮採用在訓練日本麻將 AI 代理 Suphx 時使用的神經網絡方法,即使用 oracle 代理方法,這種方法可能也適用於台灣麻將 AI 代理。
此外,Suphx 還建議通過控制商來增加代理的探索。
此外,根據我們的經驗,獎勵設計也是一個關鍵問題,需要進一步改進。
目前,提出的混合方法僅在實際遊戲中使用,而不在強化學習過程中使用。
考慮到 AlphaZero 的經驗,將蒙特卡羅搜索(MCS)方法融入自我遊玩階段可能有望提高強化學習的效果,進而進一步提高 Rowlet 的實力。
最後,在 Rowlet 中,我們改進的 flatMC 方法僅考慮三種類型的呼叫:吃、碰和暗槓。
整合其他類型的呼叫,例如明槓和加槓,並制定一個全面的呼叫策略,可能有助於更好地評估模擬階段的手牌價值。
此外,值得進一步探討 flatMC 中使用的深度參數 𝑚。在我們的實現中,𝑚 被設置為 MTW(贏牌的最小張數)+ 1,但這種設置可能導致過於短視的模擬結果。
然而,將 𝑚 設置得太高可能導致過於長視的結果,並可能在某些情況下損失利益。
需要進一步的調查和研究工作。
# 名詞解釋
傳統策略賽局可以分成兩種:
- 不完美信息:對手會隱藏某些賽局的資訊,如:麻將中自己的手牌其他人不知道,只有一些桌上的訊息是公開的。
- 完美信息:每個玩家清楚的知道之前發生的情況,如:暗棋、五子棋、圍棋。
帶來的不確定性:
- 隱藏信息:有些手牌對方式不知道的。
- 偶然性:隨機的翻牌,如:暗棋也具又偶然性。
- 同時移動:玩家在同一時間做選擇。
# 其他資訊
完美信息的 AI 知名程式:
- 國際象棋: Deep Blue developed by IBM
- 圍棋: AlphaGo developed by DeepMind
不完美信息的 AI 知名程式:
- 德州撲克: Libratus
- 日本麻將: Suphx
完美信息常用的技術:
- 樹剪枝技術 (tree pruning techniques)
MCS (Monte Carlo Simulation):
是一種統計方法,通常用於較為無法輕易解析的問題上,透過隨機抽樣的方式產出大量的隨機樣本,並透過對這些產出來的大量隨機樣本分析後解決問題。MCS 能被運用的領域相當廣,在數學、科學、經濟、工程學領域都非常常見,並且 MCS 也是長期被使用在遊戲對局的一種方法。
在臺灣麻將人工智慧的研究中國立陽明交通大學的 SimCat 與國立台北大學的 FatesGate 也都是使用 MCS 的方法。