深度学习中LayerNorm与RMSNorm对比

LayerNorm不同于BatchNorm,其与batch大小无关,均值和方差每个样本的特征维度 C 内计算,
适用于 变长输入(如 NLP 任务中的 Transformer)
详细的BatchNorm在之前的一篇文章进行了详细的介绍:深度学习中Batch Normalization(BN)原理、作用浅析-CSDN博客
这里主要介绍适合于Transformer架构的两个归一化操作RMSNorm 和 LayerNorm

RMSNorm 和 LayerNorm 的本质区别

RMSNorm(Root Mean Square Normalization)和 LayerNorm(Layer Normalization)都是 归一化方法,但它们的本质区别在于 是否去均值(Mean-Centering) 以及 归一化的方式

LayerNorm公式
在这里插入图片描述

  • μ:均值,计算的是特征 xd 维度上的平均值。
  • σ2:方差,用于衡量数值分布的变化范围。
  • γ,β:可学习的缩放和偏移参数。
  • LayerNorm 不仅仅缩放数据,还会让其均值归一化到 0,保证分布居中

RMSNorm公式
在这里插入图片描述

  • RMSNorm 直接用 RMS(x) 归一化,而不去均值
  • RMSNorm 只调整 L2 范数的大小,不影响数据的中心位置

代码实现

class LayerNorm(nn.Module):def __init__(self, dim, eps=1e-5):super().__init__()self.eps = epsself.weight = nn.Parameter(torch.ones(dim))self.bias = nn.Parameter(torch.zeros(dim))def forward(self, x):mean = x.mean(dim=-1, keepdim=True)std = x.var(dim=-1, keepdim=True, unbiased=False).sqrt()return self.weight * (x - mean) / (std + self.eps) + self.biasclass RMSNorm(nn.Module):def __init__(self, dim, eps=1e-5):super().__init__()self.eps = epsself.weight = nn.Parameter(torch.ones(dim))def forward(self, x):rms = torch.sqrt(torch.mean(x ** 2, dim=-1, keepdim=True) + self.eps)return self.weight * (x / rms)

RMSNorm 的优缺点

LayerNorm 的优点

  1. 更稳定的梯度更新
    • 由于均值归 0,梯度更新不会受到偏移影响。
    • 适用于 Transformer、BERT、GPT。
  2. 适用于不同任务
    • 既可以用于 NLP(Transformer),也可以用于 CNN。
    • 适用于变长输入(如 RNN、BERT)。
  3. 训练和推理一致
    • LayerNorm 不依赖 batch_size,在训练和推理时表现一致。

LayerNorm 的缺点

  1. 计算量大
    • 需要 计算均值和方差,相比 RMSNorm 额外增加一次均值计算,计算量更高。
  2. 计算开销大,不适合大模型
    • 大规模 Transformer(如 LLaMA) 中,LayerNorm 计算量太大,影响训练速度。
  3. 对 batch_size 影响较大
    • 小 batch_size 时,LayerNorm 可能表现不稳定。

RMSNorm 的优缺点

RMSNorm 的优点

  1. 计算更快
    • 仅计算 L2 归一化,比 LayerNorm 计算量少 约 30%
  2. 适用于大模型(如 LLaMA, GPT-4)
    • 大模型训练中,RMSNorm 比 LayerNorm 更高效

RMSNorm 的缺点

  1. 不去均值,可能影响训练稳定性
    • 在某些任务中,均值归 0 能稳定训练,而 RMSNorm 不能。
  2. 不适用于 CNN
    • CNN 依赖均值信息,RMSNorm 不计算均值,可能导致训练不稳定。

总结

RMSNorm通过简化归一化过程,降低计算复杂度,提供了一种有效的归一化方法。它在保持模型性能的同时,提高了计算效率,是LayerNorm的有力替代方案。

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

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

相关文章

使用WireShark解密https流量

概述 https协议是在http协议的基础上,使用TLS协议对http数据进行了加密,使得网络通信更加安全。一般情况下,使用WireShark抓取的https流量,数据都是加密的,无法直接查看。但是可以通过以下两种方法,解密抓…

数字化转型 - 数据驱动

数字化转型 一、 数据驱动1.1 监控1.2 分析1.3 挖掘1.4 赋能 二、数据驱动案例2.1 能源工业互联网:绿色节能的数字化路径2.2 光伏产业的数字化升级2.3 数据中心的绿色转型2.4云迁移的质效优化2.5 企业数字化运营的实践2.6数字化转型的最佳实践 一、 数据驱动 从数…

解决 Docker 镜像拉取超时问题:配置国内镜像源

在使用 Docker 的过程中,经常会遇到镜像拉取超时的问题,尤其是在国内网络环境下。这不仅会浪费大量的时间,还可能导致一些项目无法顺利进行。今天,我将分享一个简单而有效的解决方法:配置国内镜像源。 环境 操作系统 c…

Linux命令基础,创建,输入,输出,查看,查询

什么是命令、命令行 命令行:即:Linux终端(Terminal),是一种命令提示符页面。以纯“字符”的形式操作操作系统,可以使用各种字符化命令对操作系统发出操作指令。 命令:即Linux程序。一个命令就…

【GNU Radio】ZMQ模块学习

【GNU Radio】ZMQ模块学习 ZMQ 介绍前置知识Socket通信模型PUB/SUB(发布/订阅)模型PUSH/PULL(推/拉)模型REQ/REP(请求/响应)模型 ZMQ 详解基于通信模型分析基于数据格式分析Data BlocksMessage Blocks ZMQ …

【笔记】深度学习模型训练的 GPU 内存优化之旅:综述篇

开设此专题,目的一是梳理文献,目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化,所以最初思考的专题名称是“显存突围:深度学习模型训练的 GPU 内存优化之旅”,英文缩写是 “MLSys_GPU_Memory_Opt”。…

Vue 3 Diff 算法深度解析:与 Vue 2 双端比对对比

文章目录 1. 核心算法概述1.1 Vue 2 双端比对算法1.2 Vue 3 快速 Diff 算法 2. 算法复杂度分析2.1 时间复杂度对比2.2 空间复杂度对比 3. 核心实现解析3.1 Vue 2 双端比对代码3.2 Vue 3 快速 Diff 代码 4. 性能优化分析4.1 性能测试数据4.2 内存使用对比 5. 使用场景分析5.1 Vu…

神经网络的基本知识

感知机 输入:来自其他 n 个神经元传递过来的输入信号 处理:输入信号通过带权重的连接进行传递, 神经元接受到总输入值将与神经元的阈值进行比较 输出:通过激活函数的处理以得到输出 感知机由两层神经元组成, 输入层接受外界输入信号传递给…

UE5与U3D引擎对比分析

Unreal Engine 5(UE5)和Unity 3D(U3D)是两款主流的游戏引擎,适用于不同类型的项目开发。以下是它们的主要区别,分点整理: 1. 核心定位 UE5: 主打3A级高画质项目(如主机/P…

C++相关基础概念之入门讲解(上)

1. 命名空间 C中的命名空间(namespace)是用来避免命名冲突问题的一种机制。通过将类、函数、变量等封装在命名空间中,可以避免不同部分的代码中出现相同名称的冲突。在C中,可以使用namespace关键字来定义命名空间。 然后我们在调…

网络协议栈

网络协议栈的位置 用户在应用层的各种请求最终会下达给操作系统,操作系统内除了进程管理、文件管理、内存管理、驱动管理之外,还有一个内嵌的软件协议栈,协议栈将用户的数据进行各种封包后,通过网卡将数据传递到网络当中&#xf…

C#索引器基础到实践

1. 封装和隐藏内部实现 数组是一个简单的数据结构,它的内部实现是固定的(基于连续内存)。而索引器可以隐藏内部的实现细节,允许开发者使用更复杂的数据结构来存储数据,同时对外提供类似数组的访问方式。 示例: 假设你有一个类,内部使用 Dictionary 或 List 来存储数据…

C++之list类(超详细)

在上一节中我们学习了STL中的vector这个容器,这节我们来学习一下另外一个常用的容器——list。 文章目录 前言 一、list的介绍 二、list的使用及相关接口 1.list的使用 2.list的迭代器使用 3.list的相关接口 3.1 list capacity 3.2 list element access 3.3…

mysql、oracle、SQLserver之间的区别和优势

MySQL、Oracle和SQL Server都是常见的关系型数据库管理系统(RDBMS),它们在某些方面有一些区别和优势。 MySQL: MySQL是一种开源的RDBMS,由Oracle公司开发和维护。它具有快速、稳定和易于使用的特点。MySQL适用于中小型…

Python依赖包迁移到断网环境安装

首先,我应该确认两台电脑的操作系统都是Windows,所以架构和版本应该兼容。Python版本必须一致,否则可能会有问题。比如,如果电脑B用的是Python 3.8.5,电脑A也得装同样的版本,否则有些包可能不兼容。所以第一…

75.HarmonyOS NEXT ImageItemView组件深度剖析:手势交互与动画实现(二)

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT ImageItemView组件深度剖析:手势交互与动画实现(二) 一、手势系统架构 .gesture(GestureGroup(GestureMode.Exclusiv…

Qt 控件概述 QWdiget

Qt为我们提供了很多控件,这些控件拿过来就可以使用 目录 QWidget 属性 WindowFrame的影响 QWidget Qt中所有的组件都是继承自QWidget Qt Creator中的右侧可以看到QWidget的各种属性 其中各种属性都可以在Qt文档中找到说明 ​ 属性 enabled:描述该组…

适合企业内训的AI工具实操培训教程(37页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读:适合企业内训的 AI 工具实操培训教程 在当今数字化时代,人工智能(AI)技术迅速发展,深度融入到各个领域,AIGC(人工智能生成内容)更是成…

Axios 请求取消:从原理到实践

Axios 请求取消:从原理到实践 在现代前端开发中,网络请求是不可或缺的一部分。Axios 是一个基于 Promise 的 HTTP 客户端,广泛应用于浏览器和 Node.js 环境中。然而,在某些场景下,我们可能需要取消正在进行的请求&…

Spring Boot对接twilio发送邮件信息

要在Spring Boot应用程序中对接Twilio发送邮件信息,您可以使用Twilio的SendGrid API。以下是一个简单的步骤指南,帮助您完成这一过程: 1. 创建Twilio账户并获取API密钥 注册一个Twilio账户(如果您还没有的话)。在Twi…