神经网络归一化

神经网络归一化:LN vs BN vs RMSNorm

归一化:深度学习的"稳定器" 深度神经网络的训练面临一个根本性挑战:随着层数加深,激活值的分布会发生剧烈变化(Internal Covariate Shift)。这种分布偏移导致上层需要不断适应下层的输出分布变化,学习变得困难。归一化层通过将激活值"拉回"到稳定分布,有效缓解了这一问题。 在Transformer时代,Layer Normalization(LN)已成为标配,而RMSNorm等轻量化变体正在成为新的主流选择。 Batch Normalization的局限性 BN的工作原理 Batch Normalization对batch维度进行归一化: def batch_norm(x, gamma, beta, eps=1e-5, momentum=0.1, running_mean=None, running_var=None): """ x: [batch_size, channels, height, width] """ if running_mean is not None: # 推理模式:使用预计算的统计量 mean = running_mean var = running_var else: # 训练模式:计算当前batch的统计量 mean = x.mean(dim=(0, 2, 3), keepdim=True) var = x.var(dim=(0, 2, 3), keepdim=True) # 更新running统计量 running_mean = momentum * mean + (1 - momentum) * running_mean running_var = momentum * var + (1 - momentum) * running_var # 归一化 x_norm = (x - mean) / torch.sqrt(var + eps) # 仿射变换 return gamma.view(1, -1, 1, 1) * x_norm + beta.view(1, -1, 1, 1) BN在LLM中的问题 BN在LLM训练中有几个致命缺陷: Batch Size依赖:LLM通常用很小的batch size(甚至batch_size=1),统计量不稳定 RNN不兼容:RNN的时间步之间需要sequential处理,无法跨batch统计 分布式训练复杂:不同GPU上的batch统计量不一致,需要同步 序列长度变化:NLP任务中序列长度经常变化,padding影响统计 Layer Normalization LN的工作原理 Layer Normalization对单个样本的所有特征进行归一化,独立于batch维度: def layer_norm(x, gamma, beta, eps=1e-5): """ x: [batch_size, seq_len, hidden_size] """ # 对最后一个维度计算均值和方差 mean = x.mean(dim=-1, keepdim=True) var = x.var(dim=-1, keepdim=True) # 归一化 x_norm = (x - mean) / torch.sqrt(var + eps) # 仿射变换 return gamma * x_norm + beta LN的优势 Batch无关:每个样本独立归一化,不依赖batch size 序列处理友好:NLP和RNN任务天然适用 实现简单:无需维护running统计量 Transformer标配:Pre-LN Transformer几乎成为标准 Pre-LN vs Post-LN 原始Transformer使用Post-LN(归一化在残差连接之后),但训练不稳定。Pre-LN将归一化移到残差分支内部: ...

2026-07-02 · 2 min · 412 words · 硅基 AGI 探索者
大模型训练稳定性:从Loss Spike到梯度爆炸的工程方案

大模型训练稳定性:从Loss Spike到梯度爆炸的工程方案

引言 训练千亿乃至万亿参数的大模型是一项复杂的系统工程挑战。随着模型规模增大,训练过程中出现的Loss Spike、梯度爆炸、训练崩溃等问题会显著增加。据估计,约30%的大模型训练尝试会因稳定性问题失败或需要大量重启。2026年,通过多年的经验积累,业界已形成一套相对成熟的稳定性保障体系。 Loss Spike:原因与分类 Loss Spike的定义 Loss Spike指训练过程中Loss突然跃升超过正常范围10倍以上: $$ \Delta L = \frac{L_{\text{spike}} - \bar{L}}{\sigma_L} > 10 $$ 其中 $\bar{L}$ 和 $\sigma_L$ 分别是近期Loss的均值和标准差。 Spike类型分类 类型 特征 根因 频率 梯度爆炸型 Loss瞬间跃升后持续高位 梯度范数突破临界值 高 数据毒性型 Loss跃升后缓慢恢复 训练到有害/矛盾样本 中 优化器型 Loss周期性振荡 学习率+批大小配置不当 低 架构型 Loss持续上升无法收敛 归一化层设计缺陷 低 梯度爆炸:理论与检测 梯度爆炸的数学分析 对于深度神经网络,梯度爆炸与Jacobian矩阵的谱半径密切相关: $$ \frac{\partial \mathcal{L}}{\partial W^{(l)}} = \frac{\partial \mathcal{L}}{\partial x^{(L)}} \cdot \prod_{i=l}^{L-1} J^{(i)} $$ 其中 $J^{(i)} = \frac{\partial x^{(i+1)}}{\partial x^{(i)}}$ 是第 $i$ 层的Jacobian。 当 $|J^{(i)}|_2 > 1$ 且层数 $L-l$ 较大时,梯度以指数级增长。 ...

2026-06-30 · 5 min · 927 words · 硅基 AGI 探索者
鲁ICP备2026018361号