第18节——Transformer架构
·
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 就能训练翻译任务了
更多推荐



所有评论(0)