LLM 学习笔记2:Logits、Softmax 与采样策略

一、Logits:模型的"原始打分"

⭐ 是什么?

LLM 经过 N 层 Transformer 处理后,每个 token 位置都输出一个 hidden state(隐藏状态向量)。

取最后一个位置的 hidden state,经过一个线性层,输出一个维度等于词表大小的向量------每个候选 token 对应一个分数,这就是 logits。

复制代码
Transformer 输出(hidden state)
    ↓
Linear 层(W_vocab)
    ↓
logits(每个 token 一个分数)

二、Softmax:从"分数"到"概率"的转换器

⭐ 为什么需要 Softmax?

  • 无法采样:从任意实数中"按概率"选一个,数学上无意义
  • 不是概率分布:分数加起来不等于 1,不满足概率定义
  • 负数无法解释:概率不能为负

⭐ 公式

复制代码
P(i) = exp(logit_i) / Σ exp(logit_j)

⭐ 工作过程

  • Step 1:取指数 exp(logit) 把负数变正数,放大差距
  • Step 2:归一化 除以所有 exp 之和 让所有概率加起来等于 1

三、采样策略:模型如何"选择"下一个词

  1. Greedy(贪心解码)
    直接选概率最大的 token,简单,快速,但是固定输出,容易陷入重复循环,语言不自然
  2. Temperature(温度采样)🔥
  • Temperature 通过缩放 logits 来控制 softmax 分布的平滑程度。温度越低,模型越保守,适合代码生成;温度越高,模型越有创造力,适合创意写作。

  • 在 softmax 之前调整 logits,调整后的 logits = logits / T

    T 值 效果 解释
    0 < T < 1 更确定、保守 Softmax 变尖锐,高分更突出
    T = 1 正常 保持原始分
    T > 1 更随机、发散 Softmax 变扁平,低分也有机会
  1. Top-K Sampling

    只保留概率最高的 K 个 token,去掉低质量"噪声"词,但是固定 K 值不能适应所有语境

  2. Top-P Sampling(Nucleus Sampling)🔥

    选择累计概率达到 P 的最小集合,在集合内采样,动态调整候选集,适应不同语境

  3. 策略总结

    策略 特点 适用场景
    Greedy 确定、单一 无需创意的场景
    Temperature 控制随机程度 所有场景的基础参数
    Top-K 固定裁剪 进一步过滤噪声
    Top-P 动态裁剪 配合 Temperature,最常用组合

四、完整生成流程

复制代码
用户输入文本
    ↓
① Tokenizer:切成 token 序列
    ↓
② Embedding:每个 token 映射为向量
    ↓
③ Positional Encoding:加入位置信息
    ↓
④ Transformer N 层处理 → hidden states
    ↓
⑤ 取最后一个位置的 hidden state
    ↓
⑥ Linear 层(W_vocab)→ logits(原始分数)
    ↓
⑦ Temperature 缩放:logits / T
    ↓
⑧ Softmax:分数 → 概率分布
    ↓
⑨ 采样(Top-K / Top-P):选择一个 token
    ↓
⑩ 输出 token,拼接到输入后面 → 回到①继续循环

用户输入经过 tokenizer 切分、embedding 向量化和位置编码后,进入多层 Transformer 进行上下文信息交互。取最后一个位置的 hidden state,通过线性层映射到词表维度得到 logits。接着用 Temperature 缩放控制随机程度,Softmax 转成概率分布,再通过 Top-P 或 Top-K 采样选出一个 token。整个过程自回归循环,直到生成完整的文本。