张芷铭的个人博客

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