Lecture 4 · 最大似然学习 · Maximum Likelihood Learning

Deep Generative Models · Lecture 04。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应 Maps to:Stanford CS236 Deep Generative Models(Fall 2023,Stefano Ermon),Lecture 4 · 2023-10-09 · Maximum Likelihood Learning(slides:cs236_lecture4.pdf,25 页)。 依据说明:本讲按原课 slides 的顺序展开:学习的设定与”什么是最好”→ KL 散度及其压缩解释 → 期望对数似然与最大似然 → 蒙特卡洛估计 → 抛硬币的 MLE → 自回归模型的 MLE、梯度下降与随机梯度下降 → 经验风险、过拟合、偏差–方差 → 条件生成模型 → 回顾。前向 / 反向 KL 的对比、Huffman 编码、“训练似然过于乐观”、早停与集成等是本讲义补充的;全部实验在第 1 讲的像素世界上进行,用第 3 讲训练好的自回归模型——因为像素世界的熵已知,可以把 KL 散度真正算出来。 配套代码 Code:code/lecture04/(PyTorch;1 个小模块 + 4 个演示脚本,每个都在 25 秒以内;代码 02、03 读取第 3 讲缓存的模型) 预计阅读时间:3 小时(含运行代码)


0. 本讲导航 · How to read this lecture

0.1 学习目标 Learning goals

学完这一讲,你应该能够:

  1. 说清楚学习生成模型的设定(数据分布、独立同分布的数据集、模型族),以及为什么”精确地学到 PdataP_{\text{data}}“一般做不到;“最好的模型”取决于用途。
  2. 写出 KL 散度的定义,用 Jensen 不等式证明它非负、当且仅当两分布相等时为 0;说明它不对称;用压缩解释它(“用错了编码多付的比特”)。
  3. 推导 最小化 D(Pdata∥Pθ)D(P_{\text{data}} \Vert P_\theta) ⇔ 最大化期望对数似然;说明为什么”概率接近 0 的样本权重极大”、为什么我们不知道离最优还差多远;理解**前向 KL 的”模式覆盖”**和反向 KL 的”模式寻找”。
  4. 用蒙特卡洛估计近似期望:无偏、收敛、方差 =Var/T= \mathrm{Var}/T;知道训练之后训练集上的平均似然为什么过于乐观。
  5. 写出抛硬币的 MLE(θ=0.6\theta = 0.6);说明 MLE 等价于最小化”经验分布到模型”的 KL。
  6. 写出自回归模型的对数似然分解;说明没有参数共享时每个条件可以分开优化;推导随机梯度下降的梯度是全批量梯度的无偏估计,并理解批大小的取舍。
  7. 解释过拟合、偏差、方差,以及三类对策(更小的模型 / 权重共享、正则化、验证集);说明条件生成模型为什么只需要条件似然。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲只给直觉,后面几讲再展开 Previewed only
第 1–3 讲:像素世界、贝叶斯网络、自回归模型(FVSBN、NADE、MADE、RNN、Transformer、PixelCNN)隐变量模型的似然(第 5 讲:似然算不出来时怎么办)
期望、方差、对数的基本性质;梯度下降的基本概念似然以外的”距离”:JS 散度、ff-散度、Wasserstein(第 9–10 讲)、Fisher 散度(第 12–13 讲)
评估生成模型的全部方法(第 15 讲)

0.3 本讲地图 Map

§1  学习的设定:数据分布、数据集、模型族;“什么是最好”;学习 = 密度估计
§2  KL 散度:定义、非负性、不对称;压缩的解释;前向 KL 与反向 KL                ← 代码 01
§3  最大似然:KL 分解;期望对数似然 → 经验对数似然;抛硬币;                     ← 代码 02
    像素世界上的 KL;概率接近 0 的样本
§4  蒙特卡洛估计:无偏、收敛、方差;训练似然的乐观偏差                           ← 代码 03
§5  自回归模型的 MLE:似然的分解;梯度下降与随机梯度下降                        ← 代码 02、03
§6  经验风险与过拟合:偏差–方差;正则化、早停、更小的模型                       ← 代码 04
§7  条件生成模型;回顾                                                          ← 代码 04
§8  2023 年之后
§9–13  小结、常见误区、练习、延伸阅读、下一讲预告

0.4 记号 Notation

符号含义
PdataP_{\text{data}},PθP_\theta数据分布;参数为 θ\theta 的模型分布
D={x(1),…,x(m)}\mathcal{D} = \{x^{(1)}, \dots, x^{(m)}\}训练集,mm 个独立同分布(IID)的样本
p^D\hat{p}_{\mathcal{D}}经验分布:每个训练样本概率 1/m1/m
D(p∥q)D(p \Vert q) 或 DKL(p∥q)D_{\mathrm{KL}}(p \Vert q)KL 散度 ∑xp(x)log⁡p(x)q(x)\sum_x p(x) \log \frac{p(x)}{q(x)}
H(p)H(p),H(p,q)H(p, q)熵 −∑plog⁡p-\sum p \log p;交叉熵 −∑plog⁡q-\sum p \log q
L(θ,D)L(\theta, \mathcal{D}),ℓ(θ)\ell(\theta)似然 ∏jPθ(x(j))\prod_j P_\theta(x^{(j)});对数似然 log⁡L\log L
g^\hat{g}蒙特卡洛估计 1T∑tg(xt)\frac{1}{T}\sum_t g(x^t)
BB,αt\alpha_t小批量大小;学习率

0.5 关于数字 · About the numbers

数据与第 3 讲相同:像素世界的 10,000 张训练图、2,000 张验证图、5,000 张测试图;真实分布在测试集上平均 25.52 bit/图,在训练集上平均 25.61 bit/图。“比真实多 bit”在测试集上减前者、在训练集上减后者。所有数字来自作者机器的实际输出(单线程 CPU,重复运行逐字节相同)。有几处结果和预期不同(例如小批量 SGD 里批越小越好、500 张图时最小的模型最好),讲义按实际结果写,并记录在 代码 README 的”关于实验结果”里。


1. 学习的设定 · The learning setting

1.1 设定

原课第 3 页:

  • 假设领域由某个底层分布 PdataP_{\text{data}} 支配;
  • 给定一个数据集 D\mathcal{D},包含从 PdataP_{\text{data}} 抽出的 mm 个样本;每个样本是对(一部分)变量的一个赋值,例如 (Xbank=1,Xdollar=0,…,Y=1)(X_{\text{bank}} = 1, X_{\text{dollar}} = 0, \dots, Y = 1),或者像素的亮度;
  • 标准假设:样本是独立同分布(IID)的;
  • 给定一个模型族 M\mathcal{M},任务是在其中学到一个”好的”分布。例如 M\mathcal{M} 可以是”某个固定图结构的所有贝叶斯网络(CPT 任取)“,或者”所有可能的逻辑回归参数下的 FVSBN”(θ\theta = 所有逻辑回归系数拼成的向量)。

1.2 学习的目标,以及为什么一般做不到

原课第 4 页:学习的目标是返回一个精确地刻画了 PdataP_{\text{data}} 的模型 PθP_\theta。这一般做不到,原因有二:

  1. 数据有限,只能粗略地近似真实分布。用 784 个二值变量表示一张图,可能的状态有 2784≈102362^{784} \approx 10^{236} 个;即使有 10710^7 个训练样本,覆盖也极其稀疏。
  2. 计算上的原因。

所以我们想在模型族里选一个**“最好的”近似**。可什么是”最好”?

1.3 “最好”取决于用途

原课第 5 页列了三种用途:

  1. 密度估计:我们关心完整的分布,以后可以算任何想要的条件概率;
  2. 具体的预测任务:用分布来做预测——这封邮件是不是垃圾邮件?结构化预测:预测视频的下一帧,给图配描述;
  3. 结构或知识发现:我们关心模型本身——某些基因怎样相互作用?什么导致了癌症?(“Take CS 228”)

本课主要关心第一种:学习 = 密度估计(第 6 页)。我们想学到完整的分布,以后就能回答任何概率推断问题;也就是要让 PθP_\theta 尽可能”接近” PdataP_{\text{data}}。怎样衡量”接近”?


2. KL 散度 · KL divergence

2.1 定义与基本性质

原课第 7 页:两个分布 pp 和 qq 之间的 Kullback–Leibler 散度(KL 散度)定义为

D(p∥q)=∑xp(x)log⁡p(x)q(x).D(p \Vert q) = \sum_x p(x) \log \frac{p(x)}{q(x)}.

非负性:D(p∥q)≥0D(p \Vert q) \geq 0 对所有 p,qp, q 成立,当且仅当 p=qp = q 时等号成立。证明只用 Jensen 不等式(−log⁡-\log 是凸函数,凸函数的期望 ≥ 期望的凸函数):

Ex∼p[−log⁡q(x)p(x)]≥−log⁡(Ex∼p[q(x)p(x)])=−log⁡(∑xp(x)q(x)p(x))=−log⁡∑xq(x)=0.\mathbb{E}_{x \sim p}\left[-\log \frac{q(x)}{p(x)}\right] \geq -\log\left(\mathbb{E}_{x \sim p}\left[\frac{q(x)}{p(x)}\right]\right) = -\log\left(\sum_x p(x)\frac{q(x)}{p(x)}\right) = -\log \sum_x q(x) = 0.

不对称:一般 D(p∥q)≠D(q∥p)D(p \Vert q) \neq D(q \Vert p)。

代码 01 第 1 部分抽了 10 万对随机的 6 点分布,没有一个 KL 是负的(最小值 0.0021 bit);p=qp = q 时恰好为 0。一个不对称的例子:p=(0.80,0.15,0.05)p = (0.80, 0.15, 0.05),q=(0.34,0.33,0.33)q = (0.34, 0.33, 0.33),D(p∥q)=0.681D(p \Vert q) = 0.681 bit,D(q∥p)=0.854D(q \Vert p) = 0.854 bit——qq 在 pp 几乎不出现的第三个结果上放了 0.33 的概率,代价很大。KL 不满足对称性和三角不等式,所以不是数学意义上的”距离”,叫”散度”。

2.2 压缩的解释

原课第 7–8 页:KL 散度衡量的是用一个为 qq 优化的压缩编码去描述来自 pp 的样本,平均要多用多少比特。

为什么压缩和概率有关?因为要压缩,最好知道数据来自什么分布。例如 X1,…,X100X_1, \dots, X_{100} 是一枚均匀硬币的抛掷结果,大约 50 个正面、50 个反面;最优的方案是正面记 0、反面记 1,平均每次 1 bit,不可能更好。如果硬币有偏、P[H]≫P[T]P[H] \gg P[T],就应该用更少的比特表示正面、更多的比特表示反面——把多次抛掷打包,HHHH(常见)用短码、TTTT(罕见)用长码。就像摩尔斯电码:E = •,A = •−,Q = −−•−,常见的字母码短。

代码 01 第 2 部分真的写出了 Huffman 编码(P(H)=0.9P(H) = 0.9,熵 H=0.469H = 0.469 bit / 次):

打包几次抛掷 kk符号个数Huffman 平均 bit / 次
121.0000
240.6450
380.5327
4160.4925
6640.4702
82560.4758

打包越多,平均码长越接近熵(不一定单调,但 Huffman 保证不超过 H+1/kH + 1/k)。用”为错误分布 qq 设计的编码”去压缩来自 pp 的数据:

编码按 q(H)q(H) 设计理想码长 Ep[−log⁡2q]\mathbb{E}_p[-\log_2 q]D(p∥q)D(p \Vert q)比熵多用Huffman(k=8k = 8)比最优多用
0.900.46900.00000.00000.0000
0.700.63680.16780.16780.1436
0.501.00000.53100.53100.5242
0.990.67740.20840.20840.0392

理想码长 −log⁡2q(x)-\log_2 q(x) 的平均就是交叉熵 H(p,q)H(p, q),而且

H(p,q)=−∑xp(x)log⁡q(x)=H(p)+D(p∥q),H(p, q) = -\sum_x p(x) \log q(x) = H(p) + D(p \Vert q),

“比熵多用”和 KL 两列逐位相同。KL = 用错了分布带来的额外比特。 一个细节:真实的 Huffman 码长是整数、符号个数有限,过于极端的设计(q=0.99q = 0.99)被”截断”了,实际浪费反而比理想值小得多(0.039 vs 0.208)。KL 精确描述的是理想编码(例如码长可以是小数的算术编码)的代价。

2.3 前向 KL 与反向 KL

KL 不对称,那么用 D(p∥q)D(p \Vert q) 还是 D(q∥p)D(q \Vert p) 去拟合,结果会一样吗?代码 01 第 3 部分用一个高斯 q=N(μ,σ2)q = \mathcal{N}(\mu, \sigma^2) 去拟合一个双峰分布 p=0.5 N(−2.5,0.62)+0.5 N(2.5,0.62)p = 0.5\,\mathcal{N}(-2.5, 0.6^2) + 0.5\,\mathcal{N}(2.5, 0.6^2):

拟合方式μ\muσ\sigmaD(p∥q)D(p \Vert q)D(q∥p)D(q \Vert p)
最小化 D(p∥q)D(p \Vert q)(前向 KL = 最大似然)0.002.571.0993.242
最小化 D(q∥p)D(q \Vert p)(反向 KL)−2.500.6024.0471.000
  • 前向 KL D(p∥q)=Ep[log⁡p/q]D(p \Vert q) = \mathbb{E}_p[\log p/q]:只要 pp 有质量的地方 qq 很小,代价就巨大。于是 qq 必须覆盖两个峰,只好把均值放在中间、方差撑大(恰好就是匹配 pp 的均值和方差,练习 5)。结果约 30% 的样本落在 [−1,1)[-1, 1) 里,而 pp 在这里的质量只有 0.002。这叫模式覆盖(mode covering)。
  • 反向 KL D(q∥p)=Eq[log⁡q/p]D(q \Vert p) = \mathbb{E}_q[\log q/p]:只惩罚 qq 放了质量、pp 却没有的地方。qq 待在一个峰上就很好——它恰好等于左边那个成分,D(q∥p)=1D(q \Vert p) = 1 bit =log⁡22= \log_2 2(在那个峰上 qq 是 pp 的 2 倍)。这叫模式寻找(mode seeking):样本都很像,但只覆盖一半的数据;从 pp 的角度看,右峰在 qq 下概率为 0,D(p∥q)D(p \Vert q) 高达 24 bit。

下一节会看到:最大似然 = 最小化前向 KL,所以似然训练的模型倾向于”宁可多覆盖,也不漏掉”。第 5–6 讲的变分推断用反向 KL,第 9–10 讲的 GAN 用 JS 散度和其他散度——它们犯错的方式各不相同。第 1 讲 §5.2 “两把尺子打架”的现象,根源就在这里。


3. 最大似然 · Maximum likelihood

3.1 KL 分解:熵是常数

原课第 9–10 页:用 KL 散度衡量 PdataP_{\text{data}} 和 PθP_\theta 的”接近程度”:

D(Pdata∥Pθ)=Ex∼Pdata[log⁡Pdata(x)Pθ(x)]=∑xPdata(x)log⁡Pdata(x)Pθ(x).D(P_{\text{data}} \Vert P_\theta) = \mathbb{E}_{x \sim P_{\text{data}}}\left[\log \frac{P_{\text{data}}(x)}{P_\theta(x)}\right] = \sum_x P_{\text{data}}(x) \log \frac{P_{\text{data}}(x)}{P_\theta(x)}.

它为 0 当且仅当两个分布相同;它衡量用 PθP_\theta 代替 PdataP_{\text{data}} 的”压缩损失”(比特)。展开:

D(Pdata∥Pθ)=Ex∼Pdata[log⁡Pdata(x)]−Ex∼Pdata[log⁡Pθ(x)].D(P_{\text{data}} \Vert P_\theta) = \mathbb{E}_{x \sim P_{\text{data}}}[\log P_{\text{data}}(x)] - \mathbb{E}_{x \sim P_{\text{data}}}[\log P_\theta(x)].

第一项和 PθP_\theta 无关(它是 −H(Pdata)-H(P_{\text{data}}))。所以最小化 KL 散度等价于最大化期望对数似然:

arg⁡min⁡PθD(Pdata∥Pθ)=arg⁡min⁡Pθ−Ex∼Pdata[log⁡Pθ(x)]=arg⁡max⁡PθEx∼Pdata[log⁡Pθ(x)].\arg\min_{P_\theta} D(P_{\text{data}} \Vert P_\theta) = \arg\min_{P_\theta} -\mathbb{E}_{x \sim P_{\text{data}}}[\log P_\theta(x)] = \arg\max_{P_\theta} \mathbb{E}_{x \sim P_{\text{data}}}[\log P_\theta(x)].

原课在这一页写了三点评论,每一点都值得记住:

  1. 它要求 PθP_\theta 给来自 PdataP_{\text{data}} 的样本高概率,以反映真实分布。
  2. 因为有 log⁡\log,Pθ(x)≈0P_\theta(x) \approx 0 的样本在目标里权重极大(§3.4)。
  3. 虽然现在可以比较模型了,但因为忽略了熵 H(Pdata)H(P_{\text{data}}),我们不知道离最优还有多远。

还有一个问题:一般我们不知道 PdataP_{\text{data}}。

3.2 像素世界:把 KL 真正算出来

真实数据上只能看到交叉熵 E[−log⁡Pθ]\mathbb{E}[-\log P_\theta];像素世界知道每张图的真实 log⁡Pdata(x)\log P_{\text{data}}(x),于是能把 KL 的两项分开。代码 02 第 2 部分用第 3 讲的 7 个模型:

模型(按交叉熵排序)交叉熵 E[−log⁡2Pθ]\mathbb{E}[-\log_2 P_\theta]± 标准误KL 估计 = 交叉熵 − 熵± 标准误(配对)
GRU26.3460.1080.8260.023
PixelCNN26.3570.1050.8370.019
RNN26.4330.1070.9130.023
Transformer27.0780.1111.5580.031
MADE29.2350.1103.7150.047
NADE29.4100.1093.8900.050
FVSBN30.1690.1104.6490.059

(熵 H(Pdata)H(P_{\text{data}}) 在这 5000 张测试图上是 25.520 bit。)

  • 按交叉熵排名和按 KL 排名完全一样:熵是一个与模型无关的常数,比较模型时可以不管它。
  • 但只看交叉熵,永远不知道离最优还差多远:GRU 的 26.35 bit 可能已经接近最优,也可能还差很远。只有知道真相,才算得出 KL ≈ 0.83 bit。
  • 比较模型要用配对的差:交叉熵本身的标准误约 0.1 bit(每张图的 bits 波动很大),而两个模型在同一批测试图上的差,标准误只有 0.02–0.06 bit。GRU 和 PixelCNN 相差 0.011 bit,在这个精度下分不出高下。

3.3 经验对数似然与最大似然

原课第 11 页:用经验对数似然近似期望对数似然:

ED[log⁡Pθ(x)]=1∣D∣∑x∈Dlog⁡Pθ(x).\mathbb{E}_{\mathcal{D}}[\log P_\theta(x)] = \frac{1}{|\mathcal{D}|} \sum_{x \in \mathcal{D}} \log P_\theta(x).

最大似然学习就是

max⁡Pθ1∣D∣∑x∈Dlog⁡Pθ(x),\max_{P_\theta} \frac{1}{|\mathcal{D}|} \sum_{x \in \mathcal{D}} \log P_\theta(x),

等价地,最大化数据的似然 Pθ(x(1),…,x(m))=∏x∈DPθ(x)P_\theta(x^{(1)}, \dots, x^{(m)}) = \prod_{x \in \mathcal{D}} P_\theta(x)(IID 假设让联合概率变成乘积)。

一个有用的视角:经验对数似然恰好是 Ex∼p^D[log⁡Pθ(x)]\mathbb{E}_{x \sim \hat{p}_{\mathcal{D}}}[\log P_\theta(x)],其中 p^D\hat{p}_{\mathcal{D}} 是经验分布(每个训练样本概率 1/m1/m)。所以 MLE = 最小化 D(p^D∥Pθ)D(\hat{p}_{\mathcal{D}} \Vert P_\theta)——用模型去逼近训练数据的经验分布。这也预告了过拟合:如果模型族足够大,最好的 PθP_\theta 就是 p^D\hat{p}_{\mathcal{D}} 本身(第 1 讲的”查表”模型)。

3.4 抛硬币

原课第 14–15 页:两种结果,正面 H 和反面 T;数据 D={H,H,T,H,T}\mathcal{D} = \{H, H, T, H, T\};模型族是所有 {H,T}\{H, T\} 上的分布:Pθ(x=H)=θP_\theta(x = H) = \theta,Pθ(x=T)=1−θP_\theta(x = T) = 1 - \theta。数据的似然是

L(θ)=∏iPθ(xi)=θ⋅θ⋅(1−θ)⋅θ⋅(1−θ)=θ3(1−θ)2.L(\theta) = \prod_i P_\theta(x_i) = \theta \cdot \theta \cdot (1 - \theta) \cdot \theta \cdot (1 - \theta) = \theta^3 (1 - \theta)^2.

代码 02 第 1 部分:

θ\theta似然 θ3(1−θ)2\theta^3(1-\theta)^2对数似然D(p^D∥Pθ)D(\hat{p}_{\mathcal{D}} \Vert P_\theta)
0.200.00512−5.2750.5510
0.500.03125−3.4660.0290
0.600.03456−3.3650.0000
0.700.03087−3.4780.0326
0.990.00010−9.2401.6953

闭式解:ddθ[3log⁡θ+2log⁡(1−θ)]=3θ−21−θ=0⇒θ=0.6\frac{d}{d\theta}[3\log\theta + 2\log(1 - \theta)] = \frac{3}{\theta} - \frac{2}{1 - \theta} = 0 \Rightarrow \theta = 0.6,恰好是正面出现的比例;此时经验分布到模型的 KL 恰好为 0。θ=0.99\theta = 0.99 的似然极小:数据里有两个 T,模型却几乎不允许 T 出现。

3.5 “概率接近 0 的样本权重极大”

代码 02 第 3 部分把这句话量化了。先看 GRU(最好的模型)在每张测试图上比真实分布多用的 bit:

测试图占总的”多用 bit”的比例
最差的 1%(50 张)0.127
最差的 5%(250 张)0.348
最差的 10%(500 张)0.500
最差的 50%(2500 张)1.049

最差的 10% 测试图贡献了一半的误差(另有 20.8% 的测试图上 GRU 的概率反而比真实分布还高,所以最差的 50% 加起来超过 100%)。最”意外”的三张图都是 4×4 的方框,噪声恰好改变了方框的结构(内部被填、一条边被延长、角被擦掉):真实分布知道”这是一个方框加几个翻转”,GRU 给的概率低得多,每张多付 16–23 bit。

再看极端情况:画法和形状频率都正确、只有噪声水平不同的模板模型:

模型测试:比真实多 bit/图最差一张图的 bit
噪声 ε = 0.05(正确)0.0054.5
噪声 ε = 0.013.7574.7
噪声 ε = 10−410^{-4}23.91140.4
噪声 ε = 10−1210^{-12}(几乎不允许噪声)108.03406.1

−log⁡-\log 的形状决定了一切:概率从 0.01 降到 0.0001,代价从 6.6 bit 涨到 13.3 bit;概率 → 0 时代价 → ∞。只要有一张测试图概率为 0,平均对数似然就是 −∞-\infty。 所以最大似然训练的模型都不敢给任何东西概率 0,宁可把概率摊得宽一些——这正是 §2.3 前向 KL 的”模式覆盖”。


4. 蒙特卡洛估计 · Monte Carlo estimation

4.1 主要想法

原课第 12 页:

  1. 把感兴趣的量表示成某个随机变量的期望:Ex∼P[g(x)]=∑xg(x)P(x)\mathbb{E}_{x \sim P}[g(x)] = \sum_x g(x) P(x);
  2. 从 PP 里抽 TT 个样本 x1,…,xTx^1, \dots, x^T;
  3. 用样本平均估计期望:g^(x1,…,xT)≜1T∑t=1Tg(xt)\hat{g}(x^1, \dots, x^T) \triangleq \frac{1}{T}\sum_{t=1}^T g(x^t)。

注意 g^\hat{g} 本身是一个随机变量(换一批样本,它就变)。

4.2 性质

原课第 13 页:

  • 无偏:EP[g^]=EP[g(x)]\mathbb{E}_P[\hat{g}] = \mathbb{E}_P[g(x)];
  • 收敛:由大数定律,T→∞T \to \infty 时 g^→EP[g(x)]\hat{g} \to \mathbb{E}_P[g(x)];
  • 方差:VarP[g^]=VarP[1T∑tg(xt)]=VarP[g(x)]T\mathrm{Var}_P[\hat{g}] = \mathrm{Var}_P\left[\frac{1}{T}\sum_t g(x^t)\right] = \frac{\mathrm{Var}_P[g(x)]}{T}——增加样本数就能降低估计的方差。

代码 03 第 1 部分用它估计像素世界的熵 H=E[−log⁡2p(x)]=25.589H = \mathbb{E}[-\log_2 p(x)] = 25.589 bit:

每个估计用的样本数 TT重复次数估计的平均估计的标准差理论 σ/T\sigma/\sqrt{T}
1200025.5127.2417.283
10200025.5722.2672.303
100200025.5660.7170.728
100050025.5900.2240.230

无论 TT 多小,估计的平均都等于真实值(无偏);标准差和 σ/T\sigma/\sqrt{T} 吻合:样本数扩大 100 倍,误差只缩小 10 倍。§3.3 的经验对数似然,就是期望对数似然的蒙特卡洛估计(样本 = 训练集)。

4.3 一个陷阱:训练之后,训练集上的似然过于乐观

蒙特卡洛估计无偏的前提是:样本和 gg 无关。可是 MLE 恰恰是用训练集选出了 θ\theta——之后再用同一个训练集估计 E[log⁡Pθ]\mathbb{E}[\log P_\theta],就不再无偏了。代码 03 第 2 部分(FVSBN,不同的训练集大小):

训练集大小 NN训练集:比真实多 bit测试集:比真实多 bit测试 − 训练
50−19.2946.4165.70
300−1.3814.2515.62
20003.755.281.53
100004.354.650.30

N=50N = 50 时,模型在训练集上的概率比真实分布还高 19 bit——它记住了这 50 张图;测试集上却差了 46 bit。训练集上的平均对数似然是一个过于乐观的估计,因为参数正是为了让这些样本的似然变大而选出来的。所以评价模型必须用没参与训练的数据(原课 slide 23 的”validation set”)。


5. 自回归模型的最大似然 · MLE for autoregressive models

5.1 似然的分解

原课第 16 页:给定一个 nn 个变量的自回归模型

Pθ(x)=∏i=1npneural(xi∣x<i;θi),P_\theta(x) = \prod_{i=1}^n p_{\text{neural}}(x_i \mid x_{<i}; \theta_i),

θ=(θ1,…,θn)\theta = (\theta_1, \dots, \theta_n) 是所有条件分布的参数。训练数据 D={x(1),…,x(m)}\mathcal{D} = \{x^{(1)}, \dots, x^{(m)}\},似然分解为

L(θ,D)=∏j=1mPθ(x(j))=∏j=1m∏i=1npneural(xi(j)∣x<i(j);θi).L(\theta, \mathcal{D}) = \prod_{j=1}^m P_\theta(x^{(j)}) = \prod_{j=1}^m \prod_{i=1}^n p_{\text{neural}}(x_i^{(j)} \mid x_{<i}^{(j)}; \theta_i).

目标是 arg⁡max⁡θL(θ,D)=arg⁡max⁡θlog⁡L(θ,D)\arg\max_\theta L(\theta, \mathcal{D}) = \arg\max_\theta \log L(\theta, \mathcal{D})。和抛硬币不同,这里一般没有闭式解。

5.2 没有参数共享时,可以分开优化

原课第 18 页:对 θi\theta_i 求梯度,

∇θiℓ(θ)=∑j=1m∑i′=1n∇θilog⁡pneural(xi′(j)∣x<i′(j);θi′)=∑j=1m∇θilog⁡pneural(xi(j)∣x<i(j);θi).\nabla_{\theta_i} \ell(\theta) = \sum_{j=1}^m \sum_{i'=1}^n \nabla_{\theta_i} \log p_{\text{neural}}(x_{i'}^{(j)} \mid x_{<i'}^{(j)}; \theta_{i'}) = \sum_{j=1}^m \nabla_{\theta_i} \log p_{\text{neural}}(x_i^{(j)} \mid x_{<i}^{(j)}; \theta_i).

**如果没有参数共享,每个条件 pneural(xi∣x<i;θi)p_{\text{neural}}(x_i \mid x_{<i}; \theta_i) 可以分开优化。**实际中参数往往是共享的(NADE、PixelRNN、PixelCNN 等)。

代码 02 第 4 部分验证了这一点:FVSBN 的 64 个逻辑回归,分别用 64 个独立的 L-BFGS 训练,和把它们的损失加起来、对整个下三角矩阵一起训练,得到的训练集 bits 都是 29.9466、测试误差都是 4.6414,系数矩阵最大差 5×10−65 \times 10^{-6}(优化器的收敛精度)。每个小问题都是凸的、最优解唯一,所以总目标的最优解就是各个小问题最优解的拼接。

5.3 梯度下降

原课第 17 页:

  1. 随机初始化 θ0\theta^0;
  2. 用反向传播计算 ∇θℓ(θ)\nabla_\theta \ell(\theta);
  3. θt+1=θt+αt∇θℓ(θ)\theta^{t+1} = \theta^t + \alpha_t \nabla_\theta \ell(\theta)。

这是一个非凸优化问题(对神经网络而言),但实践中通常效果很好。

5.4 随机梯度下降:梯度也是蒙特卡洛估计

原课第 19 页:如果 m=∣D∣m = |\mathcal{D}| 很大呢?

∇θℓ(θ)=m∑j=1m1m∑i=1n∇θlog⁡pneural(xi(j)∣x<i(j);θi)=m Ex(j)∼D[∑i=1n∇θlog⁡pneural(xi(j)∣x<i(j);θi)].\nabla_\theta \ell(\theta) = m \sum_{j=1}^m \frac{1}{m} \sum_{i=1}^n \nabla_\theta \log p_{\text{neural}}(x_i^{(j)} \mid x_{<i}^{(j)}; \theta_i) = m\, \mathbb{E}_{x^{(j)} \sim \mathcal{D}}\left[\sum_{i=1}^n \nabla_\theta \log p_{\text{neural}}(x_i^{(j)} \mid x_{<i}^{(j)}; \theta_i)\right].

梯度本身是一个期望——于是可以用蒙特卡洛估计:随机抽一个(或一小批)x(j)∼Dx^{(j)} \sim \mathcal{D},

∇θℓ(θ)≈m∑i=1n∇θlog⁡pneural(xi(j)∣x<i(j);θi).\nabla_\theta \ell(\theta) \approx m \sum_{i=1}^n \nabla_\theta \log p_{\text{neural}}(x_i^{(j)} \mid x_{<i}^{(j)}; \theta_i).

这就是随机梯度下降(SGD)。代码 03 第 3 部分在 FVSBN 上量了小批量梯度的误差:

参数所在的位置批大小 BB‖全批量梯度‖相对平方误差 E∥g^−g∥2/∥g∥2\mathbb{E}\Vert\hat{g} - g\Vert^2/\Vert g\Vert^2100 个小批量梯度的平均与 gg 的余弦
刚初始化13.7604.8130.978
刚初始化163.7600.3060.998
刚初始化2563.7600.0191.000
训练好以后10.0151449990.009
训练好以后160.01581740.088
训练好以后2560.0154850.406
  • 相对平方误差和 BB 成反比(BB 扩大 16 倍,误差缩小约 16 倍):小批量梯度的方差 = 单样本梯度的方差 / BB。
  • 在初始点,小批量梯度的平均和全批量梯度方向一致:小批量梯度是无偏的。
  • 训练好以后,全批量梯度几乎为 0(已在最优点附近),可单个样本的梯度并不小——相对误差高达几十万倍,连 100 个 B=256B = 256 的小批量梯度的平均,和 gg 的余弦也只有 0.4。“无偏”只保证平均起来是对的,不保证有限个样本就准:在最优点附近,SGD 的每一步主要是噪声。这就是训练后期要减小学习率的原因(第 3 讲的训练用余弦衰减到 0)。

梯度下降 vs SGD(代码 03 第 4 部分,FVSBN,学习率 0.5 的普通 SGD,表中是测试集上比真实多的 bit):

方法看过 1 遍数据3 遍10 遍30 遍30 遍的总步数
梯度下降(B=10000B = 10000)38.3238.0136.9534.1930
SGD(B=500B = 500)35.5230.6920.8312.32600
SGD(B=50B = 50)20.8012.327.985.636,000
SGD(B=5B = 5)8.015.654.694.6560,000

看同样多的数据(同样的计算量),小批量 SGD 远远领先:梯度下降每看一遍数据只走一步,SGD 走 N/BN/B 步——每一步的方向有噪声,但平均来说是对的,而且步数多得多。在这个设置里,B=5B = 5 看 1 遍数据就到了 8 bit、30 遍时和 Adam 训练的结果一样(4.65)。但 B=5B = 5 要走 6 万步;在 GPU 这样的并行硬件上,算 500 个样本的梯度几乎和算 5 个一样快,按”墙上时间”算大批量往往更划算。批大小是”步数""每步的质量”和”硬件效率”之间的取舍。


6. 经验风险与过拟合 · Empirical risk and overfitting

6.1 经验风险最小化很容易过拟合

原课第 20 页:经验风险最小化很容易过拟合数据。极端的例子:数据就是模型(记住全部训练数据)。可是数据只是一个样本,通常还有大量从没见过的样本;模型应该在这些”没见过”的样本上泛化得好。所以我们通常要限制所搜索的分布的假设空间。

§3.3 已经说过,MLE = 最小化 D(p^D∥Pθ)D(\hat{p}_{\mathcal{D}} \Vert P_\theta);如果模型族包含经验分布本身,MLE 的答案就是”把训练集背下来”——第 1 讲的”查表”模型在训练集上只要 6.66 bit/图(远低于真实熵),测试集上却要 70.5 bit/图。

6.2 偏差–方差权衡

原课第 21–22 页:

  • 如果假设空间非常有限,即使有无限的数据也可能表示不了 PdataP_{\text{data}}。这种限制叫偏差(bias):学习受限于它能多接近目标分布。
  • 如果选一个表达能力很强的假设类,可能更好地表示数据;但数据少时,多个模型都能很好地拟合,甚至比真实模型拟合得还好;而且 D\mathcal{D} 的微小扰动会带来非常不同的估计。这种限制叫方差(variance)。
  • 选择假设类时存在内在的偏差–方差权衡:学习的误差来自两者。slide 22 用多项式回归画了三张图:线性(欠拟合)、高次多项式(过拟合)、低次多项式(恰当)。

代码 04 第 1 部分用 MADE 的隐藏层宽度 hh 当作”模型容量”:

宽度 hh参数个数训练集 NN训练:比真实多测试:比真实多测试 − 训练
87415009.8510.770.92
87411000010.4710.520.06
646,3585002.9911.999.00
646,358100007.447.630.19
512169,233500−13.6544.9058.55
512169,233100001.773.231.46
  • **小模型(h=8h = 8)**训练和测试几乎一样,但两者都差;数据从 500 加到 1 万,测试误差只从 10.77 降到 10.52——假设空间太小:偏差。
  • **大模型(h=512h = 512)**在 500 张图上严重过拟合:训练集上比真实分布还好 13.65 bit,测试集上差 44.90 bit;同一个模型在 1 万张图上测试误差降到 3.23——灵活的模型需要更多数据:方差。
  • 最好的容量取决于数据量:500 张图时最小的模型最好(10.77 / 11.99 / 44.90);1 万张图时越大越好(10.52 / 7.63 / 3.23)。

方差到底是什么样子? 代码 04 第 2 部分把同一种模型在 5 个互不相交的训练集(每个 500 张)上各训练一次,看它们对同一批测试图给出的概率:

宽度 hh单个模型:比真实多 bit同一张图在 5 个模型间的标准差5 个模型的混合:比真实多 bit
1610.521.889.59
25626.5313.3013.70

小模型的 5 个”版本”看法很接近(标准差 1.88 bit)——方差小、偏差大。大模型换一个训练集,同一张测试图的 bits 平均要变化 13.3 bit——这就是 slide 21 说的”D\mathcal{D} 的微小扰动会带来非常不同的估计”。把 5 个大模型混合起来(概率取平均),误差从 26.53 降到 13.70 bit:平均掉了一部分方差,这就是集成(ensemble)的原理;小模型的方差本来就小,混合只从 10.52 降到 9.59。(集成等于用了 5 倍的数据;把 2500 张图合在一起训练一个模型通常更好。)

6.3 怎样避免过拟合

原课第 23 页:

  • 硬约束,例如选一个表达能力更弱的模型族:参数更少的小网络;权重共享(NADE 相对每个条件各自一套参数、卷积相对全连接);
  • 对”更简单”的模型的软偏好:奥卡姆剃刀。给目标函数加正则项:objective(x,M)=loss(x,M)+R(M)\text{objective}(x, M) = \text{loss}(x, M) + R(M);
  • 在留出的验证集上评估泛化性能。

代码 04 第 3 部分:h=512h = 512 的 MADE,只有 500 张训练图:

做法训练:比真实多测试:比真实多
不加约束(L2 正则 λ=0\lambda = 0)−13.6544.90
L2 正则 λ=0.001\lambda = 0.001−13.0328.88
L2 正则 λ=0.01\lambda = 0.01−4.8610.46
早停(验证集最好的是第 200 步)4.3710.22
换一个小模型(h=64h = 64)2.9911.99

三类办法都把测试误差从 44.90 拉回到 10–12 bit 左右。早停那次训练的验证集曲线是:第 100 步 36.37、第 200 步 36.12、第 300 步 37.98、第 500 步 44.79、第 1000 步 61.98、第 2000 步 71.07(验证集上的平均 bits,真实分布约 25.6)——只有前 200 步在学真正的结构,之后就开始背训练集。500 张图对 17 万个参数实在太少,什么办法都只能救回一部分;第 1 部分里同一个模型有 1 万张图时只差 3.23 bit。数据是最好的正则化。


7. 条件生成模型与回顾 · Conditional generative models and recap

7.1 条件生成模型

原课第 24 页:假设我们想在给定一些变量 XX 的条件下生成另一些变量 YY,例如文字转语音。我们集中建模 p(Y∣X)p(Y \mid X),用条件损失函数

−log⁡Pθ(y∣x).-\log P_\theta(y \mid x).

因为损失只依赖 Pθ(y∣x)P_\theta(y \mid x),只需估计条件分布,不需要联合分布。

代码 04 第 4 部分:只想要 p(下半张∣上半张)p(\text{下半张} \mid \text{上半张})。条件似然训练只在下半张的 32 个像素上算损失;联合似然训练在全部 64 个像素上算:

宽度 hh训练集 NN联合似然训练:p(下∣上)p(\text{下}\mid\text{上}) 比真实多 bit条件似然训练
1610005.7705.753
16100005.7515.710
12810006.3106.369
128100003.4123.301

两种训练差别很小,哪个更好取决于容量和数据量。原因是:在自回归模型里,联合似然本来就是”上半张的项 + 下半张的项”之和,下半张的条件分布在两种训练里都被直接优化,区别只在于共享的隐藏单元要不要分一部分去建模上半张。真实的条件生成任务(文字 → 语音、图 → 描述)里,输入 XX 往往极其复杂,建模 p(X)p(X) 既困难又没有必要——这时只学 p(Y∣X)p(Y \mid X) 的优势就大得多。第 1 讲说”判别式模型是最简单的条件生成模型”,它用的正是条件似然。

7.2 回顾(原课 slide 25)

  • 对自回归模型,算 pθ(x)p_\theta(x) 很容易;理想情况下,各个条件 log⁡pneural(xi(j)∣x<i(j);θi)\log p_{\text{neural}}(x_i^{(j)} \mid x_{<i}^{(j)}; \theta_i) 可以并行计算(不像 RNN);
  • 所以很自然地用最大似然训练它们;
  • 更高的对数似然不一定意味着更好看的样本(第 1 讲 §5.2:背诵训练集的模型样本完美、似然极差;1% 真样本 + 99% 噪声的模型似然不错、样本极差);
  • 其他衡量相似度的方式也是可能的——生成对抗网络(GAN,第 9–10 讲)。

8. 2023 年之后 · Since 2023

  • 最大似然仍是大模型预训练的核心目标。 大语言模型的预训练损失就是”下一个 token 的交叉熵”——§5.1 的自回归 MLE;困惑度(perplexity)是 2每个 token 的 bits2^{\text{每个 token 的 bits}}。规模定律(scaling laws,Kaplan et al. 2020;Chinchilla,Hoffmann et al. 2022)描述的正是这个交叉熵怎样随参数、数据和算力下降。§3.2 的教训在那里同样适用:交叉熵可以比较模型,但没人知道语言的”真实熵”有多低(规模定律的拟合里有一个”不可约损失”项,就是在估计它)。
  • “语言建模就是压缩”。 §2.2 的压缩解释被认真地用到了大模型上:Delétang et al.(ICLR 2024,Language Modeling Is Compression)用大语言模型配合算术编码去压缩文本、图像和音频,压缩率超过了 PNG、FLAC 等专用压缩器。似然 = 码长,这不只是一个比喻。
  • 只靠最大似然不够。 似然高不等于样本好(§7.2):最大似然训练的语言模型用贪心或束搜索解码时容易重复、乏味(Holtzman et al. 2020 的”神经文本退化”),于是有了 top-p 采样等解码方法;预训练之后还要用指令微调和人类反馈强化学习(RLHF)做”后训练”,目标不再是似然。这和 §2.3 的”前向 KL 模式覆盖”一脉相承:MLE 让模型覆盖人类文本的全部分布,包括低质量的部分;后训练把它往”想要的”那部分推。
  • 扩散模型的训练目标也是似然的界。 第 16 讲会看到,DDPM 的损失是对数似然的变分下界(ELBO)的一个加权版本;流匹配可以看成另一种方式的”拟合分布”。“最大似然 / KL”仍然是理解这些目标的起点。

9. 小结 · Summary

  1. 学习 = 在模型族里找最接近 PdataP_{\text{data}} 的分布;数据有限、计算有限,精确学到一般做不到。“最好”取决于用途;本课关心密度估计。
  2. KL 散度 D(p∥q)=∑plog⁡(p/q)≥0D(p \Vert q) = \sum p \log(p/q) \geq 0,等号当且仅当 p=qp = q(Jensen);不对称;等于用 qq 的编码压缩 pp 的样本多付的比特(交叉熵 = 熵 + KL)。前向 KL 模式覆盖,反向 KL 模式寻找。
  3. 最小化 D(Pdata∥Pθ)D(P_{\text{data}} \Vert P_\theta) ⇔ 最大化期望对数似然(熵是常数)。代价:Pθ≈0P_\theta \approx 0 的样本权重极大;不知道离最优多远。像素世界上,GRU 的 KL ≈ 0.83 bit,最差的 10% 测试图贡献了一半的误差;给任何一张图概率 0,平均对数似然就是 −∞-\infty。
  4. 最大似然估计用经验平均代替期望,等价于最小化”经验分布到模型”的 KL;抛硬币 {H,H,T,H,T}\{H,H,T,H,T\} 时 θ=0.6\theta = 0.6。
  5. 蒙特卡洛估计无偏、收敛、方差 =Var/T= \mathrm{Var}/T;但训练之后训练集上的平均似然过于乐观(N=50N = 50 时训练集上比真实分布还好 19 bit,测试集上差 46 bit),所以要用验证集 / 测试集评价。
  6. 自回归模型的对数似然是各条件对数似然之和;没有参数共享时可以分开优化(FVSBN:64 个逻辑回归分开训练 = 一起训练);一般没有闭式解,用梯度下降。SGD 的小批量梯度是全批量梯度的无偏估计,方差 ∝ 1/B;按看过的数据量算,SGD 远快于梯度下降;在最优点附近 SGD 主要是噪声。
  7. 过拟合与偏差–方差:小模型偏差大、方差小;大模型数据少时方差大(换一个训练集,同一张图的 bits 变化 13 bit);最好的容量取决于数据量。对策:更小的模型 / 权重共享、正则化、早停(验证集)、更多数据、集成。
  8. 条件生成模型只需条件似然 −log⁡Pθ(y∣x)-\log P_\theta(y \mid x)。更高的似然不一定意味着更好的样本,这引出了不用似然的方法(GAN)。

10. 常见误区 · Common pitfalls

  1. “KL 散度是两个分布之间的距离。” 它不对称、不满足三角不等式;D(p∥q)D(p \Vert q) 和 D(q∥p)D(q \Vert p) 可以差很多(§2.1:0.681 vs 0.854;§2.3:1.1 vs 24 bit)。
  2. “最大似然 = 最小化 KL,所以似然最高的模型就离真实分布最近。” 只在同一份数据上比较模型时成立;单看似然不知道离最优还差多远,因为熵未知。
  3. “训练集上的似然越高越好。” 训练集上的平均似然在训练之后是过于乐观的估计;N=50N = 50 时模型在训练集上甚至比真实分布还”好”。要看测试集 / 验证集。
  4. “蒙特卡洛估计无偏,所以一个样本就够了。” 无偏只说明平均正确;T=1T = 1 时估计的标准差是 7 bit。要看方差。
  5. “小批量梯度有噪声,所以 SGD 比梯度下降差。” 按计算量算,SGD 通常好得多(同样看 1 遍数据:GD 38.3 vs B=5B = 5 的 SGD 8.0 bit)。噪声的问题主要在最优点附近,用衰减学习率解决。
  6. “模型越大越好。” 取决于数据量:500 张图时最小的 MADE 最好,17 万参数的 MADE 测试误差高达 44.9 bit。
  7. “模型可以对罕见的东西给概率 0,反正它很少出现。” 只要测试集里出现一次,对数似然就是 −∞-\infty。最大似然天然惩罚”过于自信”。
  8. “条件生成模型和联合模型给出的条件分布一定差很多。” 对自回归模型,联合似然本来就包含了条件分布的项,两种训练差别很小(§7.1);条件似然的优势在输入 XX 很复杂、很难建模时才明显。

11. 练习 · Exercises

练习 1(KL 的非负性) 用 Jensen 不等式证明 D(p∥q)≥0D(p \Vert q) \geq 0。等号什么时候成立?如果某个 xx 满足 p(x)>0p(x) > 0 而 q(x)=0q(x) = 0,D(p∥q)D(p \Vert q) 是多少?反过来 p(x)=0p(x) = 0、q(x)>0q(x) > 0 呢?

参考答案

D(p∥q)=Ep[−log⁡(q/p)]≥−log⁡Ep[q/p]=−log⁡∑x:p(x)>0q(x)≥−log⁡1=0D(p \Vert q) = \mathbb{E}_p[-\log(q/p)] \geq -\log \mathbb{E}_p[q/p] = -\log \sum_{x: p(x) > 0} q(x) \geq -\log 1 = 0。Jensen 的等号要求 q(x)/p(x)q(x)/p(x) 在 pp 的支撑上是常数,加上第二个不等号要求 qq 的质量全在 pp 的支撑上,合起来就是 p=qp = q。p(x)>0p(x) > 0、q(x)=0q(x) = 0 时那一项是 p(x)log⁡(p(x)/0)=+∞p(x) \log(p(x)/0) = +\infty,所以 D(p∥q)=∞D(p \Vert q) = \infty(这就是 §3.5 “概率为 0 的样本”);p(x)=0p(x) = 0、q(x)>0q(x) > 0 时那一项按约定是 0⋅log⁡0=00 \cdot \log 0 = 0,不受影响——这正是前向 KL 不在乎”qq 多放了质量”的原因。

练习 2(交叉熵 = 熵 + KL) 证明 H(p,q)=H(p)+D(p∥q)H(p, q) = H(p) + D(p \Vert q)。对 p(H)=0.9p(H) = 0.9、q(H)=0.7q(H) = 0.7 手算三个量,和代码 01 的表核对。

参考答案

H(p,q)=−∑plog⁡q=−∑plog⁡p+∑plog⁡(p/q)=H(p)+D(p∥q)H(p, q) = -\sum p \log q = -\sum p \log p + \sum p \log(p/q) = H(p) + D(p \Vert q)。数值:H(p)=−0.9log⁡20.9−0.1log⁡20.1=0.137+0.332=0.469H(p) = -0.9\log_2 0.9 - 0.1 \log_2 0.1 = 0.137 + 0.332 = 0.469;H(p,q)=−0.9log⁡20.7−0.1log⁡20.3=0.463+0.174=0.637H(p, q) = -0.9 \log_2 0.7 - 0.1 \log_2 0.3 = 0.463 + 0.174 = 0.637;D(p∥q)=0.637−0.469=0.168D(p \Vert q) = 0.637 - 0.469 = 0.168。

练习 3(类别分布的 MLE) KK 面骰子,参数 θ1,…,θK\theta_1, \dots, \theta_K(∑kθk=1\sum_k \theta_k = 1)。数据里第 kk 面出现了 nkn_k 次,共 NN 次。用拉格朗日乘子法证明 MLE 是 θk=nk/N\theta_k = n_k / N。第 2 讲里”数数”得到的 CPT 为什么就是最大似然估计?

参考答案

最大化 ∑knklog⁡θk\sum_k n_k \log \theta_k,约束 ∑kθk=1\sum_k \theta_k = 1。拉格朗日函数 ∑knklog⁡θk−λ(∑kθk−1)\sum_k n_k \log \theta_k - \lambda(\sum_k \theta_k - 1) 对 θk\theta_k 求导:nk/θk−λ=0⇒θk=nk/λn_k / \theta_k - \lambda = 0 \Rightarrow \theta_k = n_k / \lambda;代入约束得 λ=N\lambda = N。贝叶斯网络的对数似然按节点、按父节点取值分解成许多独立的”骰子”(每一行 CPT 一个),每个骰子的 MLE 就是”这一行里各取值出现的比例”——数数。拉普拉斯平滑相当于在数数之前给每个取值加上伪计数(贝叶斯观点下,“每个取值加 1”是均匀 Dirichlet 先验下参数的后验均值)。

练习 4(MLE = 最小化经验分布的 KL) 证明 arg⁡max⁡θ1m∑x∈Dlog⁡Pθ(x)=arg⁡min⁡θD(p^D∥Pθ)\arg\max_\theta \frac{1}{m}\sum_{x \in \mathcal{D}} \log P_\theta(x) = \arg\min_\theta D(\hat{p}_{\mathcal{D}} \Vert P_\theta)。如果模型族包含 p^D\hat{p}_{\mathcal{D}} 本身,MLE 的答案是什么?这和第 1 讲的”查表”模型有什么关系?

参考答案

D(p^D∥Pθ)=∑xp^D(x)log⁡p^D(x)−∑xp^D(x)log⁡Pθ(x)D(\hat{p}_{\mathcal{D}} \Vert P_\theta) = \sum_x \hat{p}_{\mathcal{D}}(x) \log \hat{p}_{\mathcal{D}}(x) - \sum_x \hat{p}_{\mathcal{D}}(x) \log P_\theta(x),第一项与 θ\theta 无关,第二项恰好是 −1m∑x∈Dlog⁡Pθ(x)-\frac{1}{m}\sum_{x \in \mathcal{D}} \log P_\theta(x)。如果 p^D∈M\hat{p}_{\mathcal{D}} \in \mathcal{M},KL 的最小值 0 在 Pθ=p^DP_\theta = \hat{p}_{\mathcal{D}} 处取到:MLE 的答案就是”把训练集背下来、其余一律概率 0”。第 1 讲的查表模型几乎就是它(只留了 1% 给没见过的图,否则测试似然是 −∞-\infty)。这是过拟合最纯粹的形式(slide 20 “the data is the model”)。

练习 5(前向 KL 拟合高斯 = 矩匹配) 证明:在所有高斯 q=N(μ,σ2)q = \mathcal{N}(\mu, \sigma^2) 中,最小化 D(p∥q)D(p \Vert q) 的解是 μ=Ep[x]\mu = \mathbb{E}_p[x]、σ2=Varp[x]\sigma^2 = \mathrm{Var}_p[x]。和代码 01 的 μ=0.00\mu = 0.00、σ=2.57\sigma = 2.57 核对(pp 是两个 N(±2.5,0.62)\mathcal{N}(\pm 2.5, 0.6^2) 的等权混合)。

参考答案

D(p∥q)=常数−Ep[log⁡q(x)]=常数+log⁡σ+Ep[(x−μ)2]2σ2D(p \Vert q) = \text{常数} - \mathbb{E}_p[\log q(x)] = \text{常数} + \log \sigma + \frac{\mathbb{E}_p[(x - \mu)^2]}{2\sigma^2}。对 μ\mu 求导得 μ=Ep[x]\mu = \mathbb{E}_p[x];代入后对 σ\sigma 求导:1σ−Varp[x]σ3=0⇒σ2=Varp[x]\frac{1}{\sigma} - \frac{\mathrm{Var}_p[x]}{\sigma^3} = 0 \Rightarrow \sigma^2 = \mathrm{Var}_p[x]。混合分布的均值是 0,方差 = 成分方差 + 成分均值的方差 = 0.36+6.25=6.610.36 + 6.25 = 6.61,σ=2.571\sigma = 2.571。

练习 6(需要多少测试图?) 单张测试图的 −log⁡2pθ(x)-\log_2 p_\theta(x) 标准差约 7.3 bit。(a) 要让测试 bits 的标准误降到 0.01 bit,需要多少张测试图?(b) 两个模型在同一批图上的 bits 之差,标准差约 1.6 bit(代码 02:GRU 的配对标准误 0.023 × √5000 ≈ 1.6)。要把差的标准误降到 0.01 bit,需要多少张?

参考答案

(a) 7.3/n=0.01⇒n=7302≈537.3/\sqrt{n} = 0.01 \Rightarrow n = 730^2 \approx 53 万张。(b) 1.6/n=0.01⇒n=1602=25,6001.6/\sqrt{n} = 0.01 \Rightarrow n = 160^2 = 25{,}600 张。配对比较需要的样本少 20 倍——两个模型在”难图”上一起难、“易图”上一起易,差值的波动小得多。

练习 7(训练似然的乐观偏差,最极端的情形) 抛硬币,只抛一次,结果是 H。(a) MLE 是多少?训练集上的对数似然是多少?(b) 真实的 P(H)=0.6P(H) = 0.6,这个 MLE 模型在测试集上的期望对数似然是多少?(c) 加一个伪计数(θ=(nH+1)/(N+2)\theta = (n_H + 1)/(N + 2))以后呢?

参考答案

(a) θ^=1\hat{\theta} = 1;训练集对数似然 log⁡1=0\log 1 = 0(完美)。(b) 测试时出现 T 的概率是 0.4,而模型给 T 概率 0,期望对数似然 =0.6log⁡1+0.4log⁡0=−∞= 0.6 \log 1 + 0.4 \log 0 = -\infty。(c) θ=2/3\theta = 2/3,期望对数似然 =0.6log⁡(2/3)+0.4log⁡(1/3)≈−0.683= 0.6\log(2/3) + 0.4 \log(1/3) \approx -0.683 nat,有限。平滑(正则化)牺牲一点训练集上的似然,换来了泛化。

练习 8(小批量梯度无偏) 设全批量梯度 g=1m∑j=1m∇ℓjg = \frac{1}{m}\sum_{j=1}^m \nabla \ell_j,小批量梯度 g^=1B∑b=1B∇ℓJb\hat{g} = \frac{1}{B}\sum_{b=1}^B \nabla \ell_{J_b},其中 JbJ_b 独立地从 {1,…,m}\{1, \dots, m\} 均匀抽取。证明 E[g^]=g\mathbb{E}[\hat{g}] = g,并且 E∥g^−g∥2=1BE∥∇ℓJ−g∥2\mathbb{E}\Vert\hat{g} - g\Vert^2 = \frac{1}{B}\mathbb{E}\Vert\nabla \ell_J - g\Vert^2。这解释了代码 03 第 3 部分的哪个现象?

参考答案

E[∇ℓJ]=1m∑j∇ℓj=g\mathbb{E}[\nabla \ell_J] = \frac{1}{m}\sum_j \nabla \ell_j = g,所以 E[g^]=g\mathbb{E}[\hat{g}] = g。g^−g=1B∑b(∇ℓJb−g)\hat{g} - g = \frac{1}{B}\sum_b (\nabla \ell_{J_b} - g) 是 BB 个独立、均值为 0 的向量的平均,方差(这里是期望平方范数)是单个的 1/B1/B。代码 03 的相对平方误差在 BB 扩大 16 倍时缩小约 16 倍(4.81 → 0.31 → 0.019)。在最优点附近 g≈0g \approx 0 而单样本梯度的方差不为 0,所以相对误差爆炸。

练习 9(动手:正则化太强会怎样) 在 04_overfitting.py 第 3 部分的 for wd in [0.0, 1e-3, 1e-2] 里加上 1e-1 和 1.0,重新运行(多花约 20 秒)。运行前先预测:训练误差和测试误差会怎样变化?

参考答案(预测的思路)

λ\lambda 继续增大,参数被压向 0:模型越来越接近”所有 logit 都只有偏置”——即独立像素模型。训练误差会上升(不再能背训练集,最后接近独立像素的约 10 bit),测试误差先继续下降(过拟合被抑制)、然后上升(欠拟合,偏差占主导)。两者会在某个 λ\lambda 附近交汇。具体数字以你的运行为准。


12. 延伸阅读 · Further reading

原课材料

信息论与 KL

  • Cover & Thomas, Elements of Information Theory(2006),第 2 章(熵、KL)、第 5 章(数据压缩、Huffman 编码)
  • MacKay, Information Theory, Inference, and Learning Algorithms(2003),第 4–6 章;免费电子版:https://www.inference.org.uk/itila/

最大似然、偏差–方差、优化

  • Murphy, Probabilistic Machine Learning: An Introduction(2022),第 4 章(参数估计)
  • Bottou, Curtis & Nocedal, Optimization Methods for Large-Scale Machine Learning, SIAM Review 2018(SGD 的理论与实践)
  • Minka, Divergence measures and message passing(2005)——前向 / 反向 KL 与其他散度的经典对比

2023 年之后

  • Hoffmann et al., Training Compute-Optimal Large Language Models(Chinchilla), NeurIPS 2022
  • Delétang et al., Language Modeling Is Compression, ICLR 2024
  • Holtzman, Buys, Du, Forbes & Choi, The Curious Case of Neural Text Degeneration, ICLR 2020

13. 下一讲预告 · Next lecture

第 3–4 讲的自回归模型有一个共同点:所有变量都是可见的,pθ(x)p_\theta(x) 可以精确计算,所以最大似然很直接。但它们”没有天然的办法得到特征”(第 3 讲 §6.5)。第 5 讲(原课 Lecture 5,进入 VAEs)引入隐变量 zz:

  • 动机:数据里有大量看不见的变化因素(形状、位置、姿态、光照……),把它们显式地建模成 zz;
  • 混合高斯与”简单分布的混合 = 复杂分布”(第 2 讲 §6 的延续);
  • 边际似然 p(x)=∑zp(x,z)p(x) = \sum_z p(x, z) 难算——第 3 讲代码 05 的”逆着顺序的条件”就是一个预演:朴素蒙特卡洛几乎所有样本贡献为零、重要性采样、以及 log⁡\log 带来的 Jensen 偏差;
  • 证据下界(ELBO):log⁡p(x)=ELBO+DKL(q∥p(z∣x))\log p(x) = \text{ELBO} + D_{\mathrm{KL}}(q \Vert p(z \mid x))——本讲的 KL 散度在那里扮演主角,而且是反向 KL。

像素世界的真实结构正好是一个隐变量模型(177 个离散的 zz),所以下一讲可以把真实的 log⁡p(x)\log p(x)、后验、ELBO 的差距全都精确地算出来。

← 返回课程目录