跳到主要内容

Transformer 与 Transformer-XL — 抛弃循环之后

这一章讲三件事: Transformer 用哪两个零件替换掉 RNN;它付出了什么代价 (词袋、碎片、逐词慢);Transformer-XL 怎样用「暂存+相对位置」把账补回来。 读完你会发现:上一章的注意力六步,换了个名字全部还活着。

1. 这一章讲什么

书里对 Transformer 的零件定义只有两样——自注意力,加前馈(前馈就是一层普通的全连接)。原话是「由且仅由自注意力模块和前馈神经网络组成」: 没有循环、没有卷积1。替换 RNN 的动机有二:RNN 顺序计算,「时间片 t 的计算 依赖 t − 1 时刻的计算结果,这样限制了模型的并行能力」;而且顺序计算一路丢信息, LSTM 对「特别长期的依赖现象也无能为力」2。Transformer 的答案: 「将序列中任意两个位置之间的距离缩小为一个常量」——任何词之间都是一步直达3

但书里同时提醒:Transformer 原论文「比较难懂」,尤其是 Q、V、K 到底代表什么, 作者并没有说明;本书的讲法借鉴了 Jay Alammar 的博客解读4。 我们的拆解接着往下一层:Q、K、V 其实是上一章注意力六步换了名字。

2. 顶层全景:一句话的旅程

「The animal did not cross the street because it was too tired」
│ 词嵌入(把每个词翻译成一串数)

┌──────────── 编码块 ×6 ────────────┐
│ 自注意力:每个词向所有词发问、收答案 │
│ 全连接:对每个位置独立加工 │──► 下一块
└───────────────────────────────────┘
(每个小块都有直通捷径,第 03 章的规矩原样沿用)

图说:翻译任务还要在右边堆 6 个解码块,多一种「看编码结果」的注意力。

主走查:处理到 it 这个词(书里挑的句子与第 09 章同款:靠 it 判断指代)。

3. 核心原理

3.1 主走查:自注意力的七步

书里给 it 的自注意力写全了中间量5:

① it 的嵌入向量:512 维
② 乘三个不同的权重矩阵,得到三份 64 维向量:
查询 q(it 想找什么) 键 k(每个词能提供什么) 值 v(每个词的实际内容)
③ 打分:q(it)·k(每个词) —— 与第 09 章第②步的点乘打分同一件事
④ 除以 √dk(=8):「为了梯度的稳定」,防止分数过大把 softmax 推到饱和
⑤ softmax:分数变成一组 0~1 的注意力预算
⑥ 按预算加权求和所有词的 v —— 得到 it 的新表示(内容向量,第 09 章第⑤步)
⑦ 多个位置各自做完,拼成新的特征矩阵,过全连接层

Q、K、V 这套名字直接取自信息检索(就是搜索)系统:书里举的例子是电商搜「红色羽绒服」—— 你输入的是查询(Query),商品页上的类目颜色是键(Key),点开看到的商品是值(Value); 「点乘是计算两个矩阵相似度的方法之一」,而权值就是查询与键的相似度6。 对照第 09 章:打分=查询点乘键,加权求和=按预算取值——六步变七步,多出来的只是 除以 √dk 和「多份查询并行」

多份查询并行就是多头注意力(multi-head attention):相当于 8 个不同的自注意力 各自看一遍,输出拼起来再过全连接——不同的头可以各自盯不同的造句关系7。 解码器一侧多一种「编码器-解码器注意力」:查询来自已译部分,键和值来自编码结果, 即「当前翻译和编码的特征向量之间的关系」;由于翻译只能看到已译出的前文,这里用的 是带掩码的版本(掩码多头注意力)8。最后接 softmax 全连接输出词概率, 用 CTC 等损失训练9

3.2 代价一:词袋。位置要靠「外加」的信息救

自注意力对「谁挨着谁」完全无感——书里的判词很狠:「无论句子的结构被怎么打乱, Transformer 都会得到类似的结果。换句话说,Transformer 只是一个功能更强大的词袋模型」10。 补救是给每个位置加一份位置编码(给每个位置造一份专属数字标记,与词的嵌入向量——把词翻译成的一串数——直接相加),用 正弦、余弦(三角函数,高中那种波浪线)按位置生成。为什么偏偏是正弦?书里给了数学理由:由两角和公式, 位置 k+p 的编码可以写成位置 k 的编码的线性变换——模型容易学到「相对隔了几位」11

但书里在小结里给了定性:这只是「一个权宜之计,并没有改变 Transformer 结构上的 固有缺陷」12。第 09 章的双向 RNN 天生带顺序,Transformer 要靠外挂补—— 这个「外挂 vs 天生」的差距,正是 3.4 节碎片的祸根。书里同时点名另一条代价: 粗暴抛弃卷积「使模型丧失了捕捉局部特征的能力」13

3.3 Transformer-XL:缓存与相对位置

Transformer 处理长文本的方式暴露了两个新病。其一,上下文——指当前正在处理的文字连同它的前后文——会在分段时被切碎:输入被切成固定 512 的段,「数据并不会在段与段之间流通,因此模型能够捕获的长期依赖的上限便是段的长度」; 而且每段的位置编码一模一样,「完全无法确认它们属于哪个片段」14

其二,推理(拿训好的网络真正去预测的阶段)慢:自回归地逐段预测,每前进一个词,整段都要重新过一遍网络15

武器一:片段递归(递归:上一段的计算结果被下一段接着用)。所谓缓存,就是「存下来供后面直接取用」。把上一段的隐层状态这样存下来反复用 (这部分存下来的数据行话叫缓存,不参与梯度,用「停止求梯度」标记)。能看到的上文从 512 拉长到「段长 × 缓存段数」, 即 O(NL);推理从逐词变成逐段,书里给的数字是「提速了 300 到 1 800 倍」16。 书里还点破了本质:这是「典型的用空间换时间的方案」,而「Transformer-XL 是一个和 残差网络思想非常接近的模型,它相当于在两个片段之间添加了一条捷径」17—— 第 03 章的捷径定律,跨篇章应验。

武器二:相对位置编码。 判断两个词的关系,重要的是「隔多远」而不是「全局第几」。 书里的例子:对「I think therefore I am」,RNN 里两个 I 收到的信息天然不同;Transformer 没有位置编码时,两个 I 的输入完全一致——顺序信息必须从结构里补18。XL 把 注意力打分式(4.22)展开成四项,做了三个改动:内容与位置各用各的变换矩阵(不再共享 权值);把绝对位置换成像第 09 章那样的相对距离编码(无需学习);查询侧的全局偏置 对所有位置统一——四项从此各有名字:内容寻址、内容相对位置偏差、全局内容偏置、 全局位置偏置19

判断(我们的,不是书里的): 把第 09、10 两章连读,Transformer 并没有发明新机制, 它做的是减法:去掉循环,让六步注意力直接跑在所有位置对上,再用位置编码和 残差把丢掉的信息补回来。它的胜利是工程性的——并行性好,「符合目前的硬件(主要指 GPU)环境要求」20。理解这一点,后面第 11、12 章所有预训练模型都是 这套减法的搬运工。 如果错,会错在: 如果长程依赖之外还有只有循环结构能表达的性质(比如严格的 递归计数),减法就会留下真空;书里引的「丧失局部特征」批评说明作者自己也留了这个问号。

4. 作者的判断与证据

书里给了实验证据的: XLNet 之前,Transformer-XL 在语言模型上的提速与长度数据 (300~1800 倍、O(NL))均转述自论文;MNIST/ Penn Treebank 上的对比在书里以图示呈现。

书里署名的评价: 「Transformer 最终没有逃脱传统深度学习的『套路』,只是一个全连接 (或者是一维卷积)加注意力的结合体」——这句批评与赞美同框;「RNN+CNN+Transformer 的结合体可能会带来更好的效果」是作者的个人判断21

5. 边界与局限

  • 固定长度 L=512 的分段即便有片段递归,默认窗口仍是工程妥协;
  • 位置编码的正弦方案是「无参数」的,后来可学习的位置编码、随位置转动的编码等变体 层出不穷,书只在 CSWin 一节带过 LePE;
  • 书里的 Transformer 讲解以机器翻译为语境;BERT 式只用编码器、GPT 式只用解码器的 裁剪方式,留到第 11、12 章。

6. 可带走的

  1. Transformer=自注意力+全连接,堆 6 层编码块+6 层解码块;每个小块带残差捷径;
  2. Q/K/V=信息检索的查询/键/值:点乘打分、softmax 变预算、按预算取值的加权平均 ——第 09 章的六步,加「除以 √dk」和「多头并行」;
  3. 多头=几套注意力并行各看各的;掩码多头=只许看已生成的部分;
  4. 自注意力天生是词袋:位置编码是外挂;正弦编码的好处是相对位置可线性表示;
  5. 长文本两病:段间不流通(碎片)与逐词重算(慢);片段递归用缓存一次治俩, 本质是段间捷径;
  6. 相对位置比绝对位置重要:四项分解后,「内容找内容」与「位置找内容」各管一摊;
  7. 用空间换时间(缓存)与用直通换深度(捷径)是本书反复出现的两个母题。

7. 原文地图

主题原书节原文位置
构成与替换 RNN 的理由4.3 Transformertext/10-p181-200.txt:127(搜「由且仅由自注意力」) · text/10-p181-200.txt:134(搜「限制了模型的并行能力」) · text/10-p181-200.txt:138(搜「缩小为一个常量」)
论文难懂与博客解读4.3 Transformertext/10-p181-200.txt:144(搜「比较难懂」)
主走查:it 与 QKV 七步4.3.1 Transformer 详解text/10-p181-200.txt:210(搜「too tired」) · text/10-p181-200.txt:218(搜「Value,V」) · text/10-p181-200.txt:227(搜「梯度的稳定」)
信息检索类比4.3.1 Transformer 详解text/10-p181-200.txt:249(搜「信息检索系统」) · text/10-p181-200.txt:383(搜「限制了其应用领域」)
多头与掩码多头4.3.1 Transformer 详解text/10-p181-200.txt:257(搜「自注意力的集成」) · text/10-p181-200.txt:271(搜「掩码多头注意力」)
词袋批评与正弦编码4.3.2 位置嵌入text/10-p181-200.txt:287(搜「词袋模型」) · text/10-p181-200.txt:303(搜「线性变化」)
小结:优点与两条代价4.3.3 小结text/10-p181-200.txt:313(搜「任意两个单词的距离是 1」) · text/10-p181-200.txt:318(搜「丧失了捕捉局部特征的能力」) · text/10-p181-200.txt:323(搜「权宜之计」)
XL 动机与两武器4.4 Transformer-XLtext/10-p181-200.txt:332(搜「200 个左右」) · text/10-p181-200.txt:337(搜「片段递归」) · text/10-p181-200.txt:340(搜「上下文碎片问题」)
分段、碎片与慢推理4.4.1 Transformer 的缺点text/10-p181-200.txt:357(搜「段的长度」) · text/10-p181-200.txt:383(搜「应用领域」) · text/10-p181-200.txt:385(搜「sinusoid」)
相对位置的例子4.4.2 相对位置编码text/10-p181-200.txt:419(搜「I think therefore I am」) · text/10-p181-200.txt:435(搜「共有 9 个」) · text/10-p181-200.txt:453(搜「固定的常数 k」)
片段递归与提速4.4.3 / 4.4.4text/10-p181-200.txt:491(搜「停止求梯度」) · text/10-p181-200.txt:498(搜「用空间换时间」) · text/11-p201-220.txt:35(搜「300 到 1 800 倍」) · text/11-p201-220.txt:5(搜「残差网络思想非常接近」)
XL 相对位置三变化4.4.3 Transformer-XL 详解text/11-p201-220.txt:14(搜「不再共享权值」) · text/11-p201-220.txt:24(搜「只是基于内容的寻址」)

Footnotes

  1. 出处:「4.3 Transformer」(text/10-p181-200.txt:127,搜「由且仅由自注意力」)。

  2. 出处:「4.3 Transformer」(text/10-p181-200.txt:134,搜「限制了模型的并行能力」)与(text/10-p181-200.txt:136,搜「无能为力」)。

  3. 出处:「4.3 Transformer」(text/10-p181-200.txt:138,搜「缩小为一个常量」)。

  4. 出处:「4.3 Transformer」(text/10-p181-200.txt:144,搜「比较难懂」)。原文:「本书借鉴了 Jay Alammer 在其博客中对 Transformer 的解读」(Alammar 的通行拼写见我们的说明,书内用音译写法)。

  5. 出处:「4.3.1 Transformer 详解」(text/10-p181-200.txt:210,搜「too tired」)、(text/10-p181-200.txt:218,搜「Value,V」)与(text/10-p181-200.txt:227,搜「梯度的稳定」)。Q、K、V 各 64 维,权重矩阵 512×64。

  6. 出处:「4.3.1 Transformer 详解」(text/10-p181-200.txt:249,搜「信息检索系统」)与(text/10-p181-200.txt:383,搜「应用领域」)。

  7. 出处:「4.3.1 Transformer 详解」(text/10-p181-200.txt:257,搜「自注意力的集成」)。h=8,8 个输出按列拼接后过全连接。

  8. 出处:「4.3.1 Transformer 详解」(text/10-p181-200.txt:271,搜「掩码多头注意力」)。原文:解码第 k 个特征向量时只能看到第 k−1 个及其之前的解码结果。

  9. 出处:「4.3.1 Transformer 详解」(text/10-p181-200.txt:275,搜「CTC」)。

  10. 出处:「4.3.2 位置嵌入」(text/10-p181-200.txt:287,搜「词袋模型」)。

  11. 出处:「4.3.2 位置嵌入」(text/10-p181-200.txt:303,搜「线性变化」)。原文:位置 k+p 的位置向量可以表示为位置 k 的特征向量的线性变化。

  12. 出处:「4.3.3 小结」(text/10-p181-200.txt:323,搜「权宜之计」)。

  13. 出处:「4.3.3 小结」(text/10-p181-200.txt:318,搜「丧失了捕捉局部特征的能力」)。

  14. 出处:「4.4.1 Transformer 的缺点」(text/10-p181-200.txt:357,搜「段的长度」)与(text/10-p181-200.txt:393,搜「完全无法确认」)。

  15. 出处:「4.4.1 Transformer 的缺点」(text/10-p181-200.txt:383,搜「应用领域」)。

  16. 出处:「4.4.4 小结」(text/11-p201-220.txt:35,搜「300 到 1 800 倍」)。

  17. 出处:「4.4.3 Transformer-XL 详解」(text/10-p181-200.txt:498,搜「用空间换时间」)与(text/11-p201-220.txt:5,搜「残差网络思想非常接近」)。

  18. 出处:「4.4.2 相对位置编码」(text/10-p181-200.txt:419,搜「I think therefore I am」)与(text/10-p181-200.txt:427,搜「完全一致」)。

  19. 出处:「4.4.3 Transformer-XL 详解」(text/11-p201-220.txt:14,搜「不再共享权值」)与(text/11-p201-220.txt:24,搜「只是基于内容的寻址」)、(text/11-p201-220.txt:26,搜「内容偏置」)。

  20. 出处:「4.3.3 小结」(text/10-p181-200.txt:316,搜「硬件(主要指 GPU)环境要求」)。原文:「Transformer 算法的并行性非常好,符合目前的硬件(主要指 GPU)环境要求」。

  21. 出处:「4.3.3 小结」(text/10-p181-200.txt:309,搜「套路」)与(text/10-p181-200.txt:321,搜「结合体可能会带来更好的效果」)。