大模型的归一化

本文结合chatgpt生成

大模型里说“归一化”,通常不是指一种东西,而是几类操作。对 Transformer/LLM 来说,最核心的是 LayerNorm / RMSNorm 以及它们放在残差结构中的位置


1. LayerNorm:最经典的 Transformer 归一化

LayerNorm 是 Transformer 里最早、最经典的归一化方式。

假设某一层某个 token 的隐藏向量是:

\[x \in \mathbb{R}^{d} \]

LayerNorm 会在这个 token 的 hidden dimension 上算均值和方差:

\[\mu = \frac{1}{d}\sum_{i=1}^{d}x_i \]

\[\sigma^2 = \frac{1}{d}\sum_{i=1}^{d}(x_i-\mu)^2 \]

然后归一化:

\[\text{LayerNorm}(x)=\gamma \frac{x-\mu}{\sqrt{\sigma^2+\epsilon}}+\beta \]

其中:

  • \(\gamma\):可学习缩放参数
  • \(\beta\):可学习偏置参数
  • \(\epsilon\):防止除零的小常数

直观理解:LayerNorm 让每个 token 的 hidden state 分布更稳定,避免训练时激活值过大或过小。

早期 Transformer、BERT、GPT-2 等都大量使用 LayerNorm。


2. RMSNorm:现在 LLM 里非常常见

RMSNorm 是 LayerNorm 的简化版,现在很多大模型都用它,比如 LLaMA 系列。

LayerNorm 做两件事:

  1. 减去均值
  2. 除以标准差

RMSNorm 只做第二类事情,不减均值。它使用 root mean square:

\[\text{RMS}(x)=\sqrt{\frac{1}{d}\sum_{i=1}^{d}x_i^2+\epsilon} \]

然后:

\[\text{RMSNorm}(x)=\gamma \frac{x}{\text{RMS}(x)} \]

它没有 \(\beta\),通常也不做 mean-centering。

优点:

  • 计算更简单
  • 速度略快
  • 参数更少
  • 在大规模 Transformer 里效果很好

直观理解:RMSNorm 不关心向量的均值,只控制向量整体尺度。


3. Pre-Norm 和 Post-Norm:归一化放在哪里

这比 LayerNorm/RMSNorm 本身还重要。

Transformer block 大概有两个子层:

  1. Self-Attention
  2. Feed Forward Network,FFN / MLP

每个子层外面都有残差连接。

Post-Norm

原始 Transformer 是 Post-Norm:

\[x_{l+1} = \text{Norm}(x_l + F(x_l)) \]

也就是先做子层和残差相加,再归一化。

优点是早期结构简单,但深层模型训练容易不稳定。


Pre-Norm

现代 LLM 更常用 Pre-Norm:

\[x_{l+1} = x_l + F(\text{Norm}(x_l)) \]

也就是先归一化,再送进 Attention 或 FFN,最后加残差。

例如一个 LLaMA 风格的 block 可以写成:

\[x = x + \text{Attention}(\text{RMSNorm}(x)) \]

\[x = x + \text{MLP}(\text{RMSNorm}(x)) \]

MLP是前馈网络,对每个 token 的 hidden state 单独做非线性变换

Pre-Norm 的好处是梯度流更稳定,深层模型更容易训练。

所以现在很多 LLM 是:

Pre-Norm + RMSNorm


4. Sandwich Norm / Extra Norm:额外加的归一化

有些模型会在 block 内部或残差路径上额外加 norm,比如所谓:

  • Sandwich LayerNorm
  • DeepNorm
  • NormFormer 里的额外 LayerNorm
  • attention 输出后再 norm
  • FFN 输出后再 norm

这些设计通常是为了训练更深的 Transformer,让激活和梯度更稳定。

例如一种形式:

\[x = x + \text{Norm}(\text{Attention}(\text{Norm}(x))) \]

不一定是主流 LLM 的默认配置,但在一些研究型架构或深层 Transformer 里会出现。


5. Embedding Norm:词嵌入上的归一化

有些模型会对 token embedding 做归一化,或者在 embedding 后加一层 LayerNorm。

例如 BERT 中常见:

\[h_0 = \text{LayerNorm}(\text{TokenEmbedding} + \text{PositionEmbedding} + \text{SegmentEmbedding}) \]

这在 encoder-only 模型里比较常见。

SegmentEmbedding是句段向量,不常用。

Decoder-only LLM 里不一定这么做。很多现代 LLM 更依赖每个 Transformer block 里的 RMSNorm。


6. Final Norm:输出前的归一化

现代 decoder-only LLM 通常在最后一层 Transformer block 之后,还有一个 final norm。

比如:

\[h = \text{RMSNorm}(h) \]

然后再接语言模型头:

\[\text{logits}=hW_{\text{vocab}}^\top \]

这个 final norm 很常见。它的作用是让最终 hidden state 的尺度更稳定,再映射到 vocabulary logits。


7. BatchNorm:大模型里通常不用

BatchNorm 在 CNN 里非常常见,但在 LLM/Transformer 里很少用。

BatchNorm 是沿着 batch 维度统计均值和方差:

\[\mu_B, \sigma_B^2 \]

问题是:

  • NLP 序列长度可变
  • 自回归生成时 batch 统计不稳定
  • 训练和推理行为不一致
  • 分布式训练下 batch 统计复杂
  • 对小 batch 或长序列不友好

所以 Transformer 里一般不用 BatchNorm,而更偏向 LayerNorm/RMSNorm。


8. Attention 里的缩放:严格说不是 Norm,但也常被一起提

Self-Attention 里有一个缩放项:

\[\text{Attention}(Q,K,V)=\text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V \]

这里除以 \(\sqrt{d_k}\) 是为了避免 点积 / 内积 随维度增大而变得过大,导致 softmax 饱和。

这不是 LayerNorm 那种归一化,但它也是一种尺度控制。


9. Softmax 归一化:把分数变成概率分布

大模型里还有 softmax:

Attention softmax

\[\alpha_{ij} = \frac{\exp(s_{ij})}{\sum_j \exp(s_{ij})} \]

它把 attention score 变成权重分布。

输出 softmax

\[p(y_t|x)=\text{softmax}(\text{logits}) \]

它把 vocabulary logits 变成下一个 token 的概率分布。

Softmax 也是归一化,但它归一化的是概率分布,不是 hidden state 的尺度。


10. QK Norm:近年越来越常见

还有一个值得注意的是 QK Norm,也就是对 attention 里的 Query 和 Key 做归一化。

普通 attention 是:

\[QK^\top \]

QK Norm 会先对 Q 和 K 做某种归一化,再计算 attention score。

直观目的:

  • 控制 attention logits 的尺度
  • 避免 attention score 过大
  • 提升训练稳定性
  • 对长上下文训练有帮助

一些新模型会使用类似思想,比如对 query/key 做 RMSNorm 或 L2 normalization。


现代大模型里最核心的是 Pre-Norm 结构 + RMSNorm/LayerNorm;Attention 里的 softmax 和 \(\sqrt{d_k}\) 缩放也是重要的“尺度/概率归一化”;BatchNorm 这种 CNN 常用归一化在 LLM 里基本不是主流。

posted @ 2026-05-30 21:22  wljss  阅读(10)  评论(0)    收藏  举报