诺姆·布朗:扑克中 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 官网本集页面