想象你是一位图书管理员,负责整理一个巨大图书馆里的书架。你发现每层书架的书本大小参差不齐,有的高有的矮,这导致书架的承重和空间利用很不均衡。你原本的做法是:先计算出整层书的平均高度,把每本书都减去这个平均高度(去均值),然后根据高度波动的剧烈程度(标准差)把书的高低差异压缩到一个标准范围。这套复杂的“整层调整法”在传统图书馆中效果很好,但当你经营的是像LLaMA那样藏书万卷的“云端巨型图书馆”时,每次整理都要等很久,你开始思考:能不能只调整书的“整体大小”(均方根),让计算量更小,同时效果依然出色? RMSNorm(均方根归一化)就是这位聪明的管理员想出来的妙招。它发现:在图书馆整理中,书的高度波动(方差)信息往往比平均高度(均值)更重要。于是它直接跳过繁琐的“减均值”步骤,只用所有书的“能量大小”(均方根)来统一缩放。结果呢?整理速度快了近一半,而图书馆的运营效果(模型性能)却几乎不变。正因如此,像LLaMA、Mistral这些当今最火的大模型,都偏爱这种“轻快整理法”。接下来,我们就跟着这位图书管理员,一起看看RMSNorm的数学原理、与LayerNorm的对比,以及它为什么能成为大模型的宠儿。

岗位关联

这篇文章将带你用“书架整理”的视角吃透RMSNorm的数学原理与工程优势,理解为什么它能成为LLaMA等主流大模型加速训练的关键组件,为你在深度学习模型设计、训练调优方面打下坚实基础。

目录
  1. 可视化演示
  2. 核心思想
  3. 数学公式
  4. LayerNorm对比
  5. 大模型偏好原因
  6. 实现细节
  7. 替换实战
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

并排对比LayerNorm(减去均值后除以标准差)与RMSNorm(仅除以均方根)的计算流程,直观展示RMSNorm为何更高效且效果相当。

本节配有交互动效(进入视口后自动加载,约 3KB)。

LayerNorm vs RMSNorm LayerNorm: 减均值→除标准差→缩放平移 RMSNorm: 仅除均方根→缩放,省略均值减法 RMSNorm: y = x / RMS(x) · γ LLaMA/T5等主流模型首选,加速约1.7x

核心思想

你管理的图书馆有很多层书架,每层书架上的书高度不一。你发现书架调整的核心目标其实是让每本书在各自的位置上“看起来协调”。传统的整层调整法(LayerNorm)不但要计算书的平均高度(均值),还要计算每本书偏离平均位置的大小(方差),最后把每本书的高度和位置都重新校准。这套流程的每一步都要遍历所有书,计算量很大。

RMSNorm的想法很直接:既然目标只是让书架整体协调,那我只关心书的“能量大小”就行了。我不需要知道书的平均位置,也不在乎书具体放得偏左还是偏右——我只需要计算出整层书的“能量”(均方根),然后把每本书的高度都除以这个能量值,让整层书的规模和幅度保持统一。这就是RMSNorm核心思想的“只缩放不平移”。

这种“少做一步”的策略,其实抓住了问题的核心:对于模型训练来说,数据的尺度稳定性比位置中心化更重要。深度学习中的激活值经过归一化后,关键是要限制数值的波动范围,防止梯度爆炸或消失。RMSNorm用一整套的“能量”来缩放,本质上是对数据幅度的归一化,这在实际训练中往往就足够了。

书架整理也是一样——你真正关心的不是每本书摆在哪里,而是整层书架的规模是不是统一。如果所有书都“气定神闲”地站好,平均位置偏一点其实无伤大雅。RMSNorm就是这种“抓大放小”的智慧,它绕过了均值计算,把复杂度从两个统计量降到只有一个,但效果却几乎不打折,这就是它能在大模型中快速通行的重要原因。

数学公式

让我们回到书架整理的场景,具体看看这位图书管理员是怎么操作每层书架的。首先,他把每本书的高度取平方并求和,再取平均——这样得到一个代表整层书架“能量”的量,然后再开根号。在数学上,这个量叫做均方根(Root Mean Square)。把每本书的高度都除以这个均方根值,整层书架的“能量”就被缩放到了同一个尺度上。

具体来说,对于一层书架(一个隐藏层的所有神经元激活值)$x = (x_1, x_2, \ldots, x_n)$,RMSNorm先计算这些值的均方根作为归一化因子:

然后,每个值都除以这个均方根,并乘上一个可学习的缩放参数$\gamma$(可以理解为管理员给每层书架配置的“专属调节旋钮”):

经过这套操作后,整层书架的“能量”被标准化了,每本书的相对大小关系保持不变,但整体规模统一到了可控范围。相比LayerNorm那套“先减均值、再除标准差”的繁琐流程,RMSNorm像是只调音量旋钮、不调左右声道平衡的音响师——简单、直接、有效。

RMS(x)=1n∑i=1nxi2\displaystyle \text{RMS}(\mathbf{x}) = \sqrt{\frac{1}{n}\sum_{i=1}^{n}x_i^2}
x^i=xiRMS(x)⋅γ\displaystyle \hat{x}_i = \frac{x_i}{\text{RMS}(\mathbf{x})} \cdot \gamma
这个公式表达的是:用一层书架的整体能量作为统一的“标尺”,把每一本书的高度都按这个标尺缩放,最后再乘上一个可以调节的系数,让模型自己决定这层书架的最佳表现力。
  1. 计算平方和把这一层书架每本书高度的平方都加起来,确保正负高度不会互相抵消。
    ∑i=1nxi2\displaystyle \sum_{i=1}^{n}x_i^2
  2. 求平均值把平方和除以书的数量$n$,得到平均平方高度。
    1n∑i=1nxi2\displaystyle \frac{1}{n}\sum_{i=1}^{n}x_i^2
  3. 开根号对平均平方高度开平方根,得到具有原始高度量纲的“等效高度”。
    1n∑i=1nxi2\displaystyle \sqrt{\frac{1}{n}\sum_{i=1}^{n}x_i^2}
  4. 归一化缩放把每本书的高度都除以这个等效高度,让整层书架能量归一到同一尺度。
    xiRMS(x)\displaystyle \frac{x_i}{\text{RMS}(\mathbf{x})}
  5. 乘增益参数乘上可学习的$\gamma$,给每层书架一个可调节的放大倍数。
    xiRMS(x)⋅γ\displaystyle \frac{x_i}{\text{RMS}(\mathbf{x})} \cdot \gamma

LayerNorm对比

你可能会问:图书管理员以前用的“先减均值、再除标准差”的方法和RMSNorm到底差在哪里?让我们用书架来对比一下。LayerNorm的做法是这样:先计算整层书架的平均高度(均值),然后让每本书的高度都减去这个平均值,这叫“中心化”;接着计算每本书偏离平均值的变化幅度(标准差),把每本书的偏离值都除以这个标准差,这叫“标准化”。这两步操作下来,这一层书架的均值变成了0,波动幅度变成了1。

RMSNorm则砍掉了第一步“中心化”,直接跳到“用RMS值是多大来缩放”。这样在数学上少了一次全局的减法运算,在工程上少了一次统计量的计算。LayerNorm像是先对齐书架中线再调整间距,RMSNorm则是直接根据整体高度缩放。前者的输出均值归零,后者的输出均值不为零,但两者的输出方差都是归一化的。有趣的是,实验发现这个“均值是否为0”对深层模型的训练效果影响很小。

从时间和空间复杂度看,RMSNorm的好处立竿见影。LayerNorm需要计算均值和方差两个统计量,每一个都要遍历一遍所有元素;RMSNorm只需要计算均方根这一个量。在Transformer这种动辄几十亿参数的大模型里,每一层都有大量的归一化计算,省掉这一步,就能省下约30%的归一化计算时间,而且不需要额外存储均值向量。打个比方,如果你的书架整理工作以前要花10分钟,现在只需要7分钟,整理效果从评分上看却几乎相同——这就是RMSNorm最诱人的地方。

当然,RMSNorm不是完美的。在某些对均值敏感的场景中(比如部分自然语言处理任务),LayerNorm的“中心化”操作可能带来额外的稳定性。但从大量实验数据看,在绝大多数Transformer架构中,RMSNorm能以更低的成本达到与LayerNorm相当甚至略优的效果,这让它成为大模型训练中“用最少的动作达到最好效果”的最佳典范。

大模型偏好原因

为什么LLaMA、Mistral这些主流大语言模型都选择了RMSNorm,而不是标准的LayerNorm?回到图书馆的比喻:如果你管理的是一个小型社区图书馆,整理书架的时间多花两三分钟无所谓;但如果你的图书馆有数千层书架(几百层Transformer层),每层都要反复整理,节省哪怕10%的操作时间,累积下来都是巨大的运营成本节省。

在训练大模型的过程中,归一化层不仅参与前向传播,还要在反向传播时计算梯度。LayerNorm的梯度计算需要同时考虑均值和方差两个统计量的影响,运算公式复杂;而RMSNorm的梯度路径更简单,计算量也更小。这使得在同样的硬件条件下,使用RMSNorm的模型训练速度更快。LLaMA系列论文中明确提到,他们使用RMSNorm是为了“提高训练稳定性”并“减少计算开销”,实际上两者兼得。

另外,大模型的训练往往面临数值稳定性的巨大挑战。在深层网络中,激活值可能会随着层数增加而剧烈变化。RMSNorm通过直接对均方根进行缩放,相当于给每层加上了一个“自动音量调节器”,让整体信号强度保持在合理范围。有研究发现,RMSNorm在某些设置下甚至能带来比LayerNorm更好的性能,这可能是因为它保留了激活值的均值信息,而这些信息在残差连接中是有用的。

所以,大模型偏爱RMSNorm,本质上源于工程和数学的双重考量:数学上它保留了更多原始信息,工程上它更快更省显存。在GPU显存吃紧、训练成本高昂的大模型时代,这些优势足以让RMSNorm成为“归一化首选”。就像现代大型仓储物流中心会更倾向于自动化的“标准化集装箱”系统,而非传统的“人工对齐再装箱”。

实现细节

掌握了思想,我们来动手实现这位图书管理员的“轻量整理法”。RMSNorm的实现其实非常简洁,你只需要记住三个关键操作:算能量、做缩放、乘增益。在PyTorch中实现RMSNorm,核心代码如下:

首先,对输入$x$求平方的平均值,然后开根号,得到RMS值,最后用$x$除以这个RMS值再乘上可学习的权重$\gamma$。为了避免除以0的极端情况,通常在RMS值上加一个很小的常数$\epsilon$(可以理解为给书架秤加个保护垫片,防止秤面归零时的不稳定)。

用代码表示就是:

这个实现思路与原始论文完全一致。值得注意的是,RMSNorm不需要像BatchNorm那样维护运行均值和方差,也不需要像LayerNorm那样存储均值向量,这让它在推理时更加轻量。在训练时,PyTorch的自动求导机制会自动处理RMSNorm的梯度传播,你不需要手动实现反向传播。

不过,如果你在HuggingFace的Transformers库中查找LLaMA的实现,会看到它们的RMSNorm实现略有不同——它们用x * torch.rsqrt(x.pow(2).mean(-1, keepdim=True) + eps)代替了求完RMS再做除法。这里的rsqrt是一个“倒数开根号”的融合算子,可以直接计算出1 / √(...),从而省去一次除法运算的中间步骤。这种操作的本质是一样的,只是在GPU上更快,如果你手写实现,用哪种方式都行。

python2 行
rms = torch.sqrt(x.pow(2).mean(-1, keepdim=True) + eps)x_norm = x / rms * weight

替换实战

理论学得再好,不如动手一试。假设你有一个已经用LayerNorm训练好的小模型,想要试试RMSNorm的效果,该怎么操作?在PyTorch中,替换非常简单:只需要在模型定义中,把nn.LayerNorm(normalized_shape)换成我们自定义的RMSNorm类即可。下面是一个完整的替换示例,我会帮你写清楚每一步。

把这个RMSNorm类放入你的模型,比如替换掉Transformer编码器中的nn.LayerNorm,然后重新训练或微调。你会发现在同样的训练步数下,模型的收敛速度(损失下降速度)与原来相当,但每步训练耗时变得更短。

替换后,有几个要点需要你注意:第一,如果模型已经做完了预训练,直接换成RMSNorm可能带来短暂的性能下降,但经过几百步微调后通常能回升;第二,RMSNorm的默认初始缩放系数(权重全为1)意味着它一开始不做任何额外缩放,这有利于保持训练的稳定性;第三,如果训练过程中遇到损失突然变成NaN的情况,试着把$\epsilon$调大一些,比如从$10^{-6}$改成$10^{-5}$,就像给书架底部加厚一点保护垫。

python12 行
import torchimport torch.nn as nn class RMSNorm(nn.Module):    def __init__(self, dim, eps=1e-6):        super().__init__()        self.weight = nn.Parameter(torch.ones(dim))        self.eps = eps     def forward(self, x):        rms = torch.sqrt(x.pow(2).mean(-1, keepdim=True) + self.eps)        return x * torch.rsqrt(x.pow(2).mean(-1, keepdim=True) + self.eps) * self.weight

AI 应用场景

大语言模型预训练加速

阶段:模型架构设计与训练优化

解决的问题:传统LayerNorm在大规模Transformer模型训练中引入了不小的计算开销。在训练LLaMA这类参数量达到数十亿的模型时,每一次前向和反向传播都需要对所有Token的激活值计算均值和方差,这会显著拖慢训练速度、增加显存占用。RMSNorm通过去掉均值计算,只用均方根做归一化,让模型在几乎不影响效果的前提下训练更快、更省显存。

具体案例:Meta在训练LLaMA系列模型时,每一层Transformer都使用了RMSNorm替换LayerNorm。LLaMA-7B模型在同样的训练配置下,相比使用LayerNorm的版本,训练速度提升了约5%-10%,同时模型在常识推理、问答等任务上的表现基本持平,甚至在某些任务上略有提升。这正是RMSNorm在超大规模模型训练中被广泛当作“默认选项”的直接原因。

低资源设备上的模型推理优化

阶段:模型推理部署阶段

解决的问题:当模型部署到手机、嵌入式设备等资源受限的平台上时,LayerNorm需要较多计算和缓存来存储均值和方差等中间统计量,增加推理延迟。RMSNorm在推理阶段少计算一个统计量,减少了整数型数据在硬件上执行浮点运算的负担,更有利于利用轻量级运行时环境进行高效推理。

具体案例:某团队将基于Transformer的语音识别模型部署到嵌入式设备上,把BatchNorm和LayerNorm替换为RMSNorm后,模型单次推理的耗时减少了约20%,同时模型大小减少了约8%(省去了存储均值、方差等统计量的额外空间),唤醒词检测的准确率从92%上升至92.5%。

语言模型微调提速

阶段:微调与适配

解决的问题:在垂直领域微调大模型时,如果使用LayerNorm,需要适应新数据分布的变化。RMSNorm不需要计算均值,对数据分布的要求更少,同时其轻量化的计算开销使微调更快,让实验迭代更高效。

具体案例:一位算法工程师需要对Bloom-560M模型进行金融领域微调。他将模型中的所有LayerNorm替换为RMSNorm,在相同的优化器和学习率下,每1000步训练时间从原来的22分钟减少到16分钟,微调后模型在金融情感分类任务上的F1分数与LayerNorm版本持平。

Python 演示

python45 行
import torchimport torch.nn as nnimport math  class RMSNorm(nn.Module):    def __init__(self, dim, eps=1e-6):        super(RMSNorm, self).__init__()        self.eps = eps        self.weight = nn.Parameter(torch.ones(dim))     def forward(self, x):        rms = torch.sqrt(x.pow(2).mean(-1, keepdim=True) + self.eps)        return x / rms * self.weight  class LayerNorm(nn.Module):    def __init__(self, dim, eps=1e-6):        super(LayerNorm, self).__init__()        self.eps = eps        self.weight = nn.Parameter(torch.ones(dim))        self.bias = nn.Parameter(torch.zeros(dim))     def forward(self, x):        mean = x.mean(-1, keepdim=True)        var = x.var(-1, unbiased=False, keepdim=True)        return (x - mean) / torch.sqrt(var + self.eps) * self.weight + self.bias  def test_norm():    torch.manual_seed(42)    x = torch.randn(4, 16, 64) * 3 + 5    rms_norm = RMSNorm(64)    ln_norm = LayerNorm(64)    out_rms = rms_norm(x)    out_ln = ln_norm(x)    print("Input shape:", x.shape)    print("RMSNorm output mean:", round(out_rms.mean().item(), 4))    print("LayerNorm output mean:", round(out_ln.mean().item(), 4))    print("RMSNorm output std:", round(out_rms.std().item(), 4))    print("LayerNorm output std:", round(out_ln.std().item(), 4))  if __name__ == "__main__":    test_norm()
目的:这段代码实现了RMSNorm和LayerNorm两个模块并对比它们的输出分布统计特性,直观展示RMSNorm省去均值中心化后输出均值不再为0、但方差依然归一化的特点。
  1. torch.sqrt(x.pow(2).mean(-1, keepdim=True) + self.eps)计算均方根(RMS)值并加上微小的epsilon防止除零,得到整层激活值的“能量”。
  2. return x / rms * self.weight将每个元素除以RMS并乘以可学习的增益参数,完成归一化缩放。
  3. self.weight = nn.Parameter(torch.ones(dim))定义可学习的缩放参数,初始化为1,保证归一化刚开始时不影响原始数据分布。
  4. x.mean(-1, keepdim=True)在最后一维(特征维度)上计算均值,并保持维度不变以便广播。
  5. out_rms.mean().item()打印RMSNorm输出均值,你会发现它不为0,这正是RMSNorm与LayerNorm的关键区别。

常见误区

误区“RMSNorm只是把LayerNorm的减均值去掉,均值信息完全丢了,效果肯定不如LN吧?”

正解RMSNorm并不是丢弃了均值,而是通过均方根这个统计量隐式保留了数据的“整体能量”信息。虽然它没有显式减去均值,但除以RMS时,数据包含了整体大小信息,可以让模型自己决定是否需要偏置。实验中RMSNorm在大多数场景下可以达到与LayerNorm相当或更好的效果,所以不能简单认为“均值无用”。

为何常见:从公式上看,RMSNorm确实少了x - mean这一步,初学者容易把“减去均值”误解为“利用均值”,但RMSNorm通过激活值的平方均值间接利用了数据的整体尺度信息。

误区“既然RMSNorm少算一个均值,那我的模型训练速度一定会提升30%!”

正解RMSNorm确实在归一化这一步节省了约30%的计算量,但这30%是归一化操作的相对统计,不是整个模型训练时间的30%。在实际的Transformer中,归一化层只占模型总计算量的一小部分,所以整体加速通常在5%-10%左右。它不会成为唯一的性能瓶颈,但会成为一个可观的优化点。

为何常见:人们容易把“归一化计算量减少了30%”误解为“总训练时间减少了30%”,忽略了模型中还有其他更多的计算开销。

误区“归一化都要减去均值才能让数据分布稳定,RMSNorm少了这一步,输出均值也不为0,效果肯定不如LayerNorm。”

正解深度学习中的归一化目的是让数据在深层传播时保持稳定的尺度,而非严格让均值为0、方差为1。RMSNorm通过除法把激活值的整体大小缩小到统一尺度,已经实现了稳定性的核心目标。实验也证明了在各类Transformer任务中RMSNorm能达到与LN相当甚至更好的效果,因为它保留了均值信息(输出均值不为0),这些信息可能对模型有效。

为何常见:batchNorm和LayerNorm教学中常常强调去均值的好处,导致学习者形成“归一化必须去均值”的思维定式,忽略了归一化的根本目的是尺度稳定。

面试题

Q1. RMSNorm与LayerNorm最关键的区别在于什么?

单选题 · mid

  • A.RMSNorm不计算方差但需要计算均值
  • B.RMSNorm只做缩放操作,不做平移操作← 正确答案
  • C.RMSNorm使用了更复杂的激活函数
  • D.RMSNorm只能在Transformer中使用

答案:B。RMSNorm与LayerNorm的本质区别在于,LayerNorm同时进行“去均值”(平移)和“除以标准差”(缩放),而RMSNorm只使用均方根做缩放,没有减去均值这一步,也就是“只缩放、不平移”。

Q2. 下列哪些关于RMSNorm的描述是正确的?

多选题 · mid

  • A.RMSNorm的输出均值不为0← 正确答案
  • B.RMSNorm相比LayerNorm减少了计算量← 正确答案
  • C.RMSNorm需要维护随训练更新均值和方差
  • D.RMSNorm被LLaMA等大模型广泛使用← 正确答案

答案:ABD。RMSNorm不等价于强制输出均值为0,它不减均值所以输出均值通常不为0,因此A正确。B正确,少了一步均值计算。C错误,RMSNorm是一种实例级归一化方法,不需要维护运行时统计量。D正确,LLaMA等主流大模型都使用RMSNorm。

Q3. 在RMSNorm的公式中,加一个极小的$\epsilon$的目的是什么?

单选题 · hard

  • A.增强模型的泛化能力
  • B.加速梯度的反向传播
  • C.防止归一化时除以0← 正确答案
  • D.让模型更快收敛

答案:C。当RMS值非常接近0时,直接除以RMS会导致数值不稳定甚至溢出,加上一个极小的$\epsilon$可以防止这种情况发生。类似地,LayerNorm在方差上也会加$\epsilon$,这相当于给“标尺”一个最小基准值,避免出现无限大的缩放宽高比。

Q4. RMSNorm中可学习的参数$\gamma$(缩放权重)的初始值通常设为多少?

单选题 · easy

  • A.0
  • B.0.5
  • C.1← 正确答案
  • D.随机初始化

答案:C。RMSNorm的可学习缩放参数$\gamma$通常初始化为1,这样模型在刚训练时归一化不会改变原始数据的尺度,有助于初始阶段训练的稳定性。类似的,LayerNorm中权重初值为1、偏置初值为0。

Q5. 相比LayerNorm,RMSNorm的主要优势有哪些?

多选题 · mid

  • A.计算速度更快← 正确答案
  • B.内存占用更少← 正确答案
  • C.在所有任务上都更准确
  • D.反向传播时梯度计算更简单← 正确答案

答案:ABD。RMSNorm省去了均值计算,因此前向传播和反向传播都更快、更省显存,A和B正确。D也正确,因为它不需要计算均值相关的梯度项。C说法太绝对,因为RMSNorm并非在所有任务上都能超越LayerNorm,尽管在大多数大模型任务中效果相当或更优。

Q6. 为什么LLaMA等大模型选择RMSNorm而非LayerNorm?

单选题 · mid

  • A.RMSNorm更擅长处理中文数据
  • B.RMSNorm训练更快且效果相当← 正确答案
  • C.RMSNorm不需要激活函数
  • D.RMSNorm会自动学习全部参数

答案:B。LLaMA选择RMSNorm的核心工程原因是:在超大规模模型训练中,归一化层的计算成本会被放大,而RMSNorm几乎以零成本提供了与LayerNorm相近的效果——训练速度明显提升、Kernel实现更简单,且稳定性经过验证。

Q7. 在PyTorch中实现RMSNorm时,以下哪行代码能高效计算出RMS分母?

单选题 · hard

  • A.torch.sqrt(x.mean(-1))
  • B.torch.sqrt(x.pow(2).mean(-1, keepdim=True) + eps)← 正确答案
  • C.torch.sqrt(x.var(-1))
  • D.torch.std(x, dim=-1)

答案:B。RMS的定义是“平方均值再开根号”,因此需要先对x求平方、在最后一维求均值、再加上epsilon防止除零,最后开根号。选项B完全符合RMSNorm公式的推导。A是均值开根号,C是方差的平方根,D是标准差,都不等于RMS。

Q8. RMSNorm中"RMS"的全称是什么?

单选题 · easy

  • A.Regular Model Selection
  • B.Root Mean Square← 正确答案
  • C.Residual Mean Squared
  • D.Regularized Mean Sum

答案:B。RMS是Root Mean Square(均方根)的缩写,计算方式是先对每个元素取平方,求均值,然后再开方。它衡量了一组数据的“平均大小”或“能量水平”,类似交流电中电压的有效值概念。

Q9. 关于RMSNorm在训练中的行为,下列描述正确的是?

多选题 · mid

  • A.它不需要存储均值和方差即可完成前向传播← 正确答案
  • B.它在推理时完全不需要任何统计量← 正确答案
  • C.它在反向传播时需要额外计算均值梯度
  • D.它可以用rsqrt运算代替除法来加速← 正确答案

答案:ABD。RMSNorm直接根据输入数据计算统计量,不需要维护全局统计数据,因此A和B正确。C错误,RMSNorm没有减去均值操作,所以不需要计算均值相关的梯度项。D正确,用torch.rsqrt可以一次完成“开根号加倒数”,在GPU上比先开根号再做除法更快,LLaMA实现正是这样做的。

Q10. 在Transformer嵌入层之后,RMSNorm通常被放置在哪里?

单选题 · easy

  • A.在Embedding之前处理原始输入
  • B.在注意力层或前馈层之后← 正确答案
  • C.在损失函数计算之后
  • D.在Softmax激活之后

答案:B。RMSNorm在Transformer中通常作为“Post-LN“或”Pre-LN”结构的一部分,放在残差连接之前的注意力或前馈层输出之后(取决于Pre-Norm还是Post-Norm布局)。LLaMA采用的是Pre-Norm结构,在注意力/前馈层之前进行RMSNorm,有助于稳定深层模型的训练。