一个 Block 先让位置间交换信息,再对各位置的特征做加工。残差连接把更新加回原表示,输出继续保持 [B,T,D],因此可以堆叠多层。
先读:模型整体、Attention。接着读:整网训练和生成。
Pre-Norm 主流程
Section titled “Pre-Norm 主流程”教学输入 X=[1,3,8]。Norm 保持形状;Attention 读其他可见位置,输出 [1,3,8];残差逐元素相加。MLP 可以 8 → 32 → 8,最后仍是 [1,3,8]。
残差与 Norm
Section titled “残差与 Norm”例如一个位置的 X=[1,0,…]、Attention 更新 [0.2,0.1,…],相加后 [1.2,0.1,…]。子层学的是对已有表示的更新,而不是必须重建整个表示。
LayerNorm 对每个位置的特征轴计算均值与方差:
RMSNorm 通常不减均值,用均方根缩放并乘可训练 γ。LayerNorm/RMSNorm 不使用 BatchNorm 式 running statistics;train/eval 不切换这类统计。Dropout 等模块会受 train/eval 影响。
原论文的 Post-Norm 是 Norm(X+Sublayer(X))。Pre-Norm 把 Norm 放在子层前,残差路径保留直接通路;这有助于深层优化,但不是无条件保证梯度稳定。
MLP:逐位置加工
Section titled “MLP:逐位置加工”普通 FFN:
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。