[编码器 Encoder] ←→ [解码器 Decoder]
编码器:
Input Embedding + Positional Encoding
↓
[Multi-Head Self-Attention] → [Add & Norm]
↓
[Feed-Forward Network (FFN)] → [Add & Norm]
↓
Output of this Encoder Layer
W i Q ∈ R d model × d k , W i K ∈ R d model × d k , W i V ∈ R d model × d v W_i^Q \in \mathbb{R}^{d_{\text{model}} \times d_k}, \quad W_i^K \in \mathbb{R}^{d_{\text{model}} \times d_k}, \quad W_i^V \in \mathbb{R}^{d_{\text{model}} \times d_v} WiQ∈Rdmodel×dk,WiK∈Rdmodel×dk,WiV∈Rdmodel×dv
其中:
引入最终投影矩阵 W O ∈ R d model × d model W^O \in \mathbb{R}^{d_{\text{model}} \times d_{\text{model}}} WO∈Rdmodel×dmodel:
MultiHead ( X ) = Concat ( . . . ) ⋅ W O \text{MultiHead}(X) = \text{Concat}(...) \cdot W^O MultiHead(X)=Concat(...)⋅WO
结果为:
给定输入:
X_input ∈ R^{n × d_model}
1. 多头自注意力:
for i in 1..h:
Q_i = X_input * W_i^Q
K_i = X_input * W_i^K
V_i = X_input * W_i^V
Attention_i = softmax(Q_i K_i^T / sqrt(d_k)) * V_i
Concat = Concat(Attention_1, ..., Attention_h)
MultiHead = Concat * W^O
2. 残差连接 + 层归一化:
Output_SA = LayerNorm(MultiHead + X_input)
3. 前馈网络 (FFN):
FFN_Output = max(0, Output_SA * W1 + b1) * W2 + b2
4. 再次残差连接 + 层归一化:
Final_Output = LayerNorm(FFN_Output + Output_SA)
一个完整的 Transformer 编码器由 N 个相同的 Encoder Layer 组成(通常是 6 层):
Input Embedding + Positional Encoding
↓
Encoder Layer 1 → 输出 H1
↓
Encoder Layer 2 → 输出 H2
↓
...
↓
Encoder Layer N → 最终输出 H_final ∈ R^{n × d_model}
每一层都会提取更高级的语义信息。
最终输出 H final H_{\text{final}} Hfinal 是一个包含上下文信息的序列表示。它的作用是:
Input Embedding + Positional Encoding
↓
[Masked Multi-Head Self-Attention] → [Add & Norm]
↓
[Multi-Head Cross-Attention] → [Add & Norm]
↓
[Feed-Forward Network (FFN)] → [Add & Norm]
↓
Output of this Decoder Layer
Q = Y input W Q , K = Y input W K , V = Y input W V Q = Y_{\text{input}} W^Q, \quad K = Y_{\text{input}} W^K, \quad V = Y_{\text{input}} W^V Q=YinputWQ,K=YinputWK,V=YinputWV
计算注意力分数时加入掩码(mask):
A = softmax ( Q K T d k + M ) V A = \text{softmax}\left( \frac{Q K^T}{\sqrt{d_k}} + M \right) V A=softmax(dkQKT+M)V
其中:
- $M$ 是一个三角形 mask 矩阵(上三角为 -∞),阻止当前位置看到后面的词
最终输出:
$$
H_{\text{masked}} = \text{LayerNorm}( \text{MultiHead}(Y_{\text{input}}) + Y_{\text{input}} )
$$
- Query 来自解码器当前层输出:$Q = H_{\text{masked}}$
- Key 和 Value 来自编码器最终输出:$K = V = H_{\text{encoder}}$
多头交叉注意力(Multi-Head Cross-Attention)
计算注意力:
CrossAttn = softmax ( Q K T d k ) V \text{CrossAttn} = \text{softmax}\left( \frac{Q K^T}{\sqrt{d_k}} \right) V CrossAttn=softmax(dkQKT)V
然后做残差连接和归一化:
H cross = LayerNorm ( CrossAttn + H masked ) H_{\text{cross}} = \text{LayerNorm}( \text{CrossAttn} + H_{\text{masked}} ) Hcross=LayerNorm(CrossAttn+Hmasked)
4. FFN(Feed Forward)前馈网络
5. 上述结构多层堆叠:
和编码器类似,一个完整的 Transformer 解码器也由多个 Decoder Layer 组成:
Input: Target Sequence + Positional Encoding
↓
Decoder Layer 1 → 输出 H1
↓
Decoder Layer 2 → 输出 H2
↓
...
↓
Decoder Layer N → 最终输出 H_final ∈ R^{m × d_model}
解码器最后一层的输出 H final ∈ R m × d model H_{\text{final}} \in \mathbb{R}^{m \times d_{\text{model}}} Hfinal∈Rm×dmodel 将被送入一个线性层 + softmax,用于预测下一个词的概率分布:
P ( y t ) = softmax ( H final W output + b output ) P(y_t) = \text{softmax}( H_{\text{final}} W_{\text{output}} + b_{\text{output}} ) P(yt)=softmax(HfinalWoutput+boutput)
其中:
Transformer 解码器通过掩码自注意力防止未来信息泄露,通过交叉注意力关注编码器输出,结合前馈网络逐层提取信息,最终生成目标语言的词概率分布。
Encoder Output (H_encoder)
↘
Target Input → [Masked Self-Attention] → [Cross-Attention] → [FFN] → Logits
↗
H_encoder(提供 Key/Value)