跳转到内容

第 18 章 Transformer 家族:BERT、GPT 与 T5

我们已经拼出了一个块,能在位置之间交换信息,也能变换各位置的表示。但“使用 Transformer”还没有规定学习任务。补一个缺失的词时,能不能看两边?续写时,是不是只能看前缀?生成新答案时,能不能一边逐个生成 token,一边阅读另一份完整文档?

这几种任务安排信息的方式不同。本章用同一个短句,对照三种影响很大的组合:BERT、最初的 GPT 方法,以及 T5。目标是辨认结构和训练目标,不是复现它们的训练,也不是给模型质量排座次。论文描述的是特定模型与实验;后来的模型或聊天产品,未必保留最初的全部选择。

例 18.1:red key . 中,究竟要预测什么? 为了看清可见关系,这个例子把每个单词和句号都当作一个给定 token,并不使用 BERT、GPT、T5 的真实 token ID。我们省略源序列边界、分类符和分隔符,让表格保持小规模;需要时仍画出解码器的 BOS 和末尾 EOS。真实实现必须遵守所用 tokenizer 的边界约定。

第一个问题是:“根据其余句子,第一个槽位应该填什么?”把 red 藏起来,输入 [MASK] key .,让缺失位置的输出预测 red。查询可以使用 key 和句号,因为两者都是允许的证据;也可以读取 [MASK] 的表示,它标出了缺失位置,却没有给出答案。

第二个问题是:“只知道已经出现的内容,下一个 token 是什么?”训练时输入 [BOS,red,key,.],对应评分目标为 [red,key,.,EOS]。借助因果三角掩码,可以在一次前向计算中处理全部已提供的输入。red 上方的输出预测 key,所以它能看 BOS 和 red,不能看后面的 key 输入。

第三个问题是:“根据留下来的源文本,恢复删去的片段。”把 red key 这两个 token 换成特殊标记 <S0>,源序列就成了 [<S0>,.]。目标为 [<S0>,red,key,<S1>,EOS]。<S0> 标识被删去的片段,最后的哨兵标记 <S1> 在 EOS 之前标明片段恢复序列的结束。这些哨兵标记是预留 token,不是自然语言指令,也不是偶然发现的词。如果删了多个片段,就用不同哨兵标记区分边界。

表 18.1:同一句原文,三种给定的输入与目标约定。 “评分”指计入相应目标的损失,不是只要网络算出了那个位置就算一次。

方式网络输入待评分目标预测 red 时可用的证据
BERT 式 MLM[MASK] key .输入槽位 1 的 red替换后的全部三个输入槽位
GPT 式因果语言模型BOS red key .错开一位的 red key . EOS第一次预测时只有 BOS
T5 式片段去噪源序列 <S0> .;解码输入 BOS <S0> red key <S1>解码目标 <S0> red key <S1> EOS替换后的完整源序列,以及解码前缀 BOS <S0>

因此,同一个 red 是在不同条件下被预测的。表中某种方式的损失更低,不能直接解释为语言能力更强,因为可用证据不同,待评分目标的数量也不同。

18.2 双向阅读,只训练选中的缺失位置

Section titled “18.2 双向阅读,只训练选中的缺失位置”

BERT 使用 仅编码器(encoder-only) 堆叠,自注意力可以组合真实输入位置两侧的内容。本例替换后的输入有三个槽位,因此可见性表有三条查询行、三列键,每个格子都允许。输出表示仍与三个输入位置对齐,被选中的第一位置负责预测缺失 token。这叫 掩码语言建模(masked language modeling,简称 MLM)。

这里出现了两种不同的“掩码”。把 red 替换成 [MASK],改变的是 输入 token;注意力的可见性掩码,控制的是 查询可以使用哪些位置。BERT 算例把答案 token 藏起来,同时允许双向注意力,并不是把 [MASK] 所在的位置也对所有查询隐藏。混淆两者,就会描述出另一个训练问题。

原始 BERT 为 MLM 随机选中 15% 的 token 位置;在选中位置中,80% 换成 [MASK],10% 换成随机 token,10% 保持原样。例 18.1 只展示一个选中位置走 [MASK] 分支,没有模拟整个语料上的这些比例。原始 BERT 还使用下一句预测目标。这个额外目标和具体替换比例,都不是所有仅编码器模型必须遵守的定义。BERT,第 3.1 节。

如果任务是给一份完整可见的句子分类,读取左右两侧符合任务规定。如果却用这种不改动的双向结构,在完整句子上给下一个 token 预测评分,就违背了任务,因为它可能看到答案。编码器可以参与生成或补全文本的系统,但通常的反复预测下一个 token,与一次 BERT MLM 前向计算,不是同一个操作。

最初的 GPT 方法使用 仅解码器(decoder-only) Transformer 语言模型,配合 因果语言建模目标(causal language-modeling objective)。这里的“仅解码器”指从前缀生成内容的堆叠,没有另设编码器,也没有读取编码器输出的交叉注意力路径。它并不是保留整个原始 Transformer 解码器,却把需要连接的编码器悬空。

表 18.1 中的四槽位输入,允许的键集合依次为 [1]、[1,2]、[1,2,3]、[1,2,3,4]。共有十对允许的查询与键,而非十六对。最后一个输出读取完整句子后预测 EOS。生成时,未来输入根本还没有提供;程序必须选一个 token、追加到输入,再次运行模型。教师强制让训练能够并行评分,而真正生成的 token 仍依赖前面已经作出的选择。

GPT 原始研究还把预训练参数用于有监督下游任务的适配。这里区分的是 训练阶段,不是另一类可见关系。因果语言模型也可以先读完作为前缀的完整输入,再输出分类标签,并不只能做开放式续写。采用仅解码器结构,也不等于已经接受过面向对话的指令训练。原始 GPT,第 3.1—3.3 节。

18.4 一边读完整源序列,一边按顺序写目标序列

Section titled “18.4 一边读完整源序列,一边按顺序写目标序列”

T5 使用 编码器—解码器(encoder-decoder) 结构。编码器读取完整源序列,解码器则结合两种注意力关系:对解码输入做因果自注意力,对所有有效编码器输出做交叉注意力。交叉注意力中的 Q 来自解码器查询,K、V 来自编码后的源序列。“能看完整源序列”,不等于“能看未来目标”。

本例源序列有两个槽位,编码器自注意力允许全部四对连接。解码输入有五个槽位,允许 1+2+3+4+5=15 对因果连接。解码器到源序列的注意力允许五乘二,共十对连接。这是三张不同的矩阵,每个头中的 shape 分别为 [2,2]、[5,5]、[5,2]。源、目标可以不同长,所以交叉注意力不必是方阵。

BERT 式:选中的缺失位置
  1. 文本片段输入:[MASK] | key | .
  2. 处理步骤每条查询 → 键 1、2、3(9 对)
  3. 文本片段评分槽位 1 → red

所有输入槽位可见,但 red 已被替换。

GPT 式:逐位置预测下一 token
  1. 文本片段输入:BOS | red | key | .
  2. 处理步骤允许键:1;1、2;1、2、3;1、2、3、4
  3. 文本片段目标:red | key | . | EOS

首次预测 red 时只有 BOS 可用;整张表共 10 对因果连接。

T5 式:恢复移除的片段
  1. 文本片段源序列:<S0> | .
  2. 处理步骤编码器 2×2:全 4 对;解码器 5×5:15 对因果连接
  3. 处理步骤交叉注意力 5×2:10 对源连接全部允许
  4. 文本片段解码前缀 BOS | <S0> → red

完整源序列可读,未来目标仍不可见。

图 18.1 — 同一个目标,三套不同的可用证据。 本书原创教学图,CC BY-SA 4.0。数值与规则见正文及共享数据。

图 18.1 追踪了预测 red 时的证据。对 T5 来说,当 <S0> 已在解码前缀中,该位置的输出可以使用完整的已替换源序列和当前前缀,不能从解码输入读取即将作为目标的 red。源序列中也不能误放回已删去的片段。如果做这项片段恢复任务时,却把完整 red key . 当作源输入,任务就变成了从可见来源复制答案。

这种 去噪(denoising) 先破坏一份完整原始记录,再把恢复缺失内容作为训练目标。T5 的片段去噪目标包含被移除的片段和哨兵标记,不一定是把整句原文按原位置输出。用于下游任务时,也可以把任务表示成源文本与目标文本。其内部归一化和其他细节,不必与第 17 章的小块相同。T5,第 3.1.4 节、图 2 与第 3.2 节。

表 18.2:只知道模型名字,还回答不了这四类问题。

分类轴要检查什么可能的回答
网络架构有哪些堆叠和注意力连接?仅编码器、仅解码器、编码器—解码器
训练目标提供什么输入,预测什么,在怎样的可见性下评分?MLM、因果下一个 token 预测、片段去噪
训练阶段这轮参数更新使用什么数据,服务于什么目的?面向多种文本的预训练、任务微调、面向指令的后训练
产品或界面用户怎样输入,怎样收到输出?聊天界面、分类接口、文本生成应用

这些历史组合有助于定位,但不是所有允许组合的清单。例如,编码器—解码器可以把前缀作为源、后缀作为目标,学习续写。仅解码器也可以按明确的可见性和损失规则,在“受损源文本加目标文本”上训练。T5 研究把结构与目标作为独立实验选择来比较;其结果适用于论文的数据和评测设置,不能直接变成所有模型家族的普遍排名。

同样,聊天界面没有告诉我们底层架构、数据、训练阶段,也没有说明某次回答是否来自外部工具。“LLM”既不等于聊天窗口,也不等于某一条架构分支。这些分类都不会赋予查询或取消真实订单的权限。本书的订单案例仍需要由应用确定允许什么操作,以及什么证据才算真实的操作结果。

18.6 为明确任务作选择,再检验选择

Section titled “18.6 为明确任务作选择,再检验选择”

例 18.2:同一个钥匙任务的三种要求。 假设已有标注记录,也有进行小规模受控比较的预算。选择方案时,先说明哪些输入已知,再规定怎样判断成功。表 18.3 给出可行起点,以及应该否决的一种想当然。

表 18.3:方案是否合适,取决于任务条件。

任务与标准可行的起始方案应否决的假设
给出完整 red key . 或 blue key .,输出颜色标签;用留出记录上的精确标签准确率评分编码器表示接分类器;也可用因果模型的末位置表示或生成标签整句本来就允许提供时,不能把双向阅读叫作泄漏
给出 red key,预测下一个 token;在相同前缀下评估留出损失因果语言模型;也可采用输入与目标约定一致的编码器—解码器续写不能把未经改动的双向完整输入计算,当作只看过前缀
给出有错误的钥匙指令,输出修正版;检查指定修改和应保留的内容编码器—解码器的源到目标训练;也可使用因果的“源前缀加答案”格式编码器—解码器的 shape 本身教不会纠错,还需要合适的样本对与评测

公平的实测比较需要固定记录与划分,提供等价的任务证据,控制或报告计算量和模型大小,规定目标格式,再用相同任务指标评分。如果 tokenizer 不同,原始“每 token 的 nat”分母也不同,不能自动拿来横向比较。本章作出的是架构判断,没有测量各方案的相对性能。

虚构北京差旅限额也能说明这一边界。更新后的政策文档把 600 换成 750,只要信息路径安排合适,不同架构都有可能访问新值。但家族名称不能证明应用提供了正确版本、模型遵循了新值,或参数已经更新。架构说明有哪些路径,证据还得说明实际流过了什么。

BERT 式缺失 token 预测,可以读取替换后输入的左右两侧;GPT 式续写,把各个输出限制在前缀之内;T5 式片段恢复,把完整源序列阅读与因果目标生成分开。这些描述比一个家族名或产品名更明确,因为它们指出了可用信息和待预测目标。

Mini GPT 将选择仅解码器结构和因果目标。我们还需要把真实文本转换成稳定 ID,保留边界,并对齐输入与目标。第 19 章先处理这一接口,第 20 章再把模型拼起来。

  1. 画出或列出 BERT 式三槽位示例、GPT 式四槽位示例中,各行允许的键。为什么在规定的替换分支中,BERT 可以允许全部连接,却没有直接暴露缺失的 red?
  2. T5 式示例的解码器即将预测 key。此时可用的解码前缀和源序列分别是什么?该查询可以看几个解码位置、几个源位置?
  3. 某模型有编码器和因果解码器,训练任务却是续写文档前缀。它的架构必须叫 GPT 吗?请分别指出架构和目标。
  4. 厂商提供聊天界面,并说模型接受过指令微调。这说明了表 18.2 中的哪些轴?还有哪些没有说明?
  5. 一项比较在相同原始句子上测得 MLM 模型损失低于因果模型。要把它解释为性能更好,还应先检查什么?请提出一项共同的下游测试。
  1. BERT 每行都允许 [1,2,3];GPT 依次允许 [1]、[1,2]、[1,2,3]、[1,2,3,4]。BERT 选中位置的输入是 [MASK],不是 red;该目标本来就允许使用剩余的右侧上下文。可见性要按任务规定判断,不能预设所有语言模型都必须因果。
  2. 解码输入前缀为 [BOS,<S0>,red],共三个位置;源序列为 [<S0>,.],共两个位置。该查询通过自注意力读取三个前缀位置,通过交叉注意力读取两个源位置。即将预测的 key 不在任何一个允许集合中。
  3. 架构是编码器—解码器,目标是在给定源前缀的条件下续写。某一种因果目标,不会把两套网络堆叠变成仅解码器结构,也不会自动赋予一个历史模型的产品名称。
  4. 已说明界面和一个训练阶段。堆叠与连接、完整训练目标仍未说明,数据、测过的能力和工具也未知。仅知道接受过指令微调,无法确定网络架构。
  5. 检查破坏输入的方式、左右上下文、选中的目标位置、tokenizer、平均损失分母和数据划分。MLM 可能使用因果模型看不到的右侧信息,也可能只评分较少位置。可以安排共同的留出颜色分类任务:都提供完整句子,使用同样的精确标签标准,并报告训练资源。结果只说明这项任务上的表现,不涵盖全部语言能力。