Lecture 11 · 能量模型(一):表示、配分函数与对比散度 · Energy-Based Models I

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

课程源码 ZIP ↓

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

本篇目录

对应 Maps to:Stanford CS236 Deep Generative Models(Fall 2023,Stefano Ermon),Lecture 11 · 2023-11-01 · Energy-Based Models(slides:cs236_lecture11.pdf,27 页)。 依据说明:本讲按原课 slides 的顺序展开:回顾(似然模型的结构限制、GAN 的不稳定)→ 本讲:能量模型 → 参数化概率分布的两个条件 → 归一化与”体积” → 解析可积的构件(高斯、指数分布、指数族)与组合方式(自回归 = 乘积、隐变量 = 混合)→ 能量模型的定义、为什么用指数 → 优缺点、维数灾难 → 比较两个点不需要 Z、应用 → 例子:Ising 模型、专家乘积、受限玻尔兹曼机、深度玻尔兹曼机 → 学习:配分函数难算、训练直觉、对比散度、似然梯度的推导 → 采样:MCMC、朗之万动力学 → 现代能量模型。四种非负化方法的对比、维数灾难的数值实验、Ising 去噪与贝叶斯最优去噪器的比较、RBM 上 CD 与精确似然梯度的定量比较、“链跨不过去”导致 CD 学不到模式权重是本讲义补充的。凡是 Z 能精确算的地方(一维 / 二维网格、小 Ising、隐单元少的 RBM),都和真相比较。 配套代码 Code:code/lecture11/(PyTorch;1 个模块 + 4 个演示脚本,最长的约 80 秒) 预计阅读时间:3 小时(含运行代码)


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

0.1 学习目标 Learning goals

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

  1. 说出参数化概率分布的两个条件,解释为什么”非负”容易而”和为 1”难;写出能量模型 pθ(x)=exp⁡(fθ(x))/Z(θ)p_\theta(x) = \exp(f_\theta(x))/Z(\theta),说出选指数的三条理由。
  2. 解释维数灾难:为什么数值计算 Z(θ)Z(\theta) 的代价随维数指数增长;以及为什么比较两个点(异常检测、去噪、MAP 推断)不需要 ZZ。
  3. 写出 Ising 模型、专家乘积、受限玻尔兹曼机(RBM)的能量函数,推导 RBM 的条件分布和自由能,知道”受限”带来了什么。
  4. 推导似然梯度 ∇θlog⁡pθ(x)=∇θfθ(x)−Ex′∼pθ[∇θfθ(x′)]\nabla_\theta\log p_\theta(x) = \nabla_\theta f_\theta(x) - \mathbb{E}_{x' \sim p_\theta}[\nabla_\theta f_\theta(x')],说明对比散度怎样用模型样本近似第二项,以及 CD-kk、PCD 的区别。
  5. 写出 Metropolis–Hastings 和朗之万 MCMC 的更新式,解释为什么它们只需要 ff 的差或梯度;理解 MCMC 混合慢时,基于采样的训练会出什么问题。

0.2 先修与本讲范围 Prerequisites & scope

默认你已经会 Assumed本讲只给直觉,后面几讲再展开 Previewed only
第 2 讲:马尔可夫随机场、条件独立MH 的细致平衡、朗之万的偏差、混合速度(第 12 讲)
第 4 讲:最大似然、KL不需要采样的训练:得分匹配、噪声对比估计(第 12 讲)
第 5 讲:隐变量、对隐变量求和、朴素蒙特卡洛的困难得分模型与扩散模型(第 13–16 讲)
第 9–10 讲:GAN、判别器

0.3 本讲地图 Map

§1  回顾:已有模型的限制;本讲计划
§2  参数化概率分布:非负容易、归一化难;解析可积的构件与组合方式                       ← 代码 01 第 1 部分
§3  能量模型:定义、为什么用指数、优缺点、维数灾难、比较不需要 Z                       ← 代码 01 第 2 部分
§4  例子:Ising 模型、专家乘积、RBM、深度玻尔兹曼机                                   ← 代码 02、代码 01 第 3 部分、代码 03 第 1 部分
§5  学习:训练直觉、对比散度、似然梯度                                               ← 代码 03 第 2–3 部分
§6  采样:MCMC 与朗之万;链混合慢的后果;现代能量模型                                 ← 代码 04
§7  2023 年之后
§8–12  小结、常见误区、练习、延伸阅读、下一讲预告

0.4 记号 Notation

符号含义
fθ(x)f_\theta(x)未归一化的对数概率(越大越可能);能量 Eθ(x)=−fθ(x)E_\theta(x) = -f_\theta(x)
Z(θ)=∫exp⁡(fθ(x)) dxZ(\theta) = \int\exp(f_\theta(x))\,dx配分函数(partition function),归一化常数
gθ(x)≥0g_\theta(x) \geq 0任意非负函数;pθ=gθ/Volume(gθ)p_\theta = g_\theta/\mathrm{Volume}(g_\theta)
x∈{0,1}nx \in \{0,1\}^n,z∈{0,1}mz \in \{0,1\}^mRBM 的可见单元、隐单元
F(x)=−log⁡∑zexp⁡(⋯ )F(x) = -\log\sum_z\exp(\cdots)RBM 的自由能,p(x)=e−F(x)/Zp(x) = e^{-F(x)}/Z
yi∈{−1,+1}y_i \in \{-1, +1\},xix_iIsing 去噪:真实像素、带噪像素
β\beta,η\etaIsing 模型里相邻像素的耦合强度、对观测的信任程度

0.5 关于数字 · About the numbers

二维、一维实验用细网格精确地算 ZZ(代码里的 Grid);4×4 的 Ising 模型有 2162^{16} 种状态,可以全部列举;RBM 只用 12 个隐单元,可以把隐单元精确地求和掉。像素世界(第 1 讲)的 bits 是”每张 8×8 图比真实分布多几 bit”,可以和前几讲的排行榜直接比较。几处和预想不同的结果记录在 代码 README 的”关于实验结果”里。


1. 回顾与本讲计划 · Recap

slide 2:

  • 自回归模型:pθ(x1,…,xn)=∏ipθ(xi∣x<i)p_\theta(x_1, \dots, x_n) = \prod_i p_\theta(x_i \mid x_{<i});
  • 归一化流:pθ(x)=p(z)∣det⁡Jfθ(x)∣p_\theta(x) = p(z)|\det J_{f_\theta}(x)|,z=fθ(x)z = f_\theta(x);
  • 变分自编码器:pθ(x)=∫p(z)pθ(x∣z) dzp_\theta(x) = \int p(z)p_\theta(x \mid z)\,dz。

缺点:模型结构受限。 自回归模型要选顺序、每个条件都要归一化;流要可逆、雅可比要好算;VAE 只能优化下界。这些限制都是为了让 pθ(x)p_\theta(x) 自动归一化。

slide 3:GAN,min⁡θmax⁡ϕEpdata[log⁡Dϕ(x)]+Ep(z)[log⁡(1−Dϕ(Gθ(z)))]\min_\theta\max_\phi\mathbb{E}_{p_{\text{data}}}[\log D_\phi(x)] + \mathbb{E}_{p(z)}[\log(1 - D_\phi(G_\theta(z)))]。两样本检验,可以(近似地)优化 ff-散度和 Wasserstein 距离;结构非常灵活,但似然不可算、训练不稳定、难以评估、会模式坍塌。

slide 4:本讲:能量模型(EBM)。

  • 非常灵活的模型结构;
  • 稳定的训练;
  • 相对较高的样本质量;
  • 灵活的组合。

(后面会看到,“稳定的训练”取决于用什么方法训练——代码 04 就是一个不稳定的例子。)


2. 参数化概率分布 · Parameterizing probability distributions

2.1 两个条件

slide 5:概率分布 p(x)p(x) 是生成建模的基本构件,它要满足:

  1. 非负:p(x)≥0p(x) \geq 0;
  2. 和为 1:∑xp(x)=1\sum_x p(x) = 1(连续变量是 ∫p(x) dx=1\int p(x)\,dx = 1)。

想出一个非负的 pθ(x)p_\theta(x) 并不难。给任意函数 fθ(x)f_\theta(x),可以选 gθ(x)=fθ(x)2,gθ(x)=exp⁡(fθ(x)),gθ(x)=∣fθ(x)∣,gθ(x)=log⁡(1+exp⁡(fθ(x))),…g_\theta(x) = f_\theta(x)^2, \quad g_\theta(x) = \exp(f_\theta(x)), \quad g_\theta(x) = |f_\theta(x)|, \quad g_\theta(x) = \log(1 + \exp(f_\theta(x))), \quad \dots

2.2 和为 1 是关键

slide 6:总”体积”是固定的:提高 p(xtrain)p(x_{\text{train}}) 保证 xtrainx_{\text{train}} 相对于其他点变得更可能了——这正是最大似然起作用的原因(第 4 讲)。问题是 gθ(x)≥0g_\theta(x) \geq 0 容易,但 ∑xgθ(x)=Z(θ)≠1\sum_x g_\theta(x) = Z(\theta) \neq 1,所以 gθg_\theta 一般不是合法的概率质量函数或密度。

slide 7 的解法:除以体积, pθ(x)=1Z(θ)gθ(x)=1∫gθ(x) dxgθ(x)=1Volume(gθ)gθ(x),p_\theta(x) = \frac{1}{Z(\theta)}g_\theta(x) = \frac{1}{\int g_\theta(x)\,dx}g_\theta(x) = \frac{1}{\mathrm{Volume}(g_\theta)}g_\theta(x), 于是 ∫pθ(x) dx=Z(θ)/Z(θ)=1\int p_\theta(x)\,dx = Z(\theta)/Z(\theta) = 1。

2.3 选一个体积有解析式的 g

slide 7 的例子:

  1. g(μ,σ)(x)=e−(x−μ)22σ2g_{(\mu,\sigma)}(x) = e^{-\frac{(x-\mu)^2}{2\sigma^2}},体积 2πσ2\sqrt{2\pi\sigma^2} → 高斯分布;
  2. gλ(x)=e−λxg_\lambda(x) = e^{-\lambda x}(x≥0x \geq 0),体积 1/λ1/\lambda → 指数分布;
  3. gθ(x)=h(x)exp⁡{θ⋅T(x)}g_\theta(x) = h(x)\exp\{\theta \cdot T(x)\},体积 exp⁡{A(θ)}\exp\{A(\theta)\},A(θ)=log⁡∫h(x)exp⁡{θ⋅T(x)}dxA(\theta) = \log\int h(x)\exp\{\theta\cdot T(x)\}dx → 指数族:正态、泊松、指数、伯努利、beta、gamma、Dirichlet、Wishart……

这些函数形式必须能解析积分。它们很受限,但作为构件非常有用。

slide 8:更复杂的模型由这些构件组合而成,而组合方式保证了归一化:

  1. 自回归 = 归一化对象的乘积:∫x∫ypθ(x)pθ′(x)(y) dy dx=∫xpθ(x)∫ypθ′(x)(y) dy⏟=1dx=1\int_x\int_y p_\theta(x)p_{\theta'(x)}(y)\,dy\,dx = \int_x p_\theta(x)\underbrace{\int_y p_{\theta'(x)}(y)\,dy}_{=1}dx = 1;
  2. 隐变量 = 归一化对象的混合:∫x[αpθ(x)+(1−α)pθ′(x)]dx=α+(1−α)=1\int_x[\alpha p_\theta(x) + (1-\alpha)p_{\theta'}(x)]dx = \alpha + (1 - \alpha) = 1。

如果用”体积”不容易解析计算的 gθg_\theta 呢? 这就是能量模型。

2.4 为什么偏偏是指数?——一个实验

代码 01 第 1 部分:同一个网络 fθf_\theta(1 → 64 → 64 → 1,tanh),四种方法变成非负的 gθg_\theta,在网格上精确地除以 ZZ,用最大似然拟合一个密度跨越很多数量级的一维数据(0.6 N(−2,0.32)+0.3 N(1,1)+0.1 N(5,0.152)0.6\,\mathcal{N}(-2, 0.3^2) + 0.3\,\mathcal{N}(1, 1) + 0.1\,\mathcal{N}(5, 0.15^2)):

gθ(x)g_\theta(x)比真实分布多(= KL,nat)网络输出 ff 的范围
exp⁡(f)\exp(f)(能量模型)0.011[−0.33, +13.11]
softplus(f)\mathrm{softplus}(f)0.013[−13.68, +1.31]
∣f∣\lvert f\rvert0.200[−2.67, +0.40]
f2f^20.286[−1.39, +2.51]

exp⁡(f)\exp(f) 最好:密度相差几十个数量级时,log⁡p\log p 只差几十,网络输出一个变化平缓的 ff 就够了。softplus(f)\mathrm{softplus}(f) 几乎一样好——ff 很负时 log⁡(1+ef)≈ef\log(1 + e^f) \approx e^f,网络正是用了这一段(ff 一直到 −13.7),在低密度区域它本质上就是一个能量模型。f2f^2 和 ∣f∣|f| 要在大片区域里输出”几乎正好是 0”的值,而且在 f=0f = 0 处 log⁡g=−∞\log g = -\infty,梯度剧烈变化。


3. 能量模型 · Energy-based models

3.1 定义

slide 9: pθ(x)=1∫exp⁡(fθ(x)) dxexp⁡(fθ(x))=1Z(θ)exp⁡(fθ(x)).p_\theta(x) = \frac{1}{\int\exp(f_\theta(x))\,dx}\exp(f_\theta(x)) = \frac{1}{Z(\theta)}\exp(f_\theta(x)). 归一化常数 Z(θ)=∫exp⁡(fθ(x)) dxZ(\theta) = \int\exp(f_\theta(x))\,dx 也叫配分函数(partition function,来自统计物理)。

为什么用指数(而不是比如 fθ(x)2f_\theta(x)^2)?

  1. 想捕捉概率的巨大变化,对数概率是我们想要的自然尺度;否则需要高度不光滑的 fθf_\theta(§2.4 的实验)。
  2. 指数族:很多常见分布都能写成这种形式。
  3. 这类分布在统计物理里相当一般的假设下自然出现(最大熵原理、热力学第二定律)。−fθ(x)-f_\theta(x) 叫做能量,模型因此得名;直观地说,能量低(fθf_\theta 高)的配置更可能——玻尔兹曼分布 p∝e−E/kTp \propto e^{-E/kT}。

最大熵的一句话说明:在所有满足”Ep[T(x)]=\mathbb{E}_p[T(x)] = 给定值”的分布中,熵最大的那一个形如 p(x)∝exp⁡(θ⋅T(x))p(x) \propto \exp(\theta \cdot T(x))(拉格朗日乘子法)。所以如果你只想让模型匹配数据的某些统计量、此外不做多余的假设,指数形式是”最不武断”的选择。

3.2 优点与缺点

slide 10:

  • 优点:极大的灵活性——几乎可以用任何你想要的函数 fθ(x)f_\theta(x)。
  • 缺点:
    1. 从 pθ(x)p_\theta(x) 采样很难;
    2. 计算和优化似然很难(学习很难);
    3. 没有特征学习(但可以加隐变量)。

维数灾难:根本问题在于,当没有解析解时,数值计算 Z(θ)Z(\theta) 的代价随 xx 的维数指数增长。

代码 01 第 2 部分用一个 ZZ 已知的例子(f(x)=−∥x∥2/2f(x) = -\Vert x\Vert^2/2,log⁡Z=d2log⁡2π\log Z = \frac d2\log 2\pi):

维数 dd网格点数(每维 20 个)网格 log Z 误差均匀采样(1 万个样本)的相对标准误有贡献的样本比例
1200.000001.3%74.7%
24000.000002.6%43.5%
4160,0000.000007.6%10.1%
664,000,0000.0000023.3%1.9%

网格在每一维上都很准,但点数是 20d20^d——一张 8×8 的连续图像(d=64d = 64)要 2064≈108320^{64} \approx 10^{83} 个点。均匀采样的代价不随维数变,可几乎所有样本都落在 exp⁡(f)≈0\exp(f) \approx 0 的地方,相对误差约按 2.8d/22.8^{d/2} 增长(练习 8)——和第 5 讲”朴素蒙特卡洛估计边际似然”是同一个问题。

尽管如此,有些任务不需要知道 Z(θ)Z(\theta)。

3.3 比较不需要 Z

slide 11:给 xx、x′x',计算 pθ(x)p_\theta(x) 或 pθ(x′)p_\theta(x') 需要 Z(θ)Z(\theta)。但它们的比值 pθ(x)pθ(x′)=exp⁡(fθ(x)−fθ(x′))\frac{p_\theta(x)}{p_\theta(x')} = \exp(f_\theta(x) - f_\theta(x')) 不涉及 Z(θ)Z(\theta)。这意味着我们可以轻松地判断哪个更可能。应用:异常检测(ff 低于阈值就报警,阈值本身可以在数据上校准)、去噪。

slide 12:物体识别、序列标注、图像修复——给定一个训练好的模型,很多应用只需要相对比较,不需要 ZZ。例如分类:p(y∣x)=exp⁡(f(x,y))∑y′exp⁡(f(x,y′))p(y \mid x) = \frac{\exp(f(x, y))}{\sum_{y'}\exp(f(x, y'))},归一化只对类别 yy 求和(几个或几千个),而不是对所有图像 xx 求和——softmax 分类器本身就是一个条件能量模型。


4. 例子 · Examples

4.1 Ising 模型

slide 13:有一张真实图像 y∈{0,1}3×3y \in \{0, 1\}^{3\times3} 和一张损坏的图像 x∈{0,1}3×3x \in \{0, 1\}^{3\times3}。我们知道 xx,想恢复 yy。用马尔可夫随机场建模联合分布: p(y,x)=1Zexp⁡(∑iψi(xi,yi)+∑(i,j)∈Eψij(yi,yj)).p(y, x) = \frac{1}{Z}\exp\Big(\sum_i\psi_i(x_i, y_i) + \sum_{(i,j) \in E}\psi_{ij}(y_i, y_j)\Big).

  • ψi(xi,yi)\psi_i(x_i, y_i):第 ii 个损坏的像素依赖第 ii 个原始像素;
  • ψij(yi,yj)\psi_{ij}(y_i, y_j):相邻的像素倾向于取相同的值。

原图是什么样?最大化 p(y∣x)p(y \mid x),等价地,最大化 p(y,x)p(y, x)(p(x)p(x) 和 yy 无关)——不需要 ZZ。

代码里用 ±1\pm 1 编码,f(y;x)=η∑ixiyi+β∑(i,j)yiyjf(y; x) = \eta\sum_i x_iy_i + \beta\sum_{(i,j)}y_iy_j。对独立的翻转噪声(概率 rr),η=12log⁡1−rr\eta = \frac12\log\frac{1-r}{r} 恰好是正确的观测项强度。推断方法都只用到局部的 ff 差值:

  • 吉布斯采样:p(yi=+1∣其余)=σ(2hi)p(y_i = +1 \mid \text{其余}) = \sigma(2h_i),hi=ηxi+β∑j∼iyjh_i = \eta x_i + \beta\sum_{j \sim i}y_j(练习 5);棋盘格顺序一次更新所有互不相邻的像素;
  • ICM(迭代条件众数):每次把一个像素设成”给定邻居时最可能的值”,贪心地爬到一个局部最大值。

代码 02 第 1 部分(4×4,r=0.2r = 0.2,2162^{16} 种 yy 可以精确列举):换 200 次噪声取平均,错误像素数(共 16 个):

β\beta带噪精确 MAP精确边缘 > ½ICM
03.313.313.313.31
0.43.312.572.942.42
0.63.313.713.122.42
0.83.315.754.492.85

适中的 β\beta 有帮助,太大时先验压过观测、大块被抹平。MAP(最可能的整张图)和”逐像素取后验边缘”是两种不同的决策。ICM 只找到局部最优,β\beta 大时反而比精确 MAP 好——它从带噪图像出发、停在附近,多了一个”别离观测太远”的隐含约束。吉布斯采样估计的边缘和精确值的平均误差从 10 次扫描的 0.045 降到 10,000 次的 0.0013,而 ZZ 从头到尾没有出现。

手写的能量函数能走多远? 代码 02 第 2 部分在像素世界上加 10% / 20% 的翻转噪声,和”知道真实图形引擎”的贝叶斯最优去噪器比较(像素世界是 177 个配置的混合,带噪观测下的后验可以精确算):

翻转噪声带噪图像全白(什么都不画)Ising + ICMIsing + 吉布斯边缘贝叶斯最优
10%10.11%13.36%8.51%8.78%6.05%
20%19.90%13.36%15.33%13.32%9.40%

20% 噪声时,吉布斯边缘的 13.3% 看起来不错,但它几乎把所有笔画都抹掉了——错误率和”全白”一样。像素世界的笔画只有一个像素宽,“相邻相同”会把细线当成噪声。能量模型的价值取决于 ff 里写进了多少关于数据的知识;这正是要学 ff 的理由(§5)。

4.2 专家乘积

slide 14:假设你训练了几个模型 qθ1(x)q_{\theta_1}(x)、rθ2(x)r_{\theta_2}(x)、tθ3(x)t_{\theta_3}(x)(可以是不同的模型:PixelCNN、流……)。每个都像一个专家,能给输入 xx 打分。假设专家们独立地判断,很自然地想把它们集成成 qθ1(x)rθ2(x)tθ3(x)q_{\theta_1}(x)r_{\theta_2}(x)t_{\theta_3}(x)。为了得到合法的分布,需要归一化: pθ1,θ2,θ3(x)=1Z(θ1,θ2,θ3)qθ1(x)rθ2(x)tθ3(x).p_{\theta_1,\theta_2,\theta_3}(x) = \frac{1}{Z(\theta_1, \theta_2, \theta_3)}q_{\theta_1}(x)r_{\theta_2}(x)t_{\theta_3}(x). 注意:它像一个与(AND)操作——只要有一个模型给出零概率,乘积就是零;混合模型更像或(OR)。slide 15 是 Du et al.(2020)的组合生成:把”微笑""戴眼镜""男性”等属性的能量模型加起来(对数相加 = 概率相乘),生成同时具有这些属性的人脸。

代码 01 第 3 部分:专家 A = ”yy 接近 0”(一条横带),专家 B = “离原点约 2”(一个圆环)。乘积有 94.0% 的质量落在”y≈0y \approx 0 且 ∥x∥≈2\Vert x\Vert \approx 2“的两个小区域里;混合则是两者的并集。在方框 [−4,4]2[-4, 4]^2 里 log⁡ZA=2.305\log Z_A = 2.305、log⁡ZB=2.064\log Z_B = 2.064,而乘积的 log⁡Z=0.492≠2.305+2.064\log Z = 0.492 \neq 2.305 + 2.064——即使每个专家都是归一化的,乘积也必须重新归一化,这就是专家乘积成为能量模型的原因。

4.3 受限玻尔兹曼机

slide 16:RBM:带隐变量的能量模型。两类变量:x∈{0,1}nx \in \{0, 1\}^n 是可见变量(比如像素),z∈{0,1}mz \in \{0, 1\}^m 是隐变量。联合分布 pW,b,c(x,z)=1Zexp⁡(x⊤Wz+b⊤x+c⊤z)=1Zexp⁡(∑i=1n∑j=1mxizjwij+b⊤x+c⊤z).p_{W,b,c}(x, z) = \frac1Z\exp(x^\top Wz + b^\top x + c^\top z) = \frac1Z\exp\Big(\sum_{i=1}^n\sum_{j=1}^m x_iz_jw_{ij} + b^\top x + c^\top z\Big). **“受限”**是因为没有可见–可见、隐–隐之间的连接(目标里没有 xixjx_ix_j 或 zizjz_iz_j 项)。

“受限”带来了什么?条件独立(练习 3): p(z∣x)=∏jσ(cj+(x⊤W)j)zj(⋯ )1−zj,p(xi=1∣z)=σ(bi+(Wz)i).p(z \mid x) = \prod_j\sigma(c_j + (x^\top W)_j)^{z_j}(\cdots)^{1-z_j}, \qquad p(x_i = 1 \mid z) = \sigma(b_i + (Wz)_i). 所以吉布斯采样可以一次更新整层;把 zz 求和掉得到自由能 F(x)=−b⊤x−∑jsoftplus(cj+(x⊤W)j)F(x) = -b^\top x - \sum_j\mathrm{softplus}(c_j + (x^\top W)_j),p(x)=e−F(x)/Zp(x) = e^{-F(x)}/Z——p(x)p(x) 的分子可以精确算,难的只有 ZZ。

4.4 深度玻尔兹曼机

slides 17–18:把 RBM 堆起来是最早的深度生成模型之一(Salakhutdinov & Hinton 2009)。最底层 vv 是像素,上面的层 h(1),h(2),h(3)h^{(1)}, h^{(2)}, h^{(3)} 表示”更高层”的特征(角、边……)。早期用于有监督学习的深度网络,必须像这样逐层预训练才能训练起来。slide 18 是 DBM 在 MNIST 上的样本。


5. 学习 · Learning

5.1 缺点很多

slide 19:pθ(x)=exp⁡(fθ(x))/Z(θ)p_\theta(x) = \exp(f_\theta(x))/Z(\theta)。优点:几乎可以插入任何函数。缺点(很多):采样难、计算似然(学习)难、没有特征学习。维数灾难:数值计算 Z(θ)Z(\theta) 的代价随维数指数增长。

5.2 配分函数难算

slide 20:以 RBM 为例, Z(W,b,c)=∑x∈{0,1}n∑z∈{0,1}mexp⁡(x⊤Wz+b⊤x+c⊤z).Z(W, b, c) = \sum_{x \in \{0,1\}^n}\sum_{z \in \{0,1\}^m}\exp(x^\top Wz + b^\top x + c^\top z). 它是参数的一个定义明确的函数,但没有简单的闭式,计算时间随 n,mn, m 指数增长。所以对似然学习来说,计算目标函数 pW,b,c(x,z)p_{W,b,c}(x, z) 很难。观察:优化似然很难,但优化未归一化的概率 exp⁡(x⊤Wz+b⊤x+c⊤z)\exp(x^\top Wz + b^\top x + c^\top z) 很容易。

代码 03 第 1 部分用了一个技巧:先把 64 个可见像素求和掉(给定 zz 时它们独立),log⁡Z=logsumexpz[c⊤z+∑isoftplus(bi+(Wz)i)]\log Z = \mathrm{logsumexp}_z[c^\top z + \sum_i\mathrm{softplus}(b_i + (Wz)_i)],只剩 2m2^m 项。m=12m = 12 时 4,096 项(一次 2.1 毫秒),m=16m = 16 时 65,536 项(36 毫秒),每加 4 个隐单元时间约乘 16;m=30m = 30 就要 10 亿项。直接对 (x,z)(x, z) 求和则是 2762^{76} 项。一般的能量模型连这个技巧都没有。

5.3 训练直觉

slide 21:目标是最大化 exp⁡{fθ(xtrain)}Z(θ)\frac{\exp\{f_\theta(x_{\text{train}})\}}{Z(\theta)}——增大分子、减小分母。

直觉:因为模型没有归一化,通过改变 θ\theta 增大未归一化的对数概率 fθ(xtrain)f_\theta(x_{\text{train}}),并不保证 xtrainx_{\text{train}} 相对于其他点变得更可能(也许所有点的 ff 都一起变大了)。我们还必须考虑对其他”错误的点”的影响,设法把它们压下去,让 Z(θ)Z(\theta) 也变小。

5.4 对比散度

slide 22:想法:不精确计算 Z(θ)Z(\theta),而用蒙特卡洛估计。对比散度算法:采样 xsample∼pθx_{\text{sample}} \sim p_\theta,沿 ∇θ(fθ(xtrain)−fθ(xsample))\nabla_\theta(f_\theta(x_{\text{train}}) - f_\theta(x_{\text{sample}})) 走一步。让训练数据比模型的典型样本更可能。回忆:能量模型里比较是容易的!

slide 23 的推导:最大化对数似然 max⁡θfθ(xtrain)−log⁡Z(θ)\max_\theta f_\theta(x_{\text{train}}) - \log Z(\theta),

∇θfθ(xtrain)−∇θlog⁡Z(θ)=∇θfθ(xtrain)−∇θZ(θ)Z(θ)=∇θfθ(xtrain)−1Z(θ)∫∇θexp⁡{fθ(x)} dx=∇θfθ(xtrain)−∫exp⁡{fθ(x)}Z(θ)∇θfθ(x) dx=∇θfθ(xtrain)−Exsample[∇θfθ(xsample)]≈∇θfθ(xtrain)−∇θfθ(xsample),xsample∼exp⁡{fθ(xsample)}/Z(θ).\begin{aligned} \nabla_\theta f_\theta(x_{\text{train}}) - \nabla_\theta\log Z(\theta) &= \nabla_\theta f_\theta(x_{\text{train}}) - \frac{\nabla_\theta Z(\theta)}{Z(\theta)} = \nabla_\theta f_\theta(x_{\text{train}}) - \frac{1}{Z(\theta)}\int\nabla_\theta\exp\{f_\theta(x)\}\,dx \\ &= \nabla_\theta f_\theta(x_{\text{train}}) - \int\frac{\exp\{f_\theta(x)\}}{Z(\theta)}\nabla_\theta f_\theta(x)\,dx = \nabla_\theta f_\theta(x_{\text{train}}) - \mathbb{E}_{x_{\text{sample}}}[\nabla_\theta f_\theta(x_{\text{sample}})] \\ &\approx \nabla_\theta f_\theta(x_{\text{train}}) - \nabla_\theta f_\theta(x_{\text{sample}}), \qquad x_{\text{sample}} \sim \exp\{f_\theta(x_{\text{sample}})\}/Z(\theta). \end{aligned}

怎样采样?(§6)

几个版本(本讲义补充;Hinton 2002、Tieleman 2008):

  • CD-kk:链从这一批训练数据出发,跑 kk 步 MCMC(RBM 里是 kk 次交替的吉布斯);
  • PCD-kk(持续对比散度):维护一组持续的链,每次迭代接着上次的状态跑 kk 步;
  • 严格地说,“从数据出发跑 kk 步”的样本不是 pθp_\theta 的样本,所以 CD 不是似然的无偏梯度;Hinton 证明它近似地最小化 DKL(pdata∥pθ)−DKL(pk∥pθ)D_{\mathrm{KL}}(p_{\text{data}} \Vert p_\theta) - D_{\mathrm{KL}}(p_k \Vert p_\theta)(pkp_k 是跑 kk 步后的分布)。

5.5 实验:RBM 上 CD 和精确梯度比一比

像素世界只有 64 个像素,隐单元 ≤ 12 时 log⁡Z\log Z 可以精确算并自动求导——于是可以用精确的似然梯度训练,作为 CD 的对照。代码 03 第 2 部分(12 个隐单元,Adam lr = 0.01,4,000 步):

训练方法用时测试集比真实多(bit)log Z长链样本 −log⁡2pdata-\log_2 p_{\text{data}}像样的样本
精确梯度12 秒+5.5724.736.065%
CD-11 秒+5.6024.636.165%
CD-103 秒+5.5824.336.563%
PCD-11 秒+6.4521.436.763%

排行榜:GRU 自回归 +0.83、VAE +2.21、RealNVP +4.51、独立像素 +9.98。

  • 在这个小问题上 CD-1、CD-10 和精确梯度几乎一样好——CD 是一个很实用的近似。PCD-1 在同样的学习率下更差:持续的链每步只走一步,参数变化太快时链”跟不上”模型。
  • 12 个二值隐单元的 RBM 容量有限:比独立像素好很多,不如 VAE、自回归模型;样本里有合法的形状,也有很多”几个形状叠在一起”的图。

CD 的梯度到底偏多少?代码 03 第 3 部分在 CD-1 训练好的参数上,把 CD-kk 的平均梯度(20 个大小 500 的小批量)和精确梯度比较:

估计余弦相似度相对误差 ∥g^−g∥/∥g∥\Vert\hat g - g\Vert/\Vert g\Vert
参照:精确的模型期望 + 同样的小批量(噪声下限)0.9760.251
CD-10.7340.685
CD-100.9430.341
CD-1000.9530.331

CD-1 的偏差远超噪声下限:从数据出发只走一步的链只探索数据附近,看不到模型在远处放的质量——“别的点”没有被压下去。链越长越接近精确梯度。


6. 采样 · Sampling from energy-based models

6.1 MCMC

slide 24:没有像自回归模型或流那样的直接采样方法。主要问题:无法轻易算出每个可能样本有多大概率。但可以轻易比较两个样本 xx、x′x'。用一种迭代方法——马尔可夫链蒙特卡洛(MCMC):

  1. 随机初始化 x0x^0,t=0t = 0;
  2. 令 x′=xt+噪声x' = x^t + \text{噪声};
    • 若 fθ(x′)>fθ(xt)f_\theta(x') > f_\theta(x^t),令 xt+1=x′x^{t+1} = x';
    • 否则以概率 exp⁡(fθ(x′)−fθ(xt))\exp(f_\theta(x') - f_\theta(x^t)) 令 xt+1=x′x^{t+1} = x',否则 xt+1=xtx^{t+1} = x^t;
  3. 回到第 2 步。

理论上可行,但可能要很久才收敛。(为什么它收敛到 pθp_\theta——细致平衡——是第 12 讲的内容。)

6.2 朗之万 MCMC

slide 25:对任意连续分布 pθ(x)p_\theta(x),假设能算它的梯度(得分函数)∇xlog⁡pθ(x)\nabla_x\log p_\theta(x)。令 π(x)\pi(x) 是一个容易采样的先验分布。朗之万 MCMC: x0∼π(x),xt+1∼xt+ϵ∇xlog⁡pθ(xt)+2ϵ zt,zt∼N(0,I),t=0,1,…,T−1.x^0 \sim \pi(x), \qquad x^{t+1} \sim x^t + \epsilon\nabla_x\log p_\theta(x^t) + \sqrt{2\epsilon}\,z^t, \quad z^t \sim \mathcal{N}(0, I), \quad t = 0, 1, \dots, T-1. 若 ϵ→0\epsilon \to 0、T→∞T \to \infty,则 xT∼pθ(x)x^T \sim p_\theta(x)。对能量模型,得分函数是可算的: ∇xlog⁡pθ(x)=∇xfθ(x)−∇xlog⁡Z(θ)⏟=0=∇xfθ(x).\nabla_x\log p_\theta(x) = \nabla_x f_\theta(x) - \underbrace{\nabla_x\log Z(\theta)}_{=0} = \nabla_x f_\theta(x).

直觉:第一项是”往 ff 高的地方爬”的梯度上升;第二项是噪声,防止所有样本都挤到同一个最高点。两者的比例恰好让链的平稳分布是 pθp_\theta。

6.3 链混合慢时会发生什么?

CD、PCD 都依赖 MCMC 的样本。如果链在可接受的步数内混合不了呢?代码 04 用一个最简单的例子:两个分开的高斯(中心 (±2,0)(\pm 2, 0),σ = 0.4),左边权重 0.5 或 0.8。二维里 ZZ 可以在网格上精确算,于是可以用精确的最大似然作对照。四种方法(能量网络 64 × 2,Adam lr = 3e-3,1,500 步,朗之万步长 0.01)在第 1,500 步的 KL / 左边质量:

训练方法权重 0.5 / 0.5权重 0.8 / 0.2
精确最大似然(网格 log Z)0.003 / 0.4970.003 / 0.792
CD-10(从数据出发)0.011 / 0.5130.973 / 0.999
PCD-10(持续的链)2.286 / 0.0036.361 / 0.000
短链(从噪声出发,30 步)1.370 / 0.9811,833,827 / 0.000
  • 精确最大似然在两种权重下都学对了。
  • CD-10 学不到相对权重:0.8 / 0.2 时把几乎全部质量放到了左边(0.5 / 0.5 时最后还行,但中途漂到了 0.78)。从数据出发的短链待在各自的模式里,梯度只调整每个模式的形状,“两个模式各占多少”没有任何项去纠正。
  • PCD 和短链在两种权重下都不稳定:左边的质量在 0 和 1 之间来回翻(例如 0.001 → 0.977 → 0.003),短链的 KL 涨到 10610^6 量级(密度塌成一个极尖的峰)。链落进哪个模式只由起点决定、和模型的权重无关;梯度于是一直把模型往”和链的比例相反”的方向推,推过头以后链全部滑进另一个模式,又反过来推。

为什么? 代码 04 第 3 部分在精确训练好的模型上跑 2,000 条朗之万链(从均匀噪声出发,起点 50.5% 在左边):10 步后 49.6% 在左边,10,000 步后 55.4%——模型真正的左边质量是 79.2%。模型在两峰之间的低谷处密度比峰值低 e8.2≈3,800e^{8.2} \approx 3,800 倍,链要跨过去需要的步数随低谷深度指数增长。任何基于这种链的梯度估计都看不到”模式之间的质量应该怎样分配”。 第 12 讲的得分匹配会以另一种方式遇到同一个盲点,第 13 讲称之为得分模型的”第三个陷阱”。

6.4 现代能量模型

slides 26–27:用朗之万采样的现代能量模型——Nijkamp et al.(2019)的人脸样本(“短链 MCMC”:每次都从噪声出发、只跑固定的几十步,把”能量函数 + 短链”当作一个整体的生成器来训练);Du & Mordatch(2019)在 ImageNet 上的样本(用一个”回放缓冲区”保存旧的负样本,类似 PCD)。这些工作让能量模型在图像上有了可观的样本质量;代码 04 提醒我们,它们的成功在很大程度上依赖于让采样器”足够好”的工程技巧——短链得到的东西更像一个好的采样器,而不一定是一个忠实的密度。


7. 2023 年之后 · Since 2023

  • 2024 年诺贝尔物理学奖授予 John Hopfield 和 Geoffrey Hinton,表彰”基于人工神经网络实现机器学习的奠基性发现和发明”——Hopfield 网络和玻尔兹曼机(slides 16–18 的 RBM、DBM)都是能量模型,Hinton 的对比散度(§5.4)正是为训练它们而发明的。
  • 扩散模型就是一族能量模型。 得分模型学的是 ∇xlog⁡p\nabla_x\log p(第 13–16 讲);如果把网络参数化成一个标量能量的梯度,扩散模型就成了”多个噪声尺度上的能量模型”。Reduce, Reuse, Recycle(Du et al., ICML 2023)利用这一点,把多个扩散模型的能量相加做组合生成(§4.2 的专家乘积),并发现必须配合 MCMC(HMC、MALA)修正采样才能真正得到乘积分布——正是本讲 §6 的主题。
  • 能量与”推理时计算”。 一些近期工作把能量函数用作验证器或在推理时做优化:生成若干候选,再用学到的能量(“这个答案有多好”)挑选或通过梯度下降改进它们(例如 2025 年的 Energy-Based Transformers)。思路和 §3.3”比较不需要 Z”一致:选最好的候选只需要相对的分数。
  • 分类器就是能量模型:JEM(Grathwohl et al. 2020)把 softmax 分类器的 logit 重新解释为 f(x,y)f(x, y),log⁡∑yef(x,y)\log\sum_y e^{f(x,y)} 就是 xx 的未归一化对数密度(§3.3 的 slide 12);这一视角后来被用于分布外检测——用 ff 做异常分数。

8. 小结 · Summary

  1. 概率分布要非负、和为 1。非负容易(f2f^2、efe^f、∣f∣|f|、softplus),归一化难;经典做法是选体积有解析式的构件(指数族)并用乘积(自回归)、混合(隐变量)组合。
  2. 能量模型 pθ=efθ/Z(θ)p_\theta = e^{f_\theta}/Z(\theta):fθf_\theta 任意,代价是配分函数。选指数是因为对数尺度自然(实验:efe^f 比 f2f^2 好 0.27 nat)、指数族、最大熵。
  3. 维数灾难:网格要 20d20^d 个点,均匀采样的相对误差指数增长。但比较不需要 ZZ:异常检测、去噪、MAP 推断、分类都只用相对的分数。
  4. 例子:Ising 去噪(适中的耦合有帮助,手写能量太简单——像素世界上不如贝叶斯最优去噪器);专家乘积(AND,必须重新归一化);RBM(层内无连接 → 条件独立、自由能可算,log⁡Z\log Z 要对 2m2^m 个隐状态求和);深度玻尔兹曼机。
  5. 学习:∇θlog⁡pθ(x)=∇θfθ(x)−Epθ[∇θfθ]\nabla_\theta\log p_\theta(x) = \nabla_\theta f_\theta(x) - \mathbb{E}_{p_\theta}[\nabla_\theta f_\theta]——抬高数据、压低模型样本。对比散度用 MCMC 样本近似第二项。RBM 上 CD-1 和精确梯度几乎一样好(+5.60 vs +5.57 bit),但它的梯度方向确实有偏(余弦 0.73)。
  6. 采样:MH 只用 ff 的差,朗之万只用 ∇xf\nabla_x f,都不需要 ZZ。但链在分开的模式之间混合极慢(1 万步后 55% vs 应有的 79%),于是 CD 学不到模式的相对权重,PCD 和短链甚至失控振荡——基于采样的训练,质量取决于采样器。

9. 常见误区 · Common pitfalls

  1. “能量模型的 fθf_\theta 越大的点越可能,所以只要把训练点的 ff 抬高就行。” 不归一化时,所有点的 ff 可以一起变大;必须同时把别的点压下去(§5.3)。
  2. “既然只差一个常数 ZZ,那就忽略它直接最大化 f(xtrain)f(x_{\text{train}})。” ZZ 依赖 θ\theta,它的梯度正是 Epθ[∇f]\mathbb{E}_{p_\theta}[\nabla f],忽略它等于只做”抬高”不做”压低”,ff 会发散。
  3. “专家都归一化了,乘积也就归一化了。” 不是(代码 01:log⁡Z=0.49≠4.37\log Z = 0.49 \neq 4.37)。
  4. “错误率低就说明去噪好。” 图像大部分是背景时,“什么都不画”的错误率也很低(代码 02 第 2 部分)。
  5. “CD 是似然的梯度。” 它是有偏的近似(余弦 0.73);在 RBM 上偏差不大,在模式分开的连续数据上可能完全学错相对权重(§6.3)。
  6. “MCMC 只要跑得够久就行。” “够久”可能是天文数字:跨过一个低 e8e^{8} 倍的低谷,1 万步也不够(§6.3)。
  7. “朗之万的步长越小越准。” 步长小,离散化偏差小,但混合更慢;第 12 讲会精确地量这个取舍。
  8. “PCD 一定比 CD 好。” 持续的链需要混合得比参数变化快,否则梯度估计越来越偏(代码 03 的 PCD-1、代码 04 的 PCD-10)。

10. 练习 · Exercises

练习 1(体积) 计算 gλ(x)=e−λxg_\lambda(x) = e^{-\lambda x}(x≥0x \geq 0)和 g(μ,σ)(x)=e−(x−μ)2/(2σ2)g_{(\mu,\sigma)}(x) = e^{-(x-\mu)^2/(2\sigma^2)} 的体积,验证 slide 7。指数族 h(x)exp⁡(θ⋅T(x))h(x)\exp(\theta\cdot T(x)) 的 A(θ)=log⁡Z(θ)A(\theta) = \log Z(\theta) 对 θ\theta 的梯度是什么?

参考答案

∫0∞e−λxdx=1/λ\int_0^\infty e^{-\lambda x}dx = 1/\lambda;∫e−(x−μ)2/(2σ2)dx=2πσ2\int e^{-(x-\mu)^2/(2\sigma^2)}dx = \sqrt{2\pi\sigma^2}。∇θA(θ)=∫h(x)T(x)eθ⋅T(x)dx∫h(x)eθ⋅T(x)dx=Epθ[T(x)]\nabla_\theta A(\theta) = \frac{\int h(x)T(x)e^{\theta\cdot T(x)}dx}{\int h(x)e^{\theta\cdot T(x)}dx} = \mathbb{E}_{p_\theta}[T(x)]——这正是 slide 23 中 ∇θlog⁡Z=Epθ[∇θf]\nabla_\theta\log Z = \mathbb{E}_{p_\theta}[\nabla_\theta f] 的特例(f=θ⋅Tf = \theta\cdot T,∇θf=T\nabla_\theta f = T)。最大似然的驻点因此是 Epθ[T]=Epdata[T]\mathbb{E}_{p_\theta}[T] = \mathbb{E}_{p_{\text{data}}}[T]:矩匹配。

练习 2(对数配分函数的梯度) 不看 slide 23,推导 ∇θlog⁡Z(θ)=Ex∼pθ[∇θfθ(x)]\nabla_\theta\log Z(\theta) = \mathbb{E}_{x \sim p_\theta}[\nabla_\theta f_\theta(x)]。再证明 log⁡Z(θ)\log Z(\theta) 的 Hessian 是 Covpθ[∇θfθ]\mathrm{Cov}_{p_\theta}[\nabla_\theta f_\theta](当 ff 对 θ\theta 线性时),由此说明指数族的负对数似然是凸的。

参考答案

∇log⁡Z=∇ZZ=∫ef∇f dxZ=Epθ[∇f]\nabla\log Z = \frac{\nabla Z}{Z} = \frac{\int e^{f}\nabla f\,dx}{Z} = \mathbb{E}_{p_\theta}[\nabla f]。f=θ⋅Tf = \theta\cdot T 时再求一次导:∇2log⁡Z=∫efTT⊤Z−(∫efT)(∫efT)⊤Z2=Covpθ[T]⪰0\nabla^2\log Z = \frac{\int e^f TT^\top}{Z} - \frac{(\int e^fT)(\int e^fT)^\top}{Z^2} = \mathrm{Cov}_{p_\theta}[T] \succeq 0。负对数似然 −θ⋅Tˉ+log⁡Z(θ)-\theta\cdot\bar T + \log Z(\theta) 是线性函数加凸函数,所以是凸的。一般的神经网络 fθf_\theta 没有这个性质。

练习 3(RBM 的条件分布) 证明在 RBM 中 p(z∣x)=∏jp(zj∣x)p(z \mid x) = \prod_j p(z_j \mid x),p(zj=1∣x)=σ(cj+∑ixiwij)p(z_j = 1 \mid x) = \sigma(c_j + \sum_i x_iw_{ij});并推导自由能 F(x)=−b⊤x−∑jlog⁡(1+ecj+(x⊤W)j)F(x) = -b^\top x - \sum_j\log(1 + e^{c_j + (x^\top W)_j})。如果加上隐–隐连接 z⊤Uzz^\top Uz,哪一步会失败?

参考答案

p(z∣x)∝exp⁡(x⊤Wz+c⊤z)=∏jexp⁡(zj(cj+(x⊤W)j))p(z \mid x) \propto \exp(x^\top Wz + c^\top z) = \prod_j\exp(z_j(c_j + (x^\top W)_j)),对每个 zjz_j 独立归一化:p(zj=1∣x)=eaj1+eaj=σ(aj)p(z_j = 1 \mid x) = \frac{e^{a_j}}{1 + e^{a_j}} = \sigma(a_j),aj=cj+(x⊤W)ja_j = c_j + (x^\top W)_j。把 zz 求和:∑zex⊤Wz+b⊤x+c⊤z=eb⊤x∏j(1+eaj)\sum_z e^{x^\top Wz + b^\top x + c^\top z} = e^{b^\top x}\prod_j(1 + e^{a_j}),取负对数得 F(x)F(x)。有 z⊤Uzz^\top Uz 时 p(z∣x)p(z \mid x) 不再分解成各 zjz_j 的乘积,求和也不再有闭式——“受限”就是为了保住这两点。

练习 4(把可见单元求和掉) 仿照练习 3,对可见单元求和,推导代码 RBM.log_Z 用的公式 log⁡Z=logsumexpz[c⊤z+∑isoftplus(bi+(Wz)i)]\log Z = \mathrm{logsumexp}_z[c^\top z + \sum_i\mathrm{softplus}(b_i + (Wz)_i)]。它的计算量是多少?什么时候比”对隐单元求和、再对 xx 求和”更好?

参考答案

Z=∑zec⊤z∑xex⊤(Wz+b)=∑zec⊤z∏i(1+ebi+(Wz)i)Z = \sum_z e^{c^\top z}\sum_x e^{x^\top(Wz + b)} = \sum_z e^{c^\top z}\prod_i(1 + e^{b_i + (Wz)_i}),取对数即得。计算量 O(2m⋅nm)O(2^m \cdot nm)。另一个方向是 O(2n⋅nm)O(2^n \cdot nm);所以当隐单元比可见单元少得多时(这里 m=12≪n=64m = 12 \ll n = 64)对 zz 列举。两者都少不了指数项。

练习 5(Ising 的吉布斯条件分布) 在 f(y)=η∑ixiyi+β∑(i,j)yiyjf(y) = \eta\sum_i x_iy_i + \beta\sum_{(i,j)}y_iy_j(yi∈{±1}y_i \in \{\pm 1\})中,证明 p(yi=+1∣y−i)=σ(2hi)p(y_i = +1 \mid y_{-i}) = \sigma(2h_i),hi=ηxi+β∑j∼iyjh_i = \eta x_i + \beta\sum_{j \sim i}y_j。为什么棋盘格上的”黑格”可以同时更新?

参考答案

只看含 yiy_i 的项:f=yihi+常数f = y_ih_i + \text{常数}。p(yi=+1∣⋅)p(yi=−1∣⋅)=e2hi\frac{p(y_i = +1 \mid \cdot)}{p(y_i = -1 \mid \cdot)} = e^{2h_i},所以 p(yi=+1∣⋅)=ehiehi+e−hi=σ(2hi)p(y_i = +1 \mid \cdot) = \frac{e^{h_i}}{e^{h_i} + e^{-h_i}} = \sigma(2h_i)。黑格的邻居全是白格,给定白格时黑格之间条件独立(马尔可夫随机场的局部性,第 2 讲),所以同时从各自的条件分布采样等价于逐个采样。

练习 6(两个高斯专家的乘积) 计算 N(x;μ1,σ12)⋅N(x;μ2,σ22)\mathcal{N}(x; \mu_1, \sigma_1^2)\cdot\mathcal{N}(x; \mu_2, \sigma_2^2) 归一化以后的分布,以及归一化常数 ZZ。μ1\mu_1 和 μ2\mu_2 相距很远时 ZZ 会怎样?这和”AND”的直觉有什么关系?

参考答案

精度相加:1σ2=1σ12+1σ22\frac{1}{\sigma^2} = \frac{1}{\sigma_1^2} + \frac{1}{\sigma_2^2},μ=σ2(μ1σ12+μ2σ22)\mu = \sigma^2(\frac{\mu_1}{\sigma_1^2} + \frac{\mu_2}{\sigma_2^2});Z=∫N1N2=N(μ1;μ2,σ12+σ22)Z = \int\mathcal{N}_1\mathcal{N}_2 = \mathcal{N}(\mu_1; \mu_2, \sigma_1^2 + \sigma_2^2)。乘积比两个专家都窄(“两个条件都要满足”)。两个均值相距很远时 Z→0Z \to 0:两个专家几乎没有共同认可的区域,乘积分布被迫挤在它们都”勉强接受”的地方——AND 的代价。

练习 7(softplus 为什么像 exp) 证明 f→−∞f \to -\infty 时 log⁡softplus(f)=f+O(ef)\log\mathrm{softplus}(f) = f + O(e^f),f→+∞f \to +\infty 时 log⁡softplus(f)≈log⁡f\log\mathrm{softplus}(f) \approx \log f。据此解释代码 01 中 softplus 和 exp 几乎一样好、以及网络输出的范围(f∈[−13.7,1.3]f \in [-13.7, 1.3])。

参考答案

log⁡(1+ef)=ef−e2f2+⋯\log(1 + e^f) = e^f - \frac{e^{2f}}{2} + \cdots,所以 log⁡softplus(f)=f+log⁡(1−ef/2+⋯ )=f+O(ef)\log\mathrm{softplus}(f) = f + \log(1 - e^f/2 + \cdots) = f + O(e^f);ff 大时 log⁡(1+ef)≈f\log(1 + e^f) \approx f,log⁡softplus≈log⁡f\log\mathrm{softplus} \approx \log f,增长极慢。网络把所有需要表示的对数密度都放在 ff 负的那一段(最高只到 1.3),在那里 softplus 就是 efe^f——它”学会”了当一个能量模型。

练习 8(均匀采样估计 Z 的误差) 用 NN 个 [−5,5]d[-5, 5]^d 上的均匀样本估计 Z=∫e−∥x∥2/2dxZ = \int e^{-\Vert x\Vert^2/2}dx(忽略截断)。证明估计量的相对方差约为 (10/(2π))d−1N≈2.82dN\frac{(10/(2\sqrt\pi))^d - 1}{N} \approx \frac{2.82^d}{N},并和代码 01 的相对标准误(d = 1:1.3%,d = 6:23.3%)比较。

参考答案

w=10de−∥x∥2/2w = 10^d e^{-\Vert x\Vert^2/2}。E[w]=Z=(2π)d/2\mathbb{E}[w] = Z = (2\pi)^{d/2},E[w2]=10d∫e−∥x∥2=10dπd/2\mathbb{E}[w^2] = 10^d\int e^{-\Vert x\Vert^2} = 10^d\pi^{d/2}。相对方差 E[w2]E[w]2−1=10dπd/2(2π)d−1=(102π)d−1\frac{\mathbb{E}[w^2]}{\mathbb{E}[w]^2} - 1 = \frac{10^d\pi^{d/2}}{(2\pi)^d} - 1 = \left(\frac{10}{2\sqrt\pi}\right)^d - 1。N=104N = 10^4:d=1d = 1 时 1.82/104=1.35%\sqrt{1.82/10^4} = 1.35\%,d=6d = 6 时 (2.826−1)/104≈22.4%\sqrt{(2.82^6 - 1)/10^4} \approx 22.4\%,和实验一致。相对误差按 2.82d/2≈1.68d2.82^{d/2} \approx 1.68^d 指数增长。

练习 9(CD 为什么学不到模式权重) 设 pθp_\theta 有两个分开的模式,模型的对数质量比 Δ=log⁡mLmR\Delta = \log\frac{m_L}{m_R} 由一个参数 θ0\theta_0 控制(比如 fθ=θ01[x1<0]+其他f_\theta = \theta_0\mathbf{1}[x_1 < 0] + \text{其他})。(a) 写出精确似然梯度对 θ0\theta_0 的分量。(b) 若负样本来自”从数据出发、不跨模式”的链,CD 梯度对 θ0\theta_0 的分量是多少?(c) 若负样本来自”从均匀噪声出发、各有一半落进两个模式”的链呢?

参考答案

(a) ∂∂θ0log⁡p=1[x1<0]−pθ(x1<0)\frac{\partial}{\partial\theta_0}\log p = \mathbf{1}[x_1 < 0] - p_\theta(x_1 < 0),对数据平均是 wdata−mLw_{\text{data}} - m_L(mLm_L 是模型的左边质量):驻点 mL=wdatam_L = w_{\text{data}},正确。(b) 链不跨模式,负样本中左边的比例等于数据中的比例 wdataw_{\text{data}},CD 梯度分量是 wdata−wdata=0w_{\text{data}} - w_{\text{data}} = 0——无论模型的权重是多少都为零,没有任何信号纠正 mLm_L,它只会随别的参数的更新漂移(代码 04 中漂到了 0.999)。(c) 负样本左边比例约 ½,梯度分量 wdata−12w_{\text{data}} - \frac12,对 wdata=0.8w_{\text{data}} = 0.8 恒为正:θ0\theta_0 无限增大,mL→1m_L \to 1;之后若链的落点随模型改变(全部滑进左边),梯度又变成 0.8−1<00.8 - 1 < 0——失控的振荡。

练习 10(条件能量模型) softmax 分类器 p(y∣x)=ef(x,y)∑y′ef(x,y′)p(y \mid x) = \frac{e^{f(x, y)}}{\sum_{y'}e^{f(x, y')}} 是一个对 yy 的能量模型。(a) 它的配分函数是什么,为什么好算?(b) JEM 把 p(x)∝∑yef(x,y)p(x) \propto \sum_ye^{f(x,y)} 当作 xx 的能量模型;训练这个 p(x)p(x) 需要什么?

参考答案

(a) Z(x)=∑y′ef(x,y′)Z(x) = \sum_{y'}e^{f(x, y')}:只对类别求和,KK 项,一次前向就算完。(b) p(x)p(x) 的配分函数是对所有 xx 的积分——和本讲的一般能量模型一样难。JEM 用 SGLD(随机梯度朗之万,§6.2)生成负样本、按对比散度的方式训练,因此也继承了 §6.3 的采样难题(JEM 论文报告了训练不稳定、需要很多技巧)。


11. 延伸阅读 · Further reading

原课材料

经典

  • LeCun, Chopra, Hadsell, Ranzato & Huang, A Tutorial on Energy-Based Learning, 2006
  • Hinton, Training Products of Experts by Minimizing Contrastive Divergence, Neural Computation 2002
  • Tieleman, Training Restricted Boltzmann Machines using Approximations to the Likelihood Gradient(PCD), ICML 2008
  • Salakhutdinov & Hinton, Deep Boltzmann Machines, AISTATS 2009
  • Geman & Geman, Stochastic Relaxation, Gibbs Distributions, and the Bayesian Restoration of Images, IEEE TPAMI 1984(Ising 去噪、吉布斯采样)

现代能量模型

  • Du & Mordatch, Implicit Generation and Modeling with Energy-Based Models, NeurIPS 2019
  • Nijkamp, Hill, Zhu & Wu, Learning Non-Convergent Non-Persistent Short-Run MCMC Toward Energy-Based Model, NeurIPS 2019
  • Du, Li & Mordatch, Compositional Visual Generation with Energy Based Models, NeurIPS 2020(slide 15)
  • Grathwohl et al., Your Classifier is Secretly an Energy Based Model and You Should Treat it Like One(JEM), ICLR 2020

2023 年之后

  • Du et al., Reduce, Reuse, Recycle: Compositional Generation with Energy-Based Diffusion Models and MCMC, ICML 2023
  • The Nobel Prize in Physics 2024(Hopfield & Hinton),诺贝尔奖官网的科普与科学背景材料

12. 下一讲预告 · Next lecture

本讲看到,用最大似然训练能量模型需要从模型采样,而 MCMC 可能慢得无法接受(代码 04)。第 12 讲(原课 Lecture 12,Energy-Based Models)的目标是不采样也能训练:

  • 先把采样讲清楚:Metropolis–Hastings 为什么收敛(细致平衡)、未调整的朗之万 MCMC 的偏差、高维里为什么慢;
  • 得分匹配:∇xlog⁡pθ(x)=∇xfθ(x)\nabla_x\log p_\theta(x) = \nabla_x f_\theta(x) 与 ZZ 无关;最小化 Fisher 散度,分部积分把未知的 ∇xlog⁡pdata\nabla_x\log p_{\text{data}} 消掉;
  • 噪声对比估计:把密度估计变成”数据 vs 噪声”的分类,顺便学出 ZZ;和 GAN 的异同;flow contrastive estimation;
  • 用对抗训练给能量模型的似然一个上界。
← 返回课程目录