课程版本:李宏毅《機器學習 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 的三页动画把过程拆得很细:
- 输入
START(一个 special token),decoder 输出一个 \(\lvert V\rvert\) 维分布; - 取
max(或 sample),得到第一个字,例如機; - 把
機接到输入,再输出第二个字器; - 重复,直到输出
END。
p26 旁边有一句容易漏掉的话:"ignore the input from the encoder here"。这是在讲纯 decoder 的自回归结构,先把 encoder 放一边;cross attention 到 p39 才接进来。
两个工程细节:
- 何时停:p31 显示没有停止符号时 decoder "Never stop!";p33–p34 的解法是往词表里加一个
END,模型输出它就停。 - 训练时为什么能并行:整句
機 器 學 習一次喂进去,靠 mask 保证第 \(t\) 个位置只能看前 \(t-1\) 个。这就是下一节的 masked self-attention。
因果 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\),
用 4×4 分数实测(Python):
行和仍为 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 的三页图是整讲最关键的"精确对齐":
- Q 来自 decoder:decoder 当前步的表示(p40 里
START经 FC 得到 \(q\);p41 里第二步的機得到 \(q'\)); - K、V 来自 encoder:encoder 的每个输出位置 \(a_1,a_2,a_3\) 各投影出 \(k_i,v_i\)(p40 的 \(v_1k_1,v_2k_2,v_3k_3\));
- 分数 \(\alpha_i'=\operatorname{softmax}(q\cdot k_i)\),输出 \(\sum_i\alpha_i'v_i\),再进 FC 与 masked self-attention 的结果相加。
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},条件概率人为给定):
- greedy:A(0.55) → A(0.90) → A(0.45) → A(0.55),总分 \(0.1225\);
- beam=2:第 3 步保留
AA(0.2228) 与AAB(0.2178),第 4 步AABA得 \(0.2069\),反超 greedy。
所以 beam search 不是"更准的 greedy",它只是在有限宽度下多留几条路;它也不保证全局最优(\(k<V^T\)),且 beam 太大时容易产出平庸、重复的句子。p54 的 sampling(按分布随机抽)则是另一极:要多样性时,随机性是特性不是 bug。p55 还提了一句"BLEU 不可导 → 用 RL 优化",属于延伸。
5. 非自回归 decoder(NAT)
p35–p36:NAT 一次输出整段,不把输出接回输入。两个问题:
- 输出长度未知:要么另训一个长度预测器,要么固定输出一个很长的序列、遇到
END截断; - 质量通常不如 AT:p36 的原话是 "NAT is usually worse than AT (why? Multi-modality)"。同一输入可能对应多条合法输出("你好" / "您好"),NAT 用独立假设同时采样各位置,容易生成"平均掉"的句子;AT 的条件分解则天然处理多模态。
NAT 的优点是并行、生成稳定(TTS 常用),但"并行"不等于"更好"。
6. 两个实用 tips
- Copy mechanism(p48–p50):翻译、摘要、聊天里,输出经常要原样抄输入中的专名("庫洛洛你好")。让模型学一个指向输入的指针(pointer network),比逼它从词表里重新生成更可靠。
- Guided attention(p51–p52):语音识别、TTS 的输入输出是单调对齐的,但纯 attention 可能跳读/漏读(p51 的"發財發財"重复、漏字)。monotonic attention / location-aware attention 把"只能从左到右看"作为先验加进去。
这两个都不是 Transformer 的必需组件,而是任务先验的注入——和 P29 里 CNN 的"局部性"是同一种思路。
7. 常见误区
- "teacher forcing 是推理方法"。它只用于训练;推理必须自回归(或改用 NAT),因为推理时没有 ground truth。
- "cross attention 的 Q 来自 encoder"。反了。Q 来自 decoder 当前状态,K/V 来自 encoder;这正是"decoder 主动查询输入"的含义。
- "mask 就是 dropout"。mask 把分数设为 \(-\infty\),是确定性的可见性控制;dropout 是训练时随机置零,目的与位置都不同。
- "exposure bias = 过拟合"。过拟合是训练分布内拟合太好、泛化差;exposure bias 是训练/推理的输入分布不一致,即使完美泛化也会出现。
- "beam search 一定比 greedy 好"。它只在"以序列联合概率为目标"时更接近最优;对 BLEU/多样性等指标未必,且大 beam 常导致长度偏置与重复。
- "NAT 并行所以更强"。p36 明说通常更差,原因是多模态下独立假设的妥协。
- "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(总结)。