分蛋糕和扔飞镖:一堆可能性,怎么落成一个结果
抽奖箱里 7 个红球、2 个蓝球、1 个金球。闭上眼睛摸一个——你最可能摸到红的,但这不代表你一定摸到红的。
🧠 一句话结论
分布就是把"一整块蛋糕"(总量 1)按可能性大小切成宽度不等的几段;采样就是闭着眼往切好的蛋糕上落一次点,落在哪段就是抽中哪个。段越宽越容易被落中,但窄段随时可能中——这就是"最可能"和"一定"之间的全部差别。
场景问题
学校门口摆了个抽奖箱,里头 10 个球:7 个红的、2 个蓝的、1 个金的。红球换一块橡皮,蓝球换一支笔,金球换一个书包。
同学甲摸完说:"肯定是红的,红的最多。"
结果他摸出个蓝的。
他不服气:"那我再摸,这次总该红了吧。"——又是蓝的。
甲开始怀疑箱子有问题。可箱子一点问题没有:红球最多,只意味着红球最容易被摸到,不意味着每次都摸到红的。 摸 10 次大概有 7 次红的,但具体哪几次是红的,谁也说不准。
这里头藏着两个必须分清楚的东西:"每种结果有多大机会"是一回事,"这一次到底出了哪个"是另一回事。前者叫分布,后者叫采样。
大模型每吐出一个字,走的就是这套流程。它先算出"下一个字是'的'的机会多大、是'了'的机会多大……",然后从这堆机会里摸一个出来。所以同样一个问题问两遍,答案可能不一样——不是模型三心二意,是它每次都在重新摸球。
实现方案
分布:把一块蛋糕切开
先把抽奖箱画出来。不画 10 个球,画一整块蛋糕:
规则就两条:
- 每段的宽度 = 那个结果被摸中的机会大小
- 所有段加起来,正好是一整块(不多不少,机会总和是 1)
这张切好的蛋糕,就叫一个分布——它一次性说清了"每种结果各有多大机会"。
第二条规则值得多看一眼:蛋糕不能切多也不能切少。红球机会变大,别的球机会必然变小——它们在抢同一块蛋糕。这个"此消彼长"后面会反复用到。
采样:闭眼往蛋糕上落一次点
有了切好的蛋糕,"摸一个球"就变成了一个很具体的动作:闭着眼往蛋糕上落一个点,落在哪段就是哪段。
盯住这个指针:它大部分时候落在最宽的红段上,但偶尔也会落到窄窄的蓝段、甚至金段上。这就是同学甲连摸两个蓝球的全部解释——不是箱子坏了,是他运气差。
从蛋糕里摸出一个具体结果的这个动作,就叫采样。
分布和采样的关系可以一句话说清:分布是"蛋糕怎么切的",采样是"这一下落在哪儿"。 蛋糕不变,落点每次都可能不同。
摸得够多,形状就露出来了
单看一次采样,什么也看不出来。但摸的次数一多,事情就变得很有规律:
摸个几千次,把每种结果各出现了多少次画成柱子,柱子的高度比例会长成 7 : 2 : 1——正好是当初切蛋糕的比例。
所以分布和采样是可以互相验证的:知道蛋糕怎么切的,就能预测长期摸出来什么样;反过来,摸得足够多,就能倒推出蛋糕是怎么切的。
但要记牢:这个规律只在次数多的时候成立。摸 3 次全是蓝球,一点也不奇怪。
只在最大的几段里摸:top-k
现在换个场景。模型每吐一个字之前,会切出一块有几万段的蛋糕——词表里每个字都占一段。
问题来了:这几万段里,绝大多数是明显不合适的字,各自只占极窄的一丝丝。可它们加起来也能占掉不小一块。一旦不小心落到那些丝上,吐出来的就是一个莫名其妙的字。
一个直接的办法:只留最宽的几段,剩下的全扔掉,然后把留下的重新摊开占满整块蛋糕。
这个做法叫 top-k:k 就是"留几段"。留 3 段就是 k=3。
好处很直接:那些莫名其妙的字根本没机会被落中了,因为它们已经不在蛋糕上。
从大到小凑够一个总面积:top-p
top-k 有个不太顺手的地方:留几段这个数字是死的,但每次的蛋糕形状是活的。
- 有时候模型很确定,第一段就占了 95%,剩下的都是渣。这时候留 3 段,等于硬把两段渣塞了进来。
- 有时候模型很犹豫,前 20 段宽度差不多。这时候只留 3 段,等于把 17 个同样合理的选择直接掐掉。
于是有了另一个办法:不数段数,改数面积。把段按宽度从大到小排好,从最宽的开始一段段往里收,收够一个说定的总面积(比如 90%)就停手。
这个做法叫 top-p:p 就是"要凑够多少面积"。凑 90% 就是 p=0.9。
两者的差别可以一句话记住:top-k 是"数段数",段数是定死的;top-p 是"数面积",段数随蛋糕形状自动变。 模型确定时 top-p 自动收得紧,模型犹豫时自动放得宽——这正是 top-k 做不到的。
为什么这么做
为什么要把机会画成"一整块蛋糕",而不是各写各的数字?
因为蛋糕能把一件关键的事直接画出来:所有机会加起来必须正好是一整块。这意味着它们在抢同一块蛋糕——一个变大,别的必然变小。各写各的数字看不出这层关系,切蛋糕一眼就看出来了。
为什么要采样,不干脆每次都取最宽的那段?
因为每次都取最宽的,同一个问题问一百遍会得到一模一样的一百个答案。更麻烦的是它容易卡在一个圈里出不来:说完这个词最可能接那个词,说完那个词又最可能接这个词,来回打转。留一点随机,才能走出不同的路。
为什么 top-k 和 top-p 都要"扔掉一部分"?
因为几万段里那些极窄的丝,单看每一根都微不足道,加起来却能占掉相当一块。一旦落中就吐出一个莫名其妙的字,整句话就毁了。扔掉它们,等于把明显不合适的选项从桌上直接拿走——不是靠运气躲开,是让它根本不在场。
为什么别的选择不行
错误直觉一:以为"概率最大"就等于"一定会中"
同学甲的错就在这。红球占 7 成,说的是摸很多次里大概 7 成是红的,不是"这一次一定是红的"。剩下 3 成的机会实实在在地摆在那儿,落中它一点也不反常。
分不清这两件事的后果很具体:模型某次吐出一个不常见的词,你以为是模型出故障了,其实只是这次落点落在了窄段上——完全在设计之内。
错误直觉二:以为每次都取最宽那段最好
听起来最稳妥:每次都挑机会最大的,还能错到哪去?
会错在两个地方。一是说出来的话千篇一律:同一个开头永远导出同一段话,一个字都不带变的。二是容易在原地打转:最可能接的词说完,最可能接的又绕回来了,于是一句话翻来覆去地重复。
"每次挑最大的"看着是稳,实际上是把所有岔路口都焊死了——一条路走到黑,走进死胡同也出不来。
错误直觉三:以为 top-k 和 top-p 是一回事
它们数的东西根本不同:
| top-k | top-p | |
|---|---|---|
| 数什么 | 段数(留几段) | 面积(凑够多少) |
| 留几段 | 定死的 | 随蛋糕形状自动变 |
| 模型很确定时 | 硬塞几段渣进来 | 自动收紧,只留那一段 |
| 模型很犹豫时 | 把合理选项掐掉 | 自动放宽,多留几段 |
把它们当成一回事的后果:你以为调 k 和调 p 效果差不多,结果在"模型很确定"和"模型很犹豫"两种场合下表现完全相反。
沉淀结论
- 分布 = 把一整块蛋糕(总量 1)按机会大小切成宽度不等的段,所有段加起来正好是一整块
- 采样 = 闭眼往切好的蛋糕上落一次点,落在哪段就是哪个结果——宽段容易中,窄段随时可能中
- 采样次数一多,统计出来的形状会长成当初切蛋糕的比例;但少数几次完全说不准
- top-k = 只留最宽的几段,段数定死;top-p = 从大到小凑够一个总面积就停,段数自动变
- "机会最大"不等于"一定会中";每次都取最大会让话千篇一律,还容易原地打转
记忆口诀
分布是蛋糕怎么切的,采样是这一下落在哪儿。
所有段加起来正好一整块,一个变大别的必然变小。
宽段容易中,窄段随时可能中。
摸得够多,形状就长成切蛋糕的比例。
top-k 数段数,top-p 数面积。
延伸阅读
- 模型每吐一个字都在摸一次球:先算出几万个字各占多宽,再从这块蛋糕上落一次点。所以同一个问题问两遍答案可能不同——不是三心二意,是每次都在重新摸。详见大模型核心原理。
- top-k / top-p 是生成时的两个旋钮:一个数段数、一个数面积,都是在落点之前先把明显不合适的选项从桌上拿走。详见大模型核心原理。
自测:合上资料能说清楚吗?
- 分布和采样有什么区别?
参考答案
分布是"蛋糕怎么切的",采样是"这一下落在哪儿"。
分布一次性说清每种结果各占多宽(所有段加起来正好一整块);采样是闭眼往切好的蛋糕上落一个点,落在哪段就是哪个结果。蛋糕不变,落点每次都可能不同。
- 红球占 7 成,同学连摸两个蓝球。箱子有问题吗?
参考答案
没问题,只是运气差。 "占 7 成"说的是摸很多次里大概 7 成是红的,不是"这一次一定是红的"。剩下 3 成的机会实实在在摆在那儿,连中两次一点也不反常。
"机会最大"和"一定会中"是两件事,只有摸的次数多起来,统计比例才会向 7 : 2 : 1 靠拢。
- 为什么不干脆每次都取机会最大的那段?
参考答案
会坏在两处。一是千篇一律:同一个开头永远导出一模一样的话,一个字不带变。二是原地打转:最可能接的词说完,最可能接的又绕回来,一句话翻来覆去重复。
每次挑最大看着稳,实际是把所有岔路口都焊死了——走进死胡同也出不来。
- top-k 和 top-p 有什么本质区别?
参考答案
数的东西不同:top-k 数段数(留几段,定死的);top-p 数面积(从大到小凑够一个总面积就停,留几段自动变)。
差别在两种极端情况下最明显:模型很确定时(第一段占 95%),top-k 会硬塞几段渣进来,top-p 自动只留一段;模型很犹豫时(前 20 段差不多宽),top-k 会把合理选项掐掉,top-p 自动多留几段。
- 为什么要扔掉那些极窄的段?它们不是本来就很难被选中吗?
参考答案
单看每一根确实微不足道,但几万根加起来能占掉相当一块。 一旦落中就吐出一个莫名其妙的字,整句话都毁了。
扔掉它们的意义在于:不是靠运气躲开这些选项,而是让它们根本不在场。风险从"小概率会发生"变成"不可能发生"。