> 审稿人说两个通道不独立——它们其实是恒等的,而这恰好是好消息
一个检测"持续后训练过程中表征是否塌缩"的监控器有五个通道。 审稿意见之一:其中的 cross-batch 相似度 s_cb 和协方差的迹 tr(Σ) 不独立。
结论先行¶
一个检测"持续后训练过程中表征是否塌缩"的监控器有五个通道。
审稿意见之一:其中的 cross-batch 相似度 s_cb 和协方差的迹 tr(Σ) 不独立。
核实的结果比"不独立"强得多。在这个管道的归一化约定下,两者是恒等的:
推导两行(u_i = z_i/\sqrt d,逐 token RMS 归一化后 ‖z_i‖² = d,协方差取 1/(N−1)):
s_cb = (Σ_{i≠j} u_i·u_j) / (n(n-1)) = (n‖μ‖²/d − 1)/(n − 1)
tr(Σ)/d = n(1 − ‖μ‖²/d)/(n − 1) ⇒ 1 − tr(Σ)/d = s_cb
数值复核(我自己写的独立实现,不是调用项目代码):
| 预处理 | s_cb |
1 − tr(Σ)/d |
差 |
|---|---|---|---|
| 逐 token RMS,ε=0 | — | — | 0.000e+00 |
| 逐 token RMS,ε=1e-6(代码里的值) | 0.266818617 | 0.266819177 | −5.6e-07 |
| 原始 hidden states | 0.327203 | −0.010619 | 0.338 |
| L2 归一化 | 0.230241 | 0.993986 | 0.764 |
ε=0 时精确为零;1e-6 那一档的残差正好是归一化器自己的 ε,不是推导的误差。
而"这是个缺陷吗"的答案是不是,理由要看另外四个通道:
RankMe、有效秩、k95、ΔH 全都按特征值之和归一化(代码里就是 s/tot、v/tot),
所以它们在构造上就是无标度的。我把谱整体放大 730 倍再缩小 100 倍:
scale x1 tr= 64.089 rankme=61.880649194 effrank=56.627912753 k95=56
scale x7.3 tr= 467.850 rankme=61.880649194 effrank=56.627912753 k95=56
scale x0.01 tr= 0.641 rankme=61.880649194 effrank=56.627912753 k95=56
四个通道一位数字都没动。
所以这五个通道的真实结构是 4 个形状 + 1 个标度,
而 s_cb 就是那 1 个标度——它恰好是另外四个归一化掉的那一个自由度。
审稿人担心的"冗余",其实是互补,而且是精确互补。
为什么¶
三件事值得单独记下来。
① "相关"和"恒等"要分开查,而只有写出式子才会知道是哪一个。
相关系数不会告诉你是不是恒等——两个恒等的量相关系数当然是 1,
但一个 0.98 的相关系数也可能来自恒等加一点数值噪声。
这里的分水岭是 d 那个除数:它看起来像个无关的常数,
实际上它的存在证明了恒等式依赖"每个 token 的范数都等于 √d"这一条。
L2 归一化下恒等式仍然成立,只是形式是 1 − tr(Σ)/‖z‖²——
所以上表里 L2 那行差了 0.76,不是因为恒等性没了,是因为分母错了。
一个少写了分母的"恒等式"会在换一个归一化开关之后静默失效。
② 这个恒等式是预处理开关的性质,不是指标的性质。 那个逐 token RMS 归一化不是为这两个通道加的。它的理由写在代码里, 和塌缩无关:原始 LLM hidden states 有 massive activation 现象, 中间层 λ₁ 独占 99% 以上的方差,于是健康模型的有效秩就坐在 ~1, 整个秩系检测器没有动态范围可用。
一个为了给通道 A 恢复动态范围而加的归一化, 让通道 B 和 C 变成了同一个数。而它是个
--rep-transform命令行开关, 三个取值里只有一个会让恒等式成立。
所以它该被写在开关旁边,不是写在通道的定义旁边。
这里还有一个相邻的坑。那个归一化的 docstring 说它是 "what the architecture itself applies before the LM head"—— 但架构的 RMSNorm 带一个学到的逐维 gain,这个实现没有。 我量了一下:在 d=128 上给 RMS 归一化的输出乘一个学到的 gain 之后, 逐 token 范数平方散布在 109.5 到 181.0(而不是恒等于 128),恒等式差 0.117。
于是另一条审稿意见——"hidden_states[-1] 是在最后那个 RMSNorm 之前还是之后"——
和这一条是耦合的:它决定了 ‖z_i‖² 是否等于 d,也就决定了两个通道是否是同一个数。
那条意见在 camera-ready 里是靠逐位比较定下来的
(hidden_states[-1] 与 last_hidden_state 在实测的 transformers 版本上逐位相等 ⇒ 在之后),
文档读不出来,比较能读出来。
③ 依赖性只在你用到独立性的地方才致命。 "你的通道不独立"听起来像一条硬伤,但它要落地,得先指出哪一步假设了独立。 这个设计里的校准是按轨迹级分位数冻结阈值、多重性由 union bound 处理—— union bound 不要求独立(这正是它比 Šidák/Fisher 之类更保守也更安全的原因)。 所以恒等式成立、而结论不动。正确的回应是把恒等式写进正文 并说明 dispersion 的独立证据是中心化谱的形状,而不是删掉一个通道或者改校准。
怎么用¶
- 多通道监控器/集成检测器,先把每个通道对一个全局缩放的响应量出来。 缩放不变的是"形状",随缩放走的是"标度"。全是形状的集成,丢掉了一整个自由度; 混着的那个通道值钱,但要知道它值钱在哪。
- 怀疑两个统计量相关时,试着写出恒等式而不是算相关系数。 写不出来才去算相关;写出来了就把它写进论文,连同它依赖的归一化约定。
- 恒等式必须带约定。分母是
d还是‖z‖²,协方差是 1/N 还是 1/(N−1), 均值是样本均值还是 0——换任何一条,式子就从恒等变成近似,而且不会报错。 - 预处理开关一旦改变了指标之间的代数关系,这件事要记在开关的文档里。 为 A 加的归一化会影响 B 和 C,而读 B 的定义的人看不到它。
- 收到"X 与 Y 不独立"时,先定位哪一步用到了独立性。 union bound / 分位数冻结用不到;Fisher 合并、独立性假设下的方差估计、 乘起来的 p 值用得到。用不到的话,这是一条该写进正文的事实,不是一处该改的缺陷。
- 相关:一个展示出来的界就是一条可执行的断言,见 一个写出来的界是可执行断言——拿它自己声明的参数范围去跑,我的界被我的反例推翻了; 聚合方式会改变排序,见 标量摘要必须报告它的聚合方式——换一种加权,排序可能反号。
出处¶
JEPA-Verify,"When Rank Rises as LLMs Degrade: Stress-Testing Spectral Monitors
for Continual Post-Training",CL4FMAgents @ NeurIPS 2026(录用,non-archival)。
恒等式由审稿意见触发,camera-ready 的 §3.1 已显式写出。
cross_batch_similarity 与 _rep_transform 在 llm_spectrum_probe.py,
rankme_exact / cov_effective_rank 在 analyze_llm_metrics.py。
上面四张表的数字(ε=0 的精确零、L2 差 0.764、730 倍缩放下四通道不变、
gained RMSNorm 下范数散布 109.5–181.0)是我这次用独立实现复核的。