数据处理层面

Normalization 的英文本身含义就是让数据变得 Normal,但是根据使用场景常常拥有不同的语义。

一个是在数据处理层面,另外一个是处理模型内部的数值。

Min-Max

(最小-最大归一化)

Standardization

{{< details “Standardization 和 LayerNorm 的语义区别” >}} Standardization 是:

在数据进入模型之前做的

LayerNorm 是:

在每一层之间做的

模型层面

LayerNorm

Layer Normalization(LayerNorm) 是一种对神经网络中间特征进行归一化的方法。与 Batch Normalization 不同,LayerNorm 不依赖 batch 中其他样本的数据,而是对单个样本的特征维度进行归一化,因此特别适合 Transformer、RNN 等序列模型,也天然适用于变长序列。

对于一个特征向量

\[ \mathbf{x}=(x_1,x_2,\cdots,x_d) \]

LayerNorm 首先计算该向量在特征维度上的均值和方差,然后进行标准化:

\[ y_i= \frac{x_i-\mu} {\sqrt{\sigma^2+\epsilon}} \cdot\gamma_i+\beta_i \]

其中:

1. 计算均值

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

即计算当前样本在被归一化特征维度上的平均值。

2. 计算方差

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

方差描述各个特征相对于均值的离散程度。

3. 标准化

\[ \hat{x}_i= \frac{x_i-\mu} {\sqrt{\sigma^2+\epsilon}} \]

经过这一步后,该组特征的均值接近 \(0\),方差接近 \(1\)。

4. 仿射变换

\[ y_i=\gamma_i\hat{x}_i+\beta_i \]

其中 \(\gamma_i\) 和 \(\beta_i\) 都是模型训练过程中学习得到的参数。

因此,LayerNorm 可以理解为:

LayerNorm = Normalize + Scale + Bias

归一化负责消除特征尺度和均值的影响,而 \(\gamma\) 和 \(\beta\) 则允许模型在训练过程中重新调整归一化后的特征。


LayerNorm 到底对哪些数据进行归一化?

这是理解 LayerNorm 最重要的一点。

假设输入张量为:

\[ X\in\mathbb{R}^{B\times S\times D} \]

其中:

例如:

\[ X\in\mathbb{R}^{8\times2048\times7168} \]

对于每一个 token,LayerNorm 只在最后的 hidden dimension \(D=7168\) 上计算均值和方差。

也就是说,对于:

\[ X[b,s,:]\in\mathbb{R}^{7168} \]

单独计算:

\[ \mu_{b,s} = \frac{1}{7168} \sum_{i=1}^{7168}X[b,s,i] \]

以及:

\[ \sigma^2_{b,s} = \frac{1}{7168} \sum_{i=1}^{7168} (X[b,s,i]-\mu_{b,s})^2 \]

然后对这个 token 的 7168 个特征进行归一化。

因此:

LayerNorm 不会把整个 batch 或整个 sequence 混在一起计算均值和方差,而是对每个 token 独立地在 hidden dimension 上进行归一化。

这也是 LayerNorm 与 BatchNorm 的一个重要区别。


\(\gamma\) 和 \(\beta\) 的作用

归一化之后:

\[ \hat{x}_i = \frac{x_i-\mu} {\sqrt{\sigma^2+\epsilon}} \]

特征的均值和尺度被统一了。

但如果始终固定为这种标准化结果,模型的表达能力可能受到限制。因此 LayerNorm 引入可学习参数:

\[ y_i=\gamma_i\hat{x}_i+\beta_i \]

其中:

例如,如果某个特征经过归一化后:

\[ \hat{x}_i=0.5 \]

而模型学习到:

\[ \gamma_i=2,\qquad\beta_i=-1 \]

那么:

\[ y_i=2\times0.5-1=0 \]

因此,LayerNorm 并不是简单地把所有特征强行固定到某个分布,而是:

先进行标准化,再通过可学习的 \(\gamma\) 和 \(\beta\) 恢复模型认为有用的尺度和偏移。


LayerNorm 的主要作用

LayerNorm 的核心作用并不是简单地“让每一层输入具有稳定分布”,更准确地说,是对每个 token 的特征进行中心化和尺度归一化,从而改善深层网络训练过程中的数值尺度和优化稳定性。

在 Transformer 中,hidden state 会经过大量层的重复变换:

\[ X \rightarrow \text{Attention} \rightarrow X \rightarrow \text{MLP} \rightarrow X \rightarrow\cdots \]

如果不同层之间的特征尺度发生剧烈变化,可能使训练和优化变得更加困难。

LayerNorm 通过:

\[ x \rightarrow \frac{x-\mu}{\sqrt{\sigma^2+\epsilon}} \]

将特征重新调整到相对稳定的尺度,再通过 \(\gamma,\beta\) 保留模型所需要的可学习自由度。

因此,它通常有助于:


注意:现代 LLM 不一定同时存在 \(\gamma\) 和 \(\beta\)

上述公式描述的是完整的 LayerNorm:

\[ y_i=\gamma_i\hat{x}_i+\beta_i \]

其参数通常为:

weight [D]   ← γ
bias   [D]   ← β

但是在实际的大语言模型中,Normalization 的实现可能有所不同。例如某些实现会使用 bias-free LayerNorm,此时只有:

\[ y_i=\gamma_i\hat{x}_i \]

对应参数只有:

weight [D]

而没有:

bias [D]

此外,现代 LLM 中还大量使用 RMSNorm。RMSNorm 不计算均值,而是只利用均方根对特征进行缩放,其核心形式为:

\[ y_i= \frac{x_i} {\sqrt{\frac{1}{d}\sum_{j=1}^{d}x_j^2+\epsilon}} \cdot\gamma_i \]

因此,在阅读具体模型的 checkpoint 时,不能仅根据参数名 xxx.weight 就假定它一定是标准的 LayerNorm,还需要结合模型实现判断它究竟是:

例如,如果 checkpoint 中只有:

input_layernorm.weight [7168]

而没有:

input_layernorm.bias [7168]

那么这里至少可以确定它不是带有 \(\gamma+\beta\) 两组参数的标准 LayerNorm,而更可能是 scale-only 的 normalization 实现。

RMSNorm

RMSNorm 是 LayerNorm 的一个简化变体。它认为 LayerNorm 的成功主要来自于其重新缩放不变性,而减去均值的操作不是必须的。因此,它只对输入的均方根进行归一化。

\[y = \frac{x}{\sqrt{\underbrace{\frac{1}{n} \sum_{i=1}^n x_i^2}_{\text{均方值}} + \epsilon}} \cdot \gamma\]

通过这种方式,RMSNorm 对输入张量 \(x\) 进行了归一化处理,而不需要像 LayerNorm 那样先减去均值,从而简化了运算过程并减少了需要训练的参数数量(因为它没有偏置项 \(\beta\))。这种设计使得 RMSNorm 在某些情况下比 LayerNorm 更高效。

归一语义

很好,我们把三种“归一”的数学约束条件直接写出来,对比它们到底在“归一”什么。

我只写最核心的“归一结果满足什么条件”。


概率归一

Softmax function

定义:

\[ y_i = \frac{e^{x_i}}{\sum_j e^{x_j}} \]

它满足两个数学约束:

\[ \sum_i y_i = 1 \]

\[ y_i > 0 \]

语义

👉 它控制的是“总质量”

方差归一

Layer Normalization

定义(忽略 γ、β):

\[ y_i = \frac{x_i - \mu}{\sigma} \]

其中:

\[ \mu = \frac{1}{d}\sum_i x_i \]

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

它满足:

\[ \frac{1}{d}\sum_i y_i = 0 \]

\[ \frac{1}{d}\sum_i y_i^2 = 1 \]

也就是说:

\[ \mathrm{Var}(y) = 1 \]

语义

👉 它控制的是“中心 + 波动幅度”

二阶矩归一

RMSNorm

定义(忽略 γ):

\[ y_i = \frac{x_i}{\sqrt{\frac{1}{d}\sum_j x_j^2}} \]

它满足:

\[ \frac{1}{d}\sum_i y_i^2 = 1 \]

注意:

\[ \frac{1}{d}\sum_i y_i \neq 0 \]

语义

👉 它控制的是“二阶矩”


三者统一对比

方法 归一对象 数学约束 几何意义
Softmax L1 和 \(\sum y_i =1\) 投影到概率单纯形
LayerNorm 均值 + 方差 均值=0,Var=1 投影到零均值单位球
RMSNorm 二阶矩 \(E[y^2]=1\) 投影到固定半径球面

统一表达

可以写成:

\[ \text{Normalize}(x) = \frac{x}{|x|_p} \]

不同方法只是:


Softmax:

归一“概率结构”

LayerNorm:

归一“统计分布”

RMSNorm:

归一“能量尺度”