Skip to content

4.7 信息论与机器学习 ​

前面六节建立了信息量的定义、性质、极限与误差指数,这些内容以理论分析为主。本节回到机器学习,整理信息论的三个用途:作为训练目标的一部分,作为表示学习的准则,作为泛化分析的工具。

作为训练目标,交叉熵损失、KL 正则与证据下界都以 KL 散度为核心,训练过程可以读成分布之间距离的最小化。作为表示学习的准则,信息瓶颈用互信息描述压缩与预测的权衡,对比学习用互信息的变分下界构造训练目标。作为分析工具,PAC-Bayes 界与互信息泛化界用 KL 散度度量模型复杂度,给出测试误差与训练误差之差的界。

一个反复出现的困难也值得提前说明:高维连续变量之间的互信息无法直接计算,只能用变分下界估计。4.6 节的证据下界、大偏差与 Gibbs 变分在这里以估计器的形式重新出现,而估计的紧致程度决定了信息论准则在实践中能做多精确。本节按目标函数、表示学习、估计器、泛化界的顺序展开。

4.7.1 训练目标中的交叉熵与 KL 正则 ​

交叉熵与最大似然 ​

分类模型的训练目标通常写成交叉熵:对样本 x 与标签分布 p,

H(p,qθ)=−∑kp(k)log⁡qθ(k∣x)

其中 qθ 是模型的预测分布。展开这个式子:

H(p,qθ)=H(p)+D(p∥qθ)

标签分布的熵 H(p) 与参数无关,因此最小化交叉熵等价于最小化 D(p∥qθ)。独热标签的熵为零,两个目标数值相同;软标签(蒸馏、标签平滑)下两者相差一个常数,梯度一致。

从最大似然的角度看,同一件事还有第三种读法:最小化交叉熵就是最大化训练集的对数似然(2.10 节)。三种读法在选择训练目标时给出不同的推广方向。需要模型覆盖标签分布的多个模态时用正向 KL(D(p∥qθ),即交叉熵);需要模型在标签给出高概率的区域集中时用反向 KL;需要对称性时换成 JS 散度(4.2 节给出了这两种方向的差别与适用场景)。

训练中的 KL 正则 ​

许多训练目标在损失之外加上 KL 惩罚,形式为

L=L任务+βD(qθ∥qref)

其中 qref 是参考分布,β 控制惩罚强度。这一项的含义是把模型限制在参考分布附近:β 越大,两个分布允许的偏离越小。三个典型场景。

知识蒸馏:学生模型在软标签上训练,参考分布是教师模型的输出。KL 项传递的不只是标签,还有教师对各候选的相对偏好(暗知识),在同样的数据量下给学生更多的监督信息。

策略优化中的信任域:强化学习更新策略时,KL 惩罚限制新策略与旧策略(或参考策略)的偏离,防止一次更新把分布推到完全不同的区域。这一约束的物理含义是控制每步的信息量:单步允许的分布变化对应互信息或 KL 的预算。

生成模型的先验约束:变分自编码器的编码分布被拉向先验,扩散模型的训练目标可以整理成去噪得分匹配与 KL 的组合。这类约束的作用在下一节以率的形式重新出现。

为什么 KL 惩罚常用反向方向

D(qθ∥qref) 是反向 KL:它惩罚模型在参考分布概率很低的区域放置概率,允许模型忽略参考分布的部分支撑。在蒸馏与信任域场景中,这一行为正是目标(学生不必覆盖教师的全部输出模式,只需在教师认可的区域保持接近)。需要完整覆盖时改用正向方向,代价是训练难度上升。

4.7.2 变分推断的信息论读法 ​

证据下界的三种写法 ​

2.12 节介绍了变分推断的框架:用编码分布 q(z∣x) 近似后验 p(z∣x),最大化证据下界(ELBO)。把下界写出来:

ELBO(x)=Eq(z∣x)[log⁡p(x∣z)]−D(q(z∣x)∥p(z))

它与对数证据的关系是

log⁡p(x)=ELBO(x)+D(q(z∣x)∥p(z∣x))

差距由近似后验与真实后验之间的 KL 给出。最大化 ELBO 同时做两件事:提高重构项,把近似后验推向真实后验。

换成信息论的语言,两项各有名字。第一项是失真(distortion):给定隐变量后重建数据的对数似然,最大化它等于最小化重构误差。第二项是率(rate)的上界:对所有样本取期望,

Ep(x)[D(q(z∣x)∥p(z))]=I(X;Z)+D(q(z)∥p(z))

其中 q(z)=Ep(x)[q(z∣x)] 是聚合后验。第一项是编码器携带的互信息,第二项是聚合后验与先验的差距。忽略最后一项,ELBO 的期望可以写成

E[ELBO]=E[log⁡p(x∣z)]−I(X;Z)−D(q(z)∥p(z))

重构成正比于负失真,KL 项构成率的惩罚。变分自编码器因此是在失真与率之间做权衡:率是编码器保留了多少关于输入的信息,失真是这些信息对重建的贡献。这与 4.4 节率失真理论的形式一致,β-VAE 的目标

E[log⁡p(x∣z)]−βD(q(z∣x)∥p(z))

就是率失真的拉格朗日形式,β 是乘子。β>1 使率低于标准下界的最优值,得到更紧的表示;β<1 允许更高的率,重构更精确。下一段代码在可解析的高斯玩具模型上验证上面的分解关系。

玩具模型验证 ​

取 p(x)=N(0,1),编码分布 q(z∣x)=N(ax,σ2),先验 p(z)=N(0,1)。这一设定下所有量都有闭式:q(z)=N(0,a2+σ2),信道是高斯信道,互信息为

I(X;Z)=12log⁡(1+a2σ2)

失真取重建误差 E[(x−z)2],在 a=1 时等于 σ2。

python
import numpy as np

def kl_gauss(m1, s1, m2, s2):
    """两个一维高斯分布之间的 KL 散度"""
    return np.log(s2 / s1) + (s1 ** 2 + (m1 - m2) ** 2) / (2 * s2 ** 2) - 0.5

# 分解验证:E_x[D(q(z|x)||p(z))] = I(X;Z) + D(q(z)||p(z))
a, sigma = 0.8, 0.5
I_analytic = 0.5 * np.log(1 + a ** 2 / sigma ** 2)          # 高斯信道互信息
Dq = kl_gauss(0.0, np.sqrt(a ** 2 + sigma ** 2), 0.0, 1.0)  # D(q(z)||p(z))
rate_analytic = kl_gauss(0.0, sigma, 0.0, 1.0) + 0.5 * a ** 2  # E_x D(q(z|x)||p(z))
print(f"a = {a}, sigma = {sigma}")
print(f"  I(X;Z) = {I_analytic:.6f},D(q(z)||p(z)) = {Dq:.6f}")
print(f"  两者之和 = {I_analytic + Dq:.6f},与 E_x D(q(z|x)||p(z)) = {rate_analytic:.6f} 一致")

# 蒙特卡洛核对
rng = np.random.default_rng(0)
x = rng.normal(size=200000)
print(f"  蒙特卡洛估计 = {np.mean(kl_gauss(a * x, sigma, 0.0, 1.0)):.6f}")

# 率失真权衡:a = 1 时,率与失真的组合随 sigma 变化
print("\nsigma    失真(= sigma^2)   率(= I(X;Z), 自然对数单位)")
for sigma in [0.2, 0.5, 1.0, 2.0]:
    print(f"  {sigma:.1f}       {sigma ** 2:.2f}                {0.5 * np.log(1 + 1 / sigma ** 2):.4f}")
# 失真增大时率下降,与 4.4 节率失真曲线的单调形状一致

输出确认分解关系在小数点后三位一致,蒙特卡洛估计与解析值相符;最后一组数据显示率随失真增大而下降:失真 0.04 对应率 1.63,失真 4 对应率 0.11。这条曲线就是率失真函数的形状,编码器通过调节噪声水平在曲线上的不同点之间移动。

4.7.3 信息瓶颈 ​

问题设定 ​

给定输入 X 与目标 Y,希望学到一个表示 T(编码器的输出)满足两条要求:保留关于 Y 的信息,丢弃关于 X 的其余信息。两条要求写成一个带约束的优化问题:

minp(t∣x) I(X;T)−βI(T;Y)

第一项要求压缩,第二项要求预测能力,β 是权衡参数。约束形式

maxp(t∣x) I(T;Y)s.t.I(X;T)≤R

与 4.4 节的率失真问题同构:那里的失真函数换成 −I(T;Y),率的预算换成表示允许携带的信息量。最优解满足类似的临界点条件,在给定压缩预算下保留对目标最相关的信息。

与其他方法的联系 ​

信息瓶颈的三条推论。

充分统计量的推广。若 minI(X;T) 在约束 I(T;Y)=I(X;Y) 下求解,最优 T 就是 Y 的充分统计量(2.9 节):它保留全部相关信息,同时压缩到最小。信息瓶颈把这一要求放松为可调权衡,在信息不足时给出部分保留的解。

确定性编码的限制。若限制 T=f(X) 为确定性映射,则 I(X;T)=H(T),压缩项变成表示本身的熵。离散化与量化决定 H(T) 的大小,这一情形下的最优映射由聚合聚类给出,与聚类算法的目标一致。

深度网络的信息平面。把每一层的输出看作 T,分别计算 I(X;T) 与 I(T;Y),可以画出网络训练轨迹在信息平面上的移动。早期提出的结果报告了两个阶段:先快速提高 I(T;Y),再缓慢压缩 I(X;T)。这一图景在概念上有吸引力,其后续讨论集中在估计的可靠性上:高维连续变量的互信息只能用下界估计,轨迹的形状对估计器与批大小敏感。把信息瓶颈用于实际训练时,通常采用变分近似(把 I(T;Y) 换成变分下界,把 I(X;T) 换成编码分布到先验的 KL),得到的结构与变分自编码器相同,差别在于监督信号来自目标 Y 而不是重构。

4.7.4 互信息估计 ​

困难所在 ​

除了离散或高斯等可解析情形,互信息没有闭式。直接估计面临两个问题。

第一,互信息要对数密度比 log⁡p(x,z)p(x)p(z) 的期望,密度比在尾部可能极大,采样估计的方差随时可能发散。第二,高维情形下估计所需样本量随维数增长极快:对独立同分布样本,任何估计器在维数较高时需要指数级样本才能给出非平凡精度。这解释了一个常见现象:不同论文报告的互信息数值不可直接比较,因为估计器、批大小与数据变换都不同。

Donsker-Varadhan 下界与 MINE ​

可用的工具是变分下界。对任意函数 F(x,z),

I(X;Z)≥Ep(x,z)[F(x,z)]−log⁡Ep(x)p(z)[eF(x,z)]

等号在 F=log⁡p(x,z)p(x)p(z)+c 时取到。右端称为 Donsker-Varadhan 表示,它与 4.6 节推导速率函数时用到的对数矩生成函数的变分表示是同一个不等式,只是把随机变量换成对数密度比。MINE(mutual information neural estimation)把 F 参数化为神经网络,用样本估计两端期望,对参数做梯度上升,得到互信息的估计值。训练过程中需要两次采样:联合分布的样本(正样本对)与边缘乘积分布的样本(独立配对)。

实践中的问题是方差:指数项对 F 的大值敏感,批内极值会主导估计。常用处理包括对 F 做滑动平均来稳定梯度、用有界或谱归一化的网络限制取值范围、以及改用其他下界形式。

其他下界形式 ​

把 f 散度的变分表示代入并限制函数类,可以得到不同性质的界。常用的一个形式是

I(X;Z)≥Ep(x,z)[F(x,z)]−e−1Ep(x)p(z)[eF(x,z)]

它的方差更低,代价是界更松。更一般地,4.2 节的 f 散度族每个成员都给出一个互信息下界,它们的紧致程度与数值稳定性各不相同。选择界的原则是把估计误差与下界的松紧一起考虑:一个紧但方差大的界在有限样本下反而更差。

下列代码在二维高斯模型上演示这一构造。设 X 与 Z 的相关系数为 ρ,真实互信息为 −12log⁡(1−ρ2);把 F 限制为二次型,用数值积分最大化 Donsker-Varadhan 目标,观察最优解与理论值的关系。

python
import numpy as np
from scipy import optimize, stats

rho = 0.7
true_mi = -0.5 * np.log(1 - rho ** 2)
print(f"真实互信息 I(X;Z) = {true_mi:.6f} 自然对数单位 = {true_mi / np.log(2):.6f} 比特")

# 在网格上用数值积分计算 DV 目标:E_p[F] - log E_{p*p}[e^F],F 取二次型
g = np.linspace(-4, 4, 161)
h = g[1] - g[0]
xx, zz = np.meshgrid(g, g, indexing='ij')
p_joint = stats.multivariate_normal.pdf(
    np.stack([xx, zz], axis=-1), mean=[0, 0], cov=[[1, rho], [rho, 1]]) * h ** 2
p_prod = np.outer(stats.norm.pdf(g), stats.norm.pdf(g)) * h ** 2

def negative_dv(theta):
    c1, c2, c3 = theta                       # F = c1 * x * z + c2 * x^2 + c3 * z^2
    F = c1 * xx * zz + c2 * xx ** 2 + c3 * zz ** 2
    return -(np.sum(F * p_joint) - np.log(np.sum(np.exp(F) * p_prod)))

res = optimize.minimize(negative_dv, np.zeros(3), method='Nelder-Mead',
                        options={'xatol': 1e-8, 'fatol': 1e-10, 'maxiter': 4000})
c1, c2, c3 = res.x
print(f"最优评论家:c1 = {c1:.4f}(理论值 rho / (1 - rho^2) = {rho / (1 - rho ** 2):.4f})")
print(f"            c2 = {c2:.4f}, c3 = {c3:.4f}(理论值 -1/2 * (1/(1-rho^2) - 1) = {-0.5 * (1 / (1 - rho ** 2) - 1):.4f})")
print(f"Donsker-Varadhan 下界 = {-res.fun:.6f}(不超过真实值,差距来自数值积分离散化)")
# 最优评论家与对数密度比只差常数,验证了取等号的条件

输出显示最优系数与理论值吻合(c1=ρ/(1−ρ2),c2=c3=−12(11−ρ2−1)),下界数值与真实互信息相差不到千分之一,差值来自网格离散步长。这个演示说明两类事实:评论家取正确函数形式时下界是紧的;离开最优形式后下界的紧致程度下降,这正是实际训练中网络容量与优化质量影响估计数值的原因。

4.7.5 对比学习与 InfoNCE ​

InfoNCE 目标 ​

对比学习使用一个更简单的目标。给定一批样本,每批包含一个正样本对 (x,z)∼p(x,z) 与 K−1 个负样本 zj(从边缘分布 p(z) 独立抽取),损失为

LInfoNCE=−E[log⁡exp⁡f(x,z)exp⁡f(x,z)+∑j=1K−1exp⁡f(x,zj)]

f 是相似度函数(评论家),通常取编码器输出的内积并除以温度参数。这一目标是判别式的:它只要求正样本对的评分高于负样本对,与 MINE 的密度比估计相比更稳定。

与互信息的关系 ​

InfoNCE 损失与互信息之间的结论是

I(X;Z)≥log⁡K−LInfoNCE

差号两侧的含义值得拆开看。右端随负样本数 K 对数增长:可用负样本越多,界能覆盖的信息量越大。损失越小,正样本对在评分上的可分性越高,界越紧。两个推论指导实践:增加批大小等价于增加 K,从而抬高界的上限,这是对比学习方法重视大批训练的原因;损失把它读作互信息的近似时,K 较小时数值被系统性低估,不能与真实互信息直接比较。

温度参数决定评分的尺度。温度低使 softmax 接近硬分配,训练集中在最难的负样本上,梯度方差大;温度高使分布平滑,负样本的贡献更均衡。这一取舍与 4.3 节指数族中自然参数的尺度问题同源:评分函数的尺度决定了目标函数关注哪个区域的样本。

与其他目标的统一 ​

几个经典目标可以放在同一框架下。

噪声对比估计(NCE)用逻辑回归区分数据与噪声样本,是 InfoNCE 在 K=2(一个正样本、一个负样本)与二分类形式下的特例。对比预测编码(CPC)把 x 取为历史上下文、z 取为未来片段,目标是最大化两者的互信息下界。图像对比学习把同一图像的两个增强视图作为正样本对,不同的图像作为负样本,目标形式与上式相同。这些方法的共同结构是:用可得的负样本构造判别任务,把互信息的下界转化为容易优化的分类损失,信息论的结论提供了负样本数量与可达信息量的对应关系。

下列代码在离散信道上验证 InfoNCE 下界。输入 X 在 16 个符号上均匀取值,Z 以概率 1−ϵ 等于 X,以概率 ϵ 均匀地取其他符号;真实互信息有闭式,评论家取对数条件概率,观察 log⁡K−L 随 K 的变化。

python
import numpy as np
from scipy.special import logsumexp

m, eps = 16, 0.3
p_flip = eps / (m - 1)
H_Z = np.log(m)
H_Z_given_X = -((1 - eps) * np.log(1 - eps) + (m - 1) * p_flip * np.log(p_flip))
I_true = H_Z - H_Z_given_X
print(f"I(X;Z) = {I_true:.6f} 自然对数单位 = {I_true / np.log(2):.6f} 比特,log m = {np.log(m):.4f}")

p_zx = np.full((m, m), p_flip)      # p_zx[z, x] = P(Z = z | X = x)
np.fill_diagonal(p_zx, 1 - eps)

rng = np.random.default_rng(1)
trials = 20000
x = rng.integers(0, m, size=trials)
flip = rng.random(trials) < eps
z_pos = x.copy()
z_pos[flip] = rng.integers(0, m - 1, size=int(flip.sum()))
z_pos[flip] += (z_pos[flip] >= x[flip]).astype(int)   # 保证翻转后不等于原符号

print("K       log K - L       与真实值之差")
for K in [2, 4, 8, 16, 64, 256]:
    z_neg = rng.integers(0, m, size=(trials, K - 1))
    z_all = np.concatenate([z_pos[:, None], z_neg], axis=1)
    scores = np.log(p_zx[z_all, x[:, None]])          # 评论家取 log p(z|x)
    L = float(-np.mean(scores[:, 0] - logsumexp(scores, axis=1)))
    print(f"{K:4d}    {np.log(K) - L:.4f}        {I_true - (np.log(K) - L):+.4f}")
# log K - L 始终不超过真实互信息,且随 K 增大单调逼近
# K = 2 时差距 0.96,K = 256 时缩小到 0.02

输出验证了界的两个性质:log⁡K−L 始终不超过真实互信息 1.349,且随 K 增大单调逼近(K=256 时相差 0.02)。表格还展示了小批训练的低估幅度:K=16 时界只有 1.13,约为真实值的 84%。这解释了为什么对比学习方法的效果对批大小敏感,以及为什么用 InfoNCE 数值报告互信息时需要同时给出 K。

4.7.6 泛化界:PAC-Bayes 与互信息 ​

PAC-Bayes 界 ​

4.6 节的集中不等式控制单个假设的经验误差与真实误差之差;模型选择涉及整个假设类,需要一致性的界。PAC-Bayes 处理的是随机化预测器:算法输出参数分布 Q,训练前固定先验 P,以概率至少 1−δ(对训练集的抽取),

Eh∼Q[L(h)]≤Eh∼Q[L^(h)]+KL(Q∥P)+log⁡(2n/δ)2n

右端由经验误差与复杂度项组成,复杂度项的核是后验与先验之间的 KL:算法通过观察数据把先验更新为后验,KL 度量更新的幅度。这一项的读法与 4.7.1 节的 KL 正则一致,区别在于出现在界的右端而不是损失里,因此可以把界本身当作训练目标:在若干组先验与后验参数化的组合上最小化右端。这种做法在小型网络上得到的界与测试误差接近,说明界在小样本下并非完全空洞。

PAC-Bayes 的证明思路给出了理解界的工具。对固定先验与后验,经验误差与真实误差之差可以用 4.6 节的变分表示控制:把 Gibbs 变分

KL(Q∥P)≥EQ[log⁡ρ]−log⁡EP[ρ]

用于对数似然比,再对假设类取并集界。KL 项从变分表示中自然出现。这一结构也说明界对先验的选择敏感:先验在训练前固定,选择与后验接近的先验会减小 KL。

互信息泛化界 ​

另一类界直接使用数据与模型输出之间的互信息。设训练集 S 与算法输出 W,损失关于 W 有界或在条件方差意义下次高斯,则

E|L(W)−L^(W)|≤2σ2I(S;W)n

含义是:模型输出保留的训练集信息越多,泛化差距的界越大。这一读法与直觉一致:把训练集记住的模型在新数据上表现不稳;带有随机性(如随机初始化、随机扰动、dropout)的算法输出与数据的互信息更小,界更紧。

使用这一结论时有两个前提要检查。第一,I(S;W) 对确定性算法与连续参数取值一般为无穷大(输出完全由数据决定),界失去意义,此时需要把算法随机化或对参数离散化。第二,界中的互信息是算法整体的属性,估计它与估计表示层面的互信息同样困难。因此这类界的角色是解释性的:它把随机化、正则化与稳定性统一在信息量减少这一机制下,并给出定性上正确的方向(随机性增强时泛化差距的界下降)。

三类信息量的作用对比

训练目标中的 KL:优化对象,直接进入梯度,度量模型分布与参考分布的偏离。 表示学习中的互信息:设计准则,用变分下界近似,权衡压缩与预测。 泛化界中的 KL 与互信息:分析工具,出现在界的右端,度量算法对数据的依赖程度。 三者形式相同,位置不同;混用会把优化目标当作保证,或者把分析工具当作可直接优化的损失。

4.7.7 本节小结 ​

信息论在机器学习中的三个位置

本节把前面的信息量落到机器学习的三个位置。目标函数层面,交叉熵等于标签分布的熵加 KL 散度,最小化交叉熵等价于最小化模型与标签分布的距离;KL 正则以参考分布为锚点限制模型的偏离幅度,蒸馏、信任域与生成模型都用这一形式。表示学习层面,ELBO 的期望等于负失真减率,率由编码器互信息构成,聚合后验与先验的 KL 是率的上界;信息瓶颈在压缩与预测之间做权衡,与率失真问题同构;对比学习用 InfoNCE 把互信息的下界转成分类损失,界为 log⁡K 减去损失,负样本数决定界的上限。估计层面,Donsker-Varadhan 表示给出互信息的可训练下界,最优评论家是对数密度比;高维情形下估计所需样本量随维数指数增长,界与真实值之间通常存在不可忽略的差距。分析层面,PAC-Bayes 界用后验与先验的 KL 度量复杂度,互信息泛化界用算法输出与数据的互信息度量稳定性,两者都把 4.6 节的变分表示与集中不等式作为证明工具。

至此信息论在应用层面的内容完成。最后一节处理三个更专门的方向:算法信息论把熵推广到单个对象的描述长度,差分隐私用 KL 的变体定义隐私强度,量子信息论把熵推广到密度矩阵。

练习题 ​

第 1 题 概念推导 ​

证明证据下界的两种分解:其一,log⁡p(x)=ELBO(x)+D(q(z∣x)∥p(z∣x));其二,对所有样本取期望后 E[D(q(z∣x)∥p(z))]=I(X;Z)+D(q(z)∥p(z)),其中 q(z) 是聚合后验,并说明两个分解各自解释了变分自编码器的哪一部分行为。

参考答案

第一个分解:由贝叶斯公式,p(z∣x)=p(x∣z)p(z)/p(x),取对数并整理:

log⁡p(x)=log⁡p(x∣z)+log⁡p(z)−log⁡p(z∣x)

两侧在 q(z∣x) 下取期望:

log⁡p(x)=Eq[log⁡p(x∣z)]−D(q(z∣x)∥p(z))+D(q(z∣x)∥p(z∣x))

前两项是 ELBO,最后一项是近似后验与真实后验的 KL。结论说明最大化 ELBO 的另一个效果是缩小近似后验的误差:ELBO 越小,两者差距越大,下界越松。

第二个分解:把左侧展开:

Ep(x)[D(q(z∣x)∥p(z))]=Ep(x)Eq(z∣x)[log⁡q(z∣x)q(z)]+Ep(x)Eq(z∣x)[log⁡q(z)p(z)]

第一项按定义是 I(X;Z)(对 x 取期望后的 D(q(z∣x)∥q(z)))。第二项中内层期望只依赖 z,联合起来得到 Eq(z)[log⁡(q(z)/p(z))]=D(q(z)∥p(z))。两项相加即得结论。

解释:第一个分解说明 ELBO 是证据的下界,优化它同时在做近似后验的修正。第二个分解说明编码项 D(q(z∣x)∥p(z)) 由两部分组成:编码器携带的互信息(率)与聚合后验偏离先验的程度。当聚合后验与先验接近时,编码项近似等于率,这解释了为什么常规变分自编码器的训练会导致聚合后验向先验靠拢(后验坍缩的一种表现形式),也解释了 β<1 时实际率高于编码项的原因:编码项只是率的上界,多出的部分正是聚合后验与先验的距离。

第 2 题 计算推理 ​

在 4.7.2 节的玩具模型中取 a=1。计算 σ=0.25 与 σ=1 两点的率与失真;若把目标改为 max E[log⁡p(x∣z)]−βD(q(z∣x)∥p(z)),分别说明 β=4 与 β=0.25 会把编码器推向哪一个方向;并解释为什么 β 很大时重构质量下降。

参考答案

两点的率与失真:a=1 时失真为 σ2,率为 12log⁡(1+1/σ2)。

σ=0.25:失真 0.0625,率 12log⁡(1+16)=1.4166 自然对数单位。

σ=1:失真 1,率 12log⁡2=0.3466 自然对数单位。

两点的对比给出率失真曲线的两个位置:低失真伴随高率,高失真允许低率,单调关系与 4.4 节的率失真函数一致。

β 的作用:标准 ELBO 对应 β=1,其最优点在率失真曲线的某一点上。β=4 时 KL 项的权重大,编码器减小 D(q(z∣x)∥p(z))。在这一模型中该项随 a 与 σ 变化,减小它的直接方式是增大 σ、减小 a,也就是降低编码精度,向图的左侧(低率、高失真)移动。β=0.25 时 KL 项权重小,编码器倾向于压低失真,增大 a、减小 σ,向高率、低失真的一端移动。

重构质量下降的原因:失真项 E[(x−z)2] 在 a=1 时等于 σ2,而 KL 项随 σ2 增大而减小。β 很大时两项的最优权衡点移到 σ 较大的位置,编码器在隐空间中注入更多噪声,解码器从含噪编码中重建输入,误差相应上升。这一行为在两个极端上都很明显:β→0 时编码器趋向无损编码(率上限为 I(X;Z) 的最大值),β→∞ 时编码与先验几乎相同,重建接近先验均值。

第 3 题 代码验证 ​

用 4.7.5 节的离散信道模型(m=16,ϵ=0.3),改动两处并观察结果:其一,把 ϵ 改为 0.1,比较真实互信息、以及 log⁡K−L 逼近真实值的绝对与相对差距如何变化;其二,在计算损失时把评论家从 log⁡p(z∣x) 换成未经校准的评分函数(如 z 与 x 是否相等的指示函数乘常数),观察界是否仍然成立、数值是否随 K 单调改善。解释两个现象,并说明第二个实验对实践的含义。

参考答案
python
import numpy as np
from scipy.special import logsumexp

def experiment(m, eps, scorer, K_list, trials=20000, seed=1):
    p_flip = eps / (m - 1)
    H_Z = np.log(m)
    H_Z_given_X = -((1 - eps) * np.log(1 - eps) + (m - 1) * p_flip * np.log(p_flip))
    I_true = H_Z - H_Z_given_X
    p_zx = np.full((m, m), p_flip)
    np.fill_diagonal(p_zx, 1 - eps)
    rng = np.random.default_rng(seed)
    x = rng.integers(0, m, size=trials)
    flip = rng.random(trials) < eps
    z_pos = x.copy()
    z_pos[flip] = rng.integers(0, m - 1, size=int(flip.sum()))
    z_pos[flip] += (z_pos[flip] >= x[flip]).astype(int)
    rows = []
    for K in K_list:
        z_neg = rng.integers(0, m, size=(trials, K - 1))
        z_all = np.concatenate([z_pos[:, None], z_neg], axis=1)
        scores = scorer(x[:, None], z_all, p_zx)
        L = float(-np.mean(scores[:, 0] - logsumexp(scores, axis=1)))
        rows.append((K, np.log(K) - L))
    return I_true, rows

K_list = [2, 16, 64, 256]

# 实验一:eps = 0.1,评论家取 log p(z|x)
I_true, rows = experiment(16, 0.1, lambda x, z, p: np.log(p[z, x]), K_list)
print(f"eps = 0.1:真实互信息 = {I_true:.4f}")
for K, b in rows:
    print(f"  K = {K:4d}: log K - L = {b:.4f},差距 = {I_true - b:+.4f}")

# 实验二:eps = 0.3,评论家换成指示函数乘以 10
I_true2, rows2 = experiment(16, 0.3, lambda x, z, p: 10.0 * (z == x), K_list)
print(f"\n未校准评分:真实互信息 = {I_true2:.4f}")
for K, b in rows2:
    print(f"  K = {K:4d}: log K - L = {b:.4f},差距 = {I_true2 - b:+.4f}")

输出(节选):

text
eps = 0.1:真实互信息 = 2.1767
  K =    2: log K - L = 0.5474,差距 = +1.6293
  K =   16: log K - L = 1.7850,差距 = +0.3917
  K =  256: log K - L = 2.1525,差距 = +0.0242

未校准评分:真实互信息 = 1.3493
  K =    2: log K - L = 0.2932,差距 = +1.0561
  K =   16: log K - L = 0.1561,差距 = +1.1932
  K =   64: log K - L = -0.2674,差距 = +1.6167

现象一:ϵ=0.1 时信道更干净,真实互信息更大(2.18 对比 0.3 时的 1.35)。界与真实值之间的绝对差距也更大:K=2 时为 1.63(0.3 时为 0.96),K=256 时为 0.024(0.3 时为 0.021)。按相对差距看,两个信道在 K=256 时都收敛到 2% 以内(1.1% 与 1.6%)。原因是界需要覆盖的信息量随真实互信息增长:信道携带的信息越多,需要的负样本数越多,界才能逼近。这句话在实践中的形式是:目标表示的互信息越大,训练所需的批大小越大,不能沿用低互信息任务的配置。

现象二:未校准的评分函数仍然给出成立的界(数值始终不超过真实互信息),但数值系统性偏低,并且不再随 K 单调改善:K=64 与 K=256 时给出负值,因为该评分函数没有建模负样本的概率结构,损失可以超过 log⁡K。这个实验的含义是:InfoNCE 的界对任意评分函数都成立,因此训练目标始终有信息论解释;把数值当作互信息估计时,必须使用足够接近对数密度比的评论家(充分训练、容量合适),并同时报告 K,否则得到的是失去意义的偏低下界。

第 4 题 综合应用 ​

某团队训练一个对比学习模型,正样本对来自同一物体的两个视图,负样本取自当前批次的其他样本。他们计划用 log⁡K−L 报告表示携带的互信息,并以此选择批大小。请说明这一做法的三个前提条件;在 4.7.5 节的离散信道模型上估算让界与真实值的差距小于 0.1 比特所需的 K;并讨论温度参数与批大小的相互影响。

参考答案

三个前提条件:

其一,评论家质量。界对任意评论家成立,但只有接近最优评论家(对数密度比)时数值才接近真实互信息。报告的数值前需要验证评论家的训练是否充分,例如观察损失在验证集上是否收敛,或用不同容量与不同随机种子的评论家检查稳定性。

其二,负样本的分布。界要求负样本从边缘分布 p(z) 独立抽取。实践中负样本来自批内其他样本,它们的分布是当前编码器下的经验边缘分布,与理论要求存在差异;批内样本的选择偏差(相似样本被编入同一批)会系统性地改变数值。

其三,批大小与 K 的对应关系。界为 log⁡K−L,解释时需要同时给出 K;不同实验的 K 不同时,数值不可直接比较。此外损失下界为零,界不超过 log⁡K,说明批大小同时决定了可报告信息量的上限。

所需 K 的估算:在 ϵ=0.3 的模型中,真实互信息为 1.349 自然对数单位,即 1.947 比特。要求差距小于 0.1 比特,等于 0.069 自然对数单位。由 4.7.5 节的表格,K=64 时差距 0.064,K=16 时差距 0.215,因此所需批大小在 64 附近。差距随 K 按幂律下降(本例拟合的指数约为 −0.8,K 从 16 增至 256 时差距缩小约 10 倍),这是对比学习方法普遍使用大 K 的定量理由。

温度与批大小的相互影响:温度决定评分的尺度,等价于改变 softmax 的尖锐程度。温度过低时训练集中在最难的负样本上,少量负样本主导梯度,K 增大带来的收益被噪声抵消;温度过高时所有负样本贡献接近,正样本的区分信号被稀释。两者需要协同调整:通常的做法是先固定温度,按显存上限增大批大小到收益饱和,再在饱和点附近微调温度。从信息论的角度看,两者共同决定界与真实值之间的距离,因此评估表示质量时应把它们作为一组超参数报告。

常见错误 ​

错误 1 · 把互信息下界当作精确的互信息估计

原因:InfoNCE 的 log⁡K−L 与 MINE 的 Donsker-Varadhan 值都是下界。训练中这些数值上升可能来自评论家变强(界变紧)而不是表示变好,训练初期尤其如此。不同论文报告的数值因为 K、评论家结构与数据变换不同而不可直接比较。

解决:报告数值时同时给出估计器的定义、批大小(或 K)与评论家的训练程度。需要跨实验比较时改用对估计器不敏感的量,如线性探测精度或检索指标,把互信息估计当作排查工具使用,不作为常规指标。用界做表示质量监控时,保持估计器配置不变,只观察同一配置下的相对变化。

错误 2 · 在确定性编码器上讨论互信息

原因:确定性映射 z=f(x) 下,z 完全由 x 决定,连续取值时条件熵为负无穷,互信息无界(离散化后等于表示的熵,依赖量化精度)。直接对确定性网络的中间层计算互信息,得到的数值主要由量化方式决定,物理含义有限。

解决:如果分析目标是编码器携带的信息量,在表示上加入可控噪声(如变分编码器的高斯采样),或使用离散化并报告量化精度。分析确定性网络时,改用对输入扰动的敏感度、秩或稀疏性等替代指标,或在给定噪声水平下报告互信息随噪声变化的曲线。

错误 3 · 把变分自编码器的 KL 项直接当作率

原因:训练中使用的 KL 项是 D(q(z∣x)∥p(z)),它等于 I(X;Z) 加上聚合后验与先验的差距,是率的上界而不是率本身。β 较大时两项接近,β 较小或训练不足时聚合后验与先验的差距可观,直接用 KL 项报告率会高估真正的信息量。

解决:区分三个量:编码项(训练中可算)、率 I(X;Z)(需要估计)、聚合后验与先验的 KL(可由两者的样本估计相减得到)。报告模型压缩程度时给出编码项并说明它是上界;需要精确的率时用 4.7.4 节的估计器在合理批大小下估计。

错误 4 · 把 PAC-Bayes 界中的 KL 与训练正则中的 KL 混同

原因:两者都叫 KL 且形式相同,但出现的位置与约束不同。PAC-Bayes 的 KL 是参数分布的后验与先验之间的距离,先验必须在训练前固定、不能依赖训练集,否则界的推导失效;训练正则中的 KL 是模型输出分布与参考分布之间的距离,参考分布可以随训练更新(如策略优化中的旧策略)。把两者当作同一个量会导致先验泄露(用数据选先验)或误读界的方向。

解决:使用 PAC-Bayes 界时明确写出先验的定义与固定时刻,先验的选择规则若依赖数据则整个界失效。把界当作训练目标(最小化右端)时,先验部分必须冻结,只更新后验的表示与训练误差项。报告结果时给出界的数值与先验的构造方式,避免只报"界与测试误差接近"而不说明先验来源。