Transformer DecoderLayer 结构与工作原理详解

Q1:DecoderLayer 包含哪些子层?
A1:DecoderLayer 由三大子层组成:

  1. 自注意力子层(self‑attn)
  2. 交叉注意力子层(cross‑attn)
  3. 前馈网络子层(ffn)

每个子层都有独立的 残差连接LayerNorm(分别为 norm1norm2norm3)。


Q2:自注意力子层的输入、输出以及残差/归一化过程是怎样的?
A2

  • 输入:解码器当前时刻的目标序列表示 tgt(形状 (batch, tgt_len, d_model))。
  • 计算self_attn(tgt, tgt, tgt, tgt_mask),即 Q = K = V = tgt
  • 残差 + 归一化:将自注意力的输出 output 与原始 tgt 相加,再经过 DropoutLayerNormnorm1),得到 x₁(残差归一化后的表示),该 x₁ 将作为后续交叉注意力的查询(Q)。

Q3:交叉注意力子层的查询、键、值分别是什么?它们是如何连接的?
A3

  • 查询 Q:来自自注意力子层的残差归一化输出 x₁(而不是原始自注意力输出)。
  • 键 K 与值 V:均为 编码器的输出 src(即 memory),二者相等。
  • 计算cross_attn(x₁, src, src, src_mask)
  • 残差 + 归一化:交叉注意力的输出 outputx₁ 相加,经过 DropoutLayerNormnorm2),得到 x₂,随后作为前馈网络的输入。

Q4:前馈网络子层的结构与残差/归一化是怎样的?
A4

  • 输入:交叉注意力子层归一化后的输出 x₂
  • 结构:两层全连接层 Linear(d_model → d_ff)ReLUDropoutLinear(d_ff → d_model)
  • 残差 + 归一化:前馈网络的输出 outputx₂ 相加,经过 DropoutLayerNormnorm3),得到 x₃,即 DecoderLayer 的最终输出。

Q5:每个子层的残差连接和 LayerNorm 是否相互独立?
A5:是的。自注意力、交叉注意力、前馈网络各自拥有独立的残差路径和对应的 LayerNormnorm1norm2norm3),互不共享。


Q6:对原先描述的细节需要哪些更正?
A6

  • 原描述中“使用解码器第一个多头注意力层的输出作为 Q”应更准确地表述为 “使用自注意力子层经过残差连接和 LayerNorm 之后的输出 x₁ 作为 Q”
  • 其他关于 K、V 均为编码器输出、前馈网络输入为交叉注意力归一化输出的描述是正确的。

结论:DecoderLayer 的工作流程为:
self_attn → norm1 → cross_attn → norm2 → ffn → norm3,每一步均伴随残差连接,确保梯度流通并提升模型表达能力。

附录
Paper: https://arxiv.org/abs/1706.03762
Transformer‑from‑Scratch: https://github.com/Breeze648/Transformer-from-Scratch

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容