Learning Thread · 2026-08-18

理解 pi0.5 中的 adaRMS

pi0.5 里的 adarms 是做什么的?

pi0.5 里的 adarms 是做什么的?

为什么会问这个问题:在 π₀.₅ 源码中看到 adarms 参数,文档只说"adaptive RMSNorm",但不清楚为什么需要"自适应"。

简短回答:adaRMS 让归一化层接受条件向量(通常是 timestep),用一个小 Dense 生成 scale、shift、gate 参数,逐层调制 Transformer。π₀ 只在输入端把 action 和 timestep 拼接一次,π₀.₅ 则在每一层都注入 timestep。

这个回答暴露了什么前置概念:需要理解什么是 RMSNorm,才能理解"自适应"的含义。


什么是 RMSNorm?

为什么从上一个问题引出这个问题:adaRMS 是"adaptive RMSNorm",但 RMSNorm 本身是什么?

简短回答:RMSNorm 用向量的均方根对向量归一化,稳定 hidden state 的 magnitude,但不删除 mean 方向的信息:

RMSNorm(x)=x1di=1dxi2+ϵγ\text{RMSNorm}(x) = \frac{x}{\sqrt{\frac{1}{d}\sum_{i=1}^{d} x_i^2 + \epsilon}} \odot \gamma

其中 γ\gamma 是可学习的 scale 参数。

这个回答暴露了什么前置概念:为什么"不删除 mean"很重要?这和 LayerNorm 的区别是什么?


为什么 RMSNorm 不减去均值?

为什么从上一个问题引出这个问题:LayerNorm 会先减 mean 再除标准差,RMSNorm 只除 RMS,这个差别意味着什么?

简短回答:LayerNorm 删除了 hidden vector 在 all-ones 方向上的分量(整体 offset),RMSNorm 保留了这个方向。从几何上看,RMSNorm 只调整向量长度,不改变方向;LayerNorm 会删除一个维度的信息。

例如 [10,11,12][10, 11, 12][101,102,103][101, 102, 103],LayerNorm 后完全相同,RMSNorm 后仍不同。

这个回答暴露了什么前置概念:Norm 在 Transformer 里放在什么位置?为什么现代模型都用 Pre-Norm?


Transformer 为什么使用 Pre-Norm?

为什么从上一个问题引出这个问题:理解了 RMSNorm 和 LayerNorm 的区别,但它们在 Transformer 里怎么用?为什么是 x + F(Norm(x)) 而不是 Norm(x + F(x))

简短回答:Pre-Norm 保留了一条完全不受阻碍的 identity path:

xl+1xl=I+F(Norm(xl))xl\frac{\partial x_{l+1}}{\partial x_l} = I + \frac{\partial F(\text{Norm}(x_l))}{\partial x_l}

即使 Attention/FFN 梯度很小,II 始终在,梯度可以直接传。Post-Norm 的梯度必须经过 Norm:

xl+1xl=JNorm(I+JF)\frac{\partial x_{l+1}}{\partial x_l} = J_{\text{Norm}}(I + J_F)

深层网络更容易不稳定。

这个回答暴露了什么前置概念:这个 identity path 保护的是什么?residual stream 到底在传递什么?


残差流在保留什么?

为什么从上一个问题引出这个问题:Pre-Norm 保护 identity path,但这个 path 承载的信息是什么?为什么需要保护?

简短回答:Residual stream 是所有层共享的"内存",每层不是重新创造表示,而是往这个流里写增量:

xL=x0+Δ1+Δ2++ΔLx_L = x_0 + \Delta_1 + \Delta_2 + \cdots + \Delta_L

Norm 不在这条高速公路上,它只负责:某个模块准备读取 residual stream 时,先把输入尺度整理一下。

回到 adaRMS:它让 timestep 控制"怎么看"(scale/shift)和"写多少"(gate),但不破坏 residual highway。


概念链

这条问题链的价值不在于"adaRMS 会归一化激活值"这个结论,而在于理解:归一化、条件调制和残差流设计是一个系统,让 Transformer 既稳定又能响应上下文。