从 small model 到万亿 token 级的大模型,表现和效率往往被少量关键超参数左右:hidden size、前馈层扩张倍数、注意力头数与 head dim、词表大小、正则化策略以及深宽比例(aspect ratio)。随着参数预算与训练数据呈指数级增长,工程团队反而更依赖这些“旋钮”来稳定收益——一次错误的配置可能让数百万美元的训练算力付诸流水。本文把我在课程里的零散记录整理成一篇可查的博客,并加入实践中反复被问到的背景解释,方便之后设计或复现 Transformer。
阅读顺序上,可以先浏览第 1 节的速览表迅速建立数量级感知,再根据实际需求跳到单独的小节。如果你正打算把某篇论文的配置迁移到自己的项目里,建议直接对照第 7 节的顺序进行 sanity check。
1 关键超参数速览
决定 Transformer “性格”的核心参数大致三类:描述形状的(hidden size、层数、head 数),描述激活容量的(FFN 扩张倍数、head dim),以及围绕数据/优化的(vocab、正则化)。把它们放在一个表里可以快速看到主流模型之间的共性。
| 类别 | 常见配置 | 代表模型 | 核心影响 |
|---|---|---|---|
| hidden size | 4k–12k | GPT-3、PaLM、LLaMA | 表达能力、显存占用 |
| feedforward | $r_{ffn}=4$(GLU 取 $8/3$) | GPT-3、PaLM、LLaMA、DeepSeek | 非线性容量、计算开销 |
| num heads | $d_{head}=64\sim128$ | GPT-3: 96×128, LLaMA: 32×128 | 上下文分辨率、并行粒度 |
| vocab size | 32k–256k(取决于语料/语言) | LLaMA 32k, PaLM 256k, Qwen 150k | 嵌入层参数量、序列长度 |
| regularization | Dropout≈0;依赖 AdamW + weight decay | GPT-3、PaLM、LLaMA、Claude、DeepSeek | 收敛稳定性、优化噪声 |
| aspect ratio | $n_{layers}/d_{model} \approx 0.006\sim0.01$ | GPT-3, LLaMA, PaLM, Chinchilla | 延迟、并行化、深层表达 vs 宽度效率 |
2 前馈层:4× hidden size 不是偶然
Transformer 的每个 block 包含一个扩大后再压缩的前馈层。它承担把多头注意力收集到的信息进行非线性变换、再写回主分支的职责,所以容量不足时模型通常表现为“记得住信息但融会贯通不了”。 \(\text{FFN}(x) = W_2 \, \sigma(W_1 x)\)
- 输入与输出维度等于 hidden size,$W_1$ 把维度扩张至 $r_{ffn} \cdot d_{model}$。扩张的意义在于给激活函数提供足够宽的表示空间,再通过 $W_2$ 投回主干。
- 经典 Transformer 和 GPT 系列普遍采用 $r_{ffn}=4$;GLU 或 SwiGLU 激活通常用 $r_{ffn}=8/3$,保持 FLOPs 相近。换句话说,激活类型不同但耗费的算力基本一致。
- 更大的 $r_{ffn}$ 提升非线性表达能力,但 FFN 计算和显存随之线性增长,尤其在推理阶段会拖慢每个 token 的延迟。实践里只有在大幅增加计算预算、并确认 attention 已经不是瓶颈时才会上调该比例。
3 注意力头:保持 head dim × heads = hidden size
注意力模块把 hidden 向量拆成多个子空间,让不同 head 关注不同的上下文模式。为了方便实现和硬件并行,通常约束: \(d_{model} = n_{heads} \times d_{head}\)
- 必须整除 是工程上的刚需:只有这样才能把 $Q/K/V$ 张量 reshape 成 $(n_{heads}, d_{head})$ 并行计算。
- $d_{head}$ 常落在 64~128;过小会让单个 head 缺乏容量,过大则降低 head 数目,失去多样化关注。这个区间也是 CUDA warp、张量核等硬件友好的倍数。
- 典型设置:GPT-3 (12288 hidden, 96 heads, $d_{head}=128$)、LLaMA-2 7B (4096 hidden, 32 heads, $d_{head}=128$)。可以看到不同模型通过调节 head 数而不是 head dim 来适配更大的 hidden。
- 更宽的 hidden size 不代表更多少头,反而会把 $n_{layers}/d_{model}$ 约束在 100~200 的“aspect ratio” 范围内,以便在计算/通信与表达力之间取得平衡。这也是很多团队迁移配置时最容易忽略的隐形规则。
4 词表大小:语料、分词与显存的三角平衡
词表大小看似与网络结构无关,但它直接决定 embedding 与输出层的参数量,还会影响每条输入序列的 token 数。词表越大,embedding/LM head 的参数量越多,显存和吞吐都会被拉高;词表太小则导致序列变长、分词碎片化,训练时同样浪费 FLOPs。
- 分词方式:BPE(GPT-2/3)倾向英文;SentencePiece(LLaMA、PaLM、Qwen)更适合多语言。
- 经验区间:
- 单语英文:32k–50k(GPT-2/3 50k,LLaMA 32k)。
- 多语言 or 代码:150k–256k(PaLM 256k,Qwen 150k)。
- 设计词表时先看:语料复杂度、SOP(sequence of processing)最长长度、部署显存预算。embedding 层在 175B 级模型中占比可达 5–8%,对推理吞吐也有显著影响,所以千万别把它当“无成本”参数。
5 正则化策略:从 Dropout 转向 Weight Decay
过去的 Transformer 习惯在 attention 与 FFN 中使用 0.1 左右的 dropout,如今的超大模型基本弃用,只保留 AdamW 的 weight decay(0.1–0.01)。训练规模上来后,人为引入的噪声往往弊大于利:
- 大规模数据 自带噪声和正则化效果,训练集本身很难过拟合,即便不过拟合也更多是数据/指令分布的问题。
- Dropout 在分布式训练中引入额外随机性,会干扰流水线与参数同步,推理阶段还得额外关掉,增加实现复杂度。
- Weight decay 提供更平滑、可控的收缩,且不会破坏计算图 determinism。结合精心设计的 LR schedule,已经能覆盖大部分正则需求。
- 仍然会保留 LayerNorm / RMSNorm 以及混合 batch、噪声数据等隐式正则方式。
Qwen 等少数模型继续在注意力内用极小的 dropout(<0.1)来改善优化噪声,但这已经是特例而非常规。
6 深宽取舍:Aspect Ratio 的共识
“模型该更深还是更宽?”——答案是 在给定 FLOPs 下保持 $n_{layers}/d_{model}$ 的稳定区间。这里的“深”指 Transformer block 的堆叠层数,也就是前向路径上串联多少次注意力+FFN;“宽”指单层内部的表示维度(hidden size)以及由它派生的 head dim 和 FFN 扩张维度,决定每层矩阵乘法的横向规模。行业公开模型的 ratio 极为接近,说明大家都在遵循同一条经验曲线。
| 模型 | 层数 | hidden | $n_{layers}/d_{model}$ |
|---|---|---|---|
| GPT-3 175B | 96 | 12,288 | 0.0078 |
| LLaMA-2 7B | 32 | 4,096 | 0.0078 |
| PaLM 540B | 118 | 18,432 | 0.0064 |
| Chinchilla 70B | 80 | 8,192 | 0.0097 |
这个 ratio 的好处是:对训练来说可以把梯度路径长度和通信量控制在某个可管理的范围;对推理来说则意味着延迟与吞吐都不会单方面失衡。偏离这一带宽基本意味着浪费算力,或是模型表现远低于参数上限。
6.1 为什么不盲目加深?
- 层越多越难 pipeline 并行,通信和调度成本上升。
- 推理延迟与层数线性相关,极深模型响应慢。
- 训练更易遭遇梯度消失/爆炸,对初始化和学习率极端敏感,需要额外技巧(深度残差缩放、层跳连等)才能稳定。
6.2 为什么不过度加宽?
- Attention/FFN 的矩阵乘法复杂度随 $d_{model}^2$ 升级,显存爆炸;在 TPU/GPU 上,方阵越大越难充分利用带宽。
- 层数太少虽然宽,但缺乏逐层抽象能力。
Scaling Law(Kaplan 2020, Hoffmann 2022)说明在固定计算预算下,存在一条最优曲线,大致满足 $n_{layers} \propto d_{model}^{0.8}$。现代 LLM 的“aspect ratio” 正是沿着这条曲线演化的,也为训练调度、内存分配提供了简单的 thumb rule。
7 设计超参数的顺序建议
- 先定算力预算与推理目标:确定 hidden size、层数范围以及允许的延迟。很多人一上来盯着参数量,结果推理时才发现延迟不可接受。
- 按 hidden size 推出 FFN、head dim、head 数:保持 $d_{head}\in[64,128]$ 且 $r_{ffn}$ 在 4 或 $8/3$。这一步既能保证矩阵形状适配硬件,也能方便地估算单步 FLOPs。
- 根据语料设计分词方案与 vocab:预估 embedding 占用与序列长度,必要时用多语言语料做 ablation,避免上线后才发现 token 化碎片严重。
- 正则化默认只用 weight decay,除非训练噪声过低或 batch 极大才考虑轻量 dropout。保持训练 determinism 可以让调参效率更高。
- 回到 aspect ratio 检查深宽平衡,超出 0.006–0.01 往往意味着资源使用不均且优化困难。必要时用小规模 pilot run 评估 loss scaling 情况,再决定是否重新分配宽度或深度。
掌握这些经验法则,在复现论文或定制新模型时就能少踩不少坑:超参数不再是拍脑袋的选择,而是一系列围绕计算、表示和数据约束的工程折中。希望这篇更“啰嗦”的笔记能在下一次开会讨论配置时,为你节省几轮 trial-and-error。