18. 从局部模块到完整 Transformer —— 架构总览与逻辑衔接

我们已经手搓了 Transformer 的所有基础部件:
  • Token Embedding
  • Positional Encoding(PE)
  • Scaled Dot-Product Attention
  • Multi-Head Self-Attention(MHSA)
  • Multi-Head Cross-Attention(MHCA)
  • Position-wise Feed Forward Network(FFN)
  • Encoder Layer
  • Decoder Layer
接下来,让我们把所有组件串起来,构造出完整的 Transformer。

18.1 Transformer 是 Encoder → Decoder 的两大系统组成

  • 一个 Transformer 由 两大主体 组成:
    Encoder (理解输入)
    Decoder (生成输出)
  • 二者功能不同,但高度协同,实现算法也高度相似:
1)Encoder:负责“理解源序列”

输入:源句子 src_ids
经过 embedding -> 加位置编码 -> N 层 EncoderLayer(自注意力 Self-Attention)

  • 输出:每个 token 的语义特征向量(contextual representation)
  • Encoder 输出本质是一个 知识库 / 图书馆
  • Decoder 因为要生成句子,要不断查这个图书馆。
2)Decoder:负责“一边看上下文一边生成目标序列”
  • Decoder 内部做三件事:
    1.Masked Self-Attention —— 看已生成部分,不看未来(因果 mask)
    2.Cross-Attention —— 询问 Encoder 的信息(依赖整个源句)
    3.FFN —— 深度变换特征
  • 整个 Decoder 也是一层层堆叠的结构,每次都:
    • 看自己已生成的内容(Masked Self-Attn)
    • 看 Encoder 的内容(Cross-Attn)
    • 再经过 FFN 深度加工
  • 最终形成每个位置的最终语义向量。

18.2 Transformer 的前向流程

在这里插入图片描述

  • Encoder 只用 Self-Attention
  • Decoder 用 Self-Attention + Cross-Attention

18.3 模块之间的关系(非常关键)

(1) TokenEmbedding + PositionalEncoding
  • Encoder 和 Decoder 输入前
  • 把离散的 token 转成模型可操作的连续向量,并注入位置信息。
(2) Scaled Dot-Product Attention(基础数学单元)
  • QKᵀ / sqrt(dk) → softmax → V
  • 这个函数是所有注意力机制的底层核心,Self-Attn 和 Cross-Attn 都由它构建。
(3) Multi-Head Self-Attention(Encoder/Decoder 都有)
  • Encoder 和 Decoder 自己的输入序列内部的 token 互相注意:
    Encoder:能看整句
    Decoder:只能看过去(因果mask)
(4) Multi-Head Cross-Attention(Decoder 专有)
  • Decoder 的 Q 来自 decoder 自己当前层,K、V 来自 encoder
(5) Position-wise FeedForward(每一层都用)
  • 这部分“逐位置”地把向量升维/降维,是 MLP
  • fc2(relu(fc1(x)))
(6) Add & Norm(每层两次 / 三次)
  • 每条“子层”都要做残差连接 + LayerNorm
  • x + sublayer(x)
  • 保证梯度好传、层与层之间的数值稳定
(7) EncoderLayer = Self-Attn + FFN(两次 AddNorm)
  • Self-Attn → AddNorm → FFN → AddNorm
(8) DecoderLayer = Masked Self-Attn + Cross-Attn + FFN(3 次 AddNorm)
Masked Self-Attn → AddNorm →
Cross-Attn         → AddNorm →
FFN                → AddNorm

18.4 最终完整 Transformer 结构

  • 把所有东西拼在一起,就是完整 Transformer
    Transformer =
          Encoder
          Decoder
          Linear(d_model → vocab_size)
    
  • 最终预测每个时间步的词分布:logits = Linear(dec_out)
  • 之后配合 CrossEntropyLoss 就能训练翻译任务了
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐