---
title: 率失真与信息瓶颈
url: https://doc.liz6.com/theory/01-information-theory/05-rate-distortion-and-information-bottleneck
locale: zh
area: theory
tags:
- theory
- 信息论
date: 2026-07-18
modified: 2026-07-29
description: 允许一点失真,就能压得更狠——率失真理论 R(D) 给出"容忍失真 D 时最少要多少比特"。信息瓶颈把这套思路搬进机器学习:学一个表示 T,既要压缩输入 I(X;T) 小,又要保留预测信息 I(T;Y) 大。这正是理解深度网络"先记忆后压缩"的一个理论框架。
---

# 率失真与信息瓶颈

> 允许一点失真,就能压得更狠——率失真理论 R(D) 给出"容忍失真 D 时最少要多少比特"。信息瓶颈把这套思路搬进机器学习:学一个表示 T,既要压缩输入 I(X;T) 小,又要保留预测信息 I(T;Y) 大。这正是理解深度网络"先记忆后压缩"的一个理论框架。

## 引子:允许一点失真,天花板就松了

上一章的 [源编码](/theory/01-information-theory/03-source-coding-and-compression.md) 都是无损的——重建必须逐比特还原,下界卡死在熵。

可很多场景根本不需要精确还原。JPEG 丢掉人眼不敏感的高频细节;MP3 丢掉被听觉掩蔽的频段;神经网络的中间表示丢掉与任务无关的信息。这些都是有意的"丢弃",而且丢了你几乎察觉不到。

一旦允许**失真(distortion)**,可压缩的空间陡然放大。问题也随之变形:不再问"无损要多少比特",而是问——**给定我能容忍的失真上限,最少要多少比特?** 这一章先回答这个问题(率失真),再把同一套思路搬进机器学习(信息瓶颈)。

## 率失真函数 R(D)

要谈"容忍失真",先得能量化失真。**率失真理论(rate-distortion theory)** 用一个失真度量 $d(x, \hat{x})$(比如平方误差、汉明距离)来衡量"重建 $\hat{x}$ 和原始 $x$ 差多远"。

**率失真函数** 就定义为:在保证平均失真不超过 $D$ 的前提下,所需的最小比特率。

$$R(D) = \min_{p(\hat{x} \mid x):\, \mathbb{E}[d]\leq D} I(X; \hat{X})$$

它是一条**单调下降**的曲线:容忍的失真 $D$ 越大,需要的比特率 $R$ 越低。两个端点最能说明问题:

- $D=0$(不许失真):对离散信源,且 $d(x,\hat x)=0$ 只在精确重建时成立,$R(0)=H(X)$,退回到无损压缩的熵下界。连续信源配平方误差时通常有 $R(0)=\infty$,不能把这里的 $H(X)$ 直接换成微分熵。
- $D$ 大到"平均把一切都猜成一个常数"也能接受:$R(D)=0$,一个比特都不用发。

<svg viewBox="0 0 720 280" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system,'Source Han Sans CN','Microsoft YaHei',sans-serif" role="img" aria-label="率失真函数 R(D):容忍的失真越大所需比特率越低,D=0 时等于熵,D 最大时为零">
  <rect width="720" height="280" fill="#ffffff"/>
  <text x="360" y="30" text-anchor="middle" font-size="17" font-weight="700" fill="#1f2933">率失真函数 R(D):失真换比特的权衡曲线</text>
  <line x1="100" y1="220" x2="640" y2="220" stroke="#475569" stroke-width="1.4"/>
  <line x1="100" y1="220" x2="100" y2="60" stroke="#475569" stroke-width="1.4"/>
  <text x="655" y="225" font-size="12" fill="#64748b">D(失真)</text>
  <text x="70" y="60" font-size="12" fill="#64748b">R</text>
  <line x1="100" y1="70" x2="640" y2="70" stroke="#e2e8f0" stroke-width="1" stroke-dasharray="4 3"/>
  <text x="66" y="74" font-size="11" fill="#94a3b8">H(X)</text>
  <path d="M100,70 C180,120 280,190 640,215" fill="none" stroke="#4f46e5" stroke-width="2.6"/>
  <circle cx="100" cy="70" r="5" fill="#0d9488"/>
  <text x="150" y="60" font-size="11" fill="#0f766e">D=0 → R=H(X)(无损)</text>
  <circle cx="500" cy="217" r="5" fill="#22c55e"/>
  <text x="500" y="205" text-anchor="middle" font-size="11" fill="#166534">D 够大 → R=0</text>
  <rect x="330" y="120" width="270" height="60" rx="8" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="465" y="145" text-anchor="middle" font-size="12" fill="#3730a3">可达区在曲线上方:</text>
  <text x="465" y="165" text-anchor="middle" font-size="11" fill="#4338ca">给定 D,比特率不能低于 R(D)</text>
</svg>

$R(D)$ 之于有损压缩,正如熵之于无损压缩——都是不可逾越的理论下界。曲线上方是可达区,下方物理上做不到。

## 信息瓶颈原理

现在把这套思路搬个家。**信息瓶颈(Information Bottleneck, Tishby 1999)** 把率失真推广到**表示学习**——只不过,"失真"不再用像素误差衡量,而用"丢了多少与任务相关的信息"衡量。

设定是这样:有输入 $X$、要预测的标签 $Y$,我们想学一个中间表示 $T$(是 $X$ 的某种压缩)。一个好的 $T$,要同时满足两个**互相拉扯**的目标:

- **压缩**:$I(X;T)$ 尽量**小**。$T$ 尽量少保留关于 $X$ 的信息,把无关细节全扔掉。
- **保真**:$I(T;Y)$ 尽量**大**。$T$ 尽量多保留能预测 $Y$ 的信息。

把这两股力合成一个拉格朗日目标:

$$\min\ I(X;T) - \beta \cdot I(T;Y)$$

$\beta$ 是权衡旋钮:$\beta$ 小,偏向狠压缩;$\beta$ 大,偏向多保信息。标准设定的联合分布是 $p(x,y)p(t\mid x)$,所以马尔可夫关系应写成 **$Y\to X\to T$**(或 $T-X-Y$):给定 $X$ 后,$T$ 与 $Y$ 条件独立,$T$ 只能从 $X$ 提取与 $Y$ 有关的信息。预测时当然会用 $T$ 去估计 $Y$,但"预测流程 $X\to T\to\hat Y$"和"概率依赖关系 $Y\to X\to T$"是两件事。

<svg viewBox="0 0 720 260" xmlns="http://www.w3.org/2000/svg" font-family="-apple-system,'Source Han Sans CN','Microsoft YaHei',sans-serif" role="img" aria-label="信息瓶颈:X 编码为瓶颈表示 T,再用 T 预测 Y;I(X;T) 要小、I(T;Y) 要大。概率马尔可夫关系是 Y-X-T">
  <defs>
    <marker id="ibArrow" markerWidth="10" markerHeight="8" refX="8" refY="3" orient="auto"><path d="M0,0 L8,3 L0,6 Z" fill="#475569"/></marker>
  </defs>
  <rect width="720" height="260" fill="#ffffff"/>
  <text x="360" y="30" text-anchor="middle" font-size="17" font-weight="700" fill="#1f2933">信息瓶颈:T 夹在"压缩"与"保真"两股相反压力之间</text>
  <rect x="70" y="100" width="120" height="60" rx="8" fill="#4f46e5"/>
  <text x="130" y="136" text-anchor="middle" font-size="15" font-weight="700" fill="#ffffff">X 输入</text>
  <rect x="300" y="100" width="120" height="60" rx="8" fill="#0d9488"/>
  <text x="360" y="130" text-anchor="middle" font-size="15" font-weight="700" fill="#ffffff">T 瓶颈</text>
  <text x="360" y="150" text-anchor="middle" font-size="10" fill="#99f6e4">压缩表示</text>
  <rect x="530" y="100" width="120" height="60" rx="8" fill="#22c55e"/>
  <text x="590" y="136" text-anchor="middle" font-size="15" font-weight="700" fill="#ffffff">Y 标签</text>
  <line x1="190" y1="130" x2="296" y2="130" stroke="#475569" stroke-width="1.8" marker-end="url(#ibArrow)"/>
  <line x1="420" y1="130" x2="526" y2="130" stroke="#475569" stroke-width="1.8" marker-end="url(#ibArrow)"/>
  <text x="243" y="90" text-anchor="middle" font-size="13" font-weight="700" fill="#4338ca">I(X;T) 要小</text>
  <text x="243" y="182" text-anchor="middle" font-size="11" fill="#64748b">↓ 拼命压缩,扔掉无关细节</text>
  <text x="473" y="90" text-anchor="middle" font-size="13" font-weight="700" fill="#166534">I(T;Y) 要大</text>
  <text x="473" y="182" text-anchor="middle" font-size="11" fill="#64748b">↑ 拼命保留,留住预测信息</text>
  <rect x="140" y="212" width="440" height="30" rx="8" fill="#eef2ff" stroke="#c7d2fe"/>
  <text x="360" y="231" text-anchor="middle" font-size="12" fill="#3730a3">预测流程:X → T → Ŷ;概率关系:Y → X → T;目标:min I(X;T) − β·I(T;Y)</text>
</svg>

## 深度网络的"先记忆后压缩"

信息瓶颈之所以引人关注,是因为 Tishby 等人有一个观察。

训练深度网络时,如果跟踪每一层在 $(I(X;T),\ I(T;Y))$ 平面上的轨迹,常常会看到两个阶段:**先是拟合阶段**,$I(T;Y)$ 快速上升,网络"记住"训练数据;**再是压缩阶段**,$I(X;T)$ 缓慢下降,网络把与标签无关的输入信息挤出去,泛化随之改善。

这给"深度学习为什么能泛化"提供了一个信息论视角:**在保留任务信息的前提下,丢掉输入细节可能有助于泛化**。

需要诚实标注一句:这个"压缩阶段"是否普遍存在、是否就是泛化的**因**,学界仍有争议(有工作指出它依赖激活函数和互信息的估计方式)。所以把它当作一个**有启发性的框架**,而非定论——它给了一套用信息量刻画表示质量的语言,这本身就有价值。

## 连接表示学习与对比学习

信息瓶颈里"最大化 $I(T;Y)$"这条思路,直接通向现代的**自监督 / 对比学习**。

以 **InfoNCE**(SimCLR、CPC 等用的损失)为例:在相应的正负样本构造与采样假设下,它给出互信息 $I$ 的一个**可计算下界**。最小化 InfoNCE 损失,等价于抬高这一下界——让表示更容易区分"什么和什么是同一个东西"。但下界的松紧依赖负样本数量和采样方式,不能把损失值直接当成真实互信息。

顺着看下去会发现:表示学习的许多目标,拆开都是在信息瓶颈的两个方向上做文章——要么压缩,要么保信息。这里点到为止,不展开 InfoNCE 的下界推导。

| 框架 | 压缩项 | 保真项 | 下界 / 目标 |
|------|--------|--------|----------|
| 率失真 R(D) | $\min I(X;\hat{X})$ | 失真 $\mathbb{E}[d]\leq D$ | 有损压缩比特率下界 |
| 信息瓶颈 | $\min I(X;T)$ | $\max I(T;Y)$ | $\min I(X;T)-\beta \cdot I(T;Y)$ |
| 对比学习(InfoNCE) | 通常没有显式 IB 压缩项 | 抬高正样本表示的互信息下界 | 下界依赖负样本与采样方式 |

这些工具在 LLM 场景怎么落地——困惑度、RLHF 里的 KL、scaling law 的压缩视角——收束在 [LLM 中的信息论](/theory/01-information-theory/06-information-theory-in-llms.md)。

## 参考

- **论文**: "The Information Bottleneck Method" (Tishby, Pereira & Bialek, 1999 — 信息瓶颈原始论文)
- **论文**: "Opening the Black Box of Deep Neural Networks via Information" (Shwartz-Ziv & Tishby, 2017 — 拟合/压缩两阶段观察,附争议)
- **教材**: "Elements of Information Theory" (Cover & Thomas — 第 10 章 Rate Distortion Theory)
- **论文**: "Representation Learning with Contrastive Predictive Coding" (Oord et al., 2018 — InfoNCE 作为互信息下界)

*关键词: 率失真 rate-distortion, R(D) 函数, 有损压缩, 信息瓶颈 Information Bottleneck, Tishby, 马尔可夫链 Y→X→T, 压缩与保真权衡, 先记忆后压缩, 表示学习, InfoNCE, 对比学习*
