BatchNorm、LayerNorm和RMSNorm的区别

BatchNorm、LayerNorm和RMSNorm的区别

      • [1. **Batch Normalization (BatchNorm)**](#1. Batch Normalization (BatchNorm))
      • [2. **Layer Normalization (LayerNorm)**](#2. Layer Normalization (LayerNorm))
      • [3. **RMSNorm (Root Mean Square Normalization)**](#3. RMSNorm (Root Mean Square Normalization))
      • **对比总结**
      • **选择建议**
      • **示例数据**
      • [1. **BatchNorm (3D)**](#1. BatchNorm (3D))
      • [2. **LayerNorm (3D)**](#2. LayerNorm (3D))
      • [3. **RMSNorm (3D)**](#3. RMSNorm (3D))
      • **对比总结**

在深度学习中,Layer Normalization (LayerNorm)RMSNorm (Root Mean Square Normalization)Batch Normalization (BatchNorm) 是三种常用的归一化技术,用于加速训练、提升模型稳定性。它们的核心思想是对神经网络的激活值进行标准化,但具体实现和应用场景有所不同。以下是它们的对比:


1. Batch Normalization (BatchNorm)

  • 核心思想 :对同一特征通道(channel)在一个批次的样本上进行归一化。

  • 计算方式

    • 对每个特征通道,计算批次内所有样本的均值和方差:
      μ B = 1 B ∑ i = 1 B x i , σ B 2 = 1 B ∑ i = 1 B ( x i − μ B ) 2 \mu_B = \frac{1}{B} \sum_{i=1}^B x_i, \quad \sigma_B^2 = \frac{1}{B} \sum_{i=1}^B (x_i - \mu_B)^2 μB=B1i=1∑Bxi,σB2=B1i=1∑B(xi−μB)2
    • 标准化: ( x ^ i = x i − μ B σ B 2 + ϵ ) ( \hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} ) (x^i=σB2+ϵ xi−μB)
    • 引入可学习的缩放和平移参数: ( y i = γ x ^ i + β ) ( y_i = \gamma \hat{x}_i + \beta ) (yi=γx^i+β)。
  • 优点

    • 减少内部协变量偏移(Internal Covariate Shift),加速训练。
    • 对卷积网络(CNN)效果显著。
  • 缺点

    • 依赖批次大小(batch size),小批次时效果不稳定。
    • 不适用于序列数据(如RNN、Transformer)或在线学习(batch size=1)。
  • 适用场景:CNN、全连接网络(大批次数据)。


2. Layer Normalization (LayerNorm)

  • 核心思想 :对单个样本的所有特征进行归一化(沿特征维度,而非批次维度)。

  • 计算方式

    • 对每个样本,计算其所有特征的均值和方差:
      \\mu_L = \\frac{1}{d} \\sum_{j=1}\^d x_j, \\quad \\sigma_L\^2 = \\frac{1}{d} \\sum_{j=1}\^d (x_j - \\mu_L)\^2
    • 标准化和仿射变换与BatchNorm类似。
  • 优点

    • 不依赖批次大小,适用于小批次或单样本(如RNN、Transformer)。
    • 对序列数据友好,稳定训练动态。
  • 缺点

    • 对CNN效果不如BatchNorm(因空间维度未归一化)。
  • 适用场景:Transformer、RNN、小批次或动态结构模型。


3. RMSNorm (Root Mean Square Normalization)

  • 核心思想 :LayerNorm的简化版,仅使用均方根(RMS)进行缩放,省略均值中心化。

  • 计算方式

    • 计算特征的均方根:
      RMS ( x ) = 1 d ∑ j = 1 d x j 2 \text{RMS}(x) = \sqrt{\frac{1}{d} \sum_{j=1}^d x_j^2} RMS(x)=d1j=1∑dxj2
    • 标准化: ( x ^ j = x j RMS ( x ) + ϵ ) ( \hat{x}_j = \frac{x_j}{\text{RMS}(x) + \epsilon} ) (x^j=RMS(x)+ϵxj)
    • 仿射变换: ( y j = γ x ^ j ) ( y_j = \gamma \hat{x}_j ) (yj=γx^j)。
  • 优点

    • 计算量比LayerNorm小(无需计算均值)。
    • 在部分任务(如Transformer)中表现接近LayerNorm。
  • 缺点

    • 未中心化,可能影响某些任务的性能。
  • 适用场景:需要高效归一化的模型(如大语言模型LLaMA)。


对比总结

方法 归一化维度 是否需要批次数据 计算复杂度 典型应用场景
BatchNorm 批次+特征通道 较高 CNN
LayerNorm 样本内所有特征 中等 Transformer、RNN
RMSNorm 样本内所有特征 大模型(如LLaMA)

选择建议

  • 使用BatchNorm:CNN等固定结构、大批次数据。
  • 使用LayerNorm:Transformer、RNN等序列模型或小批次数据。
  • 使用RMSNorm:追求效率且对中心化不敏感的任务(如LLaMA)。

每种方法的选择需结合具体模型和任务特性进行验证。

在3D数据(如CNN中的特征图或时序数据)中,BatchNormLayerNormRMSNorm 的计算逻辑与2D类似,但需要明确归一化的维度。下面通过一个具体的3D张量示例说明它们的计算过程。


示例数据

假设输入是一个3D张量,形状为 [batch_size, sequence_length, features],模拟一个小批次的时序数据(如Transformer的输入或CNN的特征图):

python 复制代码
# 输入数据 (batch_size=2, sequence_length=2, features=3)
x = [
    [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]],  # 样本1(两个时间步)
    [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]] # 样本2
]

1. BatchNorm (3D)

归一化维度 :对每个特征通道(features)在整个批次的所有序列位置 上计算均值和方差。
步骤

  1. 将特征通道分开,计算每个通道的均值和方差(跨批次和序列):
    • 特征通道1 (所有x[...,0]的值):[1, 4, 7, 10]
      均值 = (1 + 4 + 7 + 10)/4 = 5.5
      方差 = [(1-5.5)² + (4-5.5)² + (7-5.5)² + (10-5.5)²]/4 = 10.5
    • 特征通道2x[...,1]):[2, 5, 8, 11]
      均值 = 6.5, 方差 = 10.5
    • 特征通道3x[...,2]):[3, 6, 9, 12]
      均值 = 7.5, 方差 = 10.5
  2. 对每个通道标准化(假设 epsilon=1e-5):
    • 样本1的第一个时间步的特征1:
      ( x ^ 1 , 0 , 0 = 1 − 5.5 10.5 + 1 e − 5 ≈ − 1.387 ) ( \hat{x}_{1,0,0} = \frac{1 - 5.5}{\sqrt{10.5 + 1e-5}} \approx -1.387 ) (x^1,0,0=10.5+1e−5 1−5.5≈−1.387)
    • 样本2的第二个时间步的特征3:
      ( x ^ 1 , 1 , 2 = 12 − 7.5 10.5 + 1 e − 5 ≈ 1.387 ) ( \hat{x}_{1,1,2} = \frac{12 - 7.5}{\sqrt{10.5 + 1e-5}} \approx 1.387 ) (x^1,1,2=10.5+1e−5 12−7.5≈1.387)
  3. 仿射变换(假设 gamma=1, beta=0)。

结果

复制代码
BatchNorm(x) ≈ [
    [[-1.387, -1.387, -1.387], [-0.462, -0.462, -0.462]],
    [[ 0.462,  0.462,  0.462], [ 1.387,  1.387,  1.387]]
]

特点:同一特征通道在所有样本和位置上被归一化。


2. LayerNorm (3D)

归一化维度 :对每个样本的所有特征和序列位置 计算均值和方差(即沿最后两维 [sequence_length, features])。
步骤

  1. 计算每个样本的均值和方差(展平所有特征和序列):
    • 样本1 :值 = [1, 2, 3, 4, 5, 6]
      均值 = (1 + 2 + 3 + 4 + 5 + 6)/6 = 3.5
      方差 = [(1-3.5)² + ... + (6-3.5)²]/6 ≈ 2.916
    • 样本2 :值 = [7, 8, 9, 10, 11, 12]
      均值 = 9.5, 方差 ≈ 2.916
  2. 标准化:
    • 样本1的第一个时间步的特征1:
      ( x ^ 0 , 0 , 0 = 1 − 3.5 2.916 + 1 e − 5 ≈ − 1.463 ) ( \hat{x}_{0,0,0} = \frac{1 - 3.5}{\sqrt{2.916 + 1e-5}} \approx -1.463 ) (x^0,0,0=2.916+1e−5 1−3.5≈−1.463)
    • 样本2的第二个时间步的特征3:
      ( x ^ 1 , 1 , 2 = 12 − 9.5 2.916 + 1 e − 5 ≈ 1.463 ) ( \hat{x}_{1,1,2} = \frac{12 - 9.5}{\sqrt{2.916 + 1e-5}} \approx 1.463 ) (x^1,1,2=2.916+1e−5 12−9.5≈1.463)
  3. 仿射变换(假设 gamma=1, beta=0)。

结果

复制代码
LayerNorm(x) ≈ [
    [[-1.463, -0.878, -0.292], [ 0.292,  0.878,  1.463]],
    [[-1.463, -0.878, -0.292], [ 0.292,  0.878,  1.463]]
]

特点:每个样本独立归一化,序列和特征维度被一起处理。


3. RMSNorm (3D)

归一化维度 :与LayerNorm相同(沿最后两维),但仅用RMS缩放,不中心化。
步骤

  1. 计算每个样本的RMS:
    • 样本1
      ( RMS = ( 1 2 + 2 2 + 3 2 + 4 2 + 5 2 + 6 2 ) / 6 = 91 / 6 ≈ 3.89 ) ( \text{RMS} = \sqrt{(1^2 + 2^2 + 3^2 + 4^2 + 5^2 + 6^2)/6} = \sqrt{91/6} \approx 3.89 ) (RMS=(12+22+32+42+52+62)/6 =91/6 ≈3.89)
    • 样本2
      ( RMS = ( 7 2 + 8 2 + 9 2 + 10 2 + 11 2 + 12 2 ) / 6 = 559 / 6 ≈ 9.65 ) ( \text{RMS} = \sqrt{(7^2 + 8^2 + 9^2 + 10^2 + 11^2 + 12^2)/6} = \sqrt{559/6} \approx 9.65 ) (RMS=(72+82+92+102+112+122)/6 =559/6 ≈9.65)
  2. 标准化:
    • 样本1的第一个时间步的特征1:
      ( x ^ 0 , 0 , 0 = 1 3.89 ≈ 0.257 ) ( \hat{x}_{0,0,0} = \frac{1}{3.89} \approx 0.257 ) (x^0,0,0=3.891≈0.257)
    • 样本2的第二个时间步的特征3:
      ( x ^ 1 , 1 , 2 = 12 9.65 ≈ 1.244 ) ( \hat{x}_{1,1,2} = \frac{12}{9.65} \approx 1.244 ) (x^1,1,2=9.6512≈1.244)
  3. 缩放(假设 gamma=1)。

结果

复制代码
RMSNorm(x) ≈ [
    [[0.257, 0.514, 0.771], [1.028, 1.285, 1.542]],
    [[0.725, 0.829, 0.933], [1.036, 1.140, 1.244]]
]

特点:保留原始值的相对大小,仅通过RMS缩放。


对比总结

方法 样本1的第一个时间步结果 样本2的第二个时间步结果 核心区别
BatchNorm [-1.387, -1.387, -1.387] [1.387, 1.387, 1.387] 按特征通道跨批次和序列归一化
LayerNorm [-1.463, -0.878, -0.292] [0.292, 0.878, 1.463] 按样本归一化所有特征和序列
RMSNorm [0.257, 0.514, 0.771] [1.036, 1.140, 1.244] 仅用RMS缩放,无中心化

关键点

  • BatchNorm:依赖批次数据,对CNN友好,但可能不适用于小批次或动态序列。
  • LayerNorm:独立处理每个样本,适合Transformer、RNN。
  • RMSNorm:高效,适合大模型(如LLaMA),但忽略均值中心化。
相关推荐
噜~噜~噜~2 小时前
D-CBRS(Diverse Class-Balancing Reservoir Sampling )的个人理解
人工智能·深度学习·持续学习·cbrs·d-cbrs
Kiyra2 小时前
LinkedHashMap 源码阅读
java·开发语言·网络·人工智能·安全·阿里云·云计算
Yeats_Liao2 小时前
MindSpore开发之路(十四):简化训练循环:高阶API `mindspore.Model` 的妙用
人工智能·python·深度学习
欣欣讲AI2 小时前
SpeedAI也有属于自己的Nanobanana大模型生成PPT科研智能体啦
人工智能
co松柏2 小时前
AI+Excalidraw,用自然语言画手绘风格技术图
前端·人工智能·后端
用户5191495848452 小时前
7-ZiProwler:CVE-2025-11001 漏洞利用工具
人工智能·aigc
湘-枫叶情缘2 小时前
管理认知平权:基于人工操作大语言模型的MBA“具生化”下沉路径
人工智能·语言模型
多则惑少则明2 小时前
AI大模型综合(三)Langgraph4j工作原理,RAG概念
人工智能·langchain4j
智能砖头2 小时前
LangGraph 工作流中常用的核心策略
人工智能