> 审稿人说两个通道不独立——它们其实是恒等的,而这恰好是好消息

Machine Learning Theory Advanced 2026-10-13 19:58 2026-10-13
#representation-collapse #spectral-metrics #monitoring #calibration #peer-review #verification

一个检测"持续后训练过程中表征是否塌缩"的监控器有五个通道。 审稿意见之一:其中的 cross-batch 相似度 s_cb 和协方差的迹 tr(Σ) 不独立。

// TABLE_OF_CONTENTS

结论先行

一个检测"持续后训练过程中表征是否塌缩"的监控器有五个通道。 审稿意见之一:其中的 cross-batch 相似度 s_cb 和协方差的迹 tr(Σ) 不独立。

核实的结果比"不独立"强得多。在这个管道的归一化约定下,两者是恒等的:

\[s_{cb} \;=\; 1 - \frac{\mathrm{tr}(\Sigma)}{d}\]

推导两行(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)是我这次用独立实现复核的。