详解三种常用标准化:Batch Norm、Layer Norm和RMSNorm

news/2025/1/23 21:09:42/文章来源:https://www.cnblogs.com/ll55522201/p/18688625

在深度学习中,标准化技术是提升模型训练速度、稳定性和性能的重要手段。本文将详细介绍三种常用的标准化方法:Batch Normalization(批量标准化)、Layer Normalization(层标准化)和 RMS Normalization(RMS标准化),并对其原理、实现和应用场景进行深入分析。

一、Batch Normalization

1.1 Batch Normalization的原理

Batch Normalization(BN)通过在每个小批量数据的每个神经元输出上进行标准化来减少内部协变量偏移。具体步骤如下:

  1. 计算小批量的均值和方差
    对于每个神经元的输出,计算该神经元在当前小批量中的均值和方差。

    [
    \muB = \frac{1}{m} \sum{i=1}^m x_i
    ]

    [
    \sigmaB^2 = \frac{1}{m} \sum{i=1}^m (x_i - \mu_B)^2
    ]

  2. 标准化
    使用计算得到的均值和方差对数据进行标准化。

    [
    \hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}
    ]

  3. 缩放和平移
    引入可学习的参数进行缩放和平移。

    [
    y_i = \gamma \hat{x}_i + \beta
    ]

    其中,(\gamma)和(\beta)是可学习的参数。

1.2 Batch Normalization的实现

在PyTorch中,Batch Normalization可以通过 torch.nn.BatchNorm2d实现。

import torch
import torch.nn as nn# 创建BatchNorm层
batch_norm = nn.BatchNorm2d(num_features=64)# 输入数据
x = torch.randn(16, 64, 32, 32)  # (batch_size, num_features, height, width)# 应用BatchNorm
output = batch_norm(x)
​
 
 

1.3 Batch Normalization的优缺点

优点

  • 加速训练:通过减少内部协变量偏移,加快了模型收敛速度。
  • 稳定性提高:减小了梯度消失和爆炸的风险。
  • 正则化效果:由于引入了噪声,有一定的正则化效果。

缺点

  • 依赖小批量大小:小批量大小过小时,均值和方差估计不准确。
  • 训练和推理不一致:训练时使用小批量的均值和方差,推理时使用整个数据集的均值和方差。

二、Layer Normalization

2.1 Layer Normalization的原理

Layer Normalization(LN)通过在每一层的神经元输出上进行标准化,独立于小批量的大小。具体步骤如下:

  1. 计算每一层的均值和方差
    对于每一层的神经元输出,计算其均值和方差。

    [
    \muL = \frac{1}{H} \sum{i=1}^H x_i
    ]

    [
    \sigmaL^2 = \frac{1}{H} \sum{i=1}^H (x_i - \mu_L)^2
    ]

  2. 标准化
    使用计算得到的均值和方差对数据进行标准化。

    [
    \hat{x}_i = \frac{x_i - \mu_L}{\sqrt{\sigma_L^2 + \epsilon}}
    ]

  3. 缩放和平移
    引入可学习的参数进行缩放和平移。

    [
    y_i = \gamma \hat{x}_i + \beta
    ]

    其中,(\gamma)和(\beta)是可学习的参数。

2.2 Layer Normalization的实现

在PyTorch中,Layer Normalization可以通过 torch.nn.LayerNorm实现。

import torch
import torch.nn as nn# 创建LayerNorm层
layer_norm = nn.LayerNorm(normalized_shape=64)# 输入数据
x = torch.randn(16, 64)# 应用LayerNorm
output = layer_norm(x)
​
 
 

2.3 Layer Normalization的优缺点

优点

  • 与小批量大小无关:适用于小批量训练和在线学习。
  • 更适合RNN:在循环神经网络中表现更好,因为它独立于时间步长。

缺点

  • 计算开销较大:每一层都需要计算均值和方差,计算开销较大。
  • 对CNN效果不明显:在卷积神经网络中效果不如BN明显。

三、RMS Normalization

3.1 RMS Normalization的原理

RMS Normalization(RMSNorm)通过标准化每一层的RMS值,而不是均值和方差。具体步骤如下:

  1. 计算RMS值
    对于每一层的神经元输出,计算其RMS值。

    [
    \text{RMS}(x) = \sqrt{\frac{1}{H} \sum_{i=1}^H x_i^2}
    ]

  2. 标准化
    使用计算得到的RMS值对数据进行标准化。

    [
    \hat{x}_i = \frac{x_i}{\text{RMS}(x) + \epsilon}
    ]

  3. 缩放和平移
    引入可学习的参数进行缩放和平移。

    [
    y_i = \gamma \hat{x}_i + \beta
    ]

    其中,(\gamma)和(\beta)是可学习的参数。

3.2 RMS Normalization的实现

在PyTorch中,RMS Normalization没有直接的内置实现,可以通过自定义层来实现。

import torch
import torch.nn as nnclass RMSNorm(nn.Module):def __init__(self, normalized_shape, epsilon=1e-8):super(RMSNorm, self).__init__()self.epsilon = epsilonself.gamma = nn.Parameter(torch.ones(normalized_shape))self.beta = nn.Parameter(torch.zeros(normalized_shape))def forward(self, x):rms = torch.sqrt(torch.mean(x**2, dim=-1, keepdim=True) + self.epsilon)x = x / rmsreturn self.gamma * x + self.beta# 创建RMSNorm层
rms_norm = RMSNorm(normalized_shape=64)# 输入数据
x = torch.randn(16, 64)# 应用RMSNorm
output = rms_norm(x)
​
 
 

3.3 RMS Normalization的优缺点

优点

  • 计算效率高:计算RMS值相对简单,计算开销较小。
  • 稳定性好:在某些任务中可以表现出更好的稳定性。

缺点

  • 应用较少:相较于BN和LN,应用场景和研究较少。
  • 效果不确定:在某些情况下效果可能不如BN和LN显著。

四、比较与应用场景

4.1 比较

特性 Batch Norm Layer Norm RMSNorm
标准化维度 小批量内各特征维度 每层各特征维度 每层各特征维度的RMS
计算开销 中等 较大 较小
对小批量大小依赖 依赖 不依赖 不依赖
应用场景 CNN、MLP RNN、Transformer 各类神经网络
正则化效果 有一定正则化效果 无显著正则化效果 无显著正则化效果

4.2 应用场景

  • Batch Normalization

    • 适用于卷积神经网络(CNN)和多层感知机(MLP)。
    • 对小批量大小有依赖,不适合小批量和在线学习。
  • Layer Normalization

    • 适用于循环神经网络(RNN)和Transformer。
    • 独立于小批量大小,适合小批量和在线学习。
  • RMS Normalization

    • 适用于各种神经网络,尤其在计算效率和稳定性有要求的任务中。
    • 相对较新,应用场景和研究较少,但在某些任务中可能表现优异。

五、总结

Batch Normalization

、Layer Normalization和RMS Normalization是深度学习中常用的标准化技术。它们各有优缺点,适用于不同的应用场景。通过理解其原理和实现,您可以根据具体需求选择合适的标准化方法,提升模型的训练速度和性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/873858.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌泰坦:Transformer之后的AI时代?

介绍 2017年,谷歌发布了一篇具有革命性意义的论文,题为《Attention is All You Need》(注意力是你所需要的一切)。这篇论文引发了我们今天所经历的AI革命,并引入了Transformer模型。Transformer已经成为如今几乎所有顶级大型语言模型(LLM)的核心架构。 Transformer的优势…

2025.1.23冠词

错误分析: 对于冠词知识点掌握不透彻 需掌握知识点: ‌冠词‌是英语语法中的重要概念,主要分为不定冠词(a/an)和定冠词(the),此外还有零冠词。冠词本身不能单独使用,也没有词义,主要用于帮助指明名词的含义。‌ 不定冠词(a/an) ‌用法‌:不定冠词用于单数可数名词…

2025多校冲刺省选模拟赛7

2025多校冲刺省选模拟赛7\(T1\) A. 三色卡(card) \(0pts\)如果存在一个小矩形和大矩形的大小相同,此时另外两个矩形可以任意放,贡献是容易计算的。否则至少需要一个小矩形覆盖大矩形的两个角,通过交换长、宽钦定完全覆盖行的矩形比完全覆盖列的矩形的数量多。完全覆盖行的矩…

重试机制与 CompletableFuture 拓展

重试机制与 CompletableFuture 拓展 禁止转载。 本文旨在讨论重试机制的特点和策略,分析常用重试类库的实现,讨论为 CompletableFuture 添加重试机制的方法。文章首发同名公众号,欢迎关注。 重试示例 以下是一个常见的使用异步重试的例子,当我们需要重试功能时,只需调用 r…

DL00765-光伏故障检测高分辨率无人机热红外图像细粒度含数据集4000+张

光伏发电作为清洁能源的重要组成部分,近年来得到了广泛应用。然而,随着光伏电站规模的扩大,光伏组件在运行过程中可能会出现各种故障,如热斑、遮挡、接线盒故障等。这些故障不仅会影响光伏电站的发电效率,还可能导致更严重的安全隐患。因此,准确、及时地检测并分类这些故…

VMware安装RHEL7.9

VMware安装 可以选择官网下载或者使用其他网盘资源下载。 需要注意的是,现在官网下载需要注册其账号。 下面是安装的详细步骤: 1.找到文件所在路径。双击打开之后,可能会出现环境初始化重启。重启即可。然后再次双击打开此软件。2.勾选《我接受许可协议中的条款》。3.选择安…

【二叉树】用数组给出二叉树层序遍历序列,建树以及遍历问题

传递悄悄话层序遍历数组形式的下标如下#include <algorithm> #include <cstring> #include <iostream>using namespace std;const int N = 1010, M = N * 2;int n; int h[N], e[M], ne[M], idx; int v[N], dist[N]; bool st[N];void add(int a, int b) {e[id…

关闭 Visual Studio 2022 的 Browser Link 功能

http://blog.tool90.com/330.html什么是 Browser Link 功能? Browser Link 是 Visual Studio 的一个功能,它允许 Visual Studio 与正在运行的 ASP.NET 应用程序建立一个实时通信通道。这意味着您可以在不刷新浏览器的情况下立即查看代码更改的效果。这个功能在进行前端开发时…

2025dsfz集训Day11:数位DP、状态压缩DP、单调队列优化DP

Day11:数位DP、状压DP、单调队列优化DP 经典题目:AccodersP2195 |【一本通提高数位动态规划】Amount of Degrees 题意: 求出区间 \([x,y]\) 中满足下面条件的所有的数:这个数 \(x\) 可以用 \(k\) 个不相等的 \(b\) 的整数幂之和。 首先这个区间是满足区间减法的。因此我们可…

PO报错

这个报错是报文结构不匹配导致,找了好久的问题--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------…

2025dsfz集训Day11: 单调队列优化DP

单调队列优化DP 单调队列队列是单调的,递增或递减 只能在队首或者队尾进行操作 队列中维护所有在窗口中的元素,有一些元素是没用的,以区间最大值为例:所以从左到右尝试加入队列,弹出队尾比当前数更小的元素,弹出队首已经出窗口的元素,再队尾压入当前数 这样,队首就是窗口…

必应搜索中,当地区设置为美国时出现的异常(未解决)

描述 在设置中,设置地区。加载时,会警告如下: An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing.这个大致的意思是,allow-scripts允许运行脚本,allow-same-origin视为和宿主网页同源。 具体的影响不清…