RMSNorm:今天真正弄懂
先记住:RMSNorm 只统一向量的“整体音量”,不强行把均值搬到 0。口诀:平方—平均—开根—相除—缩放。
把一层网络输出的向量想成一排音量忽大忽小的麦克风。数值过大或过小,后面的层就很难稳定学习。RMSNorm 先计算整组数的均方根,再用它缩放每个元素,让整体尺度稳定。
公式是 $$y_i = g_i \frac{x_i}{\sqrt{\frac{1}{d}\sum_{j=1}^{d}x_j^2+\epsilon}}$$。
- $x_i$:输入向量第 $i$ 个数;$d$:最后一维的长度。
- 平方后求平均:只关心整体能量,不让正负号抵消。
- 开根号:把量纲拉回原来尺度;$\epsilon$:防止除以 0。
- $g_i$:可学习缩放参数,让模型自己决定每个维度最终应有多大。
实际使用时通常对每个 token 的 hidden dimension 单独归一化。输入形状若是 `[batch, time, hidden]`,RMSNorm 就沿 `hidden` 维计算。LLaMA 等模型常把它放在注意力层或前馈层之前,也就是 Pre-Norm 结构。
为什么不能直接用普通平均值当尺度?
RMSNorm 与 LayerNorm 最好记的差别是什么?
输入 `[B,T,H]` 时 norm_shape 通常是什么?
发展流程:早期深层网络容易出现数值尺度和梯度不稳定;LayerNorm 通过“减均值 + 除标准差”稳定每个样本。RMSNorm 发现很多场景只控制尺度就够了,于是省掉减均值,计算更简单。
现状:RMSNorm 已成为许多现代大语言模型的常见组件。它不是提高模型智力的魔法,主要价值是让训练更稳、实现更简洁。在音视频模型和说话人日志模型中,只要主干使用 Transformer,就可能在音频帧、视频 token 或融合后的 token 上看到它。
与 LayerNorm 的区别:LayerNorm 同时重新居中和缩放;RMSNorm 只缩放。两者都通常带可学习权重。不要把 RMSNorm 和 BatchNorm 混淆:BatchNorm 会借用 batch 内其他样本的统计量,而 RMSNorm 对当前 token 自己计算。
局限:RMSNorm 不保证输出均值为 0,也不是所有模型替换后都会更好。未来更可能作为高效基础组件继续存在,并与低精度训练、长序列模型和多模态主干共同优化;这属于合理趋势判断,不是确定结论。
- 为什么 RMSNorm 要平方后再平均?
- 它与 LayerNorm 少了哪一步?
- `[B,T,H]` 输入时沿哪一维计算?