跳转到内容

基础原理第 7 篇,共 13 篇

Transformer Block

从上下文读取到逐位置加工,解释残差、Norm 和 MLP 的作用

更新于 阅读约 2 分钟

一个 Block 先让位置间交换信息,再对各位置的特征做加工。残差连接把更新加回原表示,输出继续保持 [B,T,D],因此可以堆叠多层。

先读:模型整体、Attention。接着读:整网训练和生成。

U=X+Attention⁡(Norm⁡(X))U=X+\operatorname{Attention}(\operatorname{Norm}(X)) Y=U+MLP⁡(Norm⁡(U))Y=U+\operatorname{MLP}(\operatorname{Norm}(U))

教学输入 X=[1,3,8]。Norm 保持形状;Attention 读其他可见位置,输出 [1,3,8];残差逐元素相加。MLP 可以 8 → 32 → 8,最后仍是 [1,3,8]。

例如一个位置的 X=[1,0,…]、Attention 更新 [0.2,0.1,…],相加后 [1.2,0.1,…]。子层学的是对已有表示的更新,而不是必须重建整个表示。

LayerNorm 对每个位置的特征轴计算均值与方差:

LN⁡(x)=γ⊙x−μσ2+ϵ+β\operatorname{LN}(x)=\gamma\odot\frac{x-\mu}{\sqrt{\sigma^2+\epsilon}}+\beta

RMSNorm 通常不减均值,用均方根缩放并乘可训练 γ。LayerNorm/RMSNorm 不使用 BatchNorm 式 running statistics;train/eval 不切换这类统计。Dropout 等模块会受 train/eval 影响。

原论文的 Post-Norm 是 Norm(X+Sublayer(X))。Pre-Norm 把 Norm 放在子层前,残差路径保留直接通路;这有助于深层优化,但不是无条件保证梯度稳定。

普通 FFN:

FFN⁡(x)=ϕ(xW1+b1)W2+b2\operatorname{FFN}(x)=\phi(xW_1+b_1)W_2+b_2

W1 在教学例中为 [8,32],W2 为 [32,8],激活函数提供非线性。三个位置使用同一组权重,MLP 本身不在位置之间混合信息。

GPT-2 常用 GELU;许多现代模型使用门控 SwiGLU:down(SiLU(gate(x)) ⊙ up(x))。扩展维度和层数由配置决定。Attention 提供上下文信息,MLP 对已经融合上下文的表示做逐位置转换。

最后一个 Pre-Norm Block 后通常还有 final Norm,再进入 LM Head。Norm、Attention、MLP 的参数在训练中共同更新。

原论文:§3.1、§3.3。