當前位置: 華文問答 > 數位

人工智慧在麻將領域能夠戰勝人類嗎?

2016-03-13數位

謝邀。很高興能借著 AlphaGo 的東風,和大家分享一下 麻將 AI 研究的現狀。


一. 麻將和圍棋有什麽不同?

從賽局論的角度來講,圍棋是 完全資訊動態賽局 ,而麻將屬於 非完全資訊動態賽局 。圍棋中對局雙方所掌握的 資訊 對稱 的,而麻將中各對局者間所掌握的 資訊不對稱 。雖然大家都能看到每位牌手打過什麽牌,但 你不知道我的手牌是什麽,我也不知道你的手牌是什麽 。這種資訊不對稱的產生的根本原因是 牌墻的隨機性

圍棋與麻將(或者說 棋與牌 弈與博 )的上述區別,決定了它們 獲勝策略 的根本不同。棋類計畫本質上就是 蒙地卡羅樹 ,獲勝策略就是選擇或迫使對手選擇一個分支,這個分支下面所有的結局都是自己勝。只不過由於棋類變化很多,連 AlphaGo 也遠不可能 遍歷 整個樹,所以 AlphaGo 會透過 價值網路 來估計某一分支下 勝結局的機率 。其實人類的思維也是類似的,在圍棋裏平白被對手屠掉一條大龍,或者在象棋裏平白送給對手一個車總是不好的——在這些分支下,勝結局的機率大大降低了。


而牌類的獲勝策略在於盡可能增大自己的 得分期望(EV) 。我並不知道我接下來要摸什麽牌,或我的對手有什麽牌,但所有可能的情形組成一個 機率空間 ,我只需做出一個選擇,使得自己的 得分函式 的期望最大。牌類策略的難點在於,影響這一機率空間的 因素過多 ,且 具體影響 很難確定,比如對手打牌的 習慣

※下圖選自【科學化麻雀】,閒家愚形聽牌打 10% 危險度的牌對攻,x 軸為自己和牌時得分,y 軸為牌局巡次,z 軸為自己的得分期望。


二. 何謂「獲勝」?

選手的 競技水平 如何 衡量 ?麻將是否是 「運七技三」 的遊戲?其實無論圍棋還是麻將,區分選手的競技水平都 不可能只靠一局 ,就好比 AlphaGo 和李世乭要進行 五番棋 對決,AlphaGo 贏第一盤時大家並不覺得 AlphaGo 一定比李世乭強一樣。圍棋有三番、五番、十番棋,對於 競技麻將 (國標麻將、日本麻將)而言,區分頂尖選手的競技水平至少需要 2000~10000 手牌 (如果采用類似橋牌的 復式賽制 ,這一數位會大幅降低)。

至於衡量 一個競技計畫的競技性 ,單純用 運氣所占比例 是沒有意義的。隨著對局數的增大,運氣所占比例會越來越小, 選手的長期成績必然會向其真實水平收斂 。一個競技計畫的競技性應當用「 區分選手競技水平所需必要對局時間 」來衡量。比如圍棋需要三番棋,麻將需要 2000 手牌,圍棋一盤平均需要 4 小時,三番棋約 12 小時,而麻將一手牌約 3 分鐘(網路對局),2000 手牌約 100 小時。麻將相比圍棋有 運氣 成分,並不意味著麻將選手的競技水平無法衡量,而意味著麻將需要 更多的對局時間 來區分選手的競技水平。

下圖選自日本麻將平台天鳳麻雀鳳凰桌 1000 場以上玩家安定段位排行。這裏的「試合」是指半莊,也就是兩圈牌,考慮到連莊,平均一試合是 10 手牌,1000 試合是 10000 手牌。可以看到牌手的競技水平得到了 很顯著的區分 ,結果也與麻將圈內認知相似。具體講解請參見

打麻將的水平可以高到什麽程度? - Suwako Zhai的回答

所以在這個問題下我們討論麻將 AI 能否戰勝人類,指的是麻將 AI 長期成績 (10000 手牌以上)能否比人類更好,並不是單指一手牌。只打一手牌,誰都有可能和牌,這是牌類遊戲的本質所決定的。

當然,這裏也不考慮牌手或 AI 作弊 的問題。如果透過作弊獲得別人手牌的非法資訊,麻將的 競技平衡 就完全被打破了。再強的麻將 AI 成績也不可能比作弊的人類好,反之亦然。事實上,現在很多單機麻將遊戲的 AI 就是透過作弊來增加「智慧」的。


三. 麻將會成為人類面對人工智慧的「最後壁壘」嗎?

一言以蔽之, 麻將 AI 不是做不了,而是沒人做 。之所以目前還沒有能夠戰勝人類的麻將 AI,主要原因還是人們在麻將 AI 研究方面的 投入不夠 。目前的麻將 AI 基本都是麻將遊戲制作團隊為麻將遊戲設計的,在單機上就可以執行,強度自然有限。如果像 AlphaGo 一樣,世界頂級團隊制作,背後龐大資金支持,使用 1000 個 CPU 執行,想要設計一個輕易戰勝人類頂尖麻將牌手的 AI 沒有任何難度

首先,麻將的 復雜度 要遠遠小於圍棋。單就自己的 14 張手牌來說(總牌數 136 張),組合共有 326520504500 種 (計算方法詳見

麻雀の數學

),遠遠小於圍棋的 2.08×10^170。不足 10^12 的手牌種類意味著麻將 AI 完全可以 提前計算好每手牌的打法估值並儲存在資料庫中 ,打牌時呼叫即可。

※下圖選自日本麻將研究者らすかる的個人區域網絡站

麻雀の數學

當然,打麻將也要考慮 別人打的牌 以及 各家的得分 。各家分差的復雜度是很小的,而別人打的牌雖然復雜度會很高(136 張牌的牌墻組合為 4.3×10^185 種,甚至超越了圍棋的復雜度),但別人打的 10 張牌大多只有 1~2 張是有用的資訊,AI 只需要 辨識這種模式並搜尋對比以往對局的牌譜 即可。

其次,人類 對麻將的研究 遠不及圍棋,頂尖麻將牌手的 訓練水平 很低。相比圍棋研究幾千年的歷史,麻將誕生不過百余年,人們真正開始利用 科學手段 統計學、大數據 )來研究麻將只是 近十年 剛剛起步。例如 「間四間」 是上世紀流行的日本麻將理論,指的是別人打過中間相隔 4 張的 2 張同花色數牌,則這 2 張牌的 內側筋牌 是危險牌。如別人打過三筒、八筒(中間相隔四五六七筒),則四七筒是危險牌,這是因為別人手裏一開始可能是三五六八筒,三八筒效率較低被打掉,留下的五六筒要四七筒。這一理論在近十年的大數據研究中已被證明是 完全錯誤 的——別人要四七筒的機率並沒有顯著性的上升。

可見,目前人們對麻將的研究還處在很 初級 的階段,透過別人打過的牌來分析別人想要的牌的 科學研究 才剛剛開始。麻將界也沒有圍棋那樣 3 歲開始學棋,10 幾歲就和世界頂級高手過招,接受世界頂級指導的 職業選手 。麻將本身復雜度低,人類頂尖牌手水平又不高,被人工智慧擊敗會比圍棋要容易得多,不可能是「最後壁壘」。


四. 現在有哪些比較強的麻將 AI?

競技麻將方面,目前 國標麻將 日本麻將 都有比較強的 AI(高於人類平均水平)。日本麻將的 AI 目前最強的當然是 「爆打」

「爆打」是由東京大學工學系在讀博士生 水上直紀 開發的日本麻將 AI,他所在的課題組就是專門研究麻將 AI 的。爆打和 AlphaGo 一樣,也具有 自我對局 分析並學習人類牌譜 的能力。水上發表過的論文題目為【Realizing a Four-Player Computer Mahjong Program by Supervised Learning with Isolated Multi-Player Aspects】,全文詳見

http://www. logos.ic.i.u-tokyo.ac.jp /~mizukami/paper/jousho_2014.pdf

爆打從 2015 年開始在最大的日本麻將平台—— 天鳳麻雀 上開始執行,至 2016 年 2 月已經打了 1.3 萬多場(約 13 萬手牌)。2015 年 9 月,爆打達到 天鳳麻雀四段 ,2015 年 12 月更是一度沖進 天鳳七段 ,長期成績顯示平均為 六段以上 。這意味著什麽呢?

上圖是天鳳麻雀平台 2016 年 3 月 13 日的段位成績分布圖(來源

オンライン対戦麻雀 天鳳 / ランキング

)。天鳳平台具有非常科學的 段位和 Elo Rating 體系 ,越是和高水平牌手對局,獲勝後 Rate 增加越多,失敗後 Rate 減少越少;越是和低水平牌手對局,獲勝後 Rate 增加越少,失敗後 Rate 減少越多。最終段位和 Rate 值的 穩定值 就代表了牌手的 真實實力

可以看到,天鳳麻雀平台的活躍使用者數約為 17 萬人(不包括新人僵屍號),而六段以上的使用者總數為 5793 人,約占 3.4% 。也就是說,爆打打麻將比 96.6% 的麻將玩家要好,全世界麻將打得比爆打好的人,數量僅有 幾萬人 左右(包含所有麻將規則的估算)。這只是一個課題組,用時一年多研究出的,在一台電腦上執行的麻將 AI,就已經基本趕上 AlphaGo 早期版本所取得的成績了。

國標麻將 方面,目前最強的 AI 大概是我本人目前正在參與設計的國標麻將 AI 了。最初的版本只加入了最常用的十幾個台種的分值判斷,防守端幾乎沒有做,實測對隨機牌手和牌率就已經達到 24% 左右,基本與國標麻將平均和牌率 24.3% 持平(國標麻將數據可見

國標麻將、日本麻將對局時,「點炮、自摸、流局」的比例分別是多少? - 段昊的回答

)。實際水平大概處在所有牌手中 上位 10~20% 左右的水平(低段位牌手多,大部份牌手的水平處在平均以下)。


五. 麻將 AI 的演算法應該是什麽樣子的?

最後,我來淺談一下麻將 AI 的基本演算法。

1. 基礎牌效率

麻將的牌效率指的是 能使手牌更快和牌的打牌方法 ,是麻將的基本功。來簡單舉個例子:

※下圖牌畫取自 聯眾國標麻將 (http:// gbmj.lianzhong.com )。

這是一手 13 張牌的手牌,現階段是 一上聽 (差 1 張牌就可以聽牌),那麽哪些牌是 有用 的牌,或者說我摸到哪些牌會 留下 呢?這些有用的牌稱為「 有效牌 」,最有用的當然是能讓我直接聽牌的牌,這類牌稱為「 第一類有效牌 」。

●第一類有效牌:能使手牌向和牌前進一步(上聽數降低)的牌,包括:

除了第一類有效牌,有用的牌還有以下這些:

●第二類有效牌:不能使上聽數降低,但能使第一類有效牌增多的牌,包括:

比如摸到九索,一般情況下應該選擇留下九索打掉三索,因為第一類有效牌變多了:

※計算采用天鳳牌理

オンライン対戦麻雀 天鳳 / 牌理

●第三類有效牌:不能使上聽數降低,也不能使第一類有效牌增多,但能使第二類有效牌增多的牌,包括:

比如摸到五索,一般情況下應該選擇留下三五索拆掉八九索,雖然第一類有效牌張數沒變,但三五索相比八九索多了 1 種第二類有效牌——六索(原是第三類有效牌)。

(也許看到這裏,你有點算不過來,或者感覺這和你平時打的麻將壓根不是一個遊戲。沒關系,這很正常,你可以找張紙,在紙上仔細算一下每種第二類有效牌都新增了哪些第一類有效牌。)

可見,對於一開始一上聽的 13 張手牌而言,除了七八九筒外的所有數牌都是有用的牌。麻將的牌效率就是這樣—— 不斷透過有效牌增大自己的進張面,最終使得和牌的機率越來越大 。也許你已經發現,麻將牌效率的本質就是一個 搜尋樹 ,最開始的手牌

經過多輪選擇後可能對應多種結局(和牌),例如:

路徑:摸到第一類有效牌八萬或七索聽牌,再自摸另一張和牌(最大機率結局)。

路徑:先摸到第二類有效牌一萬或七萬後打掉三索,然後摸到一萬或七萬的另一張聽七索,或者摸到七索選擇聽一萬和七萬對倒和牌。

路徑:先摸到第三類有效牌三筒後打掉三索,然後摸到四筒後拆掉八九索,之後和牌。

對於一個 兩上聽以內 的手牌來說,這個樹的深度最多也就是 4~5 步 ,每一步的分支平均在 15 種 左右,也就是說復雜度最多在 10^5 數量級 。由於每條路徑都對應著一個確定的 機率 ,一個好的麻將 AI 完全可以做到 遍歷 這個樹,比較兩種或更多種打牌選擇之間所對應結局的 和牌期望之和

對於 三上聽以外 的手牌(由上文圖中可知三上聽以外的手牌約占手牌所有組合的 80%),由於手牌中會存在大量的孤張或簡單搭子,只需單獨比較孤張或簡單搭子的效率即可,計算量更小。

除了上述窮舉手牌搜尋樹的方法,還可以采用 模擬 的方法。比如讓麻將 AI 在短時間內模擬兩種打法各 1000 手牌,哪個和牌率更高就選哪種打法。雖然這樣不太精確但已經足夠保證比人要強了。

2. 和牌限制與台數價值

很多麻將規則 對和牌有限制 ,比如國標麻將必須八番起和,四川麻將必須缺一門,太原麻將和牌必須包含指定牌張等等。我們只需在上述 基礎牌效率演算法搜尋樹 的基礎上,「 砍掉 」那些結局不符合要求的分支即可。

有些時候我們不僅關註和牌的機率,也關註 和牌的大小 ,比如有些牌我們寧可損失一些進張也想去做清一色,追求更高的 和牌得分 。我們只需為樹的所有結果賦值(和牌得分),並用 結局對應的值 路徑對應的機率 求出不同打法的 得分期望 並進行比較。

3. 副露判斷

「這個牌該不該碰」似乎是打麻將時比較令人頭疼的問題。但其實 副露判斷 只是 計算量大 ,並不需要特殊的演算法,依然是 對比 碰與不碰兩種選擇所對應的所有結局的 得分期望 即可。日本麻將中的 立直(報聽)判斷 也是同理。

只不過當我們在考慮「打哪張好」的時候,兩種打牌選擇之間所對應的路徑和結局有 大部份都是重合的 ;而我們在考慮「該不該碰」的時候,兩種選擇所對應的路徑和結局基本是 完全不同 的,這無形中 增大了計算量 。其實人腦在做蒙地卡羅樹搜尋時,比較容易做到 「想得很深」 ,比如職業棋手可以提前算到 20 甚至 30 步棋;但難以做到 「想得很廣」 ,通常情況下大腦只能做到從兩種選擇中找幾個機率較大、有代表性的 結局樣本 做比較。所以副露判斷顯得難,其實只是 計算量 的問題,而對於麻將 AI 來說,這 不是問題

4. 防守端

防守端需要解決的是 攻守判斷 防守打法 兩個問題,即「什麽時候要防守」和「要防守應該打什麽」。解決這些問題最好的方法是讓麻將 AI 自己透過大量的牌譜(千萬場量級)進行 自我學習 。正如前文我所提到的,其實人們對於麻將應該如何 科學防守 的研究也才剛剛開始,想要分析一個打過三筒和八筒的人真正需要的是幾筒,需要 大量 的牌譜作為樣本進行研究。這部份研究現在還要等待電腦去完成,未來的麻將 AI 在這方面要比人類做得更好可以說是必然的。

對大量牌譜所做的 出牌模式研究 還可反過來套用於牌效率演算法的 改進 中。比如早巡打過八萬的人手牌中有九萬的機率較小,那麽牌墻中剩余九萬的機率就有所上升,牌效率中利用九萬的路徑的機率就可以做出相應的 修正

5. 狀況判斷

狀況判斷指的是麻將的 「大局觀」 ,如為了爭取第一名或者為了規避第四名而采取不同的策略。狀況判斷其實就是對 得分期望 做進一步的 修正 。比如某狀況下我必須自摸 13 番牌才能逆轉,那麽最終結果是 13 番以下的牌的得分期望可以進一步降低,而 13 番及以上的牌的得分期望則可以提高。


總之,麻將的復雜度較低,演算法上可以用 搜尋樹窮舉法 以及 大量牌譜的自我學習 來解決,只要有大量牌譜資料,有人肯花時間,有人願意出資,開發一個能勝過人類的麻將 AI, 非常容易

————————準備跑題的分割線————————

最後的最後我想說,同為智力運動,相比棋類,人們對牌類的研究真的是太少了。雖然牌類的競技性(區分選手競技水平的必要對局時間)要普遍弱於棋類,但牌類也有其獨特的策略與魅力。誠然,人們普遍對牌類計畫有著各種各樣的偏見與誤解,比如認為牌類是純運氣計畫,比如說起牌類就聯系到賭博……也正由於此,牌類計畫的規範化、競技化、運動化才顯得尤為迫切與重要。

我希望有朝一日,麻將、鬥地主、德州撲克這些計畫能夠獲得與橋牌同樣的地位與發展空間。我希望未來的孩子們既可以選擇學習圍棋,也可以選擇學習麻將。我正走在追尋理想的道路上,而且我堅信理想並不遙遠:

國際智盟執委會:麻將撲克有望亮相下屆智英賽