← 全部章节

P48 · 第 48 讲

Transformer

1:00:34

本章目录(9 节)
  1. 1. 自回归 decoder:把输出接回输入
  2. 2. Cross attention:decoder 提问,encoder 提供材料
  3. 3. 训练:teacher forcing
  4. 4. 推理:free-running 与 exposure bias
  5. 5. 非自回归 decoder(NAT)
  6. 6. 两个实用 tips
  7. 7. 常见误区
  8. 8. 自测
  9. 9. 30 秒速记

课程版本:李宏毅《機器學習 2021》spring,Transformer (下)(2021-04-09) 官方讲义:seq2seq_v9.pdf,60 页(与 P47 同一份)— https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/seq2seq_v9.pdf 分P:BV1ou411N7X3?p=48,1:00:34 来源边界:讲义 p22 标题 "Decoder",p28–p30 "Masked Self-attention",p38–p43 "Encoder-Decoder / Cross attention",p44–p46 "Training"(p46 出现 Teacher Forcing),p47 起 "Tips"(copy、guided attention、beam search、sampling、exposure bias),p59 "Concluding Remarks"。P47 已覆盖 p1–p21;本篇覆盖 p22–p59。视频逐页切点无法由 metadata 确定,标注「讲义章节切分复习版」,不声称分钟对应;无字幕,不引用逐字台词。


1. 自回归 decoder:把输出接回输入

p24–p26 的三页动画把过程拆得很细:

  1. 输入 START(一个 special token),decoder 输出一个 \(\lvert V\rvert\) 维分布;
  2. 取 max(或 sample),得到第一个字,例如 機;
  3. 把 機 接到输入,再输出第二个字 器;
  4. 重复,直到输出 END。

p26 旁边有一句容易漏掉的话:"ignore the input from the encoder here"。这是在讲纯 decoder 的自回归结构,先把 encoder 放一边;cross attention 到 p39 才接进来。

两个工程细节:

因果 mask:位置与数值

decoder 的 self-attention 和 encoder 结构相同,只多一个 mask。p28–p30 的图里,\(b_1\) 只能由 \(a_1\) 决定,\(b_2\) 只能由 \(a_1,a_2\) 决定……否则训练时第 2 步就看到了第 3、4 步的 ground truth,推理时这些信息不存在,训练/推理行为不一致。

实现上:在 softmax 之前把分数矩阵的上三角(\(j>i\))设为 \(-\infty\),

$$ \tilde S_{ij}=\begin{cases}q_i\cdot k_j,& j\le i\\ -\infty,& j>i\end{cases} \qquad A'_{ij}=\frac{\exp(\tilde S_{ij})}{\sum_{j'}\exp(\tilde S_{ij'})} $$

用 4×4 分数实测(Python):

$$ A'=\begin{bmatrix} 1.0000&0&0&0\\ 0.0067&0.9933&0&0\\ 0.8668&0.1173&0.0159&0\\ 0.0142&0.7758&0.1050&0.1050 \end{bmatrix} $$

行和仍为 1,上三角精确为 0.0,不是"很小"。

因果 mask ≠ padding mask(本讲只画了前者,后者是【补充】): - 因果 mask 遮的是 \((i,j)\) 中 \(j>i\) 的未来位置,形状是上三角,只用于自回归 decoder; - padding mask 遮的是 batch 内为了对齐补的 <pad> 所在的整列 key,任何 query 都不该看它,encoder/decoder 都可能有; - 两者可以叠加(先加因果 mask,再把 pad 列置 \(-\infty\)),但语义、形状、使用场景都不同。把二者混为一谈,会在"为什么 encoder 不需要因果 mask"这种问题上卡住。


2. Cross attention:decoder 提问,encoder 提供材料

p39–p41 的三页图是整讲最关键的"精确对齐":

shape 上这与 self-attention 有一个硬区别:

self-attention(decoder 内) cross attention
\(Q\) \(d_k\times N_{\text{dec}}\) \(d_k\times N_{\text{dec}}\)
\(K,V\) \(d_k\times N_{\text{dec}}\) \(d_k\times N_{\text{enc}}\)
\(A'\) \(N_{\text{dec}}\times N_{\text{dec}}\)(方阵) \(N_{\text{dec}}\times N_{\text{enc}}\)(矩形)
mask 因果上三角 通常只遮 padding,不遮"未来"

矩形这一点很重要:输入 100 帧、输出 10 个字时,\(A'\) 是 \(10\times100\),decoder 每一步对整段输入做一次加权。它不是把 encoder 输出压成一个向量再解码,而是每生成一个词就重新查一次输入。p42 的 Listen, Attend and Spell 也是这个结构(讲义特意注明 "This is not transformer.",说明 cross attention 早于 Transformer 存在)。


3. 训练:teacher forcing

p45–p46:输入是 <BOS> 加上ground truth 的前缀,标签是右移一位的 ground truth。

输入:  <BOS>  機   器   學
标签:   機   器   學   習  <EOS>

每一步算一个 cross entropy,求和/平均后反传。p46 原话:"Teacher Forcing: using the ground truth as input."

为什么可以这样:因果 mask 让第 \(t\) 步的输出只依赖前 \(t-1\) 个输入,而这些输入在训练时全是真值,所以一次前向就能并行算出所有步的损失——不必像推理那样一步步循环。这是 Transformer 训练效率的关键之一。

数值感(Python):目标词概率 0.7 时 \(-\ln0.7=0.3567\);0.9 时 \(-\ln0.9=0.1054\)。概率越接近 1,损失越小,梯度也越小。


4. 推理:free-running 与 exposure bias

推理时没有 ground truth,只能把自己上一步的输出接回输入(p56 的图:训练见 機 器 學,推理第二步见到的是模型自己生成的 氣)。于是训练和推理的输入分布不同:

这个 mismatch 叫 exposure bias(p56 页内就写这个词)。它不是过拟合,也不是梯度问题,而是训练目标与推理过程不一致。

【补充】量化一下"偏离"的概率(不是某个模型的实验,只是算术):若每步独立出错概率 2%,生成长度 10,则整段前缀都正确的概率是 \(0.98^{10}=0.817\),至少错一次的概率是 0.183。序列越长,训练时从未见过的"错误前缀"越多。

p57 给的缓解是 scheduled sampling:训练时按一个 schedule 逐渐把模型自己的输出混进输入,让模型见过一些"不完美前缀"。代价是训练不能完全并行(要先生成再喂),且 schedule 的设计有讲究。

解码策略:beam search 与采样

p53 的树状图说明:词表大小 \(V\)、长度 \(T\) 时共有 \(V^T\) 条路径,不可能全查。greedy 每步取最大概率;beam search 保留概率最高的 \(k\) 条前缀。

一个能让 greedy 翻车的玩具例(Python 计算,词表 {A,B},条件概率人为给定):

所以 beam search 不是"更准的 greedy",它只是在有限宽度下多留几条路;它也不保证全局最优(\(k<V^T\)),且 beam 太大时容易产出平庸、重复的句子。p54 的 sampling(按分布随机抽)则是另一极:要多样性时,随机性是特性不是 bug。p55 还提了一句"BLEU 不可导 → 用 RL 优化",属于延伸。


5. 非自回归 decoder(NAT)

p35–p36:NAT 一次输出整段,不把输出接回输入。两个问题:

  1. 输出长度未知:要么另训一个长度预测器,要么固定输出一个很长的序列、遇到 END 截断;
  2. 质量通常不如 AT:p36 的原话是 "NAT is usually worse than AT (why? Multi-modality)"。同一输入可能对应多条合法输出("你好" / "您好"),NAT 用独立假设同时采样各位置,容易生成"平均掉"的句子;AT 的条件分解则天然处理多模态。

NAT 的优点是并行、生成稳定(TTS 常用),但"并行"不等于"更好"。


6. 两个实用 tips

这两个都不是 Transformer 的必需组件,而是任务先验的注入——和 P29 里 CNN 的"局部性"是同一种思路。


7. 常见误区

  1. "teacher forcing 是推理方法"。它只用于训练;推理必须自回归(或改用 NAT),因为推理时没有 ground truth。
  2. "cross attention 的 Q 来自 encoder"。反了。Q 来自 decoder 当前状态,K/V 来自 encoder;这正是"decoder 主动查询输入"的含义。
  3. "mask 就是 dropout"。mask 把分数设为 \(-\infty\),是确定性的可见性控制;dropout 是训练时随机置零,目的与位置都不同。
  4. "exposure bias = 过拟合"。过拟合是训练分布内拟合太好、泛化差;exposure bias 是训练/推理的输入分布不一致,即使完美泛化也会出现。
  5. "beam search 一定比 greedy 好"。它只在"以序列联合概率为目标"时更接近最优;对 BLEU/多样性等指标未必,且大 beam 常导致长度偏置与重复。
  6. "NAT 并行所以更强"。p36 明说通常更差,原因是多模态下独立假设的妥协。
  7. "decoder 的 self-attention 和 encoder 完全一样"。结构一样,但多了因果 mask,且多了 cross attention 子层。

8. 自测

Q1. 输入 50 帧、输出 8 个词、\(d_k=64\)。decoder 的 masked self-attention 与 cross attention 的分数矩阵各是什么 shape?

答案

masked self-attention:\(8\times8\)(方阵,上三角被 mask);cross attention:\(8\times50\)(\(N_{\text{dec}}\times N_{\text{enc}}\),矩形)。Q 都来自 decoder(8 个位置),K/V 分别来自 decoder(8)与 encoder(50)。

Q2. 训练时把因果 mask 去掉,会发生什么?训练损失可能更低还是更高?推理会怎样?

答案

第 \(t\) 步会看到第 \(t+1\) 及以后的 ground truth,训练损失会更低(信息泄漏,等于抄答案),但推理时没有未来词,模型行为与训练严重不一致,生成质量崩坏。所以这个"更低"是假象。

Q3. teacher forcing 的输入和标签为什么要错开一位?<BOS> 和 <EOS> 各起什么作用?

答案

错位是为了让"看到前 \(t-1\) 个词"预测"第 \(t\) 个词",与推理时的条件分布一致。<BOS> 提供第一步的输入(否则没有条件),<EOS> 让模型学会在合适位置停止;没有它模型不知道何时结束(p31 "Never stop")。

Q4. 一个模型训练损失很低,但长句生成时越写越偏。用 exposure bias 解释,并给出两种缓解方案。

答案

训练时输入全是真值前缀,模型从未见过自己产生的错误前缀;推理一旦早期出错,后续输入偏离训练分布,误差累积。缓解:scheduled sampling(训练时混入模型输出)、beam search/重排(减少早期硬错误)、或强化学习直接优化序列级指标(p55)。

Q5. padding mask 和因果 mask 能同时用吗?各自遮哪里?

答案

能。因果 mask 遮 \(j>i\) 的未来位置(上三角);padding mask 遮 batch 补齐的 <pad> 所在列(对每个 query 都不可见)。实现时先把两者都设为 \(-\infty\) 再 softmax;它们作用的元素集合通常不同,不能互相替代。


9. 30 秒速记

decoder 自回归:START → 分布 → 取最大 → 接回输入,直到 END;训练时整句并行喂入,靠因果 mask(上三角 \(-\infty\),softmax 后精确为 0)防止偷看未来。cross attention 的 Q 来自 decoder、K/V 来自 encoder,\(A'\) 是 \(N_{\text{dec}}\times N_{\text{enc}}\) 的矩形。训练用 teacher forcing(真值前缀),推理用自己输出 → exposure bias;scheduled sampling 缓解。beam search 只是在有限宽度下多留几条路,不保证全局最优;NAT 并行但通常更差(多模态)。因果 mask 遮未来,padding mask 遮补齐列,两者不是一回事。

跨 P 连接:P47 的 encoder 输出 \(N\) 个向量,正是这里 cross attention 的 K/V 来源;P36 的 \(Q^{\top}K\)、按行 softmax、\(VA'^{\top}\) 是这里所有注意力的计算内核;P37 的多头让 cross attention 也能分成多个子空间查询。再往前,P38 的 RNN seq2seq 是"压成一个 context vector"的旧方案,cross attention 正是对它瓶颈的回应。


引用页(PDF 物理页,1 起)

p22–p26(decoder 与自回归)、p28–p31(masked self-attention、不能停)、p33–p36(END、NAT/AT 对比)、p38–p43(cross attention 的 Q/K/V 来源与矩形 shape)、p44–p46(training、teacher forcing)、p47–p55(copy、guided attention、beam search、sampling、RL)、p56–p57(exposure bias、scheduled sampling)、p59(总结)。

来源与说明

基于对应官方讲义整理,未取到完整视频字幕;不冒充逐字稿。