
当我们试图理解大语言模型(LLM)的内部运作时,往往会自然地走向信息论。一个模型在训练中到底"记住"了多少输入细节?它又真正提取出了多少对预测下一个 token 有用的结构?
这些问题可以用互信息(Mutual Information, MI)、香农熵(Shannon Entropy)以及信息瓶颈(Information Bottleneck, IB)等概念来描述。直觉上说,如果一个模型的中间表示既保留了足够多与预测目标相关的信息,又丢弃了大量与目标无关的输入细节,那么它就完成了一种有效的压缩。
这也是近来一类 LLM 表征分析工作的核心思想:预训练并不只是不断"记住"语料,而可能是在学习一种有损压缩:保留对预测有用的统计结构,遗忘局部、偶然、冗余的表面细节。
不过,从理论走到实际测量,中间隔着一道工程鸿沟。LLM 的隐藏状态通常是几千维连续向量。想在这样的空间里估计熵和互信息,并不是把公式写出来那么简单。
高维空间里的"维数灾难"
在离散情形下,香农熵可以写成:
H ( X ) = − ∑ x p ( x ) log p ( x ) H(X)=-\sum_x p(x)\log p(x) H(X)=−x∑p(x)logp(x)
互信息也可以由熵、条件熵或联合熵组合得到。例如:
I ( X ; Z ) = H ( Z ) − H ( Z ∣ X ) I(X;Z)=H(Z)-H(Z\mid X) I(X;Z)=H(Z)−H(Z∣X)
但 LLM 的隐藏状态 Z Z Z 不是低维离散变量,而是连续的高维向量。严格来说,连续变量对应的是微分熵;而在工程测量中,研究者通常会先通过某种方式把连续表示转化为一个可计算的离散或软离散概率分布,再估计熵与互信息。
最朴素的方法是网格划分,也就是把连续空间切成一个个小格子,然后统计样本落入每个格子的频率。这个方法在低维空间中很直观,但一旦来到 LLM 的隐藏状态空间,就会迅速崩溃。假设一个隐藏向量有 4096 维。即使每个维度只粗略分成 10 个区间,总格子数也会达到 10 4096 10^{4096} 104096。
这是一个远远超过任何可采样规模的数字。即便我们拿到几万、几十万个 token 的前向传播表示,相对于这个巨大空间也几乎只是几个孤立点。绝大多数格子为空,少数非空格子的计数也极低。此时估计结果主要反映采样稀疏性和网格划分方式,而不是模型表征的真实结构。
这就是高维概率估计中最典型的维数灾难。
几类常见的概率与互信息估计方法
为了绕开固定网格的灾难,统计学和机器学习领域发展出多种不同的熵与互信息估计策略。它们各有优点,也各有在 LLM 场景下难以承受的代价。
K 近邻估计:用邻居密度替代固定网格
一类方法是 K 近邻估计,不再预先划定网格,而是看每个样本点附近的局部密度:如果一个点到第 K K K 个邻居的距离很短,说明它周围样本密集,局部概率密度较高;反之则密度较低。
经典的 Kozachenko--Leonenko 熵估计器和 Kraskov--Stögbauer--Grassberger(Estimating Mutual Information)互信息估计器都属于这一思想脉络。
相比网格法,K 近邻方法更能适应数据的局部几何结构。但它并不天然免疫高维灾难。在高维空间中,距离会出现集中现象,近邻和远邻之间的相对差异变小;同时,若要在大量 token 表示上计算两两距离,内存和时间成本也会迅速膨胀。
所以,K 近邻估计在中低维连续变量分析中很有价值,但在需要横跨大量模型、层数、checkpoint 和数据切片的 LLM 分析中,往往很难直接扩展。
神经互信息估计:用一个学习器估计另一个学习器
神经互信息估计方法,例如 MINE(MINE: Mutual Information Neural Estimation),把互信息估计转化为一个优化问题。它训练一个 critic 网络,通过变分下界逼近互信息。这种方法非常符合深度学习时代的思路:既然目标变量是高维连续表示,那就用神经网络去学习它们之间的依赖关系。
MINE 的优势在于表达能力强,可以处理复杂的高维变量。但它的代价也很明显:每一次估计都需要额外训练一个网络,估计结果依赖 critic 的结构、负样本构造、优化稳定性和下界松紧。对于需要频繁评估大量模型状态的 LLM 研究来说,这种额外训练成本很难忽略。
换言之,它适合做精细分析,但未必适合做大规模扫描。
参数化密度估计:先假设分布,再拟合参数
还有一类方法是显式拟合概率密度模型。典型例子包括高斯混合模型(GMM)和归一化流(Normalizing Flow)。
- GMM 假设数据由多个高斯分布混合而成,可以通过 EM 算法等方法拟合参数。但在高维空间中,协方差矩阵参数量巨大,拟合容易不稳定,也可能引入过强的分布假设。
- 归一化流比 GMM 更灵活。它通过可逆变换把简单基分布映射到复杂分布,理论表达能力更强。但它同样需要额外训练,并且会受到可逆结构、训练稳定性、似然目标和高维扩展性的限制。
因此,这类方法的问题不只是"能不能拟合",而是当我们需要反复比较大量 LLM 表征时,是否值得为每次估计额外训练一个密度模型。
Soft Entropy Estimator:一种可扩展的工程折中
面对 LLM 规模的隐藏状态,我们需要的往往不是一个完美恢复连续概率密度的估计器,而是一种足够稳定、足够便宜、足够可比较的近似方法。
软熵估计器(Soft Entropy Estimator,出自 https://henryconkl.in/posts/so-u-want/)的价值正体现在这里。它提供了一种实用折中:不直接恢复连续空间中的真实密度,而是通过随机锚点和软分配,把高维连续表示映射成一个离散概率分布,再计算 Shannon entropy。
它可以被理解成一种"软直方图":传统直方图把每个样本硬塞进某一个 bin,而软熵估计器让每个样本按相似度把概率质量分配给许多随机锚点。这样既避免了高维固定网格的稀疏灾难,又保留了直方图方法中"先构造离散分布,再计算熵"的可解释性。
下面结合 https://github.com/hcoxec/soft_h/blob/main/soft_entropy/pytorch.py 中的实现,描述它的核心逻辑。
第一步:把隐藏向量归一化到单位超球面
给定一批 token 的隐藏状态矩阵 Z Z Z,形状为 [ n , d ] [n, d] [n,d],其中 n n n 是 token 数, d d d 是隐藏维度。首先对每个 token 向量做 L2 归一化:
Z ˉ i = Z i / ∣ ∣ Z i ∣ ∣ 2 \bar{Z}_i = Z_i / ||Z_i||_2 Zˉi=Zi/∣∣Zi∣∣2
归一化后,所有 token 表示都落在 d d d 维单位超球面上。这样可以减少向量长度差异对熵估计的影响,让估计更关注表示方向,即语义或几何结构上的相对差异。
这也意味着:软熵估计器测量的不是隐藏向量在完整欧氏空间中的原始分布,而是归一化后方向分布的散布程度。
第二步:在同一超球面上采样随机锚点
接着,在同一个 d d d 维单位超球面 S d \mathbb{S}^{d} Sd 上生成 m m m 个随机锚点:
W = { W 1 , W 2 , . . . , W m } , ∣ ∣ W j ∣ ∣ 2 = 1 W = \{W_1, W_2, ..., W_m\}, ||W_j||_2 = 1 W={W1,W2,...,Wm},∣∣Wj∣∣2=1
为什么必须"借道"正态分布来实现超球面上的"均匀"?这是一个很有趣的高维几何坑。
- 如果想在 2 维的圆或者 3 维的球面上均匀撒点,可能会想直接在 [ − 1 , 1 ] [-1, 1] [−1,1] 之间均匀随机生成坐标 ( x , y , z ) (x, y, z) (x,y,z),然后除以长度归一化就行。
- 但在 4096 维的高维空间里,如果用"均匀分布(Uniform Distribution)"生成各个维度的坐标然后再归一化,这些点会严重向超立方体的"角(Corners)"聚集,根本无法在超球面上做到真正的"均匀"。
为了在 d d d 维超球面上获得绝对均匀的随机点,唯一的标准数学做法就是:先让每个维度都从标准正态分布 N ( 0 , 1 ) \mathcal{N}(0, 1) N(0,1) 中独立采样,然后再对生成的向量进行 L2 归一化(除以它的模长)。正态分布天生的球对称性(Spherical Symmetry)保证了投影到球面上后,点是绝对均匀分布的。
要理解为什么"从多维标准正态分布采样后进行 L2 归一化"等效于"在超球面上绝对均匀采样",我们需要从"概率密度函数"和"高维空间的角落分布"两个维度来破解。
正态分布的合理性
正态分布独一无二的"球对称性"我们可以从标准多维正态分布的概率密度函数(PDF)中直接看出端倪。假设我们有一个 h h h 维的向量 x = [ x 1 , x 2 , . . . , x h ] \mathbf{x} = [x_1, x_2, ..., x_h] x=[x1,x2,...,xh],其中每一个维度都是独立地从标准正态分布 N ( 0 , 1 ) \mathcal{N}(0, 1) N(0,1) 中采样的。那么多维联合概率密度函数就是各个维度概率密度的乘积:
f ( x ) = f ( x 1 ) f ( x 2 ) ⋯ f ( x h ) = ( 1 2 π e − 1 2 x 1 2 ) × ⋯ × ( 1 2 π e − 1 2 x h 2 ) = 1 ( 2 π ) h / 2 exp ( − 1 2 ( x 1 2 + x 2 2 + ⋯ + x h 2 ) ) = 1 ( 2 π ) h / 2 exp ( − 1 2 ∥ x ∥ 2 ) \begin{aligned} f(\mathbf{x}) & = f(x_1)f(x_2)\cdots f(x_h) \\ & = \left( \frac{1}{\sqrt{2\pi}} e^{-\frac{1}{2}x_1^2} \right) \times \cdots \times \left( \frac{1}{\sqrt{2\pi}} e^{-\frac{1}{2}x_h^2} \right) \\ & = \frac{1}{(2\pi)^{h/2}} \exp\left(-\frac{1}{2}(x_1^2 + x_2^2 + \dots + x_h^2)\right) \\ & = \frac{1}{(2\pi)^{h/2}} \exp\left(-\frac{1}{2} \|\mathbf{x}\|^2\right) \end{aligned} f(x)=f(x1)f(x2)⋯f(xh)=(2π 1e−21x12)×⋯×(2π 1e−21xh2)=(2π)h/21exp(−21(x12+x22+⋯+xh2))=(2π)h/21exp(−21∥x∥2)最后一行生成点 x \mathbf{x} x 的概率密度,仅仅取决于它到原点的距离(模长 ∥ x ∥ \|\mathbf{x}\| ∥x∥),而与它的方向(角度)完全无关。这在几何上被称为"旋转不变性(Rotational Invariance)"或"球对称性(Spherical Symmetry)"。
在所有连续概率分布中,只有独立的正态分布组合在一起能产生完美的球对称。既然生成的所有点在任何方向上的概率都是绝对平等的,那么当我们进行 L2 归一化(即 x ∥ x ∥ \frac{\mathbf{x}}{\|\mathbf{x}\|} ∥x∥x,强行把所有点按原点方向拉回、或者推到半径为 1 的单位球面上)时,它们在球面上的分布自然就是绝对均匀的。
反直觉的均匀分布
为什么最"朴素"的均匀分布反而不均匀?如果抛开正态分布,第一直觉往往是如果要均匀,直接在每个维度上用 [ − 1 , 1 ] [-1, 1] [−1,1] 的均匀分布(Uniform Distribution)采样,然后归一化不就行了?实际上,在 2 维空间(正方形)里,这看起来似乎可行。但在 LLM 的 4096 维空间里,这会导致一场灾难。
在 [ − 1 , 1 ] [-1, 1] [−1,1] 区间独立采样,几何上等价于在一个超立方体(Hypercube)内均匀撒点,而不是在一个球体内撒点。随着维度 h h h 越来越高,超立方体的"体积"会疯狂地向它的"角"集中。
- 在 2维(正方形)中,角到原点的距离是 1 2 + 1 2 = 1.414 \sqrt{1^2+1^2} = 1.414 12+12 =1.414。
- 在 4096 维(超立方体)中,角到原点的距离是 1 2 × 4096 = 64 \sqrt{1^2 \times 4096} = 64 12×4096 =64。
当在高维超立方体里均匀撒点时,几乎所有的点都会落在那 2 4096 2^{4096} 24096 个长长的"角"上(因为那里的体积最大)。当再把这些点投影(归一化)到超球面上时,它们会扎堆在对应这些"角"的方向上,形成无数个密集的尖刺,导致球面上的分布极度不均匀。
实现便捷的选择
这里并不是必须使用高斯分布。真正重要的是:锚点方向应当在单位超球面上尽量均匀、各向同性、没有坐标轴偏置。高斯采样再归一化只是最方便、最稳定的实现方式之一,因为它天然满足旋转对称性,而且在 PyTorch 等框架中实现成本很低。
理论上,也可以使用其他能产生球面均匀方向的方法,例如先采样均匀球面方向、使用正交随机矩阵的行向量、采用球面设计(spherical design),或者使用低差异序列构造更均匀的锚点集合。不过,在没有特殊理由时,标准高斯采样加 L2 归一化通常是最稳妥的默认选择。
代码中通常会固定随机种子(模型层级维度,batch,token三个维度统一使用单一的采样点矩阵),使同一套锚点贯穿整个分析过程。这样,不同模型、不同层、不同 checkpoint 的表示都被投射到同一个参照系上。锚点数量 m m m 可以理解成软直方图的 bin 数。 m m m 越大,参照系越细;但计算量也随之增加。工程上常在估计稳定性和计算成本之间折中。
第三步:计算 token 与锚点的余弦相似度
由于 token 表示和锚点都已经 L2 归一化,它们的内积就是余弦相似度:
∑ j Z ˉ i , j W j , k \sum_j \bar{Z}{i,j} W{j,k} j∑Zˉi,jWj,k
得到的相似度矩阵形状为 [ n , m ] [n, m] [n,m]。其中第 i i i 行表示第 i i i 个 token 与所有锚点的相似度。
第四步:用带温度的 softmax 做软分配
对每个 token,把它与所有锚点的相似度通过 softmax 转成概率向量:
Z ˇ i , k = softmax ( ∑ j Z ˉ i , j W j , k τ ) \check{Z}{i,k} = \text{softmax}\left(\frac{\sum_j \bar{Z}{i,j} W_{j,k}}{\tau}\right) Zˇi,k=softmax(τ∑jZˉi,jWj,k)
这里的 τ \tau τ 是温度参数,控制软分配的尖锐程度,合理的 τ \tau τ 应该让 softmax 既能区分相近锚点,又不过度集中:
- τ \tau τ 太大,分配会过于平均,不同 token 的差异被抹平;
- τ \tau τ 太小,分配会过于接近 hard assignment,容易饱和。
参考代码中使用了一个与维度和锚点数相关的校准温度:
τ = 1 / 2 d log m \tau = 1 / \sqrt{2 d \log m} τ=1/2dlogm
其中 d d d 是隐藏维度, m m m 是锚点数量。
这个校准非常关键。高维单位球面上随机向量的点积会集中在 0 附近,且集中程度依赖维度。如果不同 hidden size 使用同一个固定温度,softmax 的尖锐程度就不可比。因此,温度需要随 d d d 和 m m m 调整。
第五步:聚合样本分配,得到锚点上的类别分布
每个 token 都会得到一个在 m m m 个锚点上的概率向量。把所有 token 的软分配取平均(batch和token维度整体平均,层级的保留),就得到整批样本在锚点上的类别分布(categorical distribution):
Z ^ = 1 n ∑ i Z ˇ i , : \hat{Z} = \frac{1}{n} \sum_i \check{Z}_{i, :} Z^=n1i∑Zˇi,:
这可以理解为,在固定锚点参照系下,整个 batch 的表示质量有多少落在第 j j j 个锚点附近。如果所有 token 表示都集中在少数方向上,类别分布会很尖,熵较低;如果 token 表示分散到许多不同方向上,类别分布更接近均匀,熵较高。
第六步:计算 Shannon entropy,并做效率归一化
有了锚点上的离散分布后,就可以计算 Shannon entropy:
H ( Z ^ ) = − ∑ j = 1 n Z ^ j log Z ^ j H(\hat{Z}) = -\sum_{j=1}^n \hat{Z}{j} \log \hat{Z}{j} H(Z^)=−j=1∑nZ^jlogZ^j
这里还需要做一步归一化:把实际熵除以均匀分布下的最大熵。这是因为在信息论中,如果有 m m m 个离散状态(在这里就是论文里撒下的 m m m 个随机锚点),信息熵最大的情况就是"绝对均匀分布"(每个锚点分到的概率完全一样,都是 1 / m 1/m 1/m),此时的最大熵值在数学上严格等于 log ( m ) \log(m) log(m)。
因此,如果直接比较这个绝对数值形式的香农熵,锚点数不同会改变熵的上限。例如 m = 100 m = 100 m=100 时最大熵是 log 100 \log 100 log100,而 m = 10000 m = 10000 m=10000 时最大熵是 log 10000 \log 10000 log10000。即使两个分布的"相对均匀程度"差不多,后者的原始熵也会天然更大。
为了避免把"锚点数量变多"误读成"表示真的更分散",会计算相对的"信息效率(Efficiency)":
H ( Z ) = 1 L log ( m ) ∑ l = 1 L H ( Z l ^ ) \mathcal{H}(Z) = \frac{1}{L \log(m)} \sum_{l=1}^L H(\hat{Z^l}) H(Z)=Llog(m)1l=1∑LH(Zl^)
这等于把各层的香农熵 H ( z ^ l ) H(\hat{z}_l) H(z^l) 加起来,然后除以总层数 L L L(求平均),再除以 log ( m ) \log(m) log(m)(归一化到 0~1)。这个归一化值可以理解为,当前分布达到了理论最大分散程度的多少比例。
- 接近 0,表示样本主要集中在很少几个锚点附近;
- 接近 1,表示样本在锚点参照系下接近均匀分散;
例如 H = 0.8 \mathcal{H} = 0.8 H=0.8,含义不是"有 0.8 bit 信息",而是"当前锚点分布达到了该 m m m 下最大可能熵的约 80%"。
第七步:从软熵到软互信息
这一步引入了标签的概念。当我们考察信息瓶颈(IB)边界下的最优压缩时,这些标签X是模型输入的token ID;但在更广义地分析表征信息时,这些标签可以是其他输入特征,例如属性ID或语言ID。
在得到软熵估计后,可以进一步构造互信息估计。对于离散标签 X X X 和隐藏表示 Z Z Z,互信息可以写成:
I ( X ; Z ) : = H ( Z ) − ∑ x ∈ X P ( X = x ) H ( Z ^ ∣ X = x ) \qquad I(X; Z) := \mathcal{H}(Z) - \sum \limits_{x \in X} P(X=x) \mathcal{H}(\hat{Z}| X=x) I(X;Z):=H(Z)−x∈X∑P(X=x)H(Z^∣X=x)
软熵估计器的做法是:
- 先对全部样本估计 H ( Z ) H(Z) H(Z),也就是不看标签时,所有隐藏表示整体有多分散;
- 再按标签 X = x X = x X=x 分组,分别估计每一组内部的 H ( Z ∣ X = x ) H(Z | X = x) H(Z∣X=x);
- 用标签频率 P ( X = x ) P(X = x) P(X=x) 对这些组内熵加权平均,得到整体条件熵 H ( Z ∣ X ) H(Z | X) H(Z∣X);
- 用总熵减去条件熵,得到互信息估计。
这里"针对每个标签独立计算"容易让人误解。它不是说为每个标签训练一个单独的估计器,也不是说每个标签使用一套新的坐标系;它只是一个分组统计操作。假设 batch 里有三类样本:cat、dog、car。那么:
- H ( Z ) \mathcal{H}(Z) H(Z) 看的是所有样本混在一起时,隐藏表示在锚点上的整体分散程度;
- H ( Z ∣ X = cat ) \mathcal{H}(Z | X = \text{cat}) H(Z∣X=cat) 只取标签为 cat 的样本,看猫这一组内部的表示有多分散;
- H ( Z ∣ X = dog ) \mathcal{H}(Z | X = \text{dog}) H(Z∣X=dog) 只取标签为 dog 的样本,看狗这一组内部的表示有多分散;
- H ( Z ∣ X = car ) \mathcal{H}(Z | X = \text{car}) H(Z∣X=car) 只取标签为 car 的样本,看车这一组内部的表示有多分散。
然后按照每类样本在 batch 中的占比,把这些组内熵加权平均。例如,如果三类样本占比分别是 50%、30%、20%,那么:
H ( Z ∣ X ) = 0.5 H ( Z ∣ cat ) + 0.3 H ( Z ∣ dog ) + 0.2 H ( Z ∣ car ) \mathcal{H}(Z | X) = 0.5 \mathcal{H}(Z | \text{cat}) + 0.3 \mathcal{H}(Z | \text{dog}) + 0.2 \mathcal{H}(Z | \text{car}) H(Z∣X)=0.5H(Z∣cat)+0.3H(Z∣dog)+0.2H(Z∣car)
互信息衡量的是知道标签以后,表示分布的不确定性减少了多少。
- 如果不同标签的表示分布明显分开,那么所有样本混在一起时 H ( Z ) \mathcal{H}(Z) H(Z) 很大,但每个标签内部的 H ( Z ∣ X = x ) \mathcal{H}(Z | X = x) H(Z∣X=x) 较小,于是 I ( X ; Z ) I(X; Z) I(X;Z) 较大。这说明隐藏表示中包含了很多关于标签的信息。
- 如果不同标签的表示混在一起,知道标签以后也不能显著缩小表示分布,那么 H ( Z ) \mathcal{H}(Z) H(Z) 和 H ( Z ∣ X ) \mathcal{H}(Z | X) H(Z∣X) 差不多,互信息就较小。
这对应着,先调用一次 soft_entropy(z) 得到整体熵,再对每个 label 的子集调用 soft_entropy(z[mask]),最后按标签占比加权。
不过这里有一个实现细节很重要:如果要让 H ( Z ) \mathcal{H}(Z) H(Z) 和 H ( Z ∣ X = x ) \mathcal{H}(Z | X = x) H(Z∣X=x) 可比,最好使用同一套锚点和同一温度。如果每次调用 soft_entropy 都重新生成锚点,哪怕随机种子相同,维度一致时通常能复现同一组锚点,但更稳妥的工程做法是显式生成一次锚点,然后在总熵和各条件熵中复用。否则,互信息中的"总熵"和"条件熵"可能不是在完全相同的离散参照系上计算出来的,数值解释会变弱。
为什么随机锚点可以用于比较?
一个自然的问题是:既然锚点是随机生成的,为什么可以用它们来做熵估计?换句话说,随机锚点为什么能替代传统直方图里的固定网格?软熵估计器并不是要精确恢复连续空间中的真实概率密度,而是要构造一个稳定的、无偏向的离散参照系,用来观察隐藏表示在高维单位球面上的散布程度。传统直方图是固定网格,随机锚点的作用是把"覆盖整个高维空间的规则网格"换成"在球面上抽取一组代表性探针"。每个随机锚点都定义了一个局部方向区域,如果某个 token 表示和某个锚点的余弦相似度高,说明这个 token 位于该锚点附近的方向区域。softmax 软分配则把硬性的"落入哪个格子"改成连续的"更靠近哪些锚点"。因此,随机锚点并不是在猜真实类别,而是在提供一组随机但均匀的测量方向。
这背后的直觉有三点。
- 均匀随机锚点近似提供了一个无坐标偏置的球面覆盖。只要锚点来自各向同性分布,它们整体上不会偏向某些维度或方向。因此,某个区域被分到更多概率质量,主要来自数据本身在该方向附近更集中,而不是来自坐标系设计的偏置。
- 锚点上的平均软分配可以看作一种随机特征化的分布摘要。原始分布是连续的、难以直接估计;但把每个样本对所有锚点的相似度响应收集起来,就得到一个长度为 m 的离散概率向量。这个向量不是原分布本身,而是原分布在一组随机方向探针上的投影摘要。对这个摘要计算熵,就得到一个可比较的"分散程度"指标。
- 锚点数量足够大时,这种随机摘要会变得稳定。单个锚点的位置当然有随机性,但许多锚点的整体统计会平均掉这种偶然性。直观上,m 越大,球面方向被采样得越充分,估计越不依赖某几个偶然锚点。固定随机种子则进一步保证所有模型、层和 checkpoint 都使用同一把"尺子"。
因此,随机锚点能够用于熵估计,并不是因为它们神奇地恢复了真实密度,而是因为它们提供了一套高维中可计算、各向同性、可复用的软分箱机制。它把"估计连续高维密度"这个难题,转化为"比较样本在一组均匀随机方向上的响应分布有多分散"。
最后,温度参数仍然很关键。在高维空间中,随机向量之间的点积会集中。这里的"集中"指的是:如果两个单位向量都是随机方向,那么它们的余弦相似度通常会非常接近 0,而且维度越高,这种接近 0 的趋势越明显。直观地说,高维空间里绝大多数随机方向彼此都近似正交;不会像二维或三维空间那样,经常出现明显"很近"或"很远"的方向。这意味着大多数随机相似度都挤在 0 附近,差异非常小。这会直接影响 softmax。如果直接把这些很小、很集中的相似度送进 softmax,分配可能过于平均,所有锚点看起来都差不多;但如果温度设得太小,又会把微小差异过度放大,使分配接近 hard assignment。因此,不同 hidden size 下不能随便使用同一个温度。维度越高,随机点积的自然波动越小,温度也需要相应校准。这就是前面使用特定温度参数的原因:它试图根据维度 d d d 和锚点数 m m m 调整 softmax 的分辨率,让软分配既不会过度平均,也不会过度饱和。
因此,软熵估计器的稳定性来自三者共同作用:均匀随机锚点提供参照系,固定种子保证可比性,温度校准保证软分配不过度平滑或饱和。
从软熵估计到信息平面
软熵估计器的意义不在于给出一个绝对精确的概率密度答案,而在于它足够便宜,可以反复运行。这使研究者可以在大量 LLM 上估计:
- 表征保留了多少输入信息;
- 表征保留了多少与预测目标相关的信息;
- 训练过程中这些信息如何变化;
- 不同模型规模、不同 checkpoint、不同后训练方式之间的信息结构有何差异。

这正是 Learning is Forgetting: LLM Training as Lossy Compression 中所做的事情。他们将 LLM 的预训练过程投射到信息平面上:
- 横轴近似表示模型表征中保留的输入信息,也就是复杂度;
- 纵轴近似表示模型表征中与预测目标相关的信息,也就是预测相关性。
Optimality = Expressivity Complexity = I ( Y ; Z ) I ( X ; Z ) \text{Optimality} = \frac{\text{Expressivity}}{\text{Complexity}} = \frac{I(Y;Z)}{I(X;Z)} Optimality=ComplexityExpressivity=I(X;Z)I(Y;Z)
二者的比值可以理解为模型表征的:
- "信息性价比",衡量了模型每保留 1 bit 的输入细节(复杂度),能换来多少 bit 的预测能力(表达力);
- 逼近最优边界的度量:在给定的预测能力下,模型保留的输入信息越少(分母越小),这个比值就越大。当这个比值趋近于 1.0 时,说明模型保留的所有信息都恰好是用于预测目标的,没有任何冗余,此时模型就抵达了信息瓶颈的理论最优边界。
在这个视角下,训练不再只是 loss 曲线上的下降过程,而是一条表征信息结构的运动轨迹。这项研究最有启发性的观察,是 LLM 预训练似乎经历了两个阶段。
- 第一阶段:拟合阶段。训练早期,模型还没有掌握语言的基本统计规律。为了快速降低预测损失,它需要吸收大量输入信息。在信息平面上,这表现为预测相关信息迅速上升,同时输入信息也同步上升。模型像海绵吸水一样,把大量局部细节、表面模式和语料统计都吸入隐藏表示中。这个阶段的关键词是:扩张。模型还没有能力区分哪些信息真正有助于预测,哪些只是偶然相关或冗余细节。因此,它会先尽可能多地保留信息。
- 第二阶段:压缩阶段。当预测 loss 的下降开始变慢,模型已经掌握了相当一部分语言结构之后,训练轨迹会发生变化。预测相关信息趋于稳定,但输入信息开始下降。也就是说,模型在维持预测能力的同时,逐渐丢弃一部分与预测目标弱相关的局部细节。这个阶段的关键词是:压缩。从信息瓶颈的角度看,这意味着模型不再只是记住训练输入,而是在学习更紧凑、更抽象、更可泛化的表示。它保留的是对下一个 token 预测有用的结构,而不是输入中的所有细节。这就是"Learning is Forgetting"这个标题的含义:学习并不只是增加记忆,也包括遗忘。有效的学习,是在保留任务相关信息的同时,主动丢弃不必要的信息。
论文中的另一个重要观察是,并非所有模型都能顺利进入有效压缩阶段。较大的模型,例如 7B 和 32B 规模模型,在信息平面上更容易走出"先扩张、后压缩"的轨迹,并逐渐靠近信息瓶颈意义上的较优边界。而较小模型,例如 1B 规模模型,在完成早期拟合后,往往难以形成稳定的压缩轨迹,可能在信息平面上出现震荡,距离较优压缩边界更远。这并不应被简单解释为"小模型只能死记硬背"。更谨慎的说法是:在给定数据复杂度下,模型容量可能影响其能否形成接近信息瓶颈边界的压缩表征。容量不足时,模型也许更难从海量局部细节中抽取稳定、可泛化的预测结构。换句话说,压缩能力本身可能也是一种规模涌现出来的表征能力。
压缩结构能预测下游能力吗?
这项研究还进一步分析了 47 个开放权重模型,比较它们的信息结构与下游 benchmark 表现之间的关系。结果显示,预训练语料上的最优压缩程度,与若干需要事实知识、数学能力和推理能力的 benchmark 表现存在显著相关。例如 MMLU、BBH、MATH 等任务,都更依赖模型在预训练中形成的通用压缩表征。
但这种关系并不适用于所有能力。对于 IFEval 这类强调严格指令遵循的任务,预训练压缩程度并不能很好解释性能差异。相反,人类偏好信息,即 RLHF、DPO 等后训练阶段注入的偏好信号,对这类能力更关键。
这给出了一个很有解释力的区分:
- 预训练压缩决定模型"知道什么";
- 后训练偏好信息影响模型"如何回答"。
前者更接近知识、推理和泛化能力,后者更接近指令遵循、格式控制和对齐行为。
当然,这里需要强调:这些结论主要来自跨模型相关分析,并不等同于严格因果证明。我们不能简单地说"压缩导致能力提升",更准确的说法是:更接近信息瓶颈意义上最优压缩的模型,往往也在若干下游任务上表现更好。
这对 LLM 研发意味着什么?
如果 LLM 训练确实可以被理解为一种有损压缩过程,那么这会改变我们观察训练的方式。
过去,我们主要看 loss、perplexity、benchmark 分数和人工评测。它们告诉我们模型表现如何,却未必告诉我们模型内部表征发生了什么。
信息论指标提供了一种补充视角:
- 模型是否只是继续记住更多输入细节?
- 它是否开始丢弃冗余信息?
- 它的预测能力是否已经稳定,而复杂度仍在下降?
- 不同规模模型是否在形成类似的压缩轨迹?
- 某个 checkpoint 是否已经接近较优压缩区域?
如果这些指标足够稳定,它们未来可能成为低成本的训练诊断工具。例如,用来辅助判断预训练是否继续值得进行,或者在多个 checkpoint 中筛选更有潜力的模型。
不过,目前仍应把这类指标看作研究工具,而不是成熟的工业停止准则。软熵估计器依赖锚点数量、温度参数、采样数据、层选择和估计方式;信息平面上的轨迹也需要结合 loss 与下游评测一起解释。
它打开了一扇窗,但还不是最终答案。
小结
从概率估计到 LLM 表征分析,这条路径揭示了一个重要事实:我们想理解大模型,不能只看它输出了什么,也要看它在内部如何组织信息。
网格法告诉我们,高维空间不能用低维直觉硬切。K 近邻方法告诉我们,可以用局部密度替代固定坐标系。神经互信息估计告诉我们,可以用学习器逼近复杂依赖。参数化密度模型告诉我们,可以用显式分布假设换取可计算性。
而软熵估计器则提供了一个适合 LLM 规模的工程折中:用固定随机锚点和软分配,把高维连续表示转化为可比较的离散熵估计。
在这个工具帮助下,研究者得以观察到 LLM 训练中的一个宏观图景:模型先扩张,吸收大量输入信息;再压缩,遗忘与预测无关的细节;最终形成更紧凑、更预测相关的表征。
这也是"LLM 训练是有损压缩"这一说法最有价值的地方。它不是说模型简单地把互联网语料压成了参数文件,而是说:有效的预训练可能是在高维表征空间中,学习一种面向预测目标的最优信息取舍。
学习,不只是记住;学习也意味着遗忘。
进一步阅读
- The Information Bottleneck Method 提出信息瓶颈框架:在压缩输入信息的同时保留与目标变量相关的信息。
- Opening the Black Box of Deep Neural Networks via Information 用信息平面分析深度网络训练,提出拟合阶段与压缩阶段的经典叙事。
- On the Information Bottleneck Theory of Deep Learning 对深度学习中的信息瓶颈解释提出质疑,是理解该理论边界的重要论文。