Transformer 如何把隐藏状态变成词:从 Linear、Logits 到 Softmax 概率
围绕输出层部分,解释解码器隐藏状态如何映射到词表,再由 Softmax 形成下一词概率。
相关工具
解码器输出还不是一个词
Transformer 解码器完成一层层计算后,得到的是一个向量,而不是可以直接显示的文字。这个向量保存了当前位置对上下文的理解:前面已经出现了什么,源序列中哪些信息被关注,以及当前位置适合接什么内容。要把它变成一个具体词,还需要经过输出层。
文中把这一步概括为线性层加 Softmax 层。线性层把模型维度映射到词表大小,得到每个候选词的原始分数;Softmax 再把这些分数转换成总和为 1 的概率分布。于是,模型不再只给出一个模糊的隐藏状态,而是对词表中的每个候选项给出相对判断。

解码器隐藏状态经过线性投影得到 logits,再由 Softmax 转换为词表概率。
Linear 层为什么要连接整个词表
假设模型的隐藏状态维度是 d_model,词表中有 |V| 个词元,那么线性层的权重可以看成一个从 d_model 维到 |V| 维的映射。当前位置的隐藏状态乘上这个矩阵,再加上偏置,就得到一个长度等于词表大小的向量。这个向量的每一项都对应一个候选词元。
例如,词表里可能同时包含“学习”“工作”“旅行”、标点符号和结束标记。线性层不会直接说哪个词一定正确,它只是根据当前上下文为每个词打分。分数高,说明这个候选词更符合当前表示;分数低,说明匹配程度相对弱。所有候选项都要参与计算,因此词表越大,输出投影的规模也越大。
这里的 Linear 不是额外理解文本的注意力模块,它更像一个出口。前面的编码器、解码器和 FFN 负责形成语义表示,Linear 负责把这种表示翻译成词表空间中的一组分数。
Logits 是什么:还没有归一化的分数
线性层输出的值通常称为 logits。它们可以是正数,也可以是负数,大小只表示候选词之间的相对倾向,还不能直接当成概率。logits 之间的差距很重要:某个词的分数比其他词高很多,Softmax 后它的概率就会明显占优;如果几个词分数接近,最终分布就会更平均。
不能把 logits 直接当概率,还有一个简单原因:它们不一定在 0 到 1 之间,也不保证加起来等于 1。Softmax 的工作就是把这组任意实数放进一个可比较的概率分布中。实际训练时,很多框架会把 logits 直接交给交叉熵损失,内部再完成数值更稳定的归一化计算。
Softmax 如何把分数变成概率
Softmax 会先对每个 logit 做指数变换,再除以所有候选项指数值的总和。指数会放大分数差异,所以最高分对应的词通常会获得更高概率;同时,所有结果都是正数,并且总和为 1。这样,模型输出就可以被解释为“当前位置生成每个词元的相对可能性”。
需要注意,Softmax 产生的是分布,不是唯一答案。即使最高概率词最适合作为下一步输出,其他候选词也可能保留一定概率。模型在确定性生成时可以选择最高概率项,在需要更多变化时则从分布中采样。概率分布本身提供的是选择依据,最终怎么选还要看解码策略。

不同候选词经过 logits 和 Softmax 后形成概率分布,最高概率项只是其中一个结果。
训练时,正确答案怎样参与计算
训练阶段,模型会把目标序列右移后的前缀送入解码器,并在每个位置预测下一个词。输出层为每个位置生成一整组词表 logits,真实目标词则作为标签。交叉熵损失会关注真实词在这组分布中的概率:真实词概率越低,损失越大;模型把更多概率放到正确词上,损失就会下降。
因为训练时可以同时准备多个位置的目标,许多位置能够并行完成输出和损失计算。模型不是只检查整句话最后是否正确,而是逐位置比较预测分布与目标词。误差随后通过输出层、解码器、交叉注意力和编码器逐层传回,调整 Linear、注意力和其他模块的参数。
推理时,概率分布怎样变成连续文本
推理时没有现成的目标答案可以提供给模型。解码器先根据起始标记得到第一步概率分布,选择一个词元追加到前缀中;接着用新的前缀再次计算下一步分布,如此循环。每一步只新增一个词元,直到出现结束标记或达到长度上限。
最直接的办法是贪心选择,每次都取当前概率最高的词。它速度快、行为容易理解,但眼前最优不一定带来整句话的最优结果。束搜索会同时保留几条高分路径,采样则按概率随机选择,常见的 Top-k、Top-p 和温度参数都在调整这一步的选择范围。

训练时用真实目标计算损失,推理时从概率分布选词并把结果追加回输入。
词元、词和结束标记都在同一张表里
输出层面对的通常不是自然语言中的“词”,而是词元。一个完整的中文词、英文单词、标点,甚至一个子词片段,都可能对应词表中的一个条目。模型最后选择的是词元,多个词元拼接后才逐渐还原为用户看到的文字。
结束标记也在同一张词表中。它不是普通内容,而是告诉解码过程“输出到这里可以停止”。如果模型始终没有给结束标记足够概率,生成就可能拖得很长;如果它过早选择结束标记,输出又会显得不完整。因此,结束标记的学习和普通词元一样,都依赖训练数据中的目标位置。
为什么输出层是理解 Transformer 的最后一块拼图
从输入词元开始,Transformer 先把文字变成向量,再通过位置编码、注意力、前馈网络和残差连接逐步形成上下文表示。解码器在每个位置得到的隐藏状态,仍然只是模型内部的表达;Linear 把它映射到词表,Softmax 把它变成可比较的分布,解码策略才把分布变成下一步文字。
把这条链路串起来,Transformer 的“生成”就不再像一个突然出现的答案:它是在每个位置重复完成表示、打分、归一化和选词。理解输出层,也能帮助我们区分模型能力与解码策略的影响。模型可能已经给出了多个合理候选,最终文字的确定性、随机性和长度,则还取决于如何使用这组概率。
常见问题
logits 可以直接当成概率吗?
不可以。logits 是线性层输出的未归一化分数,可能为负数,也不保证总和为 1。经过 Softmax 或交叉熵内部的稳定计算后,才可以得到概率意义上的分布。
Softmax 之后一定要选择最高概率的词吗?
不一定。贪心解码会选择最高概率词,但束搜索和采样会保留或抽取其他候选。选择方式取决于任务对确定性、连贯性和多样性的要求。
词表越大,模型输出就一定越好吗?
不一定。更大的词表可以减少某些切分,但会增加输出投影的规模,也会改变词元覆盖方式。词表需要和训练语料、切分策略以及模型容量一起考虑。