跳转到主要内容
杨月昌的软件博客
返回

归一化技术全景:从数据预处理到现代大模型的稳定器

引言

归一化技术通过将激活值或输入变换到更友好的分布,显著改善了深度网络的训练稳定性收敛速度泛化性能

早期归一化主要解决特征尺度不一致问题;2015年后,Batch Normalization(BN)开启了“层内归一化”时代;2017–2018年,LayerNorm(LN)成为RNN与Transformer的标准配置;进入2020年代,尤其是大语言模型(LLM)时代,RMSNorm因其计算效率高、数值更稳定而逐渐成为主流选择。

即使在2026年,归一化仍是几乎所有生产级模型(CNN、ViT、LLM、Diffusion、MoE等)的标配组件。


1. 为什么归一化如此重要?(核心动机)

未经归一化的网络容易出现以下问题:

归一化通过均值/方差控制 + 可学习重参数化,极大缓解上述问题,让我们能使用更大学习率、更深网络。


2. 经典归一化方法(数据预处理阶段)

2.1 Min-Max Normalization(离差标准化)

$$ x’ = \frac{x - x_{\min}}{x_{\max} - x_{\min}} \quad \text{或映射到 } [a, b] $$

适合:图像像素(0–1或0–255)、输出有明确物理范围的任务。

缺点:对离群点敏感。

2.2 Z-Score Standardization(标准化/Standardization)

$$ x’ = \frac{x - \mu}{\sigma} $$

适合:传统ML算法(SVM、LR、KMeans等)、存在离群点的场景。

在深度学习中,主要用于输入层预处理(如今较少单独使用)。


3. 层内归一化(Layer-wise Normalization)——深度学习时代核心

3.1 Batch Normalization (BN, 2015)

mini-batch中同一通道的所有样本进行归一化。

训练时:

$$ \mu_B = \frac{1}{m} \sum_{i=1}^m x_i, \quad \sigma_B^2 = \frac{1}{m} \sum_{i=1}^m (x_i - \mu_B)^2 $$

$$ \hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} \cdot \gamma + \beta $$

推理时使用移动平均的全局统计量。

优势:加速收敛、允许更高学习率、正则化效应。

缺点:对小batch size(<16)不稳定 → 不适合在线学习、RNN、某些GAN。

3.2 Layer Normalization (LN, 2016)

单个样本的所有特征(或整个隐藏状态)进行归一化,不依赖batch维度。

$$ \mu = \frac{1}{H} \sum_{i=1}^H x_i, \quad \sigma^2 = \frac{1}{H} \sum_{i=1}^H (x_i - \mu)^2 $$

$$ \hat{x} = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} \cdot \gamma + \beta $$

优势:batch size无关,适合RNN、Transformer、在线推理。

3.3 RMSNorm(Root Mean Square Normalization, 2019–2021流行)

LN的简化版,去掉均值减法,仅用均方根归一化:

$$ \hat{x} = \frac{x}{\sqrt{\frac{1}{H} \sum_{i=1}^H x_i^2 + \epsilon}} \cdot \gamma $$

(通常无β,或β可选)

2025–2026年现状:RMSNorm已成为现代大语言模型的主流归一化(Llama 3、Qwen 2、DeepSeek、Grok系列、Mistral等几乎全部采用)。

原因:

3.4 其他重要变体

方法归一化轴依赖batch?典型场景(2026主流)代表模型/架构
BatchNorm通道 × batchCNN、ViT早期阶段ResNet、EfficientNet早期
LayerNorm特征/隐藏维度经典Transformer、BERT、GPT-2/3原版Transformer、BERT
RMSNorm特征/隐藏维度(无均值)现代LLM(2023年后主流)Llama 3、Qwen、Grok、DeepSeek
GroupNorm通道分组小batch CNN、检测/分割ResNet-50(GN版)、Mask R-CNN
InstanceNorm单个样本 × 单个通道风格迁移、GAN、图像生成CycleGAN、StarGAN

4. PyTorch 中常用归一化层(2026写法)

import torch.nn as nn

# 经典 BatchNorm(CV常用)
bn = nn.BatchNorm2d(num_features=64)

# LayerNorm(Transformer早期)
ln = nn.LayerNorm(normalized_shape=4096)          # 或 normalized_shape=[seq_len, embed_dim]

# RMSNorm(现代LLM首选,Hugging Face Transformers已内置)
# class RMSNorm(nn.Module):
#     def __init__(self, dim, eps=1e-6):
#         super().__init__()
#         self.eps = eps
#         self.weight = nn.Parameter(torch.ones(dim))
#
#     def forward(self, x):
#         rms = x.norm(2, dim=-1, keepdim=True) / (x.shape[-1] ** 0.5)
#         return x / (rms + self.eps) * self.weight

# 直接用 transformers 中的实现
from transformers.models.llama.modeling_llama import LlamaRMSNorm

5. 2026年实用选择指南

场景推荐归一化(优先级)说明
经典CNN / 视觉预训练模型BatchNorm2d → GroupNorm大batch用BN,小batch/检测用GN
Transformer Encoder/Decoder(旧)LayerNormBERT、T5、原版GPT仍常用
现代大语言模型(LLM)训练/微调RMSNormLlama-3、Qwen-2、Grok、Mistral、DeepSeek等几乎全部采用,性能+效率最佳
风格迁移 / 图像生成 / GANInstanceNorm / AdaIN强调单样本风格一致性
超小batch / 在线学习 / RLLayerNorm / RMSNormbatch-independent
追求极致量化友好 & 推理速度RMSNorm(甚至尝试去掉归一化)部分论文显示推理时可移除LN/RMSNorm,损失很小

小Tips


总结

归一化从“数据预处理技巧”演变为“深度网络设计的核心组件”。2026年的共识是:

选择归一化时,问自己三个问题:

  1. batch size 是否稳定且足够大?
  2. 是否需要batch维度的统计信息?
  3. 是否追求计算效率与量化友好?

答案指向的往往就是当前最适合的那一种。



上一篇
宝塔面板实现百度 API 自动推送教程:加速 SEO 收录的两大方案
下一篇
SQL Server 日期查询实战:从基础到高级优化技巧