文章目录
前言
一、RMSNorm
1.1 归一化技术的演进史
- 归一化的核心目的只有一个:让数据分布稳定,防止梯度消失或爆炸。
| 技术 | 核心逻辑 | 痛点 (为什么大模型不用它) |
|---|---|---|
| BatchNorm | 在 Batch 维度上计算均值和方差。 | 强依赖 Batch Size。大模型训练时,受限于显存,Batch Size 通常很小 (如 1 或 2),导致统计量极不准确,训练崩溃。 |
| LayerNorm | 在 特征维度 (Hidden Dim) 上计算均值和方差。公式: y = x − μ σ 2 + ϵ ⊙ γ + β y = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} \odot \gamma + \beta y=σ2+ϵ x−μ⊙γ+β | 计算均值 μ \mu μ 和方差 σ 2 \sigma^2 σ2 需要额外的计算开销和同步操作。在千亿参数模型中,这成为了不可忽视的瓶颈。 |
| RMSNorm (当前霸主) | 假设均值已经接近 0 ,直接去掉减去均值的步骤,只用均方根 (RMS) 缩放。公式: y = x RMS ( x ) ⊙ γ y = \frac{x}{\text{RMS}(x)} \odot \gamma y=RMS(x)x⊙γ | 几乎没有缺点。LLaMA、Gemma、Qwen 等现代大模型实测表明:去掉均值计算,效果几乎无损,但速度显著提升 |
1.2 RMSNorm 数学公式
- 给定输入 x ∈ R d x \in \mathbb{R}^d x∈Rd,在实践中,形状通常是
[batch, seq_len, hidden_dim],然后在最后一个维度hidden_dim上做归一化。
Step 1: 计算均方根 (RMS)
RMS ( x ) = 1 d ∑ i = 1 d x i 2 + ϵ \text{RMS}(x) = \sqrt{ \frac{1}{d} \sum_{i=1}^{d} x_i^2 + \epsilon } RMS(x)=d1i=1∑dxi2+ϵ
- 注: ϵ \epsilon ϵ 是防止分母为 0 的平滑项。 ,可以是
1e-6
Step 2: 归一化并缩放 (Scale)
y = x RMS ( x ) ⊙ γ y = \frac{x}{\text{RMS}(x)} \odot \gamma y=RMS(x)x⊙γ
- *注: γ \gamma γ (即
weight) 是形状为[hidden_dim]的可学习参数。 - 注:RMSNorm 没有偏置项 Bias!