RMSNorm(均方根归一化)是一种更简单、更快速的层归一化版本,它只保留重新缩放的步骤,去掉了重新居中的步骤。大多数现代大语言模型都采用它。

在这篇博客中,我们将学习 RMSNorm——一种比层归一化更快、更简单的替代方案,它支撑着大多数现代大语言模型,如 Llama、Mistral、Gemma、Qwen、PaLM 和 DeepSeek。

我们的目标是清晰地解读 RMSNorm,以便在读完本文后,我们能够向任何人解释它的工作原理。

我们将涵盖以下内容:

  • 为什么深度网络需要归一化
  • 层归一化(LayerNorm)快速回顾
  • RMSNorm 是什么以及它如何工作
  • RMSNorm 背后的数学原理及具体数值示例
  • LayerNorm 与 RMSNorm——关键区别
  • 为什么现代大语言模型更青睐 RMSNorm
  • 代码示例
  • RMSNorm 在 Transformer 中的位置
  • 快速总结

我是 Amit Shekhar,Outcome School 的创始人。我教导和指导过许多开发者,他们的努力帮助他们获得了高薪技术工作,帮助许多技术公司解决了独特的问题,并创建了许多被顶级公司使用的开源库。我热衷于通过开源、博客和视频分享知识。

我在 Outcome School 教授 AI 和机器学习。

让我们开始吧。

全局概览

在深入细节之前,让我们先了解全局。

像 LLM 这样的神经网络将许多层堆叠在一起。当数值流经这些层时,它们可能变得非常大或非常小。这会使训练变慢且不稳定。

为了解决这个问题,我们在每一层对数值进行缩放,使其保持在健康的范围内。这个缩放步骤称为归一化。

简单来说:

RMSNorm = 一种更简单、更快速的神经网络内部数值归一化方法。

RMSNorm 不像 LayerNorm 那样对数值进行居中和缩放,而是仅使用它们的均方根值进行缩放。同样的稳定效果,更少的计算量。

为什么我们需要归一化?

假设我们有一个有 100 层的深度神经网络。在每一层,数值会与权重相乘、相加,并通过激活函数。

问题来了。经过许多层之后,这些数值可能会:

  • 变得非常大——在训练期间,这会导致梯度爆炸问题
  • 变得非常小——在训练期间,这会导致梯度消失问题

当这种情况发生时,网络变得不稳定。训练变慢。有时甚至完全无法学习。

于是,归一化就来救场了。归一化让每一层的数值保持在稳定、健康的范围内——不会太大,也不会太小。这使得训练更快、更稳定。

Layer Normalization 快速回顾

在深入 RMSNorm 之前,我们需要快速回顾一下 Layer Normalization(LayerNorm) 的工作原理,因为 RMSNorm 是它的简化版本。

LayerNorm 接收一个数值向量,并做两件事:

第 1 步:重新居中。 减去均值,使数值以零为中心。

第 2 步:重新缩放。 除以标准差,使数值具有一致的分布范围。

然后它应用两个可学习的参数——

gamma

和

beta

——以便网络在需要时可以调整输出。

公式如下:

LayerNorm(x) = gamma * (x - mean) / sqrt(variance + eps) + beta

其中:

  • mean 是向量中数值的平均值
  • variance 是数值的分散程度
  • eps 是一个极小的数,用于避免除以零
  • gamma 和 beta 是可学习的参数

LayerNorm 效果非常好。最初的 Transformer 论文就使用了它。但研究人员提出了一个问题:

我们真的需要重新居中和重新缩放这两个步骤吗?还是其中一个就足够了?

这个问题催生了 RMSNorm。

什么是 RMSNorm?

RMSNorm(Root Mean Square Normalization,均方根归一化) 是 LayerNorm 的简化版本,它只保留重新缩放这一步,去掉了重新居中这一步。

简单来说:

RMSNorm = 只保留重新缩放步骤的 LayerNorm。

它由 Biao Zhang 和 Rico Sennrich 于 2019 年在其论文 "Root Mean Square Layer Normalization" 中提出。

核心洞察是:

LayerNorm 的大部分收益来自重新缩放这一步,而不是重新居中这一步。

因此,如果我们跳过减去均值的操作,就能在不损失精度的情况下节省计算量。

下面是一个容易记住的心智模型:

LayerNorm 同时控制平移和缩放。RMSNorm 只控制缩放——而事实证明这就足够了。

现在,一个自然的问题出现了——如果我们不重新居中数值,网络如何处理均值的偏移?答案是,Transformer 中到处都有残差连接和可学习的投影层。它们可以自行吸收均值的偏移。所以网络不需要归一化来替它完成这项工作。而缩放才是真正需要专门处理的部分,这就是 RMSNorm 在实践中足够有效的原因。

让我们来看看它具体是如何工作的。

RMSNorm 背后的数学原理

RMSNorm 使用输入向量的均方根(RMS)来缩放数值。

我们按顺序做三件事:

第 1 步: 对向量中的每个数值求平方。

第 2 步: 取这些平方值的均值(平均数)。

第 3 步: 对该均值取平方根。

就是这样。得到的结果就是 RMS 值。

直观地说,RMS 值告诉我们向量中数值的典型大小。像

[100, 200, 300]

的 RMS 很大。而像

[0.01, 0.02, 0.03]

这样的向量 RMS 很小。将每个值除以 RMS 后,我们去掉了整体的大小,只保留相对形状。这正是我们希望归一化做到的。

公式如下:

RMS(x) = sqrt( (x1^2 + x2^2 + ... + xn^2) / n )

其中

n

是向量中值的数量。

得到 RMS 后,RMSNorm 的公式为:

RMSNorm(x) = gamma * x / RMS(x)

其中:

  • x 是输入向量
  • RMS(x) 是向量的均方根
  • gamma 是一个可学习的参数(每个维度一个)

为什么我们还需要

gamma

呢?因为除以 RMS 会强制每个向量都变成固定的大小,这限制太强了。

gamma

给了网络一个旋钮,可以把每个维度拉伸或缩小回对任务真正有用的尺度。所以归一化稳定了训练,而

gamma

确保我们不会在这个过程中失去表达能力。

在实践中,我们在平方根内加上一个很小的数

eps

以避免除以零:

RMSNorm(x) = gamma * x / sqrt( mean(x^2) + eps )

注意 RMSNorm 中没有

beta

。我们不需要对输出做平移,因为我们从一开始就没有减去均值。

正在计划转型进入 AI 领域?

无论你今天在哪个技术领域工作,只要付出努力,你都可以转型到以下这些角色:

  • AI 工程师
  • 前沿部署工程师
  • AI Agent 工程师
  • Harness 工程师
  • 语音 AI 工程师
  • AI 架构师
  • LLM 工程师
  • LLM 推理工程师
  • 生成式 AI 工程师
  • MLOps 工程师
  • 机器学习工程师
  • 深度学习工程师

Outcome School 的 AI 与机器学习课程 将带你到达那里。

让我们用真实数字来直观理解

通过例子学习是最好的学习方式。

假设我们有一个包含 4 个值的输入向量:

x = [2, 4, 4, 8]

第 1 步:将每个值平方。

[2^2, 4^2, 4^2, 8^2] = [4, 16, 16, 64]

第 2 步:取平方的平均值。

mean = (4 + 16 + 16 + 64) / 4 = 100 / 4 = 25

第 3 步:取平方根。

RMS(x) = sqrt(25) = 5

第 4 步:将每个输入值除以 RMS。

x / RMS(x) = [2/5, 4/5, 4/5, 8/5] = [0.4, 0.8, 0.8, 1.6]

第 5 步:乘以 gamma。 为了便于理解,我们假设 gamma 为

[1, 1, 1, 1]

.

RMSNorm(x) = [0.4, 0.8, 0.8, 1.6]

现在数值被缩放到了一个健康的范围。这就是 RMSNorm 所做的全部工作。

LayerNorm 与 RMSNorm——关键区别

让我用表格列出 LayerNorm 和 RMSNorm 之间的区别,以便你更好地理解。

LayerNormRMSNorm
重新居中(减去均值)并重新缩放(除以标准差)只重新缩放(除以 RMS)
有两个可学习参数:gamma 和 beta只有一个可学习参数:gamma
较慢 - 需要同时计算均值和方差较快 - 只计算 RMS
用于最初的 Transformer、BERT、GPT-2用于 Llama、Mistral、Gemma、Qwen、PaLM、DeepSeek

为了直观地看到区别,下面是两条流程的并排对比:

LayerNorm:

  x  -->  [ subtract mean ]  -->  [ divide by std ]  -->  [ * gamma + beta ]  -->  output


RMSNorm:

  x  -->  [    skipped     ]  -->  [ divide by RMS ]  -->  [    * gamma     ]  -->  output
              ^^^^^^^                                            ^^^^^^^
        re-centering step                                     no beta,
            removed                                        one parameter

在这里,我们可以看到 RMSNorm 完全去掉了减去均值的步骤,同时也去掉了

beta

参数。其余部分与 LayerNorm 的思路相同。

给你的一个简短提示

无论你在哪个技术领域工作,都请熟悉以下这些主题:

  • LLM
  • RAG
  • MCP
  • Agent
  • 微调
  • 量化

我们把它们全部整合在一个视频中:

AI 工程详解:LLM、RAG、MCP、Agent、微调与量化

不必停下阅读——收藏它,等有空时再看。未来的你会感谢现在的自己。

现在,让我们回到正题。

为什么现代大语言模型更青睐 RMSNorm

现在,一个自然的问题出现了——为什么大多数现代 LLM 使用 RMSNorm 而不是 LayerNorm?

答案归结为三个原因。

原因一:速度。 RMSNorm 比 LayerNorm 的计算量更少。它跳过了均值减法和方差计算。在小的向量上,这可能看起来不算什么。但 LLM 拥有数十亿参数、数万亿 token,并且每次前向传播中有几十到上百次归一化调用(每个 Transformer 块两次,跨多个块堆叠)。每次调用的小节省累积起来就是总体的大节省。原论文报告称,根据模型和任务的不同,训练时间减少了 7% 到 64%。训练变得更快,推理也变得更快。

原因二:准确率大体相同。 原始的 RMSNorm 论文表明,用 RMSNorm 训练的模型可以达到与用 LayerNorm 训练的模型相同的准确率——有时略好,有时略差,但大体相同。我们在不损失质量的情况下获得了速度优势。

原因三:实现更简单。 RMSNorm 比 LayerNorm 的组成部分更少。它更容易实现,也更容易理解。少了一个参数(

beta

),少了一个需要计算的统计量(均值),内核更简洁,也更容易在 GPU 上高效融合。当我们跨数千个 GPU 以数万亿 token 的规模进行训练时,这种简单性非常重要。

这就是为什么现代 LLM 技术栈几乎完全切换到了 RMSNorm。

要深入学习 LLM 内部机制、LLM 基础知识和深度学习,请查看 Outcome School 的 AI 与机器学习课程。

代码示例

让我们看看 RMSNorm 的代码,如下所示:

import torch
import torch.nn as nn

class RMSNorm(nn.Module):
    def __init__(self, dim, eps=1e-6):
        super().__init__()
        self.eps = eps
        self.gamma = nn.Parameter(torch.ones(dim))

    def forward(self, x):
        # Square each value and take the mean along the last dimension
        mean_square = x.pow(2).mean(dim=-1, keepdim=True)
        # Take the square root to get RMS (eps added for stability)
        rms = torch.sqrt(mean_square + self.eps)
        # Scale the input: divide by RMS and multiply by gamma
        return self.gamma * x / rms

在这里,我们可以看到:

  • 我们只有一个可学习参数——gamma。没有 beta。
  • 我们沿最后一个维度计算平方值的均值。
  • 我们取该均值的平方根得到 RMS。
  • 我们将输入除以 RMS,再乘以 gamma。

这就是全部实现。非常简单。

保持更新: 订阅我们的 新闻通讯,将最新的 AI 和机器学习博客直接发送到你的收件箱。

RMSNorm 在 Transformer 中的位置

在像 Llama 这样的现代 LLM 中,RMSNorm 在每个 Transformer 块内的两个位置被应用:

这种风格称为 pre-norm(前置归一化),意思是先对输入进行归一化,然后再传入注意力层或前馈层。Pre-norm 有助于在非常深的网络中保持训练稳定性,这就是为什么几乎所有现代大语言模型都采用它。

下面是一个使用 pre-norm RMSNorm 的 Transformer 块的样子:

              input x
                 |
      +----------+              <- residual path
      |          v
      |      [ RMSNorm ]
      |          |
      |          v
      |      [ Attention ]
      |          |
      +--------> (+)
                 |
      +----------+              <- residual path
      |          v
      |      [ RMSNorm ]
      |          |
      |          v
      |       [ FFN ]
      |          |
      +--------> (+)
                 |
                 v
              output

可以看到,每个 RMSNorm 都位于重计算层(Attention 或 FFN)之前,而不是之后。残差路径绕过整个块,因此原始输入可以不受影响地直接流过。

在模型的最末尾、最终输出投影之前,还会额外应用一个 RMSNorm。这最后一次归一化使隐藏状态在投影成 logits 之前保持在一个稳定的范围内。

我们有一篇关于 Transformer 架构的详细博客,解释了归一化在整个流程中的位置。

如果你想端到端地深入学习 Transformer 架构、Attention 和前馈网络,请查看 Outcome School 的 AI 与机器学习课程。

快速总结

让我们回顾一下所学到的内容:

  • 归一化使流经深度网络的数值保持在健康的范围内,从而使训练更快、更稳定。
  • LayerNorm 做两件事——重新居中数值(减去均值)并重新缩放(除以标准差)。
  • RMSNorm 只保留重新缩放这一步。它将输入除以其均方根值。
  • 均方根正如其名——平方的平均值再开平方根。
  • RMSNorm 比 LayerNorm 更快,因为它跳过了均值减法和方差计算。
  • 准确率大致相同。 原论文表明 RMSNorm 在质量上与 LayerNorm 相当——有时略好,有时略差。我们基本上是免费获得了速度上的好处。
  • Llama、Mistral、Gemma、Qwen、PaLM 和 DeepSeek 等现代大语言模型都使用 RMSNorm。
  • 只有一个可学习参数——gamma。它在向量的每个维度上各有一个值。RMSNorm 中没有 beta。

我们已经学习了 RMSNorm 的工作原理、它为什么比 LayerNorm 更快,以及为什么大多数现代大语言模型都采用了它。

常见问题

RMSNorm 的准确率比 LayerNorm 低吗?

不是。原始的 RMSNorm 论文表明,使用 RMSNorm 训练的模型达到的准确率与使用 LayerNorm 训练的模型大致相同,有时略好,有时略差。所以我们获得了速度上的好处,却没有损失质量。

如果 RMSNorm 不重新居中,Transformer 如何处理均值偏移?

Transformer 中到处都有残差连接和可学习的投影,它们可以自行吸收均值偏移。所以网络不需要归一化来完成这项工作。真正需要专门处理的是尺度,这就是为什么在实践中 RMSNorm 就足够了。

为什么 RMSNorm 没有 beta 参数?

RMSNorm 不需要

beta

,因为它从一开始就不减去均值,所以没有什么需要移回的。它只保留一个可学习参数

gamma

,每个维度一个值。这让网络可以将每个维度拉伸或收缩到有用的尺度。

RMSNorm 中 eps 的用途是什么?

这个

eps

值是一个很小的数,加在平方根内部以避免除以零。所以实际中的公式变为

gamma * x / sqrt(mean(x^2) + eps)

。在代码示例中,

eps

默认为

1e-6

.

RMSNorm 是谁提出的?

RMSNorm 由 Biao Zhang 和 Rico Sennrich 在 2019 年的论文 "Root Mean Square Layer Normalization" 中提出。他们的关键洞察是:LayerNorm 的大部分收益来自重新缩放步骤,而不是重新居中步骤。

目前就到这里。

感谢

Amit Shekhar Outcome School 创始人

你可以通过以下方式与我联系:

关注 Outcome School: