諾姆·布朗:撲克中 AI 與人類的對抗及策略性談判博弈
Noam Brown: AI vs Humans in Poker and Games of Strategic Negotiation
OpenAI 研究者諾姆·布朗講撲克 AI 的訓練思路、博弈論基礎與機器在談判類任務中的推理。
2017 年 1 月,匹茲堡。一臺叫 Libratus 的機器,在 20 天裡跟四位世界頂級單挑無限注德州撲克(No Limit Texas Hold'em)選手打了 12 萬手牌,贏走了接近 200 萬美元的籌碼。
同一批人,2015 年也打過一場。那次機器輸得很難看,差距不小。
兩年時間,對手沒換,規則沒換,賭注沒換。變的是演算法裡一個很具體的選擇,而這個選擇後來被證明,比多算幾百萬手牌重要得多。
Libratus 是拉丁語,意思是"平衡"。名字是諾姆·布朗(Noam Brown)起的。他當時在卡內基梅隆讀博,現在是 Meta AI(原 FAIR)的研究科學家。他參與打造的三個系統,構成了這條研究線的三級臺階:Libratus 打贏雙人無限注德州撲克,Pluribus 打贏六人局,Cicero 在《外交》(Diplomacy)這個靠自然語言談判推動的桌遊裡達到人類水平。
表面上這是三個遊戲。往深了看,這是同一個問題的三種難度:資訊不完全、對手會思考、對手還會說話。
無限注的真正區別,藏在人的心理閾值裡
無限注德州撲克是全世界最流行的撲克變體。電影裡那些場景,《007:大戰皇家賭場》《賭王之王》,桌上玩的都是它。
跟限注版本比,規則差異只有一句話:你可以在任何時候把面前所有的籌碼推進底池。限注局裡底池有 2 美元,你最多隻能下 2 美元。無限注局裡,面前擺著 1 萬美元,你就隨時可以推 1 萬美元進去。
開局底池可能只有一兩美元,一手牌打完,桌上可能已經有 1000 美元。籌碼量能以極快的速度放大,這個選項永遠擺在桌上。
布朗提到一個詞,jumpy,大致可以譯成"跳腳"。很多人在無限注裡輸錢,輸在這個地方:坐下的時候想的是玩個一百美元,打了兩圈,底池突然變成一千美元,手就開始抖,判斷就開始變形。
他自己給了一個很生活化的解釋。打撲克你要選的,是期望值最大的那個動作。這跟投資是一個邏輯:如果桌上這筆錢的輸贏會實質影響你的生活,你就會不自覺地轉向風險厭惡。對手推一個大注過來,你腦子裡冒出來的第一句話往往是"這太多了,我承受不起"。這一瞬間,你已經不在算牌了。
反過來,主動推大注的人也吃同一碗飯。撲克的核心策略之一,就是把對手放進一個不舒服的位置。底池裡躺著 50 美元,你甩進去 1000 美元,如果時機選對,對手就被迫在一個他從來沒準備好面對的量級上做決定。
這件事當然雙向。推錯了,你也會輸掉一大筆。布朗說得很直白,不懂行的人在無限注裡虧錢非常容易,但反過來,上升空間也大。
所以"無限注獎勵瘋子"這個說法只對了一半。它獎勵的是那種能精確控制自己瘋狂頻率的人。真正被懲罰的,是承受不了那個數字的人。
納什均衡:石頭剪刀布裡藏著的那個真理
任何有限的、雙人的、零和博弈,都存在一個最優策略。你按它打,不管對手做什麼,期望上你不會輸。
這個結論對很多人來說是反常識的,但它在象棋裡成立,在撲克裡成立,在所有滿足條件的雙人零和博弈裡都成立。
布朗用石頭剪刀布給直覺。你按相同機率出石頭、剪刀、布,對手怎麼出都無所謂,長期下來你不會虧。
撲克同理。存在一套非常複雜的策略,按它打,長期你不會輸錢,實際對局裡大機率還會贏。
"期望"這個詞要拆開看。撲克方差極大,你會贏一些牌,也會輸一些牌,就算打的是完美策略,也沒法保證每一手都贏。打得足夠久,至少不虧,通常還會賺。這個"期望"講的是籌碼量長期的變化,它不含一個現實約束:你會不會中途破產。理論上你不會,現實裡你可能已經沒錢上桌了。
"有限"這個條件其實很寬鬆。大多數遊戲本來就是有限的,很多無限遊戲裡也存在這套完美策略,只要滿足緊緻性一類的技術條件。真有反例,比如那個著名的小遊戲:誰報的數字大誰贏。這個遊戲沒有納什均衡。訪談裡兩人還當場玩了一把,萊克斯喊 17,布朗喊 18,贏了。
"零和"這個條件更關鍵。我贏 50 美元,就意味著你輸 50 美元,總量守恆。
一旦走出雙人零和,納什均衡依然存在,但它的意義大打折扣。布朗舉了《風險》(Risk)這個遊戲:如果桌上其他所有人商量好了聯手先把你滅了,你沒有任何一套策略能保證自己贏。你做什麼都沒用。
六人撲克也在這條線上。它依然是籌碼守恆的,但三個以上玩家同場,納什均衡給不了你"不會輸"的保證。雙人博弈裡,策略是你的護城河;多人博弈裡,別人的聯合才是你的天花板。
這也解釋了一件很多人沒意識到的事:為什麼撲克 AI 的進展順序是先雙人、後六人。Pluribus 打贏六人局發生在 Libratus 之後,間隔一年多。技術上六人局的複雜度高得多,但更大的障礙在於,理論保證在多人局裡消失了,你沒法再聲稱自己"不可被擊敗",只能聲稱自己在實戰裡贏了。
反事實遺憾最小化:把"如果我當時"算到底
怎麼找到那個均衡?布朗團隊用的是自我對弈(self play)。
演算法一開始完全隨機地打牌,打到一手牌結束,贏了 50 美元,然後回頭覆盤:如果我當時選另一個動作會怎樣?如果我在這一步加註而不是跟注,對手會怎麼反應?因為對面坐的是自己的副本,這個反事實推理做得出來。它會算出"如果我這麼走,對手那麼走,我再這麼走,最後能贏 150 美元而不是 50"。
然後它更新那個動作的後悔值(regret)。後悔值大致等於:過去沒打這個動作,我有多後悔。下次遇到同樣的局面,後悔值高的動作被選中的機率就更高。
這個過程反覆跑,後悔值不斷累積。按正確的方式把高後悔值動作的機率提上去,數學上可以證明它會收斂到納什均衡。哪怕是不完全資訊博弈,結論照樣成立。
這個方法叫反事實遺憾最小化(counterfactual regret minimization,CFR)。它不必然繫結自我對弈,只是自我對弈是它最自然的實現方式,也是一種有理論保證的強化學習。
布朗特意點了一句:這套東西跟人類學牌的方式非常像。你跟朋友打完一手牌,會問一句"如果我在轉牌加註,你會跟嗎"。這就是在做反事實推理,跟演算法乾的事一模一樣。規模放大到千萬手,你就能逼近一套最優策略。
這裡有個細節值得技術人留意。CFR 的強項不只是"會學習",而是"有證明"。在完全資訊博弈裡,你甚至不需要這麼嚴密的演算法,隨便來點蒙特卡洛樹搜尋加上自我對弈就能收斂。一旦進入不完全資訊,理論的嚴密性就變成了必需品,隨手的工程手段會直接失效。
10 的 161 次方:為什麼需要神經網路
問題在於,無限注德州撲克的決策點數量大概是 10 的 161 次方。宇宙裡的原子數大約是 10 的 80 次方,平方一下是 10 的 160 次方。這個遊戲的規模比"宇宙原子數的平方"還大一截。
你不可能遍歷所有局面。你也不可能指望再次遇到完全相同的局面,機率低到可以忽略。神經網路解決的是"相似":遇到一個沒見過的局面,它可以從見過的、結構類似的局面裡泛化,把那些局面上積累的後悔值遷移過來。
布朗補了一句,這個數字還取決於籌碼量怎麼設定,不同版本會有出入。但量級擺在這裡,多一兩個數量級不改變結論。
訓練用的版本里,機器自己的下注尺度是有約束的,它只在一個有限的候選集裡選。但對面的真人選手不受這個限制,想推多少推多少。這構成了一個不對稱:對手可以出招到你的搜尋空間之外,你不能。所以搜尋模組必須能處理"預期之外的輸入",這跟很多工程系統面臨的處境是一樣的。
撲克和象棋,哪個更難
這是個會吵起來的問題。布朗的回答很乾脆:撲克。他還開了個玩笑,說這個答案大概會讓 DeepMind 的大衛·席爾瓦(David Silver)不太高興。
不完全資訊是第一個理由。德州撲克裡,你拿到兩張牌,只有你能看見;對手也拿到兩張,只有他能看見。你打牌的時候得同時算四件事:他以為我有什麼,我有什麼,他有什麼,他以為我以為他有什麼。
詐唬能成立,全靠這個不對稱。你手裡的牌很爛,但你下注,對手不知道,你就有可能贏下這一手。
第二個理由更微妙,也更值得琢磨:在不完全資訊博弈裡,策略不只是"打哪個動作",還包括"以多大機率打這個動作",而機率本身決定了這個動作的價值。
回到石頭剪刀布。你每次都出石頭,對手很快發現規律,你的石頭就不值錢了。你幾乎從不出石頭,只出 1% 的時候出,對手大機率在出剪刀,這時候你石頭的價值高得離譜。
平移到撲克:你從來不詐唬,名聲在外,某一天突然詐唬一次,成功率極高,賺得很多。反過來,你被人看出是個詐唬慣犯,你一詐唬就被人跟到底,你會輸得很慘。找到那個詐唬頻率,就是撲克的核心難題。
象棋裡沒有這回事。你十次開局走王后棄兵,還是一百次走王后棄兵,這個動作的期望值不變。
所以撲克的演算法要解決的是兩件事:每個動作值不值得打,以及每個動作該用多高的頻率去打。後一件才是真正難的地方,也是前面那些 CFR、搜尋、神經網路存在的理由。Libratus 這個名字取"平衡",就是因為它被設計成去找那個頻率上的平衡點。
頻率不只管詐唬。下注多少、用哪些牌下注、大注還是小注,全都是頻率問題。所謂"範圍"(range)這個概念就來自這裡:你在某個位置詐唬的時候,不希望對手能抓到規律,所以你得同時想"如果我手裡是好牌,我會不會也這麼打"。你的動作要能被對手對映到很多種手牌,這個動作才夠好。
這套"我知道你知道我知道"的推理,在成功的撲克 AI 裡是被顯式建模的。共同知識的信念狀態,被直接寫進了演算法。它沒有從對局裡自己湧現出來。
12 萬手牌,200 萬美元,和 2015 年那場慘敗
布朗讀博期間,每年有個"計算機撲克競賽",全世界做撲克 AI 的實驗室帶著自己的機器人來對打。他們的機器人贏了 2014 年和 2016 年的比賽。
他們決定把這個東西推到真人頂級選手面前。四位專精單挑無限注德州撲克的世界級選手,20 天,12 萬手牌,20 萬美元獎金池,按四個人互相之間的相對戰績分配,目的是讓他們有動機認真打。
這不是他們第一次幹這件事。2015 年,團隊帶著當時的版本跟職業選手打過一場,輸得很明顯。
從 2015 到 2017,改進的核心在演算法層面。
2015 年的思路是"先把整個遊戲解出來"。賽前把能算的算完,做成一張巨大的查詢表,實戰時遇到什麼局面就查表。
2017 年的思路轉向實時搜尋。賽前那張表只作為起點,每次真正做決策的時候,現場再算一遍:針對當前這個具體局面,重新求一個更好的策略。
聽起來像工程最佳化,實際上是正規化差異。查表意味著你把計算預算花在賽前,把所有可能性都鋪平;實時搜尋意味著你把預算花在當下這個點上,只算眼前這一步。前者在遇到表外局面時會直接崩掉,後者天然有應對空間。
搜尋空間長什麼樣?象棋裡的搜尋是你在這個局面下能走哪些棋,走完之後局面變成什麼樣。撲克裡搜的東西更繞:你搜的是自己可以採取的動作、採取這些動作的機率,以及你如果拿的是別的牌,你會怎麼做。
最後這一項是最難理解的。你手裡一把爛牌,想詐唬。這個詐唬好不好,取決於你會不會在同樣的位置用好牌也下注。如果你只在爛牌時下注,那就是明牌詐唬,對手一眼看穿。所以演算法必須同時評估"我拿好牌的時候怎麼打",兩邊的頻率要配平,對手才會陷入兩難:這注到底該跟還是該棄。
這正是布朗說的目標:永遠讓對手留著一絲懷疑。
最終的結果是,12 萬手牌,接近 200 萬美元。這一次機器人沒有試圖適應對手,沒有試圖讀人,沒有搞任何心理戰,它只是在逼近納什均衡。
然後它把四位頂級選手打崩了。
GTO 與剝削:一場持續多年的爭論,被一場比賽終結
撲克圈和學術界為這件事吵了很久。一邊叫 GTO(game theory optimal,博弈論最優),一邊叫剝削性打法(exploitative play)。
2017 年之前,佔上風的其實是後者。很多人說,博弈論那套東西純屬紙上談兵,真想賺錢,你得盯著對手的眼睛,讀出他的靈魂,猜出他手裡是什麼牌。
後來情況慢慢變了。一批選手開始老老實實打接近 GTO 的策略,賺到了錢,而且不太去調整自己適應對手。Libratus 那場比賽把這件事釘死了。
但布朗對菲爾·赫爾穆特(Phil Hellmuth)的評價很有意思。他承認這位撲克傳奇有時候打得並不"最優",可他就是贏。布朗的解釋是,赫爾穆特的強項不在於讓自己變得不可預測,而在於他能引導對手犯錯:讓對手以為自己有某個弱點,然後預判對手會怎麼調整打法,再反手針對這個調整。
這是個兩層結構。第一層,你偏離均衡去剝削對手。第二層,對手發現你在剝削他,他也偏離均衡來反制你。誰在第二層站得更高,誰就贏。
頂尖人類選手通常的做法是:先把自己的策略打到接近均衡,讓自己不可被剝削;同時在實戰中觀察對手哪裡露出了破綻,再針對性地偏出去一點。偏離是有限度的,因為每一次偏離都在給對方留下可利用的空間。
這裡有個常被混淆的點需要說清。納什均衡不等於"可預測"。恰恰相反,均衡策略的全部意義就在於讓你變得難猜。赫爾穆特的混亂風格之所以有效,是因為它讓對手無法建立穩定的模型,這跟均衡策略要達到的效果在方向上是一致的,只是路徑不同。
訪談裡萊克斯問了一個布朗沒往深處答、但其實挺重要的問題:能不能把"表演性"也建模進去?職業牌手的收入大頭來自贊助和曝光,不來自牌桌。一個能說垃圾話、能製造節目效果、偶爾故意打得離譜的 AI,在商業上是更值錢的。
這已經不是博弈論問題了。
會贏的 AI 和好玩的 AI,是兩種東西
布朗把這個區分講得很清楚:贏下一個遊戲的 AI,和讓人願意跟它玩的 AI,是兩碼事。再加上一個維度,讓人願意看它玩的 AI,又是第三碼事。
他聽過做遊戲 AI 的人講過這個。《文明》(Civilization)系列裡的 AI 從來不打最優解,它們在做另一件事:製造人格,製造性格,讓局面好看。真按勝率最佳化,遊戲會變得很難玩。
萊克斯剛跟託德·霍華德(Todd Howard)聊過,就是《輻射》《上古卷軸》《星空》背後的那個人。話題自然滑到 NPC 上:大語言模型會把開放世界 RPG 裡的 NPC 變成什麼樣。
布朗的判斷是,這可能是大語言模型最早進入大眾消費場景的應用之一。《上古卷軸 6》大概快做完了,趕不上;《上古卷軸 7》用上語言模型,他一點都不意外。萊克斯在旁邊補了一句"這是我猜的,不是他說的",兩人笑了一下。
更有意思的是布朗講的一段往事。他讀書時聽一位遊戲公司高管的分享,臺下有人問:為什麼這些遊戲全都圍繞著打打殺殺?那位高管的回答是,做一個能跟你對話、能跟你合作的 AI,比做一個能跟你對打的 AI,難太多了。
這個解釋放在今天看,依然成立,但正在鬆動。當對話不再需要逐句寫死指令碼,非戰鬥類的互動就有了空間。大量以合作為核心、以關係為核心的遊戲形態會被解鎖。
萊克斯提了個更野的方向:未必是正向的,可能只是戲劇性。你進《使命召喚》,不開槍,蹲在角落裡跟一個 AI 拌嘴,被它陰陽怪氣了一頓,晚上睡不著,第二天專門回去把這場架吵完。
布朗覺得這個方向挺帶勁。遊戲世界有個天然優勢:玩家心裡清楚這不是真實世界,所以 AI 犯點錯、出點亂子,代價可控。就像《外交》這個遊戲,它不是真實的地緣政治,不是真實的戰爭,它是個遊戲,可以在裡面放一點混亂,放一點樂趣。
從沒有語言的博弈,到有語言的博弈
撲克和《外交》,中間隔著一道坎。
撲克是純策略博弈,全程沒有一句話。所有資訊都編碼在動作裡:下注、加註、跟注、棄牌。詐唬是用籌碼說的謊。對手能讀的只有你的下注模式,你能藏的只有自己的牌。
《外交》不一樣。七個玩家,一戰前的歐洲,談判、結盟、背叛、承諾、威脅,全部透過自然語言完成。你要說服法國跟你一起打德國,你要在最後一刻撕毀約定去搶補給中心,你還得在下一輪重新找到盟友。
這裡的不完全資訊,不只是"你手裡有什麼牌"。更麻煩的是"你說的話算不算數"、"你現在的盟友明天會不會反水"、"你剛才那句承諾是真心還是緩兵之計"。牌是固定的,意圖是流動的。
Cicero 在 2022 年登上 webDiplomacy 平臺的匿名對局,40 局下來,平均得分是人類玩家的兩倍以上,進入了前 10%。它由兩部分組成:一個負責戰略推理的規劃模組,一個負責生成對話的語言模型。規劃模組算出該跟誰結盟、該往哪調兵,語言模型負責把這些意圖翻譯成讓對面信服的人話。
這套組合的難度在於,兩半必須對齊。戰略上你需要法國按兵不動,語言上你就得找出一個法國願意相信的理由,而且這個理由在後續幾十輪裡還得自洽,不能自己打自己的臉。
撲克 AI 裡那個"共同知識信念狀態"的顯式建模,在《外交》裡變成了另一種形態:你要建模的不只是對手認為你手裡有什麼牌,還要建模對手相信你這個人有多可信。前者是機率,後者是聲譽。
從 Libratus 到 Cicero,布朗走的是一條很清晰的線:先解決只有動作的博弈,再解決有語言、需要建立信任的博弈。前者考的是機率和平衡,後者考的是意圖和信譽。而人類世界裡絕大多數難題,都是後者。
這也是為什麼撲克那套東西值得技術人認真看一遍。你做產品定價,對手是競品;你做招聘談判,對手是候選人;你做商務合作,對手是合作方。這些場景的共同結構是:資訊不對稱、對手在思考、你的動作會被解讀成訊號、你的聲譽會影響下一輪的價值。
這四條,恰好就是撲克。
- 先判斷你面對的是"完全資訊"場景還是"不完全資訊"場景。象棋式的場景裡,把每一步算到最優就夠了;撲克式的場景裡,只算最優會被人讀穿。
- 在不完全資訊場景裡,主動保留隨機性。固定套路一旦被識別,價值就會歸零。同一個決策,故意用不同方式處理,哪怕單次看不是最優。
- 做覆盤時,問那句撲克選手會問的話:如果我當時換一種打法,對手會怎麼反應。只覆盤自己做了什麼遠遠不夠,要覆盤對手的應對函式。
- 評估一個策略的好壞,看它在對手最優應對下的表現,不要只看它在對手犯錯時的表現。後者只能證明對手菜。
- 多人博弈裡放棄"必勝策略"的幻想。你能控制的是自己不被聯合針對,控制不了別人是否結盟。把精力放在降低自己被圍剿的機率上。
- 做決策前先問一句:這個動作能不能被對方翻譯成唯一含義。如果你的每一個動作都指向一種意圖,你在談判桌上就沒有任何槓桿。
- 如果你想做出讓人願意用的 AI 產品,別隻盯著勝率或準確率。好玩、可信、有性格,是另一條獨立的最佳化目標,需要單獨設計。
本集資源與出處
- 影片在 YouTube 收看
- 音訊官方 MP3 直鏈來自 lexfridman.com 官方播客 RSS
- 官網Lex Fridman 官網本集頁面
- 文稿本站純文字版