一句话定义
解码头(LM Head)是语言模型最末端的一个线性层,它把 Transformer 最后一层输出的高维隐状态(hidden state)映射成"整个词表上的分数",从而决定下一个 token 该是哪个词。
它到底做了什么
Transformer 跑完所有层之后,每个位置都会留下一个向量,维度常常是几千。这个向量是模型自己的"私密语言",人类读不懂。解码头的作用就是当翻译。
它的核心是一块权重矩阵:行数等于词表大小(vocabulary size,词表越大行越多,通常几万起),列数等于隐状态维度。用一个矩阵乘法,把一个几千维的向量变成一组几万维的分数,这组分数叫 logits——词表里每个词都有一个分数。再经过 softmax 归一化,就得到一份概率分布:某个词 62%,某个词 8%,其余词分掉剩下的。
打个比方:公司开完一场长会,最后一间会议室里坐着一屋子人,人人心里有想法,但都说不出口。解码头就是那个拿话筒的主持人,把词表里所有候选词请上台逐个打分,谁分高谁被念出来。它不负责"想",只负责"念"。
和相邻概念的区别
| 概念 | 作用方向 | 干什么 |
|---|---|---|
| 输入嵌入层(AI 词典:Embedding">Embedding) | 词 ID → 向量 | 把词喂进模型 |
| 解码头(LM Head) | 向量 → 词表分数 | 把词吐出来 |
| 采样策略(Sampling) | 分数 → 具体选谁 | 温度、top-k、top-p 等 |
三者容易混。首先,解码头和输入嵌入层方向相反,但很多模型让两者共享同一个权重矩阵(叫 weight tying,权重共享),省参数也更稳,这是常见做法而非必然。其次,解码头只给出"全部候选词的分数表",至于怎么挑——取最高分、按概率抽、还是加温度让结果更随机——那是采样策略的事,发生在解码头之后。
对从业者的意义
第一,参数量和成本。这层的参数是"词表大小 × 隐藏维度",往往是模型里最大的单个矩阵之一。多语言模型词表更大,这一层就更吃显存和算力,推理时的 softmax 开销也更大。
第二,微调时它常常要动。如果换了领域、加了特殊 token,解码头通常需要跟着训练;很多参数高效微调方法则选择冻结它。
第三,拿到 logits 就有很多事可做:约束解码(只允许输出合法 JSON 的字段名或纯数字)、算置信度、把生成模型当分类器用(比较几个候选答案的分数)。
一句话收尾:解码头本身不"理解"语言,真正的语义在上游各层积累,它只是一个翻译器加记分牌。至于维度、词表大小和是否共享权重,各家实现不同,以你所用模型的官方代码和文档为准。
