对应 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”难;写出能量模型 p θ ( x ) = exp ( f θ ( x ) ) / Z ( θ ) p_\theta(x) = \exp(f_\theta(x))/Z(\theta) p θ ( x ) = exp ( f θ ( x )) / Z ( θ ) ,说出选指数的三条理由。
解释维数灾难 :为什么数值计算 Z ( θ ) Z(\theta) Z ( θ ) 的代价随维数指数增长;以及为什么比较两个点 (异常检测、去噪、MAP 推断)不需要 Z Z Z 。
写出 Ising 模型、专家乘积、受限玻尔兹曼机(RBM)的能量函数,推导 RBM 的条件分布和自由能,知道”受限”带来了什么。
推导似然梯度 ∇ θ log p θ ( x ) = ∇ θ f θ ( x ) − E x ′ ∼ 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')] ∇ θ log p θ ( x ) = ∇ θ f θ ( x ) − E x ′ ∼ p θ [ ∇ θ f θ ( x ′ )] ,说明对比散度 怎样用模型样本近似第二项,以及 CD-k k k 、PCD 的区别。
写出 Metropolis–Hastings 和朗之万 MCMC 的更新式,解释为什么它们只需要 f f f 的差或梯度;理解 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) f θ ( x ) 未归一化的对数概率(越大越可能);能量 E θ ( x ) = − f θ ( x ) E_\theta(x) = -f_\theta(x) E θ ( x ) = − f θ ( x ) Z ( θ ) = ∫ exp ( f θ ( x ) ) d x Z(\theta) = \int\exp(f_\theta(x))\,dx Z ( θ ) = ∫ exp ( f θ ( x )) d x 配分函数(partition function),归一化常数 g θ ( x ) ≥ 0 g_\theta(x) \geq 0 g θ ( x ) ≥ 0 任意非负函数;p θ = g θ / V o l u m e ( g θ ) p_\theta = g_\theta/\mathrm{Volume}(g_\theta) p θ = g θ / Volume ( g θ ) x ∈ { 0 , 1 } n x \in \{0,1\}^n x ∈ { 0 , 1 } n ,z ∈ { 0 , 1 } m z \in \{0,1\}^m z ∈ { 0 , 1 } m RBM 的可见单元、隐单元 F ( x ) = − log ∑ z exp ( ⋯ ) F(x) = -\log\sum_z\exp(\cdots) F ( x ) = − log ∑ z exp ( ⋯ ) RBM 的自由能,p ( x ) = e − F ( x ) / Z p(x) = e^{-F(x)}/Z p ( x ) = e − F ( x ) / Z y i ∈ { − 1 , + 1 } y_i \in \{-1, +1\} y i ∈ { − 1 , + 1 } ,x i x_i x i Ising 去噪:真实像素、带噪像素 β \beta β ,η \eta η Ising 模型里相邻像素的耦合强度、对观测的信任程度
0.5 关于数字 · About the numbers
二维、一维实验用细网格精确地算 Z Z Z (代码里的 Grid);4×4 的 Ising 模型有 2 16 2^{16} 2 16 种状态,可以全部列举;RBM 只用 12 个隐单元,可以把隐单元精确地求和掉。像素世界(第 1 讲)的 bits 是”每张 8×8 图比真实分布多几 bit”,可以和前几讲的排行榜直接比较。几处和预想不同的结果记录在 代码 README 的”关于实验结果”里。
1. 回顾与本讲计划 · Recap
slide 2:
自回归模型:p θ ( x 1 , … , x n ) = ∏ i p θ ( x i ∣ x < i ) p_\theta(x_1, \dots, x_n) = \prod_i p_\theta(x_i \mid x_{<i}) p θ ( x 1 , … , x n ) = ∏ i p θ ( x i ∣ x < i ) ;
归一化流:p θ ( x ) = p ( z ) ∣ det J f θ ( x ) ∣ p_\theta(x) = p(z)|\det J_{f_\theta}(x)| p θ ( x ) = p ( z ) ∣ det J f θ ( x ) ∣ ,z = f θ ( x ) z = f_\theta(x) z = f θ ( x ) ;
变分自编码器:p θ ( x ) = ∫ p ( z ) p θ ( x ∣ z ) d z p_\theta(x) = \int p(z)p_\theta(x \mid z)\,dz p θ ( x ) = ∫ p ( z ) p θ ( x ∣ z ) d z 。
缺点:模型结构受限。 自回归模型要选顺序、每个条件都要归一化;流要可逆、雅可比要好算;VAE 只能优化下界。这些限制都是为了让 p θ ( x ) p_\theta(x) p θ ( x ) 自动归一化 。
slide 3:GAN,min θ max ϕ E p data [ log D ϕ ( x ) ] + E p ( 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)))] min θ max ϕ E p data [ log D ϕ ( x )] + E p ( z ) [ log ( 1 − D ϕ ( G θ ( z )))] 。两样本检验,可以(近似地)优化 f f f -散度和 Wasserstein 距离;结构非常灵活,但似然不可算、训练不稳定、难以评估、会模式坍塌。
slide 4:本讲:能量模型(EBM)。
非常灵活的模型结构;
稳定的训练;
相对较高的样本质量;
灵活的组合。
(后面会看到,“稳定的训练”取决于用什么方法训练——代码 04 就是一个不稳定的例子。)
2. 参数化概率分布 · Parameterizing probability distributions
2.1 两个条件
slide 5:概率分布 p ( x ) p(x) p ( x ) 是生成建模的基本构件,它要满足:
非负 :p ( x ) ≥ 0 p(x) \geq 0 p ( x ) ≥ 0 ;
和为 1 :∑ x p ( x ) = 1 \sum_x p(x) = 1 ∑ x p ( x ) = 1 (连续变量是 ∫ p ( x ) d x = 1 \int p(x)\,dx = 1 ∫ p ( x ) d x = 1 )。
想出一个非负的 p θ ( x ) p_\theta(x) p θ ( x ) 并不难。给任意函数 f θ ( x ) f_\theta(x) f θ ( 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 g θ ( x ) = f θ ( x ) 2 , g θ ( x ) = exp ( f θ ( x )) , g θ ( x ) = ∣ f θ ( x ) ∣ , g θ ( x ) = log ( 1 + exp ( f θ ( x ))) , …
2.2 和为 1 是关键
slide 6:总”体积”是固定的 :提高 p ( x train ) p(x_{\text{train}}) p ( x train ) 保证 x train x_{\text{train}} x train 相对于其他点变得更可能了 ——这正是最大似然起作用的原因(第 4 讲)。问题是 g θ ( x ) ≥ 0 g_\theta(x) \geq 0 g θ ( x ) ≥ 0 容易,但 ∑ x g θ ( x ) = Z ( θ ) ≠ 1 \sum_x g_\theta(x) = Z(\theta) \neq 1 ∑ x g θ ( x ) = Z ( θ ) = 1 ,所以 g θ g_\theta g θ 一般不是合法的概率质量函数或密度。
slide 7 的解法:除以体积,
p θ ( x ) = 1 Z ( θ ) g θ ( x ) = 1 ∫ g θ ( x ) d x g θ ( x ) = 1 V o l u m e ( 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 ) = Z ( θ ) 1 g θ ( x ) = ∫ g θ ( x ) d x 1 g θ ( x ) = Volume ( g θ ) 1 g θ ( x ) ,
于是 ∫ p θ ( x ) d x = Z ( θ ) / Z ( θ ) = 1 \int p_\theta(x)\,dx = Z(\theta)/Z(\theta) = 1 ∫ p θ ( x ) d x = Z ( θ ) / Z ( θ ) = 1 。
2.3 选一个体积有解析式的 g
slide 7 的例子:
g ( μ , σ ) ( x ) = e − ( x − μ ) 2 2 σ 2 g_{(\mu,\sigma)}(x) = e^{-\frac{(x-\mu)^2}{2\sigma^2}} g ( μ , σ ) ( x ) = e − 2 σ 2 ( x − μ ) 2 ,体积 2 π σ 2 \sqrt{2\pi\sigma^2} 2 π σ 2 → 高斯分布;
g λ ( x ) = e − λ x g_\lambda(x) = e^{-\lambda x} g λ ( x ) = e − λ x (x ≥ 0 x \geq 0 x ≥ 0 ),体积 1 / λ 1/\lambda 1/ λ → 指数分布;
g θ ( x ) = h ( x ) exp { θ ⋅ T ( x ) } g_\theta(x) = h(x)\exp\{\theta \cdot T(x)\} g θ ( x ) = h ( x ) exp { θ ⋅ T ( x )} ,体积 exp { A ( θ ) } \exp\{A(\theta)\} exp { A ( θ )} ,A ( θ ) = log ∫ h ( x ) exp { θ ⋅ T ( x ) } d x A(\theta) = \log\int h(x)\exp\{\theta\cdot T(x)\}dx A ( θ ) = log ∫ h ( x ) exp { θ ⋅ T ( x )} d x → 指数族 :正态、泊松、指数、伯努利、beta、gamma、Dirichlet、Wishart……
这些函数形式必须能解析积分。它们很受限,但作为构件非常有用。
slide 8:更复杂的模型由这些构件组合 而成,而组合方式保证了归一化:
自回归 = 归一化对象的乘积 :∫ x ∫ y p θ ( x ) p θ ′ ( x ) ( y ) d y d x = ∫ x p θ ( x ) ∫ y p θ ′ ( x ) ( y ) d y ⏟ = 1 d x = 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 ∫ x ∫ y p θ ( x ) p θ ′ ( x ) ( y ) d y d x = ∫ x p θ ( x ) = 1 ∫ y p θ ′ ( x ) ( y ) d y d x = 1 ;
隐变量 = 归一化对象的混合 :∫ x [ α p θ ( x ) + ( 1 − α ) p θ ′ ( x ) ] d x = α + ( 1 − α ) = 1 \int_x[\alpha p_\theta(x) + (1-\alpha)p_{\theta'}(x)]dx = \alpha + (1 - \alpha) = 1 ∫ x [ α p θ ( x ) + ( 1 − α ) p θ ′ ( x )] d x = α + ( 1 − α ) = 1 。
如果用”体积”不容易解析计算的 g θ g_\theta g θ 呢? 这就是能量模型。
2.4 为什么偏偏是指数?——一个实验
代码 01 第 1 部分:同一个网络 f θ f_\theta f θ (1 → 64 → 64 → 1,tanh),四种方法变成非负的 g θ g_\theta g θ ,在网格上精确地除以 Z Z Z ,用最大似然拟合一个密度跨越很多数量级的一维数据(0.6 N ( − 2 , 0.3 2 ) + 0.3 N ( 1 , 1 ) + 0.1 N ( 5 , 0.15 2 ) 0.6\,\mathcal{N}(-2, 0.3^2) + 0.3\,\mathcal{N}(1, 1) + 0.1\,\mathcal{N}(5, 0.15^2) 0.6 N ( − 2 , 0. 3 2 ) + 0.3 N ( 1 , 1 ) + 0.1 N ( 5 , 0.1 5 2 ) ):
g θ ( x ) g_\theta(x) g θ ( x ) 比真实分布多(= KL,nat) 网络输出 f f f 的范围 exp ( f ) \exp(f) exp ( f ) (能量模型)0.011 [−0.33, +13.11] s o f t p l u s ( f ) \mathrm{softplus}(f) softplus ( f ) 0.013 [−13.68, +1.31] ∣ f ∣ \lvert f\rvert ∣ f ∣ 0.200 [−2.67, +0.40] f 2 f^2 f 2 0.286 [−1.39, +2.51]
exp ( f ) \exp(f) exp ( f ) 最好:密度相差几十个数量级时,log p \log p log p 只差几十,网络输出一个变化平缓的 f f f 就够了。s o f t p l u s ( f ) \mathrm{softplus}(f) softplus ( f ) 几乎一样好——f f f 很负时 log ( 1 + e f ) ≈ e f \log(1 + e^f) \approx e^f log ( 1 + e f ) ≈ e f ,网络正是用了这一段(f f f 一直到 −13.7),在低密度区域它本质上就是一个能量模型。f 2 f^2 f 2 和 ∣ f ∣ |f| ∣ f ∣ 要在大片区域里输出”几乎正好是 0”的值,而且在 f = 0 f = 0 f = 0 处 log g = − ∞ \log g = -\infty log g = − ∞ ,梯度剧烈变化。
3. 能量模型 · Energy-based models
3.1 定义
slide 9:
p θ ( x ) = 1 ∫ exp ( f θ ( x ) ) d x exp ( f θ ( x ) ) = 1 Z ( θ ) 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)). p θ ( x ) = ∫ e x p ( f θ ( x )) d x 1 exp ( f θ ( x )) = Z ( θ ) 1 exp ( f θ ( x )) .
归一化常数 Z ( θ ) = ∫ exp ( f θ ( x ) ) d x Z(\theta) = \int\exp(f_\theta(x))\,dx Z ( θ ) = ∫ exp ( f θ ( x )) d x 也叫配分函数 (partition function,来自统计物理)。
为什么用指数 (而不是比如 f θ ( x ) 2 f_\theta(x)^2 f θ ( x ) 2 )?
想捕捉概率的巨大变化 ,对数概率是我们想要的自然尺度;否则需要高度不光滑的 f θ f_\theta f θ (§2.4 的实验)。
指数族 :很多常见分布都能写成这种形式。
这类分布在统计物理里相当一般的假设下自然出现(最大熵 原理、热力学第二定律)。− f θ ( x ) -f_\theta(x) − f θ ( x ) 叫做能量 ,模型因此得名;直观地说,能量低(f θ f_\theta f θ 高)的配置更可能——玻尔兹曼分布 p ∝ e − E / k T p \propto e^{-E/kT} p ∝ e − E / k T 。
最大熵的一句话说明 :在所有满足”E p [ T ( x ) ] = \mathbb{E}_p[T(x)] = E p [ T ( x )] = 给定值”的分布中,熵最大的那一个形如 p ( x ) ∝ exp ( θ ⋅ T ( x ) ) p(x) \propto \exp(\theta \cdot T(x)) p ( x ) ∝ exp ( θ ⋅ T ( x )) (拉格朗日乘子法)。所以如果你只想让模型匹配数据的某些统计量、此外不做多余的假设,指数形式是”最不武断”的选择。
3.2 优点与缺点
slide 10:
优点 :极大的灵活性——几乎可以用任何你想要的函数 f θ ( x ) f_\theta(x) f θ ( x ) 。
缺点 :
从 p θ ( x ) p_\theta(x) p θ ( x ) 采样 很难;
计算和优化似然 很难(学习很难);
没有特征学习(但可以加隐变量)。
维数灾难 :根本问题在于,当没有解析解时,数值计算 Z ( θ ) Z(\theta) Z ( θ ) 的代价随 x x x 的维数指数增长 。
代码 01 第 2 部分用一个 Z Z Z 已知的例子(f ( x ) = − ∥ x ∥ 2 / 2 f(x) = -\Vert x\Vert^2/2 f ( x ) = − ∥ x ∥ 2 /2 ,log Z = d 2 log 2 π \log Z = \frac d2\log 2\pi log Z = 2 d log 2 π ):
维数 d d d 网格点数(每维 20 个) 网格 log Z 误差 均匀采样(1 万个样本)的相对标准误 有贡献的样本比例 1 20 0.00000 1.3% 74.7% 2 400 0.00000 2.6% 43.5% 4 160,000 0.00000 7.6% 10.1% 6 64,000,000 0.00000 23.3% 1.9%
网格在每一维上都很准,但点数是 20 d 20^d 2 0 d ——一张 8×8 的连续图像(d = 64 d = 64 d = 64 )要 20 64 ≈ 10 83 20^{64} \approx 10^{83} 2 0 64 ≈ 1 0 83 个点。均匀采样的代价不随维数变,可几乎所有样本都落在 exp ( f ) ≈ 0 \exp(f) \approx 0 exp ( f ) ≈ 0 的地方,相对误差约按 2.8 d / 2 2.8^{d/2} 2. 8 d /2 增长(练习 8)——和第 5 讲”朴素蒙特卡洛估计边际似然”是同一个问题。
尽管如此,有些任务不需要知道 Z ( θ ) Z(\theta) Z ( θ ) 。
3.3 比较不需要 Z
slide 11:给 x x x 、x ′ x' x ′ ,计算 p θ ( x ) p_\theta(x) p θ ( x ) 或 p θ ( x ′ ) p_\theta(x') p θ ( x ′ ) 需要 Z ( θ ) Z(\theta) Z ( θ ) 。但它们的比值
p θ ( x ) p θ ( x ′ ) = exp ( f θ ( x ) − f θ ( x ′ ) ) \frac{p_\theta(x)}{p_\theta(x')} = \exp(f_\theta(x) - f_\theta(x')) p θ ( x ′ ) p θ ( x ) = exp ( f θ ( x ) − f θ ( x ′ ))
不涉及 Z ( θ ) Z(\theta) Z ( θ ) 。这意味着我们可以轻松地判断哪个更可能。应用:异常检测 (f f f 低于阈值就报警,阈值本身可以在数据上校准)、去噪 。
slide 12:物体识别、序列标注、图像修复——给定一个训练好的模型,很多应用只需要相对比较 ,不需要 Z Z Z 。例如分类: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'))} p ( y ∣ x ) = ∑ y ′ e x p ( f ( x , y ′ )) e x p ( f ( x , y )) ,归一化只对类别 y y y 求和(几个或几千个),而不是对所有图像 x x x 求和——softmax 分类器本身就是一个条件能量模型。
4. 例子 · Examples
4.1 Ising 模型
slide 13:有一张真实图像 y ∈ { 0 , 1 } 3 × 3 y \in \{0, 1\}^{3\times3} y ∈ { 0 , 1 } 3 × 3 和一张损坏的图像 x ∈ { 0 , 1 } 3 × 3 x \in \{0, 1\}^{3\times3} x ∈ { 0 , 1 } 3 × 3 。我们知道 x x x ,想恢复 y y y 。用马尔可夫随机场建模联合分布:
p ( y , x ) = 1 Z exp ( ∑ i ψ i ( x i , y i ) + ∑ ( i , j ) ∈ E ψ i j ( y i , y j ) ) . 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). p ( y , x ) = Z 1 exp ( ∑ i ψ i ( x i , y i ) + ∑ ( i , j ) ∈ E ψ ij ( y i , y j ) ) .
ψ i ( x i , y i ) \psi_i(x_i, y_i) ψ i ( x i , y i ) :第 i i i 个损坏的像素依赖第 i i i 个原始像素;
ψ i j ( y i , y j ) \psi_{ij}(y_i, y_j) ψ ij ( y i , y j ) :相邻的像素倾向于取相同的值。
原图是什么样?最大化 p ( y ∣ x ) p(y \mid x) p ( y ∣ x ) ,等价地,最大化 p ( y , x ) p(y, x) p ( y , x ) (p ( x ) p(x) p ( x ) 和 y y y 无关)——不需要 Z Z Z 。
代码里用 ± 1 \pm 1 ± 1 编码,f ( y ; x ) = η ∑ i x i y i + β ∑ ( i , j ) y i y j f(y; x) = \eta\sum_i x_iy_i + \beta\sum_{(i,j)}y_iy_j f ( y ; x ) = η ∑ i x i y i + β ∑ ( i , j ) y i y j 。对独立的翻转噪声(概率 r r r ),η = 1 2 log 1 − r r \eta = \frac12\log\frac{1-r}{r} η = 2 1 log r 1 − r 恰好是正确的观测项强度。推断方法都只用到局部的 f f f 差值:
吉布斯采样 :p ( y i = + 1 ∣ 其余 ) = σ ( 2 h i ) p(y_i = +1 \mid \text{其余}) = \sigma(2h_i) p ( y i = + 1 ∣ 其余 ) = σ ( 2 h i ) ,h i = η x i + β ∑ j ∼ i y j h_i = \eta x_i + \beta\sum_{j \sim i}y_j h i = η x i + β ∑ j ∼ i y j (练习 5);棋盘格顺序一次更新所有互不相邻的像素;
ICM (迭代条件众数):每次把一个像素设成”给定邻居时最可能的值”,贪心地爬到一个局部最大值。
代码 02 第 1 部分(4×4,r = 0.2 r = 0.2 r = 0.2 ,2 16 2^{16} 2 16 种 y y y 可以精确列举):换 200 次噪声取平均,错误像素数(共 16 个):
β \beta β 带噪 精确 MAP 精确边缘 > ½ ICM 0 3.31 3.31 3.31 3.31 0.4 3.31 2.57 2.94 2.42 0.6 3.31 3.71 3.12 2.42 0.8 3.31 5.75 4.49 2.85
适中的 β \beta β 有帮助,太大时先验压过观测、大块被抹平。MAP(最可能的整张图)和”逐像素取后验边缘”是两种不同的决策。ICM 只找到局部最优,β \beta β 大时反而比精确 MAP 好——它从带噪图像出发、停在附近,多了一个”别离观测太远”的隐含约束。吉布斯采样估计的边缘和精确值的平均误差从 10 次扫描的 0.045 降到 10,000 次的 0.0013,而 Z Z Z 从头到尾没有出现。
手写的能量函数能走多远? 代码 02 第 2 部分在像素世界上加 10% / 20% 的翻转噪声,和”知道真实图形引擎”的贝叶斯最优去噪器比较(像素世界是 177 个配置的混合,带噪观测下的后验可以精确算):
翻转噪声 带噪图像 全白(什么都不画) Ising + ICM Ising + 吉布斯边缘 贝叶斯最优 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% 看起来不错,但它几乎把所有笔画都抹掉了——错误率和”全白”一样。像素世界的笔画只有一个像素宽,“相邻相同”会把细线当成噪声。能量模型的价值取决于 f f f 里写进了多少关于数据的知识 ;这正是要学 f f f 的理由(§5)。
4.2 专家乘积
slide 14:假设你训练了几个模型 q θ 1 ( x ) q_{\theta_1}(x) q θ 1 ( x ) 、r θ 2 ( x ) r_{\theta_2}(x) r θ 2 ( x ) 、t θ 3 ( x ) t_{\theta_3}(x) t θ 3 ( x ) (可以是不同的模型:PixelCNN、流……)。每个都像一个专家 ,能给输入 x x x 打分。假设专家们独立地判断,很自然地想把它们集成成 q θ 1 ( x ) r θ 2 ( x ) t θ 3 ( x ) q_{\theta_1}(x)r_{\theta_2}(x)t_{\theta_3}(x) q θ 1 ( x ) r θ 2 ( x ) t θ 3 ( x ) 。为了得到合法的分布,需要归一化:
p θ 1 , θ 2 , θ 3 ( x ) = 1 Z ( θ 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). p θ 1 , θ 2 , θ 3 ( x ) = Z ( θ 1 , θ 2 , θ 3 ) 1 q θ 1 ( x ) r θ 2 ( x ) t θ 3 ( x ) .
注意 :它像一个与 (AND)操作——只要有一个模型给出零概率,乘积就是零;混合模型更像或 (OR)。slide 15 是 Du et al.(2020)的组合生成:把”微笑""戴眼镜""男性”等属性的能量模型加起来(对数相加 = 概率相乘),生成同时具有这些属性的人脸。
代码 01 第 3 部分:专家 A = ”y y y 接近 0”(一条横带),专家 B = “离原点约 2”(一个圆环)。乘积有 94.0% 的质量落在”y ≈ 0 y \approx 0 y ≈ 0 且 ∥ x ∥ ≈ 2 \Vert x\Vert \approx 2 ∥ x ∥ ≈ 2 “的两个小区域里;混合则是两者的并集。在方框 [ − 4 , 4 ] 2 [-4, 4]^2 [ − 4 , 4 ] 2 里 log Z A = 2.305 \log Z_A = 2.305 log Z A = 2.305 、log Z B = 2.064 \log Z_B = 2.064 log Z B = 2.064 ,而乘积的 log Z = 0.492 ≠ 2.305 + 2.064 \log Z = 0.492 \neq 2.305 + 2.064 log Z = 0.492 = 2.305 + 2.064 ——即使每个专家都是归一化的,乘积也必须重新归一化 ,这就是专家乘积成为能量模型的原因。
4.3 受限玻尔兹曼机
slide 16:RBM:带隐变量的能量模型 。两类变量:x ∈ { 0 , 1 } n x \in \{0, 1\}^n x ∈ { 0 , 1 } n 是可见变量(比如像素),z ∈ { 0 , 1 } m z \in \{0, 1\}^m z ∈ { 0 , 1 } m 是隐变量。联合分布
p W , b , c ( x , z ) = 1 Z exp ( x ⊤ W z + b ⊤ x + c ⊤ z ) = 1 Z exp ( ∑ i = 1 n ∑ j = 1 m x i z j w i j + 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). p W , b , c ( x , z ) = Z 1 exp ( x ⊤ W z + b ⊤ x + c ⊤ z ) = Z 1 exp ( ∑ i = 1 n ∑ j = 1 m x i z j w ij + b ⊤ x + c ⊤ z ) .
**“受限”**是因为没有可见–可见、隐–隐之间的连接(目标里没有 x i x j x_ix_j x i x j 或 z i z j z_iz_j z i z j 项)。
“受限”带来了什么?条件独立 (练习 3):
p ( z ∣ x ) = ∏ j σ ( c j + ( x ⊤ W ) j ) z j ( ⋯ ) 1 − z j , p ( x i = 1 ∣ z ) = σ ( b i + ( W z ) 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). p ( z ∣ x ) = ∏ j σ ( c j + ( x ⊤ W ) j ) z j ( ⋯ ) 1 − z j , p ( x i = 1 ∣ z ) = σ ( b i + ( W z ) i ) .
所以吉布斯采样可以一次更新整层;把 z z z 求和掉得到自由能 F ( x ) = − b ⊤ x − ∑ j s o f t p l u s ( c j + ( x ⊤ W ) j ) F(x) = -b^\top x - \sum_j\mathrm{softplus}(c_j + (x^\top W)_j) F ( x ) = − b ⊤ x − ∑ j softplus ( c j + ( x ⊤ W ) j ) ,p ( x ) = e − F ( x ) / Z p(x) = e^{-F(x)}/Z p ( x ) = e − F ( x ) / Z ——p ( x ) p(x) p ( x ) 的分子可以精确算,难的只有 Z Z Z 。
4.4 深度玻尔兹曼机
slides 17–18:把 RBM 堆起来是最早的深度生成模型之一(Salakhutdinov & Hinton 2009)。最底层 v v v 是像素,上面的层 h ( 1 ) , h ( 2 ) , h ( 3 ) 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) p θ ( x ) = exp ( f θ ( x )) / Z ( θ ) 。优点:几乎可以插入任何函数。缺点(很多):采样难、计算似然(学习)难、没有特征学习。维数灾难:数值计算 Z ( θ ) Z(\theta) Z ( θ ) 的代价随维数指数增长。
5.2 配分函数难算
slide 20:以 RBM 为例,
Z ( W , b , c ) = ∑ x ∈ { 0 , 1 } n ∑ z ∈ { 0 , 1 } m exp ( x ⊤ W z + 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). Z ( W , b , c ) = ∑ x ∈ { 0 , 1 } n ∑ z ∈ { 0 , 1 } m exp ( x ⊤ W z + b ⊤ x + c ⊤ z ) .
它是参数的一个定义明确的函数,但没有简单的闭式,计算时间随 n , m n, m n , m 指数增长。所以对似然学习来说,计算目标函数 p W , b , c ( x , z ) p_{W,b,c}(x, z) p W , b , c ( x , z ) 很难。观察 :优化似然很难,但优化未归一化 的概率 exp ( x ⊤ W z + b ⊤ x + c ⊤ z ) \exp(x^\top Wz + b^\top x + c^\top z) exp ( x ⊤ W z + b ⊤ x + c ⊤ z ) 很容易。
代码 03 第 1 部分用了一个技巧:先把 64 个可见像素求和掉(给定 z z z 时它们独立),log Z = l o g s u m e x p z [ c ⊤ z + ∑ i s o f t p l u s ( b i + ( W z ) i ) ] \log Z = \mathrm{logsumexp}_z[c^\top z + \sum_i\mathrm{softplus}(b_i + (Wz)_i)] log Z = logsumexp z [ c ⊤ z + ∑ i softplus ( b i + ( W z ) i )] ,只剩 2 m 2^m 2 m 项。m = 12 m = 12 m = 12 时 4,096 项(一次 2.1 毫秒),m = 16 m = 16 m = 16 时 65,536 项(36 毫秒),每加 4 个隐单元时间约乘 16;m = 30 m = 30 m = 30 就要 10 亿项。直接对 ( x , z ) (x, z) ( x , z ) 求和则是 2 76 2^{76} 2 76 项。一般的能量模型连这个技巧都没有。
5.3 训练直觉
slide 21:目标是最大化 exp { f θ ( x train ) } Z ( θ ) \frac{\exp\{f_\theta(x_{\text{train}})\}}{Z(\theta)} Z ( θ ) e x p { f θ ( x train )} ——增大分子、减小分母 。
直觉 :因为模型没有归一化,通过改变 θ \theta θ 增大未归一化的对数概率 f θ ( x train ) f_\theta(x_{\text{train}}) f θ ( x train ) ,并不保证 x train x_{\text{train}} x train 相对于其他点变得更可能(也许所有点的 f f f 都一起变大了)。我们还必须考虑对其他”错误的点”的影响,设法把它们压下去 ,让 Z ( θ ) Z(\theta) Z ( θ ) 也变小。
5.4 对比散度
slide 22:想法 :不精确计算 Z ( θ ) Z(\theta) Z ( θ ) ,而用蒙特卡洛估计。对比散度算法 :采样 x sample ∼ p θ x_{\text{sample}} \sim p_\theta x sample ∼ p θ ,沿 ∇ θ ( f θ ( x train ) − f θ ( x sample ) ) \nabla_\theta(f_\theta(x_{\text{train}}) - f_\theta(x_{\text{sample}})) ∇ θ ( f θ ( x train ) − f θ ( x sample )) 走一步。让训练数据比模型的典型样本更可能。回忆:能量模型里比较是容易的!
slide 23 的推导:最大化对数似然 max θ f θ ( x train ) − log Z ( θ ) \max_\theta f_\theta(x_{\text{train}}) - \log Z(\theta) max θ f θ ( x train ) − log Z ( θ ) ,
∇ θ f θ ( x train ) − ∇ θ log Z ( θ ) = ∇ θ f θ ( x train ) − ∇ θ Z ( θ ) Z ( θ ) = ∇ θ f θ ( x train ) − 1 Z ( θ ) ∫ ∇ θ exp { f θ ( x ) } d x = ∇ θ f θ ( x train ) − ∫ exp { f θ ( x ) } Z ( θ ) ∇ θ f θ ( x ) d x = ∇ θ f θ ( x train ) − E x sample [ ∇ θ f θ ( x sample ) ] ≈ ∇ θ f θ ( x train ) − ∇ θ f θ ( x sample ) , x sample ∼ exp { f θ ( x sample ) } / 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} ∇ θ f θ ( x train ) − ∇ θ log Z ( θ ) = ∇ θ f θ ( x train ) − Z ( θ ) ∇ θ Z ( θ ) = ∇ θ f θ ( x train ) − Z ( θ ) 1 ∫ ∇ θ exp { f θ ( x )} d x = ∇ θ f θ ( x train ) − ∫ Z ( θ ) exp { f θ ( x )} ∇ θ f θ ( x ) d x = ∇ θ f θ ( x train ) − E x sample [ ∇ θ f θ ( x sample )] ≈ ∇ θ f θ ( x train ) − ∇ θ f θ ( x sample ) , x sample ∼ exp { f θ ( x sample )} / Z ( θ ) .
怎样采样? (§6)
几个版本 (本讲义补充;Hinton 2002、Tieleman 2008):
CD-k k k :链从这一批训练数据 出发,跑 k k k 步 MCMC(RBM 里是 k k k 次交替的吉布斯);
PCD-k k k (持续对比散度):维护一组持续 的链,每次迭代接着上次的状态跑 k k k 步;
严格地说,“从数据出发跑 k k k 步”的样本不是 p θ p_\theta p θ 的样本,所以 CD 不是似然的无偏梯度;Hinton 证明它近似地最小化 D K L ( p data ∥ p θ ) − D K L ( p k ∥ p θ ) D_{\mathrm{KL}}(p_{\text{data}} \Vert p_\theta) - D_{\mathrm{KL}}(p_k \Vert p_\theta) D KL ( p data ∥ p θ ) − D KL ( p k ∥ p θ ) (p k p_k p k 是跑 k k k 步后的分布)。
5.5 实验:RBM 上 CD 和精确梯度比一比
像素世界只有 64 个像素,隐单元 ≤ 12 时 log Z \log Z log Z 可以精确算并自动求导 ——于是可以用精确的 似然梯度训练,作为 CD 的对照。代码 03 第 2 部分(12 个隐单元,Adam lr = 0.01,4,000 步):
训练方法 用时 测试集比真实多(bit) log Z 长链样本 − log 2 p data -\log_2 p_{\text{data}} − log 2 p data 像样的样本 精确梯度 12 秒 +5.57 24.7 36.0 65% CD-1 1 秒 +5.60 24.6 36.1 65% CD-10 3 秒 +5.58 24.3 36.5 63% PCD-1 1 秒 +6.45 21.4 36.7 63%
排行榜: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-k k k 的平均梯度(20 个大小 500 的小批量)和精确梯度比较:
估计 余弦相似度 相对误差 ∥ g ^ − g ∥ / ∥ g ∥ \Vert\hat g - g\Vert/\Vert g\Vert ∥ g ^ − g ∥/∥ g ∥ 参照:精确的模型期望 + 同样的小批量(噪声下限) 0.976 0.251 CD-1 0.734 0.685 CD-10 0.943 0.341 CD-100 0.953 0.331
CD-1 的偏差远超噪声下限:从数据出发只走一步的链只探索数据附近,看不到模型在远处放的质量——“别的点”没有被压下去。链越长越接近精确梯度。
6. 采样 · Sampling from energy-based models
6.1 MCMC
slide 24:没有像自回归模型或流那样的直接采样方法。主要问题:无法轻易算出每个可能样本有多大概率。但可以轻易比较 两个样本 x x x 、x ′ x' x ′ 。用一种迭代方法——马尔可夫链蒙特卡洛(MCMC) :
随机初始化 x 0 x^0 x 0 ,t = 0 t = 0 t = 0 ;
令 x ′ = x t + 噪声 x' = x^t + \text{噪声} x ′ = x t + 噪声 ;
若 f θ ( x ′ ) > f θ ( x t ) f_\theta(x') > f_\theta(x^t) f θ ( x ′ ) > f θ ( x t ) ,令 x t + 1 = x ′ x^{t+1} = x' x t + 1 = x ′ ;
否则以概率 exp ( f θ ( x ′ ) − f θ ( x t ) ) \exp(f_\theta(x') - f_\theta(x^t)) exp ( f θ ( x ′ ) − f θ ( x t )) 令 x t + 1 = x ′ x^{t+1} = x' x t + 1 = x ′ ,否则 x t + 1 = x t x^{t+1} = x^t x t + 1 = x t ;
回到第 2 步。
理论上可行,但可能要很久才收敛 。(为什么它收敛到 p θ p_\theta p θ ——细致平衡——是第 12 讲的内容。)
6.2 朗之万 MCMC
slide 25:对任意连续分布 p θ ( x ) p_\theta(x) p θ ( x ) ,假设能算它的梯度(得分函数 )∇ x log p θ ( x ) \nabla_x\log p_\theta(x) ∇ x log p θ ( x ) 。令 π ( x ) \pi(x) π ( x ) 是一个容易采样的先验分布。朗之万 MCMC :
x 0 ∼ π ( x ) , x t + 1 ∼ x t + ϵ ∇ x log p θ ( x t ) + 2 ϵ z t , z t ∼ 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. x 0 ∼ π ( x ) , x t + 1 ∼ x t + ϵ ∇ x log p θ ( x t ) + 2 ϵ z t , z t ∼ N ( 0 , I ) , t = 0 , 1 , … , T − 1.
若 ϵ → 0 \epsilon \to 0 ϵ → 0 、T → ∞ T \to \infty T → ∞ ,则 x T ∼ p θ ( x ) x^T \sim p_\theta(x) x T ∼ p θ ( x ) 。对能量模型,得分函数是可算的 :
∇ x log p θ ( x ) = ∇ x f θ ( x ) − ∇ x log Z ( θ ) ⏟ = 0 = ∇ x f θ ( x ) . \nabla_x\log p_\theta(x) = \nabla_x f_\theta(x) - \underbrace{\nabla_x\log Z(\theta)}_{=0} = \nabla_x f_\theta(x). ∇ x log p θ ( x ) = ∇ x f θ ( x ) − = 0 ∇ x log Z ( θ ) = ∇ x f θ ( x ) .
直觉 :第一项是”往 f f f 高的地方爬”的梯度上升;第二项是噪声,防止所有样本都挤到同一个最高点。两者的比例恰好让链的平稳分布是 p θ p_\theta p θ 。
6.3 链混合慢时会发生什么?
CD、PCD 都依赖 MCMC 的样本。如果链在可接受的步数内混合不了 呢?代码 04 用一个最简单的例子:两个分开的高斯(中心 ( ± 2 , 0 ) (\pm 2, 0) ( ± 2 , 0 ) ,σ = 0.4),左边权重 0.5 或 0.8。二维里 Z Z Z 可以在网格上精确算,于是可以用精确的最大似然 作对照。四种方法(能量网络 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.497 0.003 / 0.792 CD-10(从数据出发) 0.011 / 0.513 0.973 / 0.999 PCD-10(持续的链) 2.286 / 0.003 6.361 / 0.000 短链(从噪声出发,30 步) 1.370 / 0.981 1,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 涨到 10 6 10^6 1 0 6 量级(密度塌成一个极尖的峰)。链落进哪个模式只由起点决定、和模型的权重无关;梯度于是一直把模型往”和链的比例相反”的方向推,推过头以后链全部滑进另一个模式,又反过来推。
为什么? 代码 04 第 3 部分在精确训练好的模型上跑 2,000 条朗之万链(从均匀噪声出发,起点 50.5% 在左边):10 步后 49.6% 在左边,10,000 步后 55.4%——模型真正的左边质量是 79.2%。模型在两峰之间的低谷处密度比峰值低 e 8.2 ≈ 3 , 800 e^{8.2} \approx 3,800 e 8.2 ≈ 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)正是为训练它们而发明的。
扩散模型就是一族能量模型。 得分模型学的是 ∇ x log p \nabla_x\log p ∇ 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) f ( x , y ) ,log ∑ y e f ( x , y ) \log\sum_y e^{f(x,y)} log ∑ y e f ( x , y ) 就是 x x x 的未归一化对数密度(§3.3 的 slide 12);这一视角后来被用于分布外检测——用 f f f 做异常分数。
8. 小结 · Summary
概率分布要非负、和为 1。非负容易(f 2 f^2 f 2 、e f e^f e f 、∣ f ∣ |f| ∣ f ∣ 、softplus),归一化难;经典做法是选体积有解析式的构件(指数族)并用乘积(自回归)、混合(隐变量)组合。
能量模型 p θ = e f θ / Z ( θ ) p_\theta = e^{f_\theta}/Z(\theta) p θ = e f θ / Z ( θ ) :f θ f_\theta f θ 任意,代价是配分函数。选指数是因为对数尺度自然(实验:e f e^f e f 比 f 2 f^2 f 2 好 0.27 nat)、指数族、最大熵。
维数灾难 :网格要 20 d 20^d 2 0 d 个点,均匀采样的相对误差指数增长。但比较不需要 Z Z Z :异常检测、去噪、MAP 推断、分类都只用相对的分数。
例子 :Ising 去噪(适中的耦合有帮助,手写能量太简单——像素世界上不如贝叶斯最优去噪器);专家乘积(AND,必须重新归一化);RBM(层内无连接 → 条件独立、自由能可算,log Z \log Z log Z 要对 2 m 2^m 2 m 个隐状态求和);深度玻尔兹曼机。
学习 :∇ θ log p θ ( x ) = ∇ θ f θ ( x ) − E p θ [ ∇ θ f θ ] \nabla_\theta\log p_\theta(x) = \nabla_\theta f_\theta(x) - \mathbb{E}_{p_\theta}[\nabla_\theta f_\theta] ∇ θ log p θ ( x ) = ∇ θ f θ ( x ) − E p θ [ ∇ θ f θ ] ——抬高数据、压低模型样本。对比散度 用 MCMC 样本近似第二项。RBM 上 CD-1 和精确梯度几乎一样好(+5.60 vs +5.57 bit),但它的梯度方向确实有偏(余弦 0.73)。
采样 :MH 只用 f f f 的差,朗之万只用 ∇ x f \nabla_x f ∇ x f ,都不需要 Z Z Z 。但链在分开的模式之间混合极慢(1 万步后 55% vs 应有的 79%),于是 CD 学不到模式的相对权重,PCD 和短链甚至失控振荡——基于采样的训练,质量取决于采样器 。
9. 常见误区 · Common pitfalls
“能量模型的 f θ f_\theta f θ 越大的点越可能,所以只要把训练点的 f f f 抬高就行。” 不归一化时,所有点的 f f f 可以一起变大;必须同时把别的点压下去(§5.3)。
“既然只差一个常数 Z Z Z ,那就忽略它直接最大化 f ( x train ) f(x_{\text{train}}) f ( x train ) 。” Z Z Z 依赖 θ \theta θ ,它的梯度正是 E p θ [ ∇ f ] \mathbb{E}_{p_\theta}[\nabla f] E p θ [ ∇ f ] ,忽略它等于只做”抬高”不做”压低”,f f f 会发散。
“专家都归一化了,乘积也就归一化了。” 不是(代码 01:log Z = 0.49 ≠ 4.37 \log Z = 0.49 \neq 4.37 log Z = 0.49 = 4.37 )。
“错误率低就说明去噪好。” 图像大部分是背景时,“什么都不画”的错误率也很低(代码 02 第 2 部分)。
“CD 是似然的梯度。” 它是有偏的近似(余弦 0.73);在 RBM 上偏差不大,在模式分开的连续数据上可能完全学错相对权重(§6.3)。
“MCMC 只要跑得够久就行。” “够久”可能是天文数字:跨过一个低 e 8 e^{8} e 8 倍的低谷,1 万步也不够(§6.3)。
“朗之万的步长越小越准。” 步长小,离散化偏差小,但混合更慢;第 12 讲会精确地量这个取舍。
“PCD 一定比 CD 好。” 持续的链需要混合得比参数变化快,否则梯度估计越来越偏(代码 03 的 PCD-1、代码 04 的 PCD-10)。
10. 练习 · Exercises
练习 1(体积)
计算 g λ ( x ) = e − λ x g_\lambda(x) = e^{-\lambda x} g λ ( x ) = e − λ x (x ≥ 0 x \geq 0 x ≥ 0 )和 g ( μ , σ ) ( x ) = e − ( x − μ ) 2 / ( 2 σ 2 ) g_{(\mu,\sigma)}(x) = e^{-(x-\mu)^2/(2\sigma^2)} g ( μ , σ ) ( x ) = e − ( x − μ ) 2 / ( 2 σ 2 ) 的体积,验证 slide 7。指数族 h ( x ) exp ( θ ⋅ T ( x ) ) h(x)\exp(\theta\cdot T(x)) h ( x ) exp ( θ ⋅ T ( x )) 的 A ( θ ) = log Z ( θ ) A(\theta) = \log Z(\theta) A ( θ ) = log Z ( θ ) 对 θ \theta θ 的梯度是什么?
参考答案
∫ 0 ∞ e − λ x d x = 1 / λ \int_0^\infty e^{-\lambda x}dx = 1/\lambda ∫ 0 ∞ e − λ x d x = 1/ λ ;∫ e − ( x − μ ) 2 / ( 2 σ 2 ) d x = 2 π σ 2 \int e^{-(x-\mu)^2/(2\sigma^2)}dx = \sqrt{2\pi\sigma^2} ∫ e − ( x − μ ) 2 / ( 2 σ 2 ) d x = 2 π σ 2 。∇ θ A ( θ ) = ∫ h ( x ) T ( x ) e θ ⋅ T ( x ) d x ∫ h ( x ) e θ ⋅ T ( x ) d x = E p θ [ 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)] ∇ θ A ( θ ) = ∫ h ( x ) e θ ⋅ T ( x ) d x ∫ h ( x ) T ( x ) e θ ⋅ T ( x ) d x = E p θ [ T ( x )] ——这正是 slide 23 中 ∇ θ log Z = E p θ [ ∇ θ f ] \nabla_\theta\log Z = \mathbb{E}_{p_\theta}[\nabla_\theta f] ∇ θ log Z = E p θ [ ∇ θ f ] 的特例(f = θ ⋅ T f = \theta\cdot T f = θ ⋅ T ,∇ θ f = T \nabla_\theta f = T ∇ θ f = T )。最大似然的驻点因此是 E p θ [ T ] = E p data [ T ] \mathbb{E}_{p_\theta}[T] = \mathbb{E}_{p_{\text{data}}}[T] E p θ [ T ] = E p data [ T ] :矩匹配 。
练习 2(对数配分函数的梯度)
不看 slide 23,推导 ∇ θ log Z ( θ ) = E x ∼ p θ [ ∇ θ f θ ( x ) ] \nabla_\theta\log Z(\theta) = \mathbb{E}_{x \sim p_\theta}[\nabla_\theta f_\theta(x)] ∇ θ log Z ( θ ) = E x ∼ p θ [ ∇ θ f θ ( x )] 。再证明 log Z ( θ ) \log Z(\theta) log Z ( θ ) 的 Hessian 是 C o v p θ [ ∇ θ f θ ] \mathrm{Cov}_{p_\theta}[\nabla_\theta f_\theta] Cov p θ [ ∇ θ f θ ] (当 f f f 对 θ \theta θ 线性时),由此说明指数族的负对数似然是凸的。
参考答案
∇ log Z = ∇ Z Z = ∫ e f ∇ f d x Z = E p θ [ ∇ f ] \nabla\log Z = \frac{\nabla Z}{Z} = \frac{\int e^{f}\nabla f\,dx}{Z} = \mathbb{E}_{p_\theta}[\nabla f] ∇ log Z = Z ∇ Z = Z ∫ e f ∇ f d x = E p θ [ ∇ f ] 。f = θ ⋅ T f = \theta\cdot T f = θ ⋅ T 时再求一次导:∇ 2 log Z = ∫ e f T T ⊤ Z − ( ∫ e f T ) ( ∫ e f T ) ⊤ Z 2 = C o v p θ [ 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 ∇ 2 log Z = Z ∫ e f T T ⊤ − Z 2 ( ∫ e f T ) ( ∫ e f T ) ⊤ = Cov p θ [ T ] ⪰ 0 。负对数似然 − θ ⋅ T ˉ + log Z ( θ ) -\theta\cdot\bar T + \log Z(\theta) − θ ⋅ T ˉ + log Z ( θ ) 是线性函数加凸函数,所以是凸的。一般的神经网络 f θ f_\theta f θ 没有这个性质。
练习 3(RBM 的条件分布)
证明在 RBM 中 p ( z ∣ x ) = ∏ j p ( z j ∣ x ) p(z \mid x) = \prod_j p(z_j \mid x) p ( z ∣ x ) = ∏ j p ( z j ∣ x ) ,p ( z j = 1 ∣ x ) = σ ( c j + ∑ i x i w i j ) p(z_j = 1 \mid x) = \sigma(c_j + \sum_i x_iw_{ij}) p ( z j = 1 ∣ x ) = σ ( c j + ∑ i x i w ij ) ;并推导自由能 F ( x ) = − b ⊤ x − ∑ j log ( 1 + e c j + ( x ⊤ W ) j ) F(x) = -b^\top x - \sum_j\log(1 + e^{c_j + (x^\top W)_j}) F ( x ) = − b ⊤ x − ∑ j log ( 1 + e c j + ( x ⊤ W ) j ) 。如果加上隐–隐连接 z ⊤ U z z^\top Uz z ⊤ U z ,哪一步会失败?
参考答案
p ( z ∣ x ) ∝ exp ( x ⊤ W z + c ⊤ z ) = ∏ j exp ( z j ( c j + ( 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)) p ( z ∣ x ) ∝ exp ( x ⊤ W z + c ⊤ z ) = ∏ j exp ( z j ( c j + ( x ⊤ W ) j )) ,对每个 z j z_j z j 独立归一化:p ( z j = 1 ∣ x ) = e a j 1 + e a j = σ ( a j ) p(z_j = 1 \mid x) = \frac{e^{a_j}}{1 + e^{a_j}} = \sigma(a_j) p ( z j = 1 ∣ x ) = 1 + e a j e a j = σ ( a j ) ,a j = c j + ( x ⊤ W ) j a_j = c_j + (x^\top W)_j a j = c j + ( x ⊤ W ) j 。把 z z z 求和:∑ z e x ⊤ W z + b ⊤ x + c ⊤ z = e b ⊤ x ∏ j ( 1 + e a j ) \sum_z e^{x^\top Wz + b^\top x + c^\top z} = e^{b^\top x}\prod_j(1 + e^{a_j}) ∑ z e x ⊤ W z + b ⊤ x + c ⊤ z = e b ⊤ x ∏ j ( 1 + e a j ) ,取负对数得 F ( x ) F(x) F ( x ) 。有 z ⊤ U z z^\top Uz z ⊤ U z 时 p ( z ∣ x ) p(z \mid x) p ( z ∣ x ) 不再分解成各 z j z_j z j 的乘积,求和也不再有闭式——“受限”就是为了保住这两点。
练习 4(把可见单元求和掉)
仿照练习 3,对可见单元求和,推导代码 RBM.log_Z 用的公式 log Z = l o g s u m e x p z [ c ⊤ z + ∑ i s o f t p l u s ( b i + ( W z ) i ) ] \log Z = \mathrm{logsumexp}_z[c^\top z + \sum_i\mathrm{softplus}(b_i + (Wz)_i)] log Z = logsumexp z [ c ⊤ z + ∑ i softplus ( b i + ( W z ) i )] 。它的计算量是多少?什么时候比”对隐单元求和、再对 x x x 求和”更好?
参考答案
Z = ∑ z e c ⊤ z ∑ x e x ⊤ ( W z + b ) = ∑ z e c ⊤ z ∏ i ( 1 + e b i + ( W z ) 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}) Z = ∑ z e c ⊤ z ∑ x e x ⊤ ( W z + b ) = ∑ z e c ⊤ z ∏ i ( 1 + e b i + ( W z ) i ) ,取对数即得。计算量 O ( 2 m ⋅ n m ) O(2^m \cdot nm) O ( 2 m ⋅ nm ) 。另一个方向是 O ( 2 n ⋅ n m ) O(2^n \cdot nm) O ( 2 n ⋅ nm ) ;所以当隐单元比可见单元少得多时(这里 m = 12 ≪ n = 64 m = 12 \ll n = 64 m = 12 ≪ n = 64 )对 z z z 列举。两者都少不了指数项。
练习 5(Ising 的吉布斯条件分布)
在 f ( y ) = η ∑ i x i y i + β ∑ ( i , j ) y i y j f(y) = \eta\sum_i x_iy_i + \beta\sum_{(i,j)}y_iy_j f ( y ) = η ∑ i x i y i + β ∑ ( i , j ) y i y j (y i ∈ { ± 1 } y_i \in \{\pm 1\} y i ∈ { ± 1 } )中,证明 p ( y i = + 1 ∣ y − i ) = σ ( 2 h i ) p(y_i = +1 \mid y_{-i}) = \sigma(2h_i) p ( y i = + 1 ∣ y − i ) = σ ( 2 h i ) ,h i = η x i + β ∑ j ∼ i y j h_i = \eta x_i + \beta\sum_{j \sim i}y_j h i = η x i + β ∑ j ∼ i y j 。为什么棋盘格上的”黑格”可以同时更新?
参考答案
只看含 y i y_i y i 的项:f = y i h i + 常数 f = y_ih_i + \text{常数} f = y i h i + 常数 。p ( y i = + 1 ∣ ⋅ ) p ( y i = − 1 ∣ ⋅ ) = e 2 h i \frac{p(y_i = +1 \mid \cdot)}{p(y_i = -1 \mid \cdot)} = e^{2h_i} p ( y i = − 1 ∣ ⋅ ) p ( y i = + 1 ∣ ⋅ ) = e 2 h i ,所以 p ( y i = + 1 ∣ ⋅ ) = e h i e h i + e − h i = σ ( 2 h i ) p(y_i = +1 \mid \cdot) = \frac{e^{h_i}}{e^{h_i} + e^{-h_i}} = \sigma(2h_i) p ( y i = + 1 ∣ ⋅ ) = e h i + e − h i e h i = σ ( 2 h i ) 。黑格的邻居全是白格,给定白格时黑格之间条件独立(马尔可夫随机场的局部性,第 2 讲),所以同时从各自的条件分布采样等价于逐个采样。
练习 6(两个高斯专家的乘积)
计算 N ( x ; μ 1 , σ 1 2 ) ⋅ N ( x ; μ 2 , σ 2 2 ) \mathcal{N}(x; \mu_1, \sigma_1^2)\cdot\mathcal{N}(x; \mu_2, \sigma_2^2) N ( x ; μ 1 , σ 1 2 ) ⋅ N ( x ; μ 2 , σ 2 2 ) 归一化以后的分布,以及归一化常数 Z Z Z 。μ 1 \mu_1 μ 1 和 μ 2 \mu_2 μ 2 相距很远时 Z Z Z 会怎样?这和”AND”的直觉有什么关系?
参考答案
精度相加:1 σ 2 = 1 σ 1 2 + 1 σ 2 2 \frac{1}{\sigma^2} = \frac{1}{\sigma_1^2} + \frac{1}{\sigma_2^2} σ 2 1 = σ 1 2 1 + σ 2 2 1 ,μ = σ 2 ( μ 1 σ 1 2 + μ 2 σ 2 2 ) \mu = \sigma^2(\frac{\mu_1}{\sigma_1^2} + \frac{\mu_2}{\sigma_2^2}) μ = σ 2 ( σ 1 2 μ 1 + σ 2 2 μ 2 ) ;Z = ∫ N 1 N 2 = N ( μ 1 ; μ 2 , σ 1 2 + σ 2 2 ) Z = \int\mathcal{N}_1\mathcal{N}_2 = \mathcal{N}(\mu_1; \mu_2, \sigma_1^2 + \sigma_2^2) Z = ∫ N 1 N 2 = N ( μ 1 ; μ 2 , σ 1 2 + σ 2 2 ) 。乘积比两个专家都窄(“两个条件都要满足”)。两个均值相距很远时 Z → 0 Z \to 0 Z → 0 :两个专家几乎没有共同认可的区域,乘积分布被迫挤在它们都”勉强接受”的地方——AND 的代价。
练习 7(softplus 为什么像 exp)
证明 f → − ∞ f \to -\infty f → − ∞ 时 log s o f t p l u s ( f ) = f + O ( e f ) \log\mathrm{softplus}(f) = f + O(e^f) log softplus ( f ) = f + O ( e f ) ,f → + ∞ f \to +\infty f → + ∞ 时 log s o f t p l u s ( f ) ≈ log f \log\mathrm{softplus}(f) \approx \log f log softplus ( f ) ≈ log f 。据此解释代码 01 中 softplus 和 exp 几乎一样好、以及网络输出的范围(f ∈ [ − 13.7 , 1.3 ] f \in [-13.7, 1.3] f ∈ [ − 13.7 , 1.3 ] )。
参考答案
log ( 1 + e f ) = e f − e 2 f 2 + ⋯ \log(1 + e^f) = e^f - \frac{e^{2f}}{2} + \cdots log ( 1 + e f ) = e f − 2 e 2 f + ⋯ ,所以 log s o f t p l u s ( f ) = f + log ( 1 − e f / 2 + ⋯ ) = f + O ( e f ) \log\mathrm{softplus}(f) = f + \log(1 - e^f/2 + \cdots) = f + O(e^f) log softplus ( f ) = f + log ( 1 − e f /2 + ⋯ ) = f + O ( e f ) ;f f f 大时 log ( 1 + e f ) ≈ f \log(1 + e^f) \approx f log ( 1 + e f ) ≈ f ,log s o f t p l u s ≈ log f \log\mathrm{softplus} \approx \log f log softplus ≈ log f ,增长极慢。网络把所有需要表示的对数密度都放在 f f f 负的那一段(最高只到 1.3),在那里 softplus 就是 e f e^f e f ——它”学会”了当一个能量模型。
练习 8(均匀采样估计 Z 的误差)
用 N N N 个 [ − 5 , 5 ] d [-5, 5]^d [ − 5 , 5 ] d 上的均匀样本估计 Z = ∫ e − ∥ x ∥ 2 / 2 d x Z = \int e^{-\Vert x\Vert^2/2}dx Z = ∫ e − ∥ x ∥ 2 /2 d x (忽略截断)。证明估计量的相对方差约为 ( 10 / ( 2 π ) ) d − 1 N ≈ 2.82 d N \frac{(10/(2\sqrt\pi))^d - 1}{N} \approx \frac{2.82^d}{N} N ( 10/ ( 2 π ) ) d − 1 ≈ N 2.8 2 d ,并和代码 01 的相对标准误(d = 1:1.3%,d = 6:23.3%)比较。
参考答案
w = 10 d e − ∥ x ∥ 2 / 2 w = 10^d e^{-\Vert x\Vert^2/2} w = 1 0 d e − ∥ x ∥ 2 /2 。E [ w ] = Z = ( 2 π ) d / 2 \mathbb{E}[w] = Z = (2\pi)^{d/2} E [ w ] = Z = ( 2 π ) d /2 ,E [ w 2 ] = 10 d ∫ e − ∥ x ∥ 2 = 10 d π d / 2 \mathbb{E}[w^2] = 10^d\int e^{-\Vert x\Vert^2} = 10^d\pi^{d/2} E [ w 2 ] = 1 0 d ∫ e − ∥ x ∥ 2 = 1 0 d π d /2 。相对方差 E [ w 2 ] E [ w ] 2 − 1 = 10 d π d / 2 ( 2 π ) d − 1 = ( 10 2 π ) 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 E [ w ] 2 E [ w 2 ] − 1 = ( 2 π ) d 1 0 d π d /2 − 1 = ( 2 π 10 ) d − 1 。N = 10 4 N = 10^4 N = 1 0 4 :d = 1 d = 1 d = 1 时 1.82 / 10 4 = 1.35 % \sqrt{1.82/10^4} = 1.35\% 1.82/1 0 4 = 1.35% ,d = 6 d = 6 d = 6 时 ( 2.82 6 − 1 ) / 10 4 ≈ 22.4 % \sqrt{(2.82^6 - 1)/10^4} \approx 22.4\% ( 2.8 2 6 − 1 ) /1 0 4 ≈ 22.4% ,和实验一致。相对误差按 2.82 d / 2 ≈ 1.68 d 2.82^{d/2} \approx 1.68^d 2.8 2 d /2 ≈ 1.6 8 d 指数增长。
练习 9(CD 为什么学不到模式权重)
设 p θ p_\theta p θ 有两个分开的模式,模型的对数质量比 Δ = log m L m R \Delta = \log\frac{m_L}{m_R} Δ = log m R m L 由一个参数 θ 0 \theta_0 θ 0 控制(比如 f θ = θ 0 1 [ x 1 < 0 ] + 其他 f_\theta = \theta_0\mathbf{1}[x_1 < 0] + \text{其他} f θ = θ 0 1 [ x 1 < 0 ] + 其他 )。(a) 写出精确似然梯度对 θ 0 \theta_0 θ 0 的分量。(b) 若负样本来自”从数据出发、不跨模式”的链,CD 梯度对 θ 0 \theta_0 θ 0 的分量是多少?(c) 若负样本来自”从均匀噪声出发、各有一半落进两个模式”的链呢?
参考答案
(a) ∂ ∂ θ 0 log p = 1 [ x 1 < 0 ] − p θ ( x 1 < 0 ) \frac{\partial}{\partial\theta_0}\log p = \mathbf{1}[x_1 < 0] - p_\theta(x_1 < 0) ∂ θ 0 ∂ log p = 1 [ x 1 < 0 ] − p θ ( x 1 < 0 ) ,对数据平均是 w data − m L w_{\text{data}} - m_L w data − m L (m L m_L m L 是模型的左边质量):驻点 m L = w data m_L = w_{\text{data}} m L = w data ,正确。(b) 链不跨模式,负样本中左边的比例等于数据中的比例 w data w_{\text{data}} w data ,CD 梯度分量是 w data − w data = 0 w_{\text{data}} - w_{\text{data}} = 0 w data − w data = 0 ——无论模型的权重是多少都为零 ,没有任何信号纠正 m L m_L m L ,它只会随别的参数的更新漂移(代码 04 中漂到了 0.999)。(c) 负样本左边比例约 ½,梯度分量 w data − 1 2 w_{\text{data}} - \frac12 w data − 2 1 ,对 w data = 0.8 w_{\text{data}} = 0.8 w data = 0.8 恒为正:θ 0 \theta_0 θ 0 无限增大,m L → 1 m_L \to 1 m L → 1 ;之后若链的落点随模型改变(全部滑进左边),梯度又变成 0.8 − 1 < 0 0.8 - 1 < 0 0.8 − 1 < 0 ——失控的振荡。
练习 10(条件能量模型)
softmax 分类器 p ( y ∣ x ) = e f ( x , y ) ∑ y ′ e f ( x , y ′ ) p(y \mid x) = \frac{e^{f(x, y)}}{\sum_{y'}e^{f(x, y')}} p ( y ∣ x ) = ∑ y ′ e f ( x , y ′ ) e f ( x , y ) 是一个对 y y y 的能量模型。(a) 它的配分函数是什么,为什么好算?(b) JEM 把 p ( x ) ∝ ∑ y e f ( x , y ) p(x) \propto \sum_ye^{f(x,y)} p ( x ) ∝ ∑ y e f ( x , y ) 当作 x x x 的能量模型;训练这个 p ( x ) p(x) p ( x ) 需要什么?
参考答案
(a) Z ( x ) = ∑ y ′ e f ( x , y ′ ) Z(x) = \sum_{y'}e^{f(x, y')} Z ( x ) = ∑ y ′ e f ( x , y ′ ) :只对类别求和,K K K 项,一次前向就算完。(b) p ( x ) p(x) p ( x ) 的配分函数是对所有 x x x 的积分——和本讲的一般能量模型一样难。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 的偏差、高维里为什么慢;
得分匹配 :∇ x log p θ ( x ) = ∇ x f θ ( x ) \nabla_x\log p_\theta(x) = \nabla_x f_\theta(x) ∇ x log p θ ( x ) = ∇ x f θ ( x ) 与 Z Z Z 无关;最小化 Fisher 散度,分部积分把未知的 ∇ x log p data \nabla_x\log p_{\text{data}} ∇ x log p data 消掉;
噪声对比估计 :把密度估计变成”数据 vs 噪声”的分类,顺便学出 Z Z Z ;和 GAN 的异同;flow contrastive estimation;
用对抗训练给能量模型的似然一个上界。