RMSNorm模块

devtools/2025/3/5 11:46:13/

目录

    • 代码
    • 代码解释
      • 1. 初始化方法 `__init__`
      • 2. 前向传播方法 `forward`
      • 3. 总结
      • 4. 使用场景
    • 可视化

代码

class RMSNorm(torch.nn.Module):def __init__(self, dim: int, eps: float):super().__init__()self.eps = epsself.weight = nn.Parameter(torch.ones(dim))def forward(self, x):return self.weight * (x.float() * torch.rsqrt(x.pow(2).mean(-1, keepdim=True) + self.eps)).type_as(x)

代码解释

这段代码定义了一个自定义的PyTorch模块 RMSNorm,用于实现Root Mean Square Normalization (RMSNorm)。RMSNorm是一种归一化技术,类似于Layer Normalization,但它只对输入进行缩放,而不进行平移(即没有偏置项)。下面是代码的详细解释:

1. 初始化方法 __init__

def __init__(self, dim: int, eps: float):super().__init__()self.eps = epsself.weight = nn.Parameter(torch.ones(dim))
  • dim: int: 输入特征的维度。
  • eps: float: 一个小常数,用于数值稳定性,避免除以零的情况。
  • self.weight: 一个可学习的参数,形状为 (dim,),初始化为全1的张量。这个参数用于对归一化后的输入进行缩放。

2. 前向传播方法 forward

def forward(self, x):return self.weight * (x.float() * torch.rsqrt(x.pow(2).mean(-1, keepdim=True) + self.eps)).type_as(x)
  • x: 输入张量,形状通常为 (batch_size, ..., dim)
  • x.pow(2): 对输入 x 的每个元素求平方。
  • x.pow(2).mean(-1, keepdim=True): 沿着最后一个维度(即特征维度 dim)计算平方的均值,并保持维度不变。结果形状为 (batch_size, ..., 1)
  • torch.rsqrt(...): 计算均方根的倒数(即1除以平方根),用于归一化。
  • x.float() * torch.rsqrt(...): 将输入 x 转换为浮点数后,乘以均方根的倒数,得到归一化后的结果。
  • .type_as(x): 将结果转换回与输入 x 相同的数据类型。
  • self.weight * (...): 最后,将归一化后的结果乘以可学习的权重 self.weight,进行缩放。

3. 总结

  • RMSNorm 通过对输入进行归一化,使得每个特征的均方根值为1,然后通过可学习的权重进行缩放。
  • 与LayerNorm不同,RMSNorm没有偏置项,只进行缩放操作。
  • eps 用于防止除以零的情况,增加数值稳定性。

4. 使用场景

RMSNorm通常用于深度学习模型中,特别是在Transformer架构中,作为LayerNorm的替代方案。它可以加速训练并提高模型的稳定性。

可视化

dim = 64
eps = 1e-5
m = RMSNorm(dim, eps)
x = torch.randn(32, 10, dim)  # 示例输入 (batch_size, seq_len, dim)f = "rms_norm.onnx"  # 导出的 ONNX 文件名
torch.onnx.export(m, x, f)  # 模型  # 示例输入

https://netron.app/ 上打开 rms_norm.onnx

在这里插入图片描述


http://www.ppmy.cn/devtools/164733.html

相关文章

合理规划时间,从容应对水利水电安全员考试

合理规划时间,从容应对水利水电安全员考试 在忙碌的工作与生活节奏中备考水利水电安全员考试,合理规划时间是实现高效备考的核心。科学的时间管理能让你充分利用每一分每一秒,稳步迈向考试成功。 制定详细的学习计划是第一步。依据考试时间…

二、Redis 安装与基本配置:全平台安装指南 服务器配置详解

Redis 安装与基本配置:全平台安装指南 & 服务器配置详解 Redis 作为高性能的内存数据库,其安装和配置是使用 Redis 的第一步。本篇文章将全面介绍 Redis 的安装方式,覆盖 Windows、Linux、Docker 环境,并详细讲解 Redis 的基础配置,包括 持久化、日志、端口设置等。此…

USRP B205mini 开箱— 沉浸式组装

USRP B205mini 开箱— 沉浸式组装 开箱 USRP b205mini:初体验 刚刚收到了心心念念的USRP b205mini,这是我在无线电爱好路上的新伙伴。开箱这一刻,正如解锁未知世界的一把钥匙。拆开快递,轻巧的包装盒映入眼帘,简约大气…

【零基础C语言】第四节 数组

【零基础C语言系列】 【零基础C语言】第一节 C语言概述【数制进制码制】-CSDN博客 【零基础C语言】第二节 数据类型、运算符、表达式-CSDN博客 【零基础C语言】第三节 控制结构-CSDN博客 一、一维数组

磁盘空间不足|如何安全清理以释放磁盘空间(开源+节流)

背景: 最近往数据库里存的东西有点多,磁盘不够用 查看磁盘使用情况 df -h /dev/sda5(根目录 /) 已使用 92% 咱们来开源节流 目录 背景: 一、开源 二、节流 1.查找 大于 500MB 的文件: 1. Snap 缓存…

六十天前端强化训练之第七天CSS预处理器(Sass)案例:变量与嵌套系统详解

欢迎来到编程星辰海的博客讲解 目录 一、知识讲解(3000字) 1. Sass基础概念 2. 变量系统 2.1 变量定义 2.2 数据类型 2.3 作用域优先级 2.4 变量实践场景 3. 嵌套系统 3.1 选择器嵌套 3.2 属性嵌套 3.3 嵌套规则 二、核心代码示例 完整SCSS…

GreasyFork油猴中文官网,用户脚本资源网站

GreasyFork(油猴脚本平台)是全球知名的用户脚本资源共享社区,由开发者Jason Barnabe于2014年创建,专注于通过浏览器扩展和移动端应用优化网页浏览体验。其核心功能是提供由全球用户编写的免费脚本,涵盖视频解析、游戏辅…

826考研

初试总分第一的hh佬小红书:https://www.xiaohongshu.com/user/profile/64e106aa000000000100fe33 深研院巨佬经验贴:https://zhuanlan.zhihu.com/p/690464528 本部羊神经验贴:https://zhuanlan.zhihu.com/p/689494655 本部学硕佬经验贴&#…