前言
本文将对归一化技术进行系统分析,并详细探讨为何在 LLaMA 等模型中 RMSNorm 取代了原始 Transformer 架构中的 LayerNorm,同时介绍 MiniMind 中 RMSNorm 的具体实现。
一、归一化技术概述
归一化的核心目的在于消除数据间的量纲差异,使数据分布不受极端值影响,同时保持原始数据的拓扑结构不变。在深度学习领域,归一化技术具有以下关键作用:
- 稳定数值范围,避免极大/极小值干扰
- 加速模型收敛过程
- 有效缓解梯度消失和梯度爆炸问题
- 间接降低内存占用
1.1 基本理论框架
如下图所示,归一化处理后数据的数值范围发生变化,但数据的内在分布结构保持不变,这构成了归一化技术的基本理论框架。

1.2 梯度与参数更新的稳定性
归一化之所以能提升优化稳定性,本质是通过统一数据数值范围,解决了梯度计算与参数更新中的'量级失衡'问题——核心矛盾在于:未归一化数据的'大数值输入'会导致'梯度幅值异常',进而破坏参数更新的平稳性;而归一化通过缩放数据,让梯度与参数更新始终处于合理区间。以下从原理层面拆解关键逻辑:
核心前提:梯度幅值与输入数值的强相关性
深度学习的优化依赖梯度下降:参数更新公式为 $\theta = \theta - \eta \cdot \nabla L(\theta)$($\theta$ 为参数,$\eta$ 为学习率,$\nabla L(\theta)$ 为损失函数对参数的梯度)。 梯度 $\nabla L(\theta)$ 的幅值直接由输入数据的数值量级决定——以 MSE 损失为例,推导如下:
假设模型是简单的线性映射 $y = Wx + b$($W$ 为权重,$b$ 为偏置),MSE 损失函数为: $L = \frac{1}{N}\sum_{i=1}^N (y_i - \hat{y}i)^2 = \frac{1}{N}\sum{i=1}^N (Wx_i + b - \hat{y}_i)^2$
对权重 $W$ 求梯度: $\nabla_W L = \frac{2}{N}\sum_{i=1}^N (Wx_i + b - \hat{y}_i) \cdot x_i$
从公式可见:梯度 $\nabla_W L$ 的幅值与输入 $x_i$ 的幅值成正比——若 $x_i$ 是未归一化的大数值(例如 100、200、300),即使预测误差 $(Wx_i + b - \hat{y}_i)$ 不大,梯度也会被 $x_i$ 放大,导致 $\nabla_W L$ 数值激增(即'梯度爆炸'的初级表现)。
未归一化时的优化不稳定性根源
-
梯度幅值失控,超出学习率适配范围 学习率 $\eta$ 是全局统一的超参数(如 0.001),需适配梯度的'合理量级'(通常为 $10^{-3} \sim 10^{0}$)。
- 未归一化时:$x_i$ 为 100 量级,假设误差项为 10,则梯度 $\nabla_W L \approx \frac{2}{3} \times 10 \times 100 \approx 667$。用 $\eta = 0.001$ 更新时,参数变化量 $\eta \cdot \nabla_W L \approx 0.667$——若参数 $W$ 初始值为 0.1 量级,单次更新就会让参数'跳变'一个数量级,导致模型震荡不收敛。
- 归一化后:$x_i$ 为 1 量级,误差项为 0.1,则梯度 $\nabla_W L \approx \frac{2}{3} \times 0.1 \times 1 \approx 0.067$。参数变化量 $\eta \cdot \nabla_W L \approx 0.000067$,与参数初始量级匹配,更新平稳。
-
不同特征维度梯度量级失衡问题 当输入数据包含不同量级的特征维度(如"收入(万级)'和"年龄(十级)')时,未归一化会导致: 深度学习中,梯度是针对模型参数计算的(而非直接对应特征),但特征量级会通过参数梯度计算影响优化过程。实例说明: 假设模型输入为两个特征(收入 $x_1$:万级,年龄 $x_2$:十级),使用线性模型 $y = w_1x_1 + w_2x_2 + b$,损失函数为 MSE: $L = \frac{1}{N}\sum (y - \hat{y})^2$ 参数梯度计算为: $\nabla_{w_1}L = \frac{2}{N}\sum (y - \hat{y}) \cdot x_1$ $\nabla_{w_2}L = \frac{2}{N}\sum (y - \hat{y}) \cdot x_2$ 关键发现:





