跳到主要内容

Transformer 与解码 — 现代语言模型的引擎

这一章讲三件事: Transformer 里那几层零件各自管什么;模型每轮输出的概率清单怎么「挑出」下一个词(解码);以及练完怎么打分(评测)。 链条位置:第 01 章说清了「语言模型=算概率」,这一章给出三代机型的第三代本体,并把「概率→文字」的最后一步补上——后面所有大模型都长这个样子。

1. 顶层全景

输入序列 ─→ [注意力模块:注意力层+残差+层正则] ─→ [全连接前馈模块:FFN层+残差+层正则] ─→ …×N 层 ─→ 概率向量(词典每词一个概率)

解码策略(贪心/波束/Top-K/Top-P/温度) ←┘ → 挑出一个词 → 拼回输入 → 整条流水线重跑
图说:上半是「算概率」,下半是「挑词」。两半都有门道,本章各讲一半。

2. 算概率的那一半:Transformer 的四个零件

2.1 先认识两个词

这一节会把一个词挂在嘴边:编码器,即负责读懂输入的那一半。

另一个词是「解码器」:即负责往外写的那一半。

还有两个零件词:全连接(把上一层全部输入重新加工一遍)。

另一个是残差(把输入原样抄条旁路加回输出)。

注意力层做的事,书里一句话点破:用加权平均把前文信息叠加到当前状态上。做法是把每个输入编码成三份:query(我想找什么)、key(我是什么标签)、value(我携带的内容);当前词拿 query 去和所有 key 算相关度,归一化(压成加起来等于 1 的比例)成权重,再按权重把各家的 value 加起来1。第 01 章说 RNN「把前文压进一个数」,注意力换了个思路:不压缩,直接回头查——这也是它对长距离依赖更好的原因。

2.2 全连接前馈层:占三分之二参数、像字典一样存知识

全连接前馈层,是一个容易被当成配角的零件。书里给出两个硬判断:FFN 占据 Transformer 近三分之二的参数;并且它可以看作一种 Key-Value 模式的记忆(存下之后按号取回)部件2。记住这一点——第 11、12 章的模型编辑,动的全是这个零件。

2.3 残差与层正则:让深网络训得动

先记两个词:正则化(给训练加约束防跑偏),以及上一节说过的残差。

残差(把输入原样抄一条旁路)连接把每层的输入加到输出上,解决梯度消失;层正则化(把数值拉回稳定区间的整流步骤)把每个位置的数值稳住,加速训练并改善泛化3。两者的先后顺序还分出两派:层正则放在残差之后叫 Post-LN,更抗「表征坍塌」但梯度上略弱;放在之前叫 Pre-LN,梯度更稳但抗坍塌略弱4

2.4 一台机器,三种练法

原始 Transformer 分两半,各六层:一半叫编码器,负责读懂输入。

另一半叫解码器(负责往外写);它比编码器多一个交叉注意力(query 来自解码器自己,key/value 来自编码器输出)5

关键是:同一台机器可以拆开单独练,书里列出三种配方,直接对应后面三章的主角6:

配方练法练出谁
掩词补全遮住词让模型猜BERT(第 03 章)
截断补全、顺序恢复遮片段/打乱顺序让模型还原T5(第 03 章)
下一词预测只许看上文猜下文GPT-3(第 04 章)

预训练(正式训练前的大量读书阶段)的损失(衡量答得多差的分数)与第 01 章一致,训练照旧用 Teacher Forcing。

先记一个词:熵(混乱程度的度量)。

损失用的都是交叉熵——熵(混乱程度)的一种、拿预测分布对答案算的惩罚。

Transformer 相比 RNN 的最大红利是并行:整段输入一起算;代价是注意力矩阵随序列长度平方增长,长文本成本陡增——这条尾巴在第 05 章会被人剪掉7

3. 挑词的那一半:解码策略

这一节是本章主走查的舞台。 书构造了一个生成任务:「生成一个以长颈鹿开头的故事」。第一步的概率清单是:是 0.3 / 脖子 0.2 / 看着 0.15……;第二步各词后面又挂着新清单(如「是」后面:草食 0.1/反刍 0.09/偶蹄 0.08;「脖子」后面:长 0.5/优雅 0.2/疼 0.1)8所有解码策略的差别,就是照这张清单怎么挑。(这些概率是书里的演示数值。)

3.1 概率最大化:贪心与波束

想把整句概率做到最大?搜索空间是「词典大小^生成长度」量级,书里直接判定为 NP-Hard——只能近似9

  • 贪心搜索:每步只挑当步最高的词。走查走一遍:第一步挑「是」(0.3)→ 第二步只能从草食/反刍里挑 → 整句「是草食」概率 0.03;而第一步忍痛选第二的「脖子」(0.2)、「长」(0.5),整句「脖子长」概率 0.1——是贪心的三倍多。书对此的评语是:贪心只顾眼前利益,容易陷进局部最优(每步最好、合起来却不是最好)10

  • 波束搜索:每步保留 b 个最优候选。b=2 时手上会有四个候选组合:是草食 0.03、是反刍 0.027、脖子长 0.1、脖子优雅 0.04——整句最好的那个解「脖子长」被保住了11

但故事没完:概率最大的文本往往最平庸,开放式生成里贪心和波束都容易产出重复且平庸的「废话文学」12。想要新颖,就得引入随机。

照概率清单抽签这件事,行话叫采样;两种主流划法如下。

3.2 随机采样:Top-K、Top-P 与温度(温度:挑词的随机度旋钮)

照概率清单抽签这件事,行话叫采样;两种主流划法如下。

Top-K 采样每步只在前 K 个词里按概率抽。固定名额有个两头堵的问题:某一轮概率很扎堆时(腿 0.9/裤子 0.02/围巾 0.01……),Top-2 会把「裤子」也装进来,生成「长颈鹿有四条裤子」式的胡言乱语;某一轮概率很平摊时(觅食 0.35/眺望 0.2/打架 0.15/睡觉 0.1/炫耀 0.03……),Top-2 又装不下「打架」「睡觉」这些少见但合理的词,输出枯燥无趣13

Top-P 采样(也叫 Nucleus 采样)换一个划法:不数个数,按累计概率划线——从最高往下凑,凑够阈值(划下的那条线)p 就停。以 0.9 为这条线:

划线之后,第一轮里 0.9 的线压在「腿」附近,「裤子」进不来;隔壁那组平摊的五个词全能入围。两头的问题同时缓解14

温度(不是另一种挑法,而是调那张「机会饼」形状的旋钮):对分数除以温度 T 再归一化,T>1 分布变平(冷门词机会变大,更随机),0<T<1 强者愈强(更保守)。写诗调高、写代码调低,同一个模型能拧出不同口味15

3.3 走查收尾

回到「长颈鹿开头的故事」:贪心给出「是草食」(0.03),波束给出「脖子长」(0.1,平庸但稳),Top-3 抽签可能抽中「看着躲在」——书说这可能是「一个极具戏剧性的悬疑故事的开头」16清单没变,变的是挑法;生成质量的一半不在模型,在解码。

4. 打分的那一半:评测

4.1 内在评测:困惑度

练完挑完,怎么知道好坏?先看不挂任务的那一类17:

  • 内在评测(不看任务):主打一把尺子——困惑度:模型对测试文本越「肯定」(生成它的概率越高),困惑度越小。这是把「眼不眼熟」变成一个可以比较的数。

    它等价于预测分布与真实分布之间交叉熵(见上)的指数(以 e 为底的幂),困惑度下降意味着模型「胡言乱语」的可能性降低18

4.2 外在评测:BLEU、ROUGE 与模型裁判

  • 外在评测(挂任务):统计尺子 BLEU(精度——挑出来的里面有多少是对的——导向,机器翻译:数生成与参考的 n-gram 重合,书例「big language models」对参考「large language models」,一元精度 2/3、二元 1/2)。

    ROUGE 是与它成对出现的另一把尺(孪生:双生、成对出现;召回导向,摘要:常用 ROUGE-N/L 等变体)19

    两者都量不出表达的多样性,于是有新一代做法:BERTScore 拿词嵌入——把词变成一串数——在句中算出的版本算相似度(仍需参考答案)。

    G-EVAL 干脆让 GPT-4 当裁判——提示词(写给模型的那段话)由任务描述+评分标准、评测步骤(让 GPT-4 自己生成的思维链)、待评文本三段组成,无需人工参考答案;直接取分区分度不够,再对所有可能得分加权平均20

5. 作者的判断与证据

  • 给了证据的:贪心 0.03 vs 波束 0.1(图 1.8 演示);Top-2 的「裤子」与「打架」两个失败案例(图 1.9);BLEU 的一元/二元精度算例。

  • 作者引述、未自证的:FFN 是键值记忆(书引 Geva 等人的论文);Post-LN/Pre-LN 的强弱对比(书让读者去看两篇文献)。

  • 值得注意的坦白:书明确说解码「显著影响着生成文本的质量」,但整套策略都是启发式——概率最大化被判定为 NP-Hard 的那一刻,这个环节就注定没有最优解,只有取舍

6. 边界与局限

  • 本章温度只讲了 T 与分布平坦的关系;样板书《这就是ChatGPT》补充了另一面:温度 0 写长文会陷入混乱重复——书里没写,但属于同一机制。

  • 书的评测部分停在 G-EVAL;「LLM——大语言模型——当裁判是否偏向自家输出」这类偏差问题书未涉及。

  • 平方复杂度(代价随长度平方涨)在本章只是「挑战」一句话;代价直着涨的解法要等第 05 章。

  • 平方复杂度(代价随长度平方涨)在本章只是「挑战」一句话;代价直着涨的解法要等第 05 章。

  • 具体演示概率(0.3/0.2/0.5 等)是讲解用的数,不是任何真实模型的输出。

7. 可带走的

  1. 注意力=拿 query 对 key 打分、按分搬 value;不压缩前文、直接回头查。
  2. FFN 占近 2/3 参数,是键值式记忆体——模型编辑动的是它。
  3. 残差管梯度、层正则管稳定;Pre-LN 与 Post-LN 各有一弱。
  4. 掩词补全→BERT、截断补全→T5、下一词预测→GPT:同一台机器三种练法。
  5. 贪心只顾眼前:0.3 的开头赔进 0.03 的整句;波束 b=2 捞回 0.1。
  6. Top-K 名额固定两头堵;Top-P 按概率质量划线;温度只改分布形状不改候选。
  7. 概率最大化是 NP-Hard,解码永远是取舍:稳(波束)与浪(采样)没有对错。
  8. 困惑度是任务无关的体检尺子;BLEU/ROUGE 量重叠量不出多样;G-EVAL 让模型当裁判。

8. 原文地图

主题原书章原文位置
注意力层与 Q/K/V1.3 基于 Transformer 的语言模型text/01-ch01.txt:571(搜「加权平均」) · text/01-ch01.txt:573(搜「query」)
FFN 占 2/3 参数、键值记忆1.3 基于 Transformer 的语言模型text/01-ch01.txt:598(搜「三分之二」)
残差与层正则1.3 基于 Transformer 的语言模型text/01-ch01.txt:632(搜「残差连接」) · text/01-ch01.txt:612(搜「层正则化」)
Post-LN 与 Pre-LN1.3 基于 Transformer 的语言模型text/01-ch01.txt:642(搜「Post-LN」) · text/01-ch01.txt:662(搜「表征坍塌」)
编码器解码器与交叉注意力1.3 基于 Transformer 的语言模型text/01-ch01.txt:668(搜「Encoder-Decoder」) · text/01-ch01.txt:680(搜「交叉注意力模块」)
三种预训练配方1.3 基于 Transformer 的语言模型text/01-ch01.txt:700(搜「掩词补全」)
并行红利与平方代价1.3 基于 Transformer 的语言模型text/01-ch01.txt:772(搜「并行」) · text/01-ch01.txt:776(搜「平方次增长」)
概率最大化 NP-Hard1.4 语言模型的采样方法text/01-ch01.txt:804(搜「NP-Hard」)
贪心局部最优1.4 语言模型的采样方法text/01-ch01.txt:814(搜「眼前利益」) · text/01-ch01.txt:824(搜「0.03」)
波束搜索 b=21.4 语言模型的采样方法text/01-ch01.txt:441(搜「0.1」)
废话文学1.4 语言模型的采样方法text/01-ch01.txt:871(搜「略显平庸」) · text/01-ch01.txt:873(搜「废话文学」)
Top-K 两头堵1.4 语言模型的采样方法text/01-ch01.txt:931(搜「固定」) · text/01-ch01.txt:935(搜「胡言乱语」) · text/01-ch01.txt:942(搜「枯燥无趣」)
Top-P 划阈值1.4 语言模型的采样方法text/01-ch01.txt:965(搜「Nucleus」) · text/01-ch01.txt:990(搜「阈值」)
温度1.4 语言模型的采样方法text/01-ch01.txt:1003(搜「Temperature」) · text/01-ch01.txt:1053(搜「平坦」)
困惑度1.5 语言模型的评测text/01-ch01.txt:1076(搜「困惑度」) · text/01-ch01.txt:1120(搜「熵减」)
BLEU 与 ROUGE1.5 语言模型的评测text/01-ch01.txt:1140(搜「精度导向」) · text/01-ch01.txt:1170(搜「big language models」)
BERTScore 与 G-EVAL1.5 语言模型的评测text/01-ch01.txt:1250(搜「BERTScore」) · text/01-ch01.txt:1297(搜「G-EVAL」) · text/01-ch01.txt:571(搜「加权平均」)

Footnotes

  1. 出处:「1.3 基于 Transformer 的语言模型」第 571 段(text/01-ch01.txt:571,搜「加权平均」)。query/key/value 三份编码与权重归一化在同段(text/01-ch01.txt:573,搜「query」)。

  2. 出处:「1.3 基于 Transformer 的语言模型」第 598 段(text/01-ch01.txt:598,搜「三分之二」)。原文:「全连接前馈层占据了 Transformer 近三分之二的参数,掌管着 Transformer 模型的记忆」,键值记忆的观点引自文献 [7] (Geva 等,EMNLP 2021)。

  3. 出处:「1.3 基于 Transformer 的语言模型」第 632 段(text/01-ch01.txt:632,搜「残差连接」)与第 612 段(text/01-ch01.txt:612,搜「层正则化」)。

  4. 出处:「1.3 基于 Transformer 的语言模型」第 642 段(text/01-ch01.txt:642,搜「Post-LN」)与第 662 段(text/01-ch01.txt:662,搜「表征坍塌」)。

  5. 出处:「1.3 基于 Transformer 的语言模型」第 668 段(text/01-ch01.txt:668,搜「Encoder-Decoder」)。交叉注意力的三份输入来源在第 16 段末(text/01-ch01.txt:687,搜「交叉注意力模块的输入」)。

  6. 出处:「1.3 基于 Transformer 的语言模型」第 700 段(text/01-ch01.txt:700,搜「掩词补全」)。BERT/T5/GPT-3 的对应关系在同一句给出。

  7. 出处:「1.3 基于 Transformer 的语言模型」第 772 段(text/01-ch01.txt:772,搜「并行」)与第 776 段(text/01-ch01.txt:776,搜「平方次增长」)。

  8. 出处:「1.4 语言模型的采样方法」第 842 段(text/01-ch01.txt:842,搜「生成一个以长颈鹿开头的故事」)。图 1.8 的各步概率(0.3/0.2/0.15 与 0.1/0.09/0.08、0.5/0.2/0.1 等)为书内演示数值。

  9. 出处:「1.4 语言模型的采样方法」第 804 段(text/01-ch01.txt:804,搜「NP-Hard」)。原文判定该问题为 NP-Hard,现有方法均为启发式。

  10. 出处:「1.4 语言模型的采样方法」第 814 段(text/01-ch01.txt:814,搜「眼前利益」)。0.03 与 0.1 的对比在第 824 段(text/01-ch01.txt:824,搜「0.03」)与第 441 段(text/01-ch01.txt:441,搜「0.1」)。

  11. 出处:「1.4 语言模型的采样方法」第 867 段(text/01-ch01.txt:867,搜「四个候选组合」)。四个组合的概率:0.03、0.027、0.1、0.04。

  12. 出处:「1.4 语言模型的采样方法」第 871 段(text/01-ch01.txt:871,搜「略显平庸」)与第 873 段(text/01-ch01.txt:873,搜「废话文学」)。

  13. 出处:「1.4 语言模型的采样方法」第 931 段(text/01-ch01.txt:931,搜「固定」)与第 935 段(text/01-ch01.txt:935,搜「胡言乱语」)、第 942 段(text/01-ch01.txt:942,搜「枯燥无趣」)。图 1.9:「长颈鹿有四条裤子」与「长颈鹿用脖子来觅食/眺望」两个例子。

  14. 出处:「1.4 语言模型的采样方法」第 965 段(text/01-ch01.txt:965,搜「Nucleus」)与第 990 段(text/01-ch01.txt:990,搜「阈值」)。0.9 阈值同时解决两头的例子在第 937 段(text/01-ch01.txt:937,搜「四条裤子」)。

  15. 出处:「1.4 语言模型的采样方法」第 1003 段(text/01-ch01.txt:1003,搜「Temperature」)与第 1053 段(text/01-ch01.txt:1053,搜「平坦」)。T>1 更随机、0<T<1 更保守;开放创作与代码生成的口味差异在第 1007 段(text/01-ch01.txt:1007,搜「随机性」)。

  16. 出处:「1.4 语言模型的采样方法」第 926 段(text/01-ch01.txt:926,搜「Top-3」)与第 851 段(text/01-ch01.txt:851,搜「戏剧性」)。

  17. 出处:「1.5 语言模型的评测」第 1066 段(text/01-ch01.txt:1066,搜「内在评测」)。不依赖任务的叫内在评测,挂具体任务的叫外在评测。

  18. 出处:「1.5 语言模型的评测」第 1076 段(text/01-ch01.txt:1076,搜「困惑度」)与第 1120 段(text/01-ch01.txt:1120,搜「熵减」)。

  19. 出处:「1.5 语言模型的评测」第 1140 段(text/01-ch01.txt:1140,搜「精度导向」)与第 1170 段(text/01-ch01.txt:1170,搜「big language models」)。BLEU 例:P1=2/3、P2=1/2;ROUGE 四变体在第 1193 段(text/01-ch01.txt:1193,搜「ROUGE」)。

  20. 出处:「1.5 语言模型的评测」第 1250 段(text/01-ch01.txt:1250,搜「BERTScore」)与第 1297 段(text/01-ch01.txt:1297,搜「G-EVAL」)。G-EVAL 三段式提示与得分加权平均在第 1303 段(text/01-ch01.txt:1303,搜「任务描述」)与第 571 段(text/01-ch01.txt:571,搜「加权平均」)。