Neural Collapse Is Forbidden:语言模型为什么不能塌缩
如果我们把一个训练好的图像分类器拆开看,经常会看到一种很漂亮的几何结局:同一类图片的表征挤到一起,不同类别的均值像正单纯形一样分开。狗都靠近“狗”的中心,猫都靠近“猫”的中心;类内方差越来越小,类间角度越来越规整。这个现象叫 Neural Collapse,中文通常译作“神经塌缩”。
于是,当研究者转头去看语言模型时,一个自然的期待出现了:如果 token 也能被分成类别,比如名词、动词、标点,或者由聚类得到的语义簇,那么训练到最后,同一类 token 的 hidden state 是不是也应该收紧?如果没有收紧,是不是只是模型还没训够、规模还不够、或者 collapse 只完成了一半?
这篇论文的标题直接把这条路堵死:Neural Collapse Is Forbidden。不是“不容易发生”,也不是“还没观察到”,而是“被禁止”。它要说的是,语言模型里的类内方差不是训练残渣,而是模型为了做 next-token prediction 必须支付的信息存储成本。你如果把它压到零,模型就丢掉了区分同一类别内部 token 所需的上下文信息。

先把三个概念放在桌面上
第一个概念是“神经塌缩”。它描述的不是 loss 下降,而是表征空间的几何整理:同类样本越来越靠近自己的类中心,不同类中心之间越来越像一个均匀撑开的骨架。它给人的直觉很强:训练越充分,类别结构越干净,类内噪声越少。
第二个概念是“语言模型里的类别”。语言模型预测的基本单位不是图片类别,而是 token。我们可以把 token 按聚类、词性或语义本体分成粗类别。比如一个类别里可能有 several、many、few 这类数量词;另一个类别里可能是句首符号、冠词或功能词。问题是,在同一个粗类别内部,模型仍然要根据上下文选出具体 token。
第三个概念是“信息地板”。地板的意思是:有些 dispersion 不是优化不彻底导致的上浮,而是任务本身给出的下界。只要“在某个类别里该选哪个 token”依赖上下文,表征就不能完全收拢。塌缩到零会让模型把必须保留的条件互信息也一起压掉。
这三个概念连起来,就是论文的主线:我们先以为语言模型没有 collapse 是一个训练问题;但仔细量一遍,会发现它更像一个会计问题——方差被分配给不同的信息账本,其中最大的一笔不是类别,而是上下文。
第一条线索:方差账本不支持“还没训完”
如果“不完全塌缩”只是训练不够,那么我们大概会期待两件事。第一,模型越大、越强,宏观类别结构应该越来越占主导。第二,类内方差应该像噪声一样逐渐被挤掉。
论文先做了一件很关键的清理工作:不用带量纲的方差指标,而用总方差的无量纲分账。对每个 token,作者在 WikiText-103 上收集“这个 token 作为下一个 token 出现时”的 hidden state,取倒数第二层表示;然后把 token 分到类别里,做一个三层分解:
- token 内上下文方差:同一个 token 在不同上下文里的表示变化;
- 类别内 token 身份方差:同一粗类别里不同 token 均值之间的差异;
- 类别间方差:不同粗类别中心之间的差异。
这个分解的好处是,每一项除以总方差后都变成 share,可以跨模型大小、embedding 维度、checkpoint 和覆盖词表比较。
结果非常不符合“还没训完”的故事。14 个模型、三个家族(GPT-2、Pythia、Qwen2.5)、参数从 70M 到 6.9B,宏观类别结构通常只占总表征方差的 4–12%;类别内 token 身份占 4–13%;真正的大头是 token 内上下文变化,占 79–91%。GPT-2 XL 是一个被作者单独标注的退化例外:within-token 约 69%,between-category 约 28%,因为它的类别中心近似共线。

更要命的是,这个比例很稳。验证集上每个模型覆盖约 500 个高频 token;训练集上扩大到 24k–26k 个 token type,覆盖类型增加约 45 倍,图景仍然类似。跨 100 倍参数范围也没有一个清楚的 scale trend。Pythia 里 between-category share 和 log 参数的 Spearman 相关是 -0.46,p=0.29;GPT-2 是 +0.80;Qwen2.5 是 -0.50。方向都不一致。
这就像侦探故事里的第一处反常:如果凶手是“模型还没训够”,那规模和训练终点应该留下同一种脚印。可是脚印不统一。方差不是随着容量被挤向类别骨架,而是稳定地保留在上下文通道里。
论文还补了一刀:在 K=10 的粗类别下,cross-entropy loss 约 59–64% 是在类别内部解决的;全词表覆盖时,K=10 下这个比例升到 73–75%。也就是说,模型真正难的不是“这句话下一步属于哪个粗类别”,而是“在这个粗类别内部,到底是哪一个 token”。方差最大的地方,也是 loss 最大的地方。
第二条线索:以前的“单纯形证据”有会计幻觉
神经塌缩文献里常见一个观察:把类别中心居中后,类别均值之间的平均 pairwise cosine 接近 -1/(K-1)。这看起来很像正单纯形 ETF(equiangular tight frame)的角度结构。
论文指出,这个证据本身有一个非常朴素的陷阱:只要你把 K 个向量居中,它们的和就是零。把 ||sum v_k||^2 = 0 展开,就会得到一个恒等式:平均内积被平均范数锁住。如果这些居中后的向量范数差不多,那么平均 cosine 自然接近 -1/(K-1)。
换句话说,这个数字不一定说明模型学出了一个漂亮的单纯形;它可能只是“居中”这个操作本身制造出来的账面等式。作者甚至明确说,这个 one-line centering identity 也推翻了他们自己早期版本中的一类 simplex-ETF claim。
这里的姿态很重要。论文不是说语言模型没有任何几何结构,而是说:我们不能把一个由会计恒等式固定住的平均角度,当成学习出的语义结构证据。真正该看的是方差怎么分配、范数怎么排序、dispersion 和信息量之间有没有可重复的关系。
第三条线索:权重衰减惩罚的是 type count,不是 occurrence mass
接下来,论文把问题从测量推进到理论。直觉上我们可能会想:类别越常出现,模型越应该给它更大的几何地位;少数类则更容易被压缩。这是从普通 imbalanced classification 借来的想法。
但语言模型的 softmax head 有一个细节会改变答案。每个 token 都有一行 unembedding/head row。把一个粗类别里的 token head row 写成“类别均值 + token 残差”,权重衰减项可以精确拆开:类别均值那一项前面乘的不是这个类别出现了多少次,而是这个类别里有多少个不同 token type。
这句话很容易滑过去,但它是整篇论文的关键机制之一:token-level weight decay 对粗类别均值的有效惩罚强度,正比于类别的 type count |S_k|;occurrence mass N_k 只通过 loss 风险项进入。

所以粗类别问题不是一个普通 K 类分类问题,而是一个被双重加权的问题:风险由出现频率加权,正则由类别里有多少 token 类型加权。作者在 K=2 情形下精确求解,发现主导范数排序的是 type count 带来的 decay 和 offset,而不是 occurrence mass。一般 K 的几何也给出闭式解。
实验上,这个方向也站住了。类别中心范数和 log category mass 的相关在 14/14 个模型中为负;更直接的 head-row 检验里,||w_bar_k|| 与 log type count 的相关在 24/24 个模型-覆盖-分区组合中为负,中位数约 -0.54;控制 mass 后的 type-count partial 也是 24/24 为负,中位数约 -0.50。mass 的 partial 则符号不稳定。
这一步排除了一个常见误读:语言模型的类别几何不是简单地“高频类更大、低频类更小”。粗类别里包含多少 token type,会通过权重衰减改变几何骨架。它已经不是经典神经塌缩里那个均衡、规整的单纯形了。
真正的反转:类内 dispersion 是条件互信息的价格
到这里,我们已经知道两件事。第一,宏观类别结构只是薄薄一层。第二,即便在类别层面,几何也被 type count 和 mass 扭曲,不会自然走向规则单纯形。
但这还没有解释最核心的问题:为什么类内方差不能继续收缩?
论文给出的答案是信息论的。设想一个类别里有两个 token,a 和 b。如果在所有上下文里,a 和 b 的相对概率都差不多,那么模型不需要让上下文表示沿着“区分 a/b 的方向”大幅变化。可是如果上下文决定了到底选 a 还是 b,情况就变了。模型必须在 hidden state 里保留能改变 logit margin 的信息。
作者证明了一个二元类别的 converse floor:沿读出方向的 margin variance 至少正比于条件互信息 I(token; context | category)。通俗说,只要“给定类别后,token 选择还依赖上下文”,类内 dispersion 就有一个不能被压穿的下界。
这就是“信息地板”。塌缩不是没完成,而是被任务本身挡住了。

更漂亮的是,论文没有停在定理上,而是去量这个地板在真实模型里有没有影子。他们用一次 inference pass 估计每个类别的模型实现的条件信息,然后看类别内 identity dispersion 是否跟它同步。
结果很强:在 4 个模型、4 种分区的 16/16 个组合里,identity dispersion 都追踪条件信息;在类别数足够多的分区里,Spearman 相关为 0.58–0.85。控制 marginal entropy、category mass 和 type count 后,K=50 的 pooled within-model-rank partial correlation 是 r=0.755,p=3×10^-30,n=157。扩大到 24k–26k 个 token type、50,000 条序列后,又在 12/12 个组合中复现,pooled partial correlation 升到 r=0.773。
这里最关键的是负控。总类内方差不稳定,符号接近零;within-token variance 单独看也不解释这个关系。真正追踪条件信息的是类别内 token identity dispersion,而不是随便哪种方差。并且它和条件互信息的关系,大约比和 marginal entropy 的关系强一倍:K=50 时前者在 0.62–0.85,后者只有 0.27–0.36。也就是说,重要的不是“这个类别里有多少选择”,而是“上下文到底提供了多少选择信息”。
作者还直接检验了定理真正约束的 margin variance。对 286 个类别内主导 token pair,不等式在 286/286 个 pair 上成立;margin variance 与 pair 条件信息的 Spearman 相关达到 0.94,各模型 0.89–0.95。地板是真的,但很松:median margin variance 是 floor 的 21 倍。所以这个定理解释的是排序和必要性,不是把实际方差精确算出来。
最能排除“自我引用”的证据,是跨模型预测。在词性分区上,一个模型的条件信息可以预测另一个模型的 identity dispersion,12 个有向模型对全部成立,中位 Spearman 0.76。如果这只是某个模型几何的同义改写,它不应该跨架构、跨 tokenizer 还能预测。
训练过程也不像“终点塌缩”
如果神经塌缩叙事是对的,训练后期应该越来越规整:类内收缩,类别结构稳定增强,最后逼近一个漂亮终点。
论文在 Pythia 和 OLMo-2 的公开 checkpoint 上看到的不是这条线。类别结构很早结晶,随后过冲,再衰减,最后部分恢复。Pythia 的 between-category share 在 step 32–64 开始上升,在前 1000 步内达到 0.15–0.21,中期降到 0.05–0.07,最后在 6 个尺寸中的 4 个里恢复 1.5–1.8 倍。perplexity 在这个过程中仍然单调改善。

OLMo-2 的复现实验更像一次预注册侦探测试。作者事先固定了四条标准。结果三条通过:1B-token checkpoint 的 between-category share 是 0.201,初始化只有 0.002,21–42B token 区间约 0.090;之后内部最低点在 21B token,share 为 0.083,到 1.3T token 恢复到 0.124,4T stage1 final 为 0.108。within-token share 也从初始化 0.988 跌到过冲时 0.725,再回升到 0.803。第四条 CDNV U-shape 没过预设阈值:形状有,但 1.21 的 ratio 低于事先设定的 1.3,作者如实判 fail。
这个动态很难被“越训越塌缩”解释。它更像模型早期快速搭起粗类别骨架,随后把表征资源挪给越来越细的上下文选择,最后因为上下文信息从未消失,类别结构又以部分形式回来。
这篇论文到底证明了什么,没有证明什么
为了不把故事讲过头,我们要把边界画清楚。
论文证明了几件事。第一,居中后的平均 pairwise cosine 接近 -1/(K-1) 本身不是 simplex ETF 的强证据,而是一个会计恒等式加近似等范数的结果。第二,在 token-level weight decay 下,粗类别均值的正则惩罚按 type count 加权,理论上会导向被扭曲的类别范数,而不是规则单纯形。第三,在二元类别里,如果类别内 token 选择依赖上下文,沿读出方向的 dispersion 有一个由条件互信息给出的下界。
论文测量了几件事。14 个模型里,宏观类别结构通常只有 4–12%,within-token context 是 79–91%;identity dispersion 在所有测试模型和分区中都追踪条件互信息;type-count ordering 在 head rows 上 24/24 通过;训练轨迹呈现结晶、过冲、重分配、部分恢复。
论文没有证明几件事。第一,一般 K 的信息地板仍是 conjecture,严格证明只覆盖 binary categories。第二,训练动态是 observational,不是干预实验;它和信息存储成本一致,但不能单独证明因果。第三,某些统计量是 consistency statistic,不应被读成严格独立样本检验,因为同一家族模型共享 tokenizer,类别也会重叠。第四,GPT-2 XL 和 GPT-2 final layer 有作者明确标注的几何病理,不能被当成普通点处理。
这些限制没有削弱主结论,反而让它更可信。因为论文真正改变的不是“某个指标涨了多少”,而是我们解释方差的语言。
大图景:语言模型的表征不是分类器的终局
经典神经塌缩给我们一个很诱人的美学:训练把世界整理成类别,类别内部的多余变化被压掉,最后留下一个干净的几何骨架。
语言模型的问题是,它不是在回答“这张图属于哪一类”。它每一步都在一个巨大词表里做条件选择。粗类别当然有用,但粗类别只是第一层路标。真正的工作,发生在“已经知道大概是哪类之后,具体该选哪个 token”的细节里。这个细节不是噪声,而是上下文。
所以这篇论文最值得记住的一句话也许是:类内方差不是 collapse 的失败,而是 prediction 的账单。
如果一个类别内部的 token 选择携带条件互信息,模型就必须在表示里留下可读出的差异。你可以让几何更规整,可以压缩无关变化,可以把一些静态偏好放进 head row;但你不能把需要上下文决定的东西塌缩掉。语言模型不塌缩,不是因为它还没走到分类器的终点,而是因为它在做一件分类器终点不允许它做的事。