Module 2 · LLM
Lesson 15
下钻 · 选词
Greedy 与 Sampling
输出层已经给出了整个词表的概率。现在只解决一个问题:如何从这组概率中选出一个 token?两种基本方式:永远选第一名,或按概率抽签。
① 已学对象 → 新问题
上一课结束时,我们已有一组词表概率:
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)
- 确定性:相同输入、相同模型,每次输出都一样。
- 局部最优:每一步只选当前概率最高的 token。
- 问题:语言中常有多个合理续写;永远选第一名容易单调、重复,而且“当前一步最高”不保证整段话最好。
③ Sampling:按概率抽签
Sampling 不直接取第一名,而是把 0~1 看成一条长度为 1 的区间,按概率给每个 token 分一段:
采样将连续概率分布变成一个离散 token id。随机数落在哪个累积概率区间,就选择哪个 token。
④ 机制:概率如何变成 token id
- 把概率累加成边界:
[0.60, 0.80, 0.92, 0.97, 1.00]。
- 生成随机数
r,例如 r=0.74。
- 找到第一个“累积概率 ≥ r”的位置:0.80 对应
floor。
- 输出该位置对应的整数 token id,再通过词表解码成 token。
连接上一课:softmax 给出“抽签面积”,sampling 用随机数选择一个面积;最终选择的位置才是离散整数 token id。
⑤ 为什么需要随机?
相同上下文可能有多个合理答案:
“The cat sat on the ...”
→ mat / floor / sofa / chair 都可能合理
随机允许模型探索多个合理分支,让文本更自然、多样;但完全按原始概率抽,也可能抽到很小概率的怪词。因此后面还需要:
- Temperature:整体调节概率分布更尖锐还是更平坦。
- Top-k / Top-p:先删除过于不靠谱的尾部候选,再抽签。
这些是后续微课;今天只理解“抽签”本身。
一句话全链:logits → softmax 概率 → greedy 取最大值,或 sampling 按概率抽签 → 一个 token id → 接到序列末尾 → 下一轮。
✅ 快速检查(用自己的话答)
- 概率为 mat=0.6、floor=0.2、sofa=0.12 时,greedy 会选谁?sampling 是否一定选它?
- 用“区间抽签”解释:随机数 r=0.74 为什么会选 floor?
- 为什么语言生成不一定总用 greedy?sampling 又有什么风险?
答完后,下一课讲 Temperature:不删除候选,只改变这张“抽签面积图”有多尖或多平。