编程与 AI约 14 分钟阅读更新于 2026-08-03

Transformer 如何把隐藏状态变成词:Linear、Softmax 与词表概率

从解码器最后的隐藏状态出发,解释线性层如何生成词表 logits,Softmax 如何得到概率分布,以及模型如何选择下一个 token。

相关工具

文章目录(11 个章节)

解码器最后输出的还不是一个词

Transformer 解码器每一层都在处理向量。到了最后一层,当前位置得到的是一个隐藏状态向量,它包含当前上下文下的语义和位置信息,但还不能直接写成“机器”“学习”或其他词。这个向量更像是模型对当前生成位置的综合判断,真正的词还需要经过输出层。

文中把这一步描述得很直接:解码器栈输出的是一个 float 向量,模型需要通过线性层和 Softmax 层把它转换成词。线性层负责把表示变换到词表维度,Softmax 负责把每个词的分数整理成概率分布。

因此,理解 Transformer 的输出,不能只看注意力矩阵或最后的隐藏状态。还要继续追踪最后一个位置的向量如何经过投影、归一化和解码策略,最终变成一个 token。

Transformer 解码器隐藏状态经过线性层和 Softmax 生成下一个 token 的流程图
从隐藏状态到下一个 Token

解码器输出依次经过线性投影、词表 logits、Softmax 概率分布和解码选择。

线性层为什么要映射到词表大小

设解码器在某个位置输出的隐藏状态维度是 d_model,词表中有 V 个 token。线性层可以写成 z = Wh + b,其中 h 是 d_model 维隐藏状态,W 的输出维度是 V,最终得到一个长度为 V 的向量 z。这个向量的每一项对应词表中的一个 token。

例如词表有一万个词,线性层就会产生一万个数。第 1 个数是词表第 1 个 token 的分数,第 2 个数对应第 2 个 token,依此类推。它们还不是概率,可以是正数、负数或相差很大的任意实数,所以通常称为 logits。

词表越大,输出投影的参数量和计算量也越大。这是语言模型输出层经常成为计算瓶颈的原因之一。模型前面花大量计算得到一个上下文向量,最后还要把它与整个词表建立对应关系。

logits 和概率不是一回事

logits 可以理解为模型对候选 token 的原始打分。分数高,表示模型更倾向于选择;分数低,表示当前上下文下不太可能。但原始分数没有统一范围,也不满足非负和总和为 1,不能直接当作概率解释。

Softmax 会把一组 logits 转换成概率。它先对每个分数做指数变换,再除以所有指数值的总和,得到 0 到 1 之间的数,并且整组概率相加等于 1。分数之间的相对差异会被保留下来,较高的 logits 通常会对应较大的概率。

需要注意的是,Softmax 只负责形成分布,不负责决定最终输出。模型得到的是“每个候选词各有多大可能”,至于最后选一个、选多个,还是按概率随机采样,则由后面的解码策略决定。

Softmax 在 Transformer 里有两种常见用法

读到 Softmax 时,最容易产生的误解是把注意力里的 Softmax 和输出层里的 Softmax 当成同一件事。它们使用的是同一个数学函数,但归一化的维度和解释完全不同。

在注意力机制中,Softmax 作用于 QK 分数,通常沿着被关注的位置归一化。一行权重加起来等于 1,表示当前查询位置应该把注意力分配给哪些输入位置。它回答的是“我应该看哪里”。

在输出层中,Softmax 作用于词表 logits,沿着词表维度归一化。整组词的概率加起来等于 1,表示下一个 token 在各个候选词之间如何分布。它回答的是“下一个可能是什么”。

Transformer 注意力 Softmax 和输出层 Softmax 的作用对象对比图
注意力 Softmax 与输出 Softmax

左侧在位置维度分配注意力,右侧在词表维度生成下一个 token 的概率。

为什么最高概率词不一定总是好答案

最简单的解码方式是贪心选择,也就是每一步都取概率最大的 token。这种方法速度快、结果稳定,适合需要确定性输出的场景。但它只看当前一步的最大值,不会回头比较一整段序列的整体质量。

有时一个概率略低的词会让后续句子更自然。如果每一步都只取最高概率,模型可能过早进入一条局部最优的路径,出现重复、句式僵硬或提前结束。解码策略的任务,就是在模型给出的分布上做选择,而不是重新训练模型。

这也是“模型概率高”与“人读起来合理”不能完全画等号的原因。概率是模型在当前上下文中的统计判断,最终质量还会受到上下文长度、训练数据、任务约束以及生成策略的影响。

温度如何改变概率分布

温度通常记作 T,用来调整 logits 在 Softmax 前的尖锐程度。计算上,可以先把 logits 除以 T,再进行 Softmax。T 小于 1 时,分布会更集中,最高分候选更容易被选中;T 大于 1 时,分布会更平,其他候选获得的机会增加。

温度不是简单的“创造力开关”。它改变的是候选分布的相对差异:低温让模型更确定,高温让模型保留更多可能性。如果原始 logits 本身已经不合理,调高或调低温度都不能替代数据、训练目标和模型能力。

实际使用时,温度需要和采样策略一起看。高温加完全随机采样可能让输出过于发散,低温加贪心则可能让文本变得重复。合适的设置取决于任务是需要稳定复现,还是需要保留一定的表达变化。

Transformer 温度参数、概率分布和贪心 Top-k Top-p 解码策略关系图
温度与解码策略

温度改变概率分布的尖锐程度,贪心、Top-k 和 Top-p 再从候选集合中做不同选择。

Top-k 和 Top-p 在限制什么

Top-k 只保留概率最高的 k 个候选词,再对这些候选重新归一化并采样。这样可以排除长尾中非常不可能的词,同时保留多个高概率选项。k 太小,输出会接近贪心选择;k 太大,过滤作用会变弱。

Top-p 又叫核采样,它不是固定保留多少个词,而是从高概率候选开始累加,直到累计概率达到 p。分布集中时,候选集合会自动变小;分布平坦时,集合会扩大。它对不同上下文的适应性通常比固定 k 更强。

两种策略都发生在概率分布形成之后。它们不会改变 Transformer 的隐藏状态,也不会改变线性层产生的 logits,只是在“模型认为哪些词可能”之后,对实际抽取范围做约束。

训练时如何使用这些分数

训练阶段通常不会先选出一个词,再根据这个词更新模型。模型会在每个有效位置产生完整的 logits 向量,随后与真实标签计算交叉熵。交叉熵会推动正确 token 的分数上升,同时相对压低其他候选的分数。

这也是为什么训练时需要保留完整词表分数,而推理时才执行贪心、Top-k 或 Top-p。训练的目标是让整个分布更接近数据中的目标分布,推理的目标是从这个分布中生成一条可用的序列。

如果使用了 Label Smoothing,训练目标不再是把正确词概率推到绝对的 1,而是让正确词占主要概率、其他词保留少量质量。它会影响输出分布的尖锐程度,但不改变线性层和 Softmax 的基本流程。

输出层参数为什么可能很大

输出投影矩阵的形状大致是词表大小乘以模型隐藏维度。词表从一万扩大到十万时,即使隐藏维度不变,矩阵参数也会明显增加。对于大模型来说,最后的词表投影不仅占参数,还会带来可观的矩阵乘法和 Softmax 成本。

有些模型会让输入词嵌入矩阵和输出投影共享参数,借此减少参数量并让输入、输出词表示处于相近的空间。是否共享取决于模型结构和训练设计,不能把它当成所有 Transformer 的固定规定。

词表设计也会影响输出。分词器把文本拆成 token,输出层选择的也是 token,而不一定是完整汉字或完整单词。看到生成结果时,一个词可能由多个 token 组成,模型实际上是在多个时间步逐段完成它。

从隐藏状态到 token 的完整检查顺序

第一步看形状:隐藏状态最后一维应是 d_model,线性投影后的最后一维应是词表大小。第二步看数值:logits 可以为负,也不要求相加等于 1;经过 Softmax 后,概率应为非负,沿词表维度的总和应接近 1。

第三步看位置:训练时每个位置的 logits 都应该与右移后的标签对应,不能把整个序列只拿最后一个位置计算损失。第四步看解码:确认使用的是贪心、温度采样、Top-k 还是 Top-p,并记录这些设置,否则同一个模型可能得到难以比较的结果。

如果输出完全重复,先检查解码策略和概率分布是否过于尖锐;如果输出跳跃很大,先检查温度、采样范围和上下文是否稳定;如果训练损失正常但生成异常,再回到标签偏移、特殊 token 和 Padding 的检查。

把输出层放回 Transformer 主线

Transformer 的前面部分负责把上下文组织成隐藏状态,最后的输出层负责把这个状态翻译回词表空间。线性层完成维度映射,得到每个 token 的原始分数;Softmax 把分数变成概率;解码策略根据任务需要从概率分布中选择下一个 token。

这条路径也解释了为什么一个看似简单的“输出一个词”,背后包含了表示、词表和选择三个层次。模型不是直接从隐藏状态里拿出一个单词,而是先为词表中的每个 token 打分,再把整组分数转换成可比较的概率。

理解这一步之后,再去看温度、Top-k、Top-p、重复惩罚或 Beam Search,就能知道它们分别作用于哪里:有的改变分布,有的裁剪候选,有的维护多条序列。它们都建立在同一个输出投影和词表概率之上。

常见问题

logits 为什么不能直接当概率?

logits 是线性层产生的原始分数,可以为负,也不要求总和为 1。Softmax 会把它们转换成非负且总和为 1 的概率分布。

注意力里的 Softmax 和输出层 Softmax 有什么区别?

注意力里的 Softmax 在位置维度上归一化,用来分配关注位置;输出层的 Softmax 在词表维度上归一化,用来表示下一个 token 的概率。

温度越高,输出一定越好玩吗?

不一定。温度越高通常会让分布更平、候选更多,但也可能增加不稳定和跑题。它需要结合任务目标、采样范围和上下文质量一起调整。