Module 2 · LLM Lesson 15 下钻 · 选词

Greedy 与 Sampling

输出层已经给出了整个词表的概率。现在只解决一个问题:如何从这组概率中选出一个 token?两种基本方式:永远选第一名,或按概率抽签。

TopicGreedy decoding vs probability sampling
Objectives理解采样如何把连续概率分布变成一个离散 token id
Prerequisites输出层 ✅:logits → softmax → 词表概率
Outcome能解释 greedy 为什么确定、sampling 为什么随机,以及两者的取舍
Warning本课只讲“怎么抽”;temperature / top-k / top-p 如何修改候选分布,后面逐课讲

① 已学对象 → 新问题

上一课结束时,我们已有一组词表概率:

mat: 0.60
floor: 0.20
sofa: 0.12
dog: 0.05
...: 0.03

它表示模型认为“接下来各 token 有多合理”,但概率分布本身还不是答案。现在必须把它变成一个离散 token id。这一步叫 decoding / sampling

② Greedy:永远选概率最高的

Greedy decoding(贪心解码)很直接:

argmax(probabilities) → mat(0.60)

③ Sampling:按概率抽签

Sampling 不直接取第一名,而是把 0~1 看成一条长度为 1 的区间,按概率给每个 token 分一段:

随机生成 r∈[0,1),落在哪段就选哪个 token mat 0.60 floor .20 sofa .12 dog 0 0.60 0.80 0.92 0.97 1 r=0.74 → floor mat 占 60% 区间,所以重复很多次约 60% 会抽到 mat;但 floor/sofa 也有机会。 概率不是“置信度标签”,而是采样时每个候选分到的抽签面积。
采样将连续概率分布变成一个离散 token id。随机数落在哪个累积概率区间,就选择哪个 token。

④ 机制:概率如何变成 token id

  1. 把概率累加成边界:[0.60, 0.80, 0.92, 0.97, 1.00]
  2. 生成随机数 r,例如 r=0.74
  3. 找到第一个“累积概率 ≥ r”的位置:0.80 对应 floor
  4. 输出该位置对应的整数 token id,再通过词表解码成 token。
连接上一课:softmax 给出“抽签面积”,sampling 用随机数选择一个面积;最终选择的位置才是离散整数 token id。

⑤ 为什么需要随机?

相同上下文可能有多个合理答案:

“The cat sat on the ...”
→ mat / floor / sofa / chair 都可能合理

随机允许模型探索多个合理分支,让文本更自然、多样;但完全按原始概率抽,也可能抽到很小概率的怪词。因此后面还需要:

这些是后续微课;今天只理解“抽签”本身。

Greedy每次选第一名;稳定、可复现,但容易单调/重复
Sampling按概率抽签;多样、自然,但可能抽到低概率怪词
一句话全链:logits → softmax 概率 → greedy 取最大值,或 sampling 按概率抽签 → 一个 token id → 接到序列末尾 → 下一轮。

✅ 快速检查(用自己的话答)

  1. 概率为 mat=0.6、floor=0.2、sofa=0.12 时,greedy 会选谁?sampling 是否一定选它?
  2. 用“区间抽签”解释:随机数 r=0.74 为什么会选 floor?
  3. 为什么语言生成不一定总用 greedy?sampling 又有什么风险?

答完后,下一课讲 Temperature:不删除候选,只改变这张“抽签面积图”有多尖或多平。