Transformer 输入流动:嵌入→编码器 6 层→解码器 6 层→线性变换→Softmax 输出概率。
编码器输入处理
嵌入层
Token 通过嵌入矩阵 $W_{embed} \in \mathbb{R}^{V \times d_{model}}$ 映射为向量,缩放:
$$E_{\text{scaled}} = E \times \sqrt{d_{model}}$$
位置编码
$$PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d_{model}})$$ $$PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d_{model}})$$
编码器输入:$X_{\text{enc}} = E_{\text{scaled}} + PE$
编码器层(×6)
多头自注意力
线性投影($h=8$ 头):
$$Q_i = X \cdot W_i^Q, \quad K_i = X \cdot W_i^K, \quad V_i = X \cdot W_i^V$$
缩放点积注意力:
$$head_i = \text{softmax}\left(\frac{Q_i \cdot K_i^T}{\sqrt{d_k}}\right) \cdot V_i$$
拼接与投影:
$$Attention_{\text{output}} = Concat(head_1,…,head_8) \cdot W^O$$
残差连接 + LayerNorm:$X_1 = \text{LayerNorm}(X + Attention_{\text{output}})$
前馈网络
$$FFN(X_1) = \max(0, X_1 \cdot W_1 + b_1) \cdot W_2 + b_2$$
维度:$512 \to 2048 \to 512$
解码器输入处理
目标序列右移一位,确保生成第 $i$ 个 token 仅依赖前 $i-1$ 个 token。
解码器层(×6)
掩码自注意力
将未来位置($row < col$)设为 $-\infty$,softmax 后权重为 0。
编码器-解码器注意力
- Q 来自解码器
- K、V 来自编码器输出 Z
前馈网络
与编码器一致。
输出预测
$$Logits = Y_{\text{final}} \cdot W_{embed}^T$$ $$P(\text{token}) = \text{softmax}(Logits)$$
维度参数
| 参数 | 值 |
|---|---|
| $d_{model}$ | 512 |
| $h$(头数) | 8 |
| $d_k, d_v$ | 64 |
| $d_{ff}$ | 2048 |
| 编码器/解码器层数 | 6 |
数据流总结
源语言 token → 嵌入+位置编码 → 编码器 6 层 → Z
目标语言 token(右移)→ 嵌入+位置编码 → 解码器 6 层 → 线性+Softmax → 概率
张芷铭的个人博客
Comments