GPT

              ┌──────────────────────┐
              │  下一个 token 的概率   │
              └──────────▲───────────┘
                         │
              ┌──────────┴───────────┐
              │  Linear + Softmax    │
              └──────────▲───────────┘
                         │
              ┌──────────┴───────────┐
              │   Layer Norm (final) │
              └──────────▲───────────┘
                         │
        ┌────────────────┴────────────────┐
        │     GPT Block × N               │
        │  ┌──────────────────────────┐   │
        │  │  Sublayer 2: FFN         │   │
        │  │  + Residual + LayerNorm  │   │
        │  └────────────▲─────────────┘   │
        │               │                 │
        │  ┌────────────┴─────────────┐   │
        │  │  Sublayer 1:             │   │
        │  │  Masked Self-Attention   │   │
        │  │  Q, K, V 都来自这层输入    │   │
        │  │  + Residual + LayerNorm  │   │
        │  └────────────▲─────────────┘   │
        └───────────────┼─────────────────┘
                        │
              ┌─────────┴───────────┐
              │ Embedding + PE      │
              └─────────▲───────────┘
                        │
              ┌─────────┴───────────┐
              │  Token IDs          │
              │  (输入序列)          │
              └─────────────────────┘

架构上 GPT-2 和 GPT-1 几乎一样——都是 decoder-only Transformer。

主要差异——

维度 GPT-1 GPT-2
层数 12 12 / 24 / 36 / 48
隐藏维度 768 768 / 1024 / 1280 / 1600
头数 12 12 / 16 / 20 / 25
参数量 0.117B 0.117B / 0.345B / 0.762B / 1.5B
上下文长度 512 1024
词表大小 40K 50K(BPE 改进)
LayerNorm 位置 post-norm pre-norm(关键改动)
训练数据 BookCorpus(约 7000 本书) WebText(800 万网页, 40GB)

注意——

Pre-Norm

GPT-2 是第一个广泛被知道的、采用 pre-norm 的大模型。

Post-Norm 和 Pre-Norm 的表示

Post-norm(原始 Transformer):

x → sublayer(x) → +x → LayerNorm → 输出
y = LayerNorm(x + sublayer(x))

Pre-norm:

x → LayerNorm → sublayer → +x → 输出
y = x + sublayer(LayerNorm(x))

注意一个微妙但关键的不同:

Post-norm:残差连接的"主干"是 被 LayerNorm 处理过的。

x → [+ sublayer] → norm → 下一层
                    ↑
               这一步会"压缩"主干信号

Pre-norm:残差连接的"主干"是 原始的 x:

x ──────────── + ─→ 下一层
   ↘         ↗
    norm → sublayer

主干信号 x 从输入直接传到输出,没被任何 norm 修改,只是加上一个"经 norm 处理后的修正"。

为什么 Pre-Norm 训练更稳定

Post-norm 的问题:

每一层都会"压缩"主干信号,堆 N 层后,信号被反复压缩,梯度反向传播时容易爆炸或消失。

原始 Transformer 论文里训练 6-12 层还能 work,但要堆到 100 层(GPT-3 那种规模),post-norm 几乎训不动。

Pre-norm 的优势: 主干 x 是"干净的高速公路",梯度可以直接从输出反传到输入,不被任何 norm 干扰。

结果:

代价:post-norm 在小规模时效果略好——但在大规模时输给 pre-norm。