跳转至

第 20 章:深度生成模型(Deep Generative Models)

本章是 16-19 章所建立工具的一次集中应用与综合。作者系统综述了当前主要的深度生成模型:从玻尔兹曼机家族——Boltzmann Machines、Restricted Boltzmann Machines、Deep Belief Networks、Deep Boltzmann Machines 及其针对实值数据、卷积结构、结构化输出和高阶交互的多种变体——到基于可微生成器网络或对概率做显式链式分解的有向生成网络 Sigmoid Belief Nets、VAE、GAN、Generative Moment Matching Networks、Auto-Regressive Networks(含 NADE),再到从自编码器衍生出的若干采样方案(Markov Chain Associated with Denoising Autoencoders、Walk-Back、Generative Stochastic Networks、Diffusion Inversion)。这些模型都以某种方式表示多变量上的概率分布:有些可以显式评估概率密度函数;有些则无法直接评估,但支持那些隐式需要分布知识的操作(如从中采样)。有些是有向或无向图模型;有些无法轻易用因子图描述,但仍然在表示概率分布。本章还专门讨论了生成模型的评估这一困难且部分未解的问题。

20.1 Boltzmann Machines(玻尔兹曼机)

玻尔兹曼机最初由 Fahlman 等人(1983)、Ackley 等人(1985)、Hinton 等人(1984, 1986)作为学习二元向量任意概率分布的通用"联结主义"方法提出,此后加入其他类型变量的变体(RBM 的实值扩展、cRBM、ssRBM、PoT 等)逐渐超越了原始二元模型。本节简要介绍二元玻尔兹曼机并讨论训练与推断的相关问题。

玻尔兹曼机定义在 d 维二元随机向量 x ∈ {0,1}^d 上,是一种能量模型(16.2.4 节),由能量函数 E(x) = -x^T U x - b^T x(公式 20.2)参数化,其中 U 是权重矩阵、b 是偏置向量;联合概率为 P(x) = exp(-E(x))/Z(公式 20.1)。在一般设置下,玻尔兹曼机对一组 n 维训练样本建模,公式 20.1 描述观察变量上的联合概率分布。仅在可见变量上的玻尔兹曼机表达能力有限:某个单元开启的概率只能是其他单元值的线性模型(logistic 回归),因此观察变量间的相互作用被限制为权重矩阵描述的成对关系。

一旦把 x 分解为可见单元 v 和隐(latent/hidden)单元 h,能量函数改写为 E(v, h) = -v^T R v - v^T W h - h^T S h - b^T v - c^T h(公式 20.3),玻尔兹曼机的能力立即增强——含隐单元的玻尔兹曼机是离散变量上概率质量函数的万能逼近器(Le Roux and Bengio, 2008)。这与 MLP 通过加入隐藏单元把 logistic 回归变成函数万能逼近器的逻辑完全平行。

学习方面,玻尔兹曼机的学习算法通常基于最大似然;所有玻尔兹曼机的配分函数都难处理,因此最大似然梯度必须用第 18 章描述的技术近似。一个有趣的性质是:当学习规则基于最大似然时,连接两个单元的特定权重的更新仅依赖于这两个单元在不同分布(P_model(v) 与 P̂_data(v) P_model(h|v))下收集到的统计量——网络的其余部分只通过塑造这些统计量来影响权重,权重本身只需观察"两端"而无需知道其他部分如何产生这些统计。这使学习规则是"局部的",具有一定生物合理性:如果每个神经元都是玻尔兹曼机中的随机变量,连接两个随机变量的轴突与树突只需观察它们实际接触的细胞的发放模式即可学习。在正相中,两个单元频繁共同激活则连接增强,这就是 Hebbian 学习(Hebb, 1949)的典型例子,可总结为"fire together, wire together"。

但负相更难从生物角度解释。如 18.2 节所述,梦睡眠可能是一种负相采样形式(作者认为这更具推测性)。Hinton(2007a)、Bengio(2015)等人提出过生物合理的反向传播实现或近似,并将其与能量模型中的推断联系起来(但 Bengio 的版本使用连续隐变量),但这些实现仍有待验证。

20.2 Restricted Boltzmann Machines(受限玻尔兹曼机)

受限玻尔兹曼机(RBM)最初以"harmonium"之名由 Smolensky(1986)发明,是深度概率模型最常见的构件之一。16.7.1 节曾简述过 RBM;本节回顾前述信息并展开更多细节。RBM 是一种无向概率图模型,包含一层可观察变量和单层隐变量。RBM 可以堆叠(一个接一个)形成更深的模型——图 20.1 给出若干例子。图 20.1a 是 RBM 自身的图结构:二部图(bipartite graph),可见层单元之间无任何连接、隐层单元之间也无任何连接;通常每个可见单元连接到每个隐单元,但可以构造稀疏连接的 RBM(如卷积 RBM)。

RBM 的二元版本定义如下:可见层由 n_v 个二元随机变量组成(记为向量 v),隐层由 n_h 个二元随机变量组成(记为 h)。和一般玻尔兹曼机一样,RBM 也是能量模型,其联合概率分布由能量函数 P(v = v, h = h) = (1/Z) exp(-E(v, h))(公式 20.4)指定。RBM 的能量函数为 E(v, h) = -b^T v - c^T h - v^T W h(公式 20.5),配分函数 Z = ∑_v ∑_h exp{-E(v, h)}(公式 20.6)。从配分函数的定义看,朴素的 Z 计算方法(对所有状态穷举求和)可能计算上难处理,除非有巧妙的算法利用概率分布的规律性来更快地计算 Z。

对 RBM,Long and Servedio (2010) 严格证明配分函数 Z 是难处理的——这意味着归一化联合概率 P(v) 也难处理评估。

20.2.1 Conditional Distributions(条件分布)

虽然 P(v) 难处理,RBM 的二部图结构有一个非常特殊的性质:其条件分布 P(h|v) 和 P(v|h) 是可分解(factorial)的,相对易于计算和采样。从联合分布推导条件分布的过程相当直接:

P(h|v) = P(h, v) / P(v) = (1/P(v))(1/Z) exp(b^T v + c^T h + v^T W h) = (1/Z) exp(c^T h + v^T W h) = (1/Z) exp(∑j c_j h_j + ∑_j v^T W:j h_j) = (1/Z) ∏j exp(c_j h_j + v^T W:j h_j)。

因为我们对可见单元 v 取条件,可以把这些 v 视为相对于 P(h|v) 分布的常数。P(h|v) 的可分解性来自我们能把 h 向量的联合概率写成单个 h_j 的(非归一化)分布的乘积。归一化 h_j 的单变量分布后得到

P(h_j = 1 | v) = P̃(h_j = 1 | v) / (P̃(h_j = 0 | v) + P̃(h_j = 1 | v)) = exp(c_j + v^T W_:j) / (exp{0} + exp{c_j + v^T W_:j}) = σ(c_j + v^T W_:j)(公式 20.12-20.14)。

现在可以把整个隐层的条件分布表示为可分解分布:P(h|v) = ∏_j σ((2h_j - 1) ⊙ (c + W^T v))_j(公式 20.15)。类似推导表明另一感兴趣的条件分布 P(v|h) 也是可分解的:P(v|h) = ∏_i σ((2v_i - 1) ⊙ (b + W h))_i(公式 20.16)。

20.2.2 Training Restricted Boltzmann Machines(训练受限玻尔兹曼机)

由于 RBM 允许高效评估和求导 P̃(v),并支持分块 Gibbs 采样的高效 MCMC 采样,因此可以用第 18 章介绍的任何训练难处理配分函数模型的技术训练 RBM,包括 CD、SML(PCD)、ratio matching 等。与深度学习中其他无向模型相比,RBM 相对容易训练,因为我们可以以闭式形式精确计算 P(h|v)。其他一些深度模型(如深度玻尔兹曼机)则同时具有难处理配分函数和难处理推断两个困难。

20.3 Deep Belief Networks(深度信念网络)

深度信念网络(DBN)是第一个成功训练深度架构的非卷积模型(Hinton et al., 2006; Hinton, 2007b)。2006 年 DBN 的引入开启了当前的深度学习复兴——在 DBN 之前深度模型被认为难以优化,凸目标函数的核方法主导研究界。DBN 在 MNIST 数据集上击败核化支持向量机,证明了深度架构可以成功。今天 DBN 多数情况下已被弃用且不再常用,即使相对于其他无监督或生成学习算法也是如此,但其历史地位仍不容否认。

DBN 是具有多层隐变量的生成模型——隐变量通常为二元,可见单元可以二元或实数;同样无层内连接;通常每层与相邻层之间全连接(但也可以构造更稀疏的 DBN)。顶部两层之间的连接是无向的;所有其他层之间的连接是有向的,箭头指向最接近数据的层(图 20.1b)。含 l 个隐层的 DBN 包含 l 个权重矩阵 W^(1), ..., W^(l) 和 l+1 个偏置向量 b^(0), ..., b^(l),其中 b^(0) 提供可见层偏置。

DBN 表示的概率分布由无向顶部两层和一系列有向 sigmoid 信念网络层组合给出:P(h^(l), h^(l-1)) ∝ exp(b^(l)T h^(l) + b^(l-1)T h^(l-1) + h^(l-1)T W^(l) h^(l))(公式 20.17),各层条件 P(h_i^(k) = 1 | h^(k+1)) = σ(b_i^(k) + W_:i^(k+1)T h^(k+1)),∀i, ∀k ∈ 1, ..., l-2(公式 20.18)和 P(v_i = 1 | h^(1)) = σ(b_i^(0) + W_:i^(1)T h^(1)),∀i(公式 20.19)。实值可见单元情况下,条件是均值为 b^(0) + W^(1)T h^(1)、对角精度为 β 的高斯(公式 20.20,对角 β 保证可处理性)。其他指数族可见单元的推广在理论上直接。单隐层 DBN 就是 RBM

从 DBN 生成样本时,先在顶部两隐层上跑几步 Gibbs 采样——这一阶段本质上从顶部两隐层定义的 RBM 中采样;然后用一次祖先采样穿过模型的其余部分得到可见单元样本。

DBN 同时继承有向模型和无向模型的问题推断难处理:每个有向层内的 explaining away 效应以及顶部两隐层之间的无向连接相互作用,使后验难处理;评估或最大化证据下界也难处理,因为证据下界需要对网络宽度大小的团取期望。评估或最大化对数似然不仅需要处理难处理的推断来边缘化隐变量,还要处理顶部两层无向模型中难处理的配分函数。

训练 DBN 时,从训练一个 RBM 最大化 E_{v~p_data} log p(v)(用 CD 或 SML)开始;RBM 的参数定义 DBN 第一层的参数;然后训练第二个 RBM 近似最大化 E_{v~p_data} E_{h^(1)~p^(1)(h^(1)|v)} log p^(2)(h^(1))(公式 20.21),其中 p^(1) 是第一个 RBM 表示的分布、p^(2) 是第二个 RBM 表示的分布——即第二个 RBM 被训练为建模由第一个 RBM 在数据驱动下隐单元采样所定义的分布。该过程可对任意多层重复,每次新增 RBM 建模前一 RBM 的样本,每个 RBM 又定义 DBN 的新一层。该过程可被论证为在逐步提高 DBN 对数似然的变分下界(Hinton et al., 2006)。多数应用不在贪心逐层过程完成后联合训练 DBN,但可用 wake-sleep 算法做生成式微调。

训练后的 DBN 可直接用作生成模型,但 DBN 引起的主要兴趣在于提升分类模型的能力——把 DBN 的权重取出定义一个 MLP(公式 20.22, 20.23),用 DBN 权重和偏置初始化后训练 MLP 分类;这种额外的 MLP 训练就是判别式微调(discriminative fine-tuning)。该 MLP 的选择有一定任意性——它忽略 DBN 图模型中同层隐单元间的 explaining away 交互以及跨层的自顶向下交互,仅做自底向上 sigmoid 信息流——因此启发式变分下界可能并不紧。DBN 的对数似然不可计算,但可以用 AIS 近似(Salakhutdinov and Murray, 2008)。

作者也提醒术语滥用:"深度信念网络"一词常被错误地用于指代任何深度神经网络(即使没有隐变量语义),严格来说应专指"在最深一层有无向连接而其他相邻层之间均为自顶向下有向连接"的模型;"信念网络"有时又专指纯有向模型,造成术语混淆。DBN 还与动态贝叶斯网络(Dean and Kanazawa, 1989)共享缩写 DBN。

20.4 Deep Boltzmann Machines(深度玻尔兹曼机)

深度玻尔兹曼机或 DBM(Salakhutdinov and Hinton, 2009a)是另一种深度生成模型。与 DBN 不同,它是完全无向的;与 RBM 不同,它有多层隐变量(RBM 只有一层)。但与 RBM 相同的是,每层内变量在给定相邻层变量时条件独立(图 20.2)。DBM 已应用于多种任务,包括文档建模(Srivastava et al., 2013)。本节为简化起见假设 DBM 仅含二元单元(加入实值可见单元是直接的)。

DBM 是能量模型,由能量函数 E 参数化联合概率分布。在一个含可见层 v 与三个隐层 h^(1)、h^(2)、h^(3) 的 DBM 中,联合概率为

P(v, h^(1), h^(2), h^(3)) = (1/Z(θ)) exp(-E(v, h^(1), h^(2), h^(3); θ))(公式 20.24)。

为简化,省略偏置参数,DBM 能量函数为

E(v, h^(1), h^(2), h^(3); θ) = -v^T W^(1) h^(1) - h^(1)T W^(2) h^(2) - h^(2)T W^(3) h^(3)(公式 20.25)。

对比 RBM 能量函数(公式 20.5),DBM 多了 W^(2) 和 W^(3) 这两个跨层权重矩阵——这些连接对模型行为和推断方式都有深远影响。

对比全连接玻尔兹曼机(每个单元都连接到其他所有单元),DBM 提供一些与 RBM 类似的优势。具体来说,DBM 层可被组织成二部图(图 20.3)——奇数层在一边、偶数层在另一边——这意味着给定偶数层时奇数层条件独立;给定奇数层时偶数层条件独立。这一二部结构意味着我们可以把对 RBM 条件分布使用的同样方程应用于 DBM:层内单元在给定相邻层时条件独立,二元变量分布可完全由各单元激活的 Bernoulli 参数描述。在两隐层例子中,激活概率为

P(v_i = 1 | h^(1)) = σ(W_(i,:)^(1) h^(1))(公式 20.26) P(h_i^(1) = 1 | v, h^(2)) = σ(v^T W_:i^(1) + W_(i,:)^(2) h^(2))(公式 20.27) P(h_k^(2) = 1 | h^(1)) = σ(h^(1)T W_:k^(2))(公式 20.28)。

二部结构使 Gibbs 采样在 DBM 中仍然高效朴素方法对单变量逐个更新,l 层 DBM 需 l+1 步更新,每步更新一层。但因为 DBM 的二部连接模式——给定偶数层时奇数层可分解,给定奇数层时偶数层可分解——实际上只需两步更新。Gibbs 采样可分为两块更新:一块包含所有偶数层(含可见层),另一块包含所有奇数层。给定偶数层,奇数层的分布是可分解的,因此可作为块同时独立采样;反之亦然。这种高效采样对 SML 训练尤其重要。

20.4.1 Interesting Properties(有趣的性质)

DBM 在 DBN 之后被开发出来。对比 DBN,DBM 的后验分布 P(h|v) 更简单。这个看似反直觉的简化实际上允许后验的更丰富近似。在 DBN 中,分类使用启发式近似推断——猜测由通过同权 sigmoid MLP 自底向上一次扫描得到的隐单元平均场期望是合理的;任何 Q(h) 分布都可得到对数似然的变分下界,但启发式估计忽略了同层隐单元间的交互和深层对浅层的自顶向下反馈影响,所以 Q 可能远离最优。

在 DBM 中,所有同层隐单元在给定其他层时条件独立——这种无层内交互使我们可以使用 fixed point 方程真正优化变分下界,找到(数值容差范围内的)真正最优的平均场期望。正确的平均场允许 DBM 近似推断捕捉自顶向下反馈影响,这使 DBM 在神经科学角度也有趣(大脑已知使用大量自顶向下反馈连接),DBM 也因此被用作真实神经科学现象的计算模型(Series et al., 2010; Reichert et al., 2011)。

但 DBM 也有不利的一面:从中采样相对困难。DBN 只需在顶部两层做 MCMC,其余层在采样过程末端以一次高效祖先扫描出现;DBM 则需要在所有层做 MCMC,每层都参与每一次 Markov 链转移。

20.4.2 DBM Mean Field Inference(DBM 平均场推断)

DBM 单层在给定相邻层时条件分布可分解。以两隐层 DBM 为例,这些条件分布是 P(v|h^(1))、P(h^(1)|v, h^(2)) 和 P(h^(2)|h^(1))。所有隐层上的分布一般不可分解,因为层间存在交互:在两隐层例子中,P(h^(1), h^(2)|v) 因 h^(1) 与 h^(2) 之间的交互权重 W^(2) 而不可分解,使这些变量相互依赖。

与 DBN 一样,我们只能寻求近似后验的方法。但与 DBN 不同,DBM 隐单元上的后验分布虽然复杂,却易于用变分近似(19.4 节)——具体来说就是平均场近似。平均场近似是变分推断的一种简单形式,它把近似分布限制为完全可分解分布。在 DBM 情境下,平均场方程能捕捉层间的双向交互。本节推导 Salakhutdinov and Hinton (2009a) 最初提出的迭代近似推断方法。

在变分近似推断中,我们用某个相对简单的分布族逼近目标分布——此处是给定可见单元的隐单元后验。平均场近似的近似族是隐单元条件独立的分布族。我们对两隐层例子发展平均场方法:令 Q(h^(1), h^(2)|v) 是 P(h^(1), h^(2)|v) 的近似。平均场假设意味着

Q(h^(1), h^(2)|v) = ∏_j Q(h_j^(1)|v) ∏_k Q(h_k^(2)|v)(公式 20.29)。

平均场近似试图在该分布族中找到最接近真实后验 P 的成员——注意每次使用新 v 时必须重新运行推断过程以找到不同的 Q。衡量 Q(h|v) 与 P(h|v) 拟合度有多种方法,平均场方法最小化 KL(Q||P)(公式 20.30)。一般不必给出除独立性假设之外的参数形式——变分近似过程通常能恢复近似分布的函数形式;但在二元隐单元的均值场假设下,预先固定参数化并无一般性损失。

将 Q 参数化为 Bernoulli 分布的乘积:把 h^(1) 元素激活概率关联为参数 ĥ_j^(1) ∈ [0,1] = Q(h_j^(1) = 1|v),类似地 h^(2) 对应 ĥ_k^(2)。对更多层 DBM,可以利用二部图结构同时更新所有偶数层再更新所有奇数层,遵循与 Gibbs 采样相同的调度。指定近似族 Q 后,最直接的成员选择方法是使用 19.56 节的平均场方程——这些方程通过对变分下界求导为零推导出来。应用到当前 DBM 后得到更新规则(公式 20.33, 20.34):

ĥ_j^(1) = σ(∑i v_i W(i,j)^(1) + ∑k W(j,k)^(2) ĥ_k^(2)), ∀j ĥ_k^(2) = σ(∑{j'} W(j',k)^(2) ĥ_{j'}^(1)), ∀k。

在该方程组的 fixed point 处,我们得到变分下界 L(Q) 的局部极大值。这些 fixed point 更新方程定义了一个迭代算法——交替更新 ĥ^(1) 和 ĥ^(2)。在小问题(如 MNIST)上,少到 10 次迭代即足够找到用于学习的近似正相梯度,50 次通常足够得到高精度分类所需的单个样本的高质量表示。把近似变分推断推广到更深 DBM 是直接的。

20.4.3 DBM Parameter Learning(DBM 参数学习)

DBM 学习必须同时面对两个挑战:来自第 18 章的难处理配分函数和来自第 19 章的难处理后验分布。如 20.4.2 所述,变分推断可以构造逼近难处理 P(h|v) 的分布 Q(h|v)。学习通过最大化 L(v, Q, θ) 进行——这是难处理对数似然 log P(v; θ) 的变分下界。

对两隐层 DBM,L 由公式 20.35 给出:L(Q, θ) = ∑i ∑^(1) + ∑} v_i W_(i,j')^(1) ĥ_{j'{j'} ∑^(2) - log Z(θ) + H(Q)。该表达式仍包含 log 配分函数 log Z(θ)。因为 DBM 包含 RBM 作为组件,对配分函数计算和采样的难处理结果同样适用于 DBM——} ĥ_{j'}^(1) W_(j',k')^(2) ĥ_{k'这意味着评估玻尔兹曼机的概率质量函数需要 AIS 等近似方法;训练需要 log 配分函数梯度的近似。DBM 通常用 SML 训练;第 18 章的许多其他技术不适用——pseudolikelihood 需要能评估未归一化概率(而不只是得到其变分下界);CD 对深 DBM 太慢,因为 DBM 不允许在给定可见单元时高效采样隐单元——CD 每次需要新的负相样本时都得 burn in 一条 Markov 链。

非变分版本的 SML 算法在 18.2 节讨论过。变分 SML 用于 DBM 的形式由算法 20.1 给出——为简化省略了 DBM 的偏置参数;加入偏置是平凡的。

20.4.4 Layer-Wise Pretraining(逐层预训练)

用 SML 从随机初始化训练 DBM 通常会失败——有时模型根本无法学到对分布的充分表示;有时 DBM 表示了分布但似然不高于 RBM 能得到的——一个所有层权重都很小的 DBM 大致等同于一个 RBM

允许联合训练的技术(20.4.5 节)已被开发出来。DBM 联合训练问题最经典、最流行的解法是贪心逐层预训练:DBM 每一层被孤立训练为 RBM;第一层训练为对输入数据建模;每个后续 RBM 训练为对前一个 RBM 后验分布的样本建模;所有 RBM 训练完成后,可组合形成 DBM,再用 PCD 训练——通常 PCD 训练对模型参数及其性能(按对数似然或分类能力衡量)只会做出小修改(图 20.4)。

贪心逐层训练不只是坐标上升——它与坐标升迁有表面相似(每步优化一个参数子集),但每步使用不同的目标函数。DBM 贪心逐层预训练不同于 DBN:每个 RBM 的参数可直接复制到对应 DBN;对 DBM,RBM 参数必须先修改再纳入——堆叠 RBM 中间层训练时只接受自底向上输入,组合成 DBM 后该层同时接受自底向上和自顶向下输入。为补偿这种影响,Salakhutdinov and Hinton (2009a) 建议把除顶部和底部 RBM 外所有 RBM 的权重减半后再插入 DBM;底部 RBM 必须用每个可见单元的两个"副本"训练且两个副本之间权重相等(自底向上过程中权重实际加倍);顶部 RBM 类似地用顶部层的两个副本训练。

要获得 DBM 的 state-of-the-art 结果,需要对标准 SML 算法做一处修改:在 PCD 训练步骤的负相中使用少量平均场(Salakhutdinov and Hinton, 2009a)——具体来说,能量梯度的期望应在所有单元独立的平均场分布下计算;该平均场分布的参数应通过运行平均场 fixed point 方程仅一步获得。Goodfellow et al. (2013b) 比较了带与不带部分平均场负相的 centered DBM 性能。

20.4.5 Jointly Training Deep Boltzmann Machines(联合训练深度玻尔兹曼机)

经典 DBM 需要贪心无监督预训练;要做好分类,还需要在 DBM 提取的隐特征之上加一个独立的基于 MLP 的分类器。这有几个不良性质——训练期间难以跟踪性能(训练第一个 RBM 时无法评估完整 DBM 的性质,所以相当晚才能看出超参是否合理);DBM 的软件实现需要 RBM 单独 CD 训练、完整 DBM 的 PCD 训练、基于 MLP 反向传播训练等多种组件;最后,玻尔兹曼机之上的 MLP 失去了玻尔兹曼机概率模型的多项优势,例如在部分输入缺失时执行推断的能力。

解决 DBM 联合训练问题主要有两种方法

第一种是 centered DBM(Montavon and Muller, 2012)——重新参数化模型使成本函数的 Hessian 在训练开始时条件更好。这种模型可训练而不需要贪心逐层预训练阶段,得到的模型获得出色测试集对数似然并产生高质量样本;遗憾的是,它仍无法与适当正则化的 MLP 在分类上竞争

第二种是 multi-prediction DBM(MP-DBM)(Goodfellow et al., 2013b)——使用替代训练准则,允许用反向传播算法以避免 MCMC 梯度估计的问题——但新准则不会带来好的似然或样本;然而相比 MCMC 方法,它带来更好的分类性能和处理缺失输入的能力。

centering trick 的最易描述方式——回到玻尔兹曼机的一般视图:单元集 x、权重矩阵 U、偏置 b、能量函数 E(x) = -x^T U x - b^T x(公式 20.36)。通过在 U 中使用不同的稀疏模式,可实现不同结构的玻尔兹曼机(RBM、不同层数 DBM)——把 x 划分为可见和隐单元并把不交互单元的 U 元素置零。centered 玻尔兹曼机引入向量 μ 并从所有状态中减去

E'(x; U, b) = -(x - μ)^T U (x - μ) - (x - μ)^T b(公式 20.37)。

μ 通常是训练开始时固定的超参数,选择上使模型初始化时 x - μ ≈ 0。该重新参数化不改变模型能表示的概率分布集合,但会改变对似然应用随机梯度下降的动力学——具体来说,这种重新参数化在许多情况下使 Hessian 矩阵条件更好。Melchior et al. (2013) 实验确认了 Hessian 条件的改善,并观察到 centering trick 等价于另一种玻尔兹曼机学习技术——enhanced gradient(Cho et al., 2011)。Hessian 条件的改善使学习即使在困难情况下(如多层 DBM 训练)也能成功

第二种方法(MP-DBM)把平均场方程视为定义一族用于近似求解每个可能推断问题的循环网络(Goodfellow et al., 2013b);模型不被训练为最大化似然,而被训练为让每个循环网络对相应推断问题给出准确答案。训练过程(图 20.5):随机采样一个训练样本,随机采样输入到推断网络的一个输入子集,然后训练推断网络去预测其余单元。

通过近似推断的计算图反向传播的一般原理已被应用于其他模型(Stoyanov et al., 2011; Brakel et al., 2013)。在 MP-DBM 中,最终损失不是对数似然的下界,而是基于近似推断网络在缺失值上施加的近似条件分布——这意味着训练在某种程度上是启发式的。MP-DBM 学习到的玻尔兹曼机 p(v) 倾向于有缺陷——Gibbs 采样产生差样本。

通过推断图反向传播有两个主要优点第一,模型按实际使用方式训练——使用近似推断——这意味着近似推断(例如填充缺失输入,或在存在缺失输入情况下执行分类)在 MP-DBM 中比在原始 DBM 中更准确。原始 DBM 自身并不构成准确分类器——原始 DBM 的最佳分类结果基于训练一个独立分类器使用 DBM 提取的特征,而非用 DBN 中推断计算类标签分布。MP-DBM 的均值场推断无需特别修改就作为分类器表现良好。第二,反向传播计算损失的精确梯度——这比 SML 训练的有偏且有方差的近似梯度对优化更好——这或许解释了为什么 MP-DBM 可联合训练而 DBM 需要贪心逐层预训练。缺点是反向传播通过近似推断图不提供优化对数似然的方法,而只提供广义伪似然的启发式近似。

MP-DBM 启发了 NADE-k(Raiko et al., 2014)扩展,详见 20.10.10。MP-DBM 与 dropout 也有联系——dropout 在多个不同计算图之间共享参数——这些图的区别是是否包含某个单元;MP-DBM 也在多个计算图之间共享参数,区别是某个输入单元是否被观察到。当单元未被观察时,MP-DBM 不像 dropout 那样完全删除它,而是把它当作待推断的隐变量。可以想象通过额外删除一些单元而非将其设为隐变量来把 dropout 应用于 MP-DBM。

20.5 Boltzmann Machines for Real-Valued Data(实值数据的玻尔兹曼机)

虽然玻尔兹曼机原本为二元数据开发,许多应用(图像、音频建模)似乎需要实值上的概率分布表示能力。在某些情况下,可以把 [0,1] 区间的实值数据视为二元变量的期望——例如 Hinton (2000) 把训练集灰度图像视为定义 [0,1] 概率值;每个像素定义二元值为 1 的概率,二元像素独立采样。这是评估二元模型在灰度图像数据集上表现的常见程序。但它理论上的满足感不强,且以这种方式独立采样的二元图像外观噪声明显。本节介绍在实值数据上定义概率密度的玻尔兹曼机

20.5.1 Gaussian-Bernoulli RBMs(高斯-伯努利 RBM)

可以为多种指数族条件分布开发 RBM(Welling et al., 2005)。最常见的是二元隐单元、实值可见单元的 RBM,可见单元的条件分布是高斯分布,其均值是隐单元的函数。

参数化高斯-伯努利 RBM 有多种方式——一是选择高斯分布的协方差矩阵还是精度矩阵。这里给出精度公式(转换为协方差形式是直截了当的)。我们希望条件分布为 p(v|h) = N(v; W h, β^(-1))(公式 20.38)。通过展开未归一化的对数条件分布

log N(v; W h, β^(-1)) = -(1/2)(v - W h)^T β (v - W h) + f(β)(公式 20.39),

可以找到需要加入能量函数的项。f 包含仅作为参数函数而非随机变量的项;可以丢弃 f,因为其唯一作用是归一化分布,而我们所选能量函数的配分函数将完成该归一化。

如果把公式 20.39 中所有涉及 v 的项(符号取反)放入能量函数中而不加入其他 v 项,则能量函数表示所需条件 p(v|h)。我们对另一条件 p(h|v) 有一定自由度:公式 20.39 包含一项 (1/2) h^T W^T β W h(公式 20.40)——这一项不能整体保留,因为它包含 h_i h_j 项,对应隐单元间边;若包含这些项,模型就成为线性因子模型而非 RBM。设计时直接省略 h_i h_j 交叉项,省略它们不改变条件 p(v|h),公式 20.39 仍成立。

至于仅涉及单个 h_i 的项,若假设对角精度矩阵,则对每个隐单元 h_i 都有项 (1/2) h_i ∑j β_j W(j,i)^2(公式 20.41)——利用 h_i^2 = h_i(因 h_i ∈ {0,1})得到。如果把该项(符号取反)加入能量函数,当该单元权重较大且连接到高精度的可见单元时,自然倾向于把 h_i 关掉;是否包含该偏置项不影响模型能表示的分布族(假设隐单元有偏置参数),但影响学习动力学——包含该项可能帮助隐单元激活在权重快速增长时仍保持合理。

高斯-伯努利 RBM 能量函数的一种定义为

E(v, h) = (1/2) v^T (β ⊙ v) - (v ⊙ β)^T W h - b^T h(公式 20.42),

但也可以加额外项或用方差而非精度参数化能量。本推导未包含可见单元偏置项,可以容易添加。精度的处理方式:可固定为常数(基于数据边际精度估计),也可学习;可以是标量乘以单位矩阵,也可以是对角矩阵;通常不允许非对角,因为高斯分布的某些操作需要矩阵求逆,对角矩阵可平凡求逆。后文将看到其他形式玻尔兹曼机可以建模协方差结构,使用各种技术避免求逆精度矩阵。

20.5.2 Undirected Models of Conditional Covariance(条件协方差的无向模型)

高斯 RBM 一直是实值数据的标准能量模型,但 Ranzato et al. (2010a) 论证高斯 RBM 的归纳偏置不太适合某些实值数据(尤其是自然图像)的统计变化:自然图像中很多信息嵌入在像素间的协方差中而非原始像素值中。换言之,有用的信息在像素之间的关系而不在绝对值高斯 RBM 只建模给定隐单元的输入条件均值,所以不能捕捉条件协方差信息。为应对这些批评,有人提出替代模型试图更好地解释实值数据的协方差,包括 mean and covariance RBM (mcRBM)、mean-product of t-distribution (mPoT) 模型和 spike and slab RBM (ssRBM)。

Mean and Covariance RBM

mcRBM 使用其隐单元独立编码所有观察单元的条件均值和协方差。mcRBM 隐层分为两组单元:均值单元和协方差单元。建模条件均值的组就是高斯 RBM;另一半是协方差 RBM(cRBM, Ranzato et al., 2010a),其组件建模条件协方差结构。具体来说,以二元均值单元 h^(m) 和二元协方差单元 h^(c),mcRBM 模型被定义为两个能量函数的组合(公式 20.43-20.45):

E_mc(x, h^(m), h^(c)) = E_m(x, h^(m)) + E_c(x, h^(c))

其中 E_m 是标准高斯-伯努利 RBM 能量函数(公式 20.44,假设数据零均值),E_c 是建模条件协方差的 cRBM 能量函数(公式 20.45)。参数 r^(j) 是与 h_j^(c) 关联的协方差权重向量,b^(c) 是协方差偏置向量。组合能量函数定义联合分布(公式 20.46),对应的给定 h^(m)、h^(c) 的观察条件分布是多元高斯分布(公式 20.47),其协方差矩阵 C_{x|h}^mc = (∑_j h_j^(c) r^(j) r^(j)T + I)^(-1) 是非对角的,W 是高斯 RBM 建模条件均值的权重矩阵。

由于非对角条件协方差结构,用 CD 或 PCD 训练 mcRBM 是困难的。CD 和 PCD 需要从 x、h^(m)、h^(c) 的联合分布采样,在标准 RBM 中通过条件 Gibbs 采样完成;但在 mcRBM 中,从 p_mc(x|h^(m), h^(c)) 采样需要在学习每次迭代计算 (C^mc)^(-1),对较大观察来说这可能是难以承受的计算负担。Ranzato and Hinton (2010) 通过在 mcRBM 自由能上使用 Hamiltonian (hybrid) Monte Carlo (Neal, 1993) 直接从边际 p(x) 采样,避免了直接条件采样

Mean-Product of Student's t-distributions

mPoT 模型(Ranzato et al., 2010b)以类似 mcRBM 扩展 cRBM 的方式扩展了 PoT 模型(Welling et al., 2003a)——通过加入类似高斯 RBM 的隐单元引入非零高斯均值。与 mcRBM 类似,mPoT 的观察条件分布是多元高斯(非对角协方差);与 mcRBM 不同的是,隐变量的补充条件分布由条件独立的 Gamma 分布给出。Gamma 分布 G(k, θ) 是正实数上的概率分布,均值为 kθ——理解 mPoT 模型的基本思想无需 Gamma 分布的更多细节。mPoT 能量函数(公式 20.48-20.49)包含 r^(j) 协方差权重向量和 E_m 项。与 mcRBM 类似,mPoT 模型学习受无法从非对角高斯条件 p_mPoT(x|h^(m), h^(c)) 采样的问题困扰——Ranzato et al. (2010b) 也倡导通过 Hamiltonian Monte Carlo 直接采样 p(x)。

Spike and Slab Restricted Boltzmann Machines

Spike and slab RBM(ssRBM)(Courville et al., 2011)提供了另一种建模实值数据协方差结构的方法。相比 mcRBM,ssRBM 的优势是不需要矩阵求逆也不需要 HMC。与 mcRBM 和 mPoT 类似,ssRBM 的二元隐单元通过辅助实值变量编码像素间的条件协方差。ssRBM 有两组隐单元:二元 spike 单元 h 和实值 slab 单元 s。给定隐单元的可见单元均值为 (h ⊙ s) W^T——每一列 W_:,i 定义一个当 h_i = 1 时可出现在输入中的组件:spike 变量 h_i 决定该组件是否出现;slab 变量 s_i 决定该组件出现时的强度。当 spike 变量激活时,对应 slab 变量沿 W_:,i 定义的轴向输入添加方差——这允许建模输入协方差。CD 和 PCD 仍适用——不需要矩阵求逆

形式上,ssRBM 通过能量函数定义(公式 20.50-20.51):b_i 是 spike h_i 的偏置,Λ 是观察 x 的对角精度矩阵;参数 α_i > 0 是实值 slab 变量 s_i 的标量精度参数;参数 Φ_i 是非负对角矩阵,定义 h 调制的 x 上的二次惩罚;每个 μ_i 是 slab 变量 s_i 的均值参数。通过边缘化 slab 变量 s,可推导出条件分布;例如,给定二元 spike 变量 h 的观察条件分布(公式 20.52-20.53)是高斯分布,其协方差矩阵 C_{x|h}^ss = (Λ + ∑i Φ_i h_i - ∑_i α_i^(-1) h_i W:,i W_:,i^T)^(-1)。最后一个等式仅在 C_{x|h}^ss 正定时成立。

spike 变量门控意味着 h ⊙ s 上的真实边际分布是稀疏的——这与稀疏编码不同:稀疏编码中模型样本"几乎从不"(测度论意义上)含零代码,施加稀疏需要 MAP 推断。

三种模型比较

对比 ssRBM 与 mcRBM、mPoT,ssRBM 用一种显著不同的方式参数化观察的条件协方差。mcRBM 和 mPoT 建模观察的协方差结构为 (∑_j h_j r^(j) r^(j)T + I)^(-1),使用隐单元 h_j > 0 的激活在 r^(j) 方向上对条件协方差施加约束。ssRBM 则用 spike 激活 h_i = 1 在对应权重向量指定的方向上"捏住"精度矩阵。ssRBM 条件协方差与一种不同模型——probabilistic principal components analysis 的乘积 PoPPCA(Williams and Agakov, 2002)——给出的非常相似。在过完备设置下,ssRBM 参数化下的稀疏激活允许在所选稀疏激活 h_i 方向上有显著方差(高于 Λ^(-1) 给出的标称方差)。在 mcRBM 或 mPoT 中,过完备表示意味着捕捉观察空间中特定方向的变化需要去除在该方向有正投影的所有约束——这表明这些模型不太适合过完备设置。

ssRBM 的主要缺点是某些参数设置可能对应不正定协方差矩阵——这样的协方差矩阵对远离均值的值赋予更多未归一化概率,使对所有可能结果的积分发散。该问题通常可用简单启发式技巧避免,但尚无理论上的满足解;用约束优化显式避免概率未定义区域困难,因为需要不过于保守以免阻止模型访问高性能参数区域。质性上,ssRBM 的卷积变体能产生优秀自然图像样本(图 16.1)。ssRBM 允许多种扩展:包含高阶交互和 slab 变量的平均池化(Coeanville et al., 2014)使模型在标签数据稀缺时为分类器学习出色特征;在能量函数中加入阻止配分函数未定义的项得到 spike and slab sparse coding(Goodfellow et al., 2013d),也称 S3C。

20.6 Convolutional Boltzmann Machines(卷积玻尔兹曼机)

如第 9 章所述,极高维输入(如图)给机器学习模型的计算、内存和统计需求带来巨大压力。用小核的离散卷积代替矩阵乘法是对具有平移不变空间或时间结构输入的标准解决方案。Desjardins and Bengio (2008) 表明这种方法在 RBM 上效果很好

深度卷积网络通常需要池化操作以使每后继层的空间尺寸减小。前馈卷积网络常用被池化元素最大值等池化函数。如何推广到基于能量的模型尚不明确:可在 n 个二元检测单元 d 上引入二元池化单元 p 并通过在违反约束时设置能量为 ∞ 来强制 p = max_i d_i——但这不易扩展,因为它需要评估 2^n 种能量配置来计算归一化常数;3×3 池化区域就需 2^9 = 512 次能量评估

Lee et al. (2009) 提出了 probabilistic max pooling(注意与用于隐式构造卷积前馈网络集成的"stochastic pooling"相区别)解决这一问题。策略是约束检测单元使得一次最多有一个激活——这意味着只有 n+1 个总状态(每个检测单元激活对应一个状态,加上所有检测单元关闭对应一个状态)。池化单元当且仅当某个检测单元开启时为开。所有单元关闭的状态能量为零。可以把这描述为有一个 n+1 状态变量的模型,或等价于有 n+1 个变量并对除 n+1 个联合赋值外所有赋值赋能量 ∞ 的模型。

虽然高效,probabilistic max pooling 强制检测单元互斥——这在某些语境下是有用的正则化约束,在其他语境下限制了模型容量。它也不支持重叠池化区域。重叠池化区域通常是获得前馈卷积网络最佳性能所必需的,所以这个约束可能大大降低卷积玻尔兹曼机的性能。

Lee et al. (2009) 证明 probabilistic max pooling 可用于构建卷积深度玻尔兹曼机——该模型能执行填充输入缺失部分等操作。虽然在智力上吸引人,但实践中让该模型工作具有挑战性,作为分类器通常表现不如用监督学习训练的传统卷积网络

许多卷积模型对不同空间尺寸的输入同样有效。对玻尔兹曼机,由于配分函数随输入尺寸变化而变化,改变输入尺寸很困难。此外,许多卷积网络通过对池化区域按输入大小比例缩放获得尺寸不变性;缩放玻尔兹曼机池化区域是笨拙的。传统卷积神经网络可使用固定数量的池化单元并动态增大池化区域尺寸以获得可变尺寸输入的固定大小表示。对玻尔兹曼机,大池化区域对朴素方法来说太昂贵。Lee et al. (2009) 的方法(让同池化区域的每个检测单元互斥)解决了计算问题,但仍不允许可变尺寸池化区域。

例如,假设我们学了 2×2 probabilistic max pooling 的边缘检测器模型——这强制每 2×2 区域只可能出现一种边缘。如果把输入图像各方向尺寸增大 50%,我们预期边缘数量相应增加;但如果把池化区域各方向增大 50% 到 3×3,互斥约束现在指定每种边缘在 3×3 区域只出现一次。以这种方式增大模型输入图像时,模型以更小密度生成边缘。当然,这些问题只出现在模型必须用可变池化量发射固定大小输出向量时。使用 probabilistic max pooling 的模型仍能接受可变尺寸输入图像,只要模型输出是可随输入图像尺寸缩放的特征图。

图像边界像素也带来一些困难,由于玻尔兹曼机连接对称而加剧。如果不隐式零填充输入,边界附近可见单元比隐单元少,边界可见单元因位于更少隐单元的感受野中而建模不佳。如果隐式零填充输入,边界隐单元由更少输入像素驱动,可能在需要时无法激活。

20.7 Boltzmann Machines for Structured or Sequential Outputs(结构化输出或序列输出的玻尔兹曼机)

在结构化输出场景中,我们希望训练一个能映射输入 x 到输出 y 的模型,y 的不同项之间相互关联且必须满足某些约束。例如在语音合成任务中,y 是波形,整个波形必须听起来像一个连贯的话语。用概率分布 p(y|x) 表示 y 中各项关系是自然的方式——玻尔兹曼机扩展为建模条件分布可提供这种概率模型。

条件建模的同一工具不仅可用于结构化输出任务,还可用于序列建模——后者模型不映射 x 到 y,而需估计序列 p(x^(1), ..., x^(τ)) 上的概率分布。条件玻尔兹曼机可以表示 p(x^(t) | x^(1), ..., x^(t-1)) 形式的因子完成此任务。

视频游戏和电影工业的一个重要序列建模任务是对用于渲染 3D 角色骨架的关节角序列建模。这些序列常通过运动捕捉系统记录演员动作。角色动作的概率模型允许生成新的、之前未见但逼真的动画。Taylor et al. (2007) 为该任务引入条件 RBM,对小 m 建模 p(x^(t) | x^(t-1), ..., x^(t-m)):模型是 p(x^(t)) 上的 RBM,其偏置参数是前 m 个 x 值的线性函数。当条件于不同 x^(t-1) 及更早变量时,我们得到 x 上新的 RBM——RBM 中 x 的权重不变,但通过条件于不同过去值,可改变 RBM 中不同隐单元激活的概率。通过激活和停用不同隐单元子集,可大幅改变 x 上的概率分布。其他条件 RBM 变体(Mnih et al., 2011)和其他用条件 RBM 序列建模的变体是可能的(Taylor and Hinton, 2009; Sutskever et al., 2009; Boulanger-Lewandowski et al., 2012)。

另一序列建模任务是建模用于作曲的音符序列分布。Boulanger-Lewandowski et al. (2012) 引入 RNN-RBM 序列模型并应用于该任务。RNN-RBM 是 x^(t) 帧序列的生成模型,由在每时间步发出 RBM 参数的 RNN 组成。与之前方法中只有 RBM 的偏置参数在时间步间变化不同,RNN-RBM 用 RNN 发出 RBM 的所有参数(包括权重)。训练模型需要能通过 RNN 反向传播损失函数的梯度。损失函数不直接应用于 RNN 输出,而应用于 RBM——这意味着必须用 CD 或相关算法近似区分损失相对于 RBM 参数。该近似梯度然后可用通常的 BPTT 通过 RNN 反向传播。

20.8 Other Boltzmann Machines(其他玻尔兹曼机)

许多玻尔兹曼机的其他变体是可能的。

玻尔兹曼机可以用不同训练准则扩展。我们已聚焦于训练为近似最大化生成准则 log p(v) 的玻尔兹曼机;也可以训练判别式 RBM 来最大化 log p(y|v)(Larochelle and Bengio, 2008)。该方法在使用生成和判别准则的线性组合时通常表现最佳。遗憾地,RBM 似乎不像 MLP 那样是有力的监督学习器,至少在现有方法下。

实践中使用的大多数玻尔兹曼机在其能量函数中只有二阶交互——能量函数是许多项之和,每项只包含两个随机变量的乘积。这种项的例子是 v_i W_(i,j) h_j。也可以训练高阶玻尔兹曼机(Sejnowski, 1987)其能量函数项涉及多个变量的乘积。隐单元和两幅不同图像之间的三向交互可以对视频两帧之间的空间变换建模(Memisevic and Hinton, 2007, 2010)。乘以 one-hot 类别变量可以根据出现类别改变可见和隐单元之间的关系(Nair and Hinton, 2009)。高阶交互的一个近期例子是含两组隐单元的玻尔兹曼机——一组隐单元同时与可见单元 v 和类别标签 y 交互,另一组隐单元仅与 v 输入值交互(Luo et al., 2011)——这可被解释为鼓励一些隐单元学习用与类别相关的特征建模输入,也学习额外隐单元解释对样本中 v 真实感必要但不决定示例类别的干扰细节。高阶交互的另一用途是门控某些特征——Sohn et al. (2013) 引入具有三阶交互和与每个可见单元关联的二元 mask 变量的玻尔兹曼机。当这些 mask 变量设为 0 时,去除可见单元对隐单元的影响——这允许与分类问题不相关的可见单元从估计类别的推断路径中移除。

更一般地说,玻尔兹曼机框架是丰富的模型空间,允许探索比迄今更多的模型结构。开发一种新玻尔兹曼机比开发新神经网络层需要更多小心和创造性——因为通常难以找到保持玻尔兹曼机所需不同条件分布可处理性的能量函数;尽管有此努力,领域仍对创新开放。

20.9 Back-Propagation through Random Operations(通过随机操作的反向传播)

传统神经网络实现输入变量 x 的确定性变换。在开发生成模型时,我们经常希望扩展神经网络以实现 x 的随机变换。一种直截了当的方法是用从简单概率分布(如均匀或高斯)采样的额外输入 z 增强神经网络——神经网络内部仍执行确定性计算,但 f(x, z) 对不具有 z 访问权的观察者将看起来是随机的。只要 f 连续可微,我们就可以用通常的反向传播计算训练所需的梯度

举例:考虑从均值 μ、方差 σ² 的高斯分布采样 y 的操作:y ~ N(μ, σ²)(公式 20.54)。因为 y 的单个样本不是由函数产生,而是由每次查询输出都变化的采样过程产生,对 y 关于其分布参数 μ 和 σ² 求导似乎有违直觉。然而我们可以把采样过程改写为把底层随机值 z ~ N(z; 0, 1) 变换为所需分布样本:y = μ + σz(公式 20.55)。

我们现在能通过采样操作反向传播,把它视为有额外输入 z 的确定性操作。关键是额外输入是随机变量,其分布不是我们想求导的任何变量的函数。结果告诉我们 μ 或 σ 的无穷小变化如果用相同 z 值重复采样操作时会如何改变输出。

能够通过该采样操作反向传播允许我们把它纳入更大图。我们可以在采样分布输出上构建图元素——例如可计算损失函数 J(y) 的导数。也可以构建输出是采样操作输入或参数(图元素)的图——例如可建大图使 μ = f(x; θ) 和 σ = g(x; θ)。在增强图中,可通过这些函数的反向传播推导 ∇_θ J(y)。

高斯采样例子中使用的原理更具普遍适用性。我们可以把 p(y; θ) 或 p(y|x; θ) 形式的任何概率分布表示为 p(y|ω),ω 是同时包含参数 θ 和(如适用)输入 x 的变量。给定从分布 p(y|ω) 采样的 y 值(ω 本身可能是其他变量的函数),可把 y ~ p(y|ω)(公式 20.56)改写为 y = f(z; ω)(公式 20.57),其中 z 是随机源。然后可对 ω 求 y 的导数,使用传统工具(如对 f 应用的 BP),只要 f 几乎处处连续可微。关键的是 ω 不是 z 的函数且 z 不是 ω 的函数该技术通常称为重参数化技巧(reparametrization trick)、随机反向传播或扰动分析

f 必须连续可微的要求当然要求 y 连续。如果希望通过产生离散值样本的采样过程反向传播,仍可能用 RL 算法(如 REINFORCE 算法(Williams, 1992)的变体)估计 ω 上的梯度,详见 20.9.1 节。

在神经网络应用中,我们通常选择 z 来自某简单分布(如单位均匀或单位高斯),并通过允许网络确定性部分重塑其输入实现更复杂分布。

通过随机操作传播梯度或优化的思想可追溯到 20 世纪中叶(Price, 1958; Bonnet, 1964),首次用于机器学习是在 RL 情境中(Williams, 1992)。最近它已被应用于变分近似(Opper and Archambeau, 2009)和随机/生成神经网络(Bengio et al., 2013b; Kingma, 2013; Kingma and Welling, 2014b,a; Rezende et al., 2014; Goodfellow et al., 2014c)。许多网络(如去噪自编码器或用 dropout 正则化的网络)也自然设计为接受噪声作为输入,无需任何特殊重新参数化使噪声独立于模型。

20.9.1 Back-Propagating through Discrete Stochastic Operations(通过离散随机操作的反向传播)

当模型发出离散变量 y 时,重参数化技巧不适用。假设模型取输入 x 和参数 θ(都封装在向量 ω 中),与随机噪声 z 组合产生 y:y = f(z; ω)(公式 20.58)。因为 y 离散,f 必须是阶跃函数——阶跃函数的导数在任何点都无用:在每个阶跃边界处导数未定义(这是小问题),大问题是导数在阶跃边界之间的区域几乎处处为零。任何成本函数 J(y) 的导数因此不提供任何信息来更新模型参数 θ

REINFORCE 算法(REward Increment = Non-negative Factor × Offset Reinforcement × Characteristic Eligibility)提供定义一族简单但强大解决方案的框架(Williams, 1992)。核心思想是:尽管 J(f(z; ω)) 是导数无用的阶跃函数,期望成本 E_{z~p(z)} J(f(z; ω)) 通常是平滑函数,适用梯度下降。当 y 高维(或许多离散随机决策组合的结果)时该期望通常不可处理,但可用 Monte Carlo 平均无偏估计。梯度的随机估计可与 SGD 或其他基于随机梯度的优化技术一起使用

REINFORCE 最简单版本可通过直接对期望成本求导得到:

E_z[J(y)] = ∑y J(y) p(y)(公式 20.59) ∂E[J(y)]/∂ω = ∑_y J(y) ∂p(y)/∂ω(公式 20.60) = ∑_y J(y) p(y) ∂ log p(y)/∂ω(公式 20.61) ≈ (1/m) ∑^m J(y^(i)) ∂ log p(y^(i))/∂ω,y^(i) ~ p(y)(公式 20.62)。

公式 20.60 依赖 J 不直接引用 ω 的假设——放宽该假设扩展方法很平凡。公式 20.61 利用对数导数规则 ∂ log p(y)/∂ω = (1/p(y)) ∂p(y)/∂ω。公式 20.62 给出梯度的无偏 Monte Carlo 估计。

本节中写 p(y) 的地方,也可写 p(y|x)——因为 p(y) 由 ω 参数化,ω 同时包含 θ 和(如存在)x。

上述简单 REINFORCE 估计器的一个问题是方差很高,所以需要采很多 y 样本才能得到好的梯度估计;等价地,如果只采一个样本,SGD 收敛很慢且需要更小学习率。可用方差缩减方法(Wilson, 1984; L'Ecuyer, 1994)大幅降低该估计器的方差。思想是修改估计器使期望值不变但方差降低。在 REINFORCE 情境下,方差缩减方法涉及计算用于偏移 J(y) 的 baseline。注意任何不依赖 y 的偏移 b(ω) 不改变估计梯度的期望——因为

E_{p(y)}[∂ log p(y)/∂ω] = ∑_y p(y) ∂ log p(y)/∂ω = ∑_y ∂p(y)/∂ω = ∂/∂ω ∑_y p(y) = ∂/∂ω 1 = 0(公式 20.63-20.65),

这意味着

E_{p(y)}[(J(y) - b(ω)) ∂ log p(y)/∂ω] = E_{p(y)}[J(y) ∂ log p(y)/∂ω](公式 20.66-20.67)。

进一步可通过对 p(y) 下 (J(y) - b(ω)) ∂ log p(y)/∂ω 求方差并关于 b(ω) 最小化得到最优 b(ω)。我们发现最优 baseline b*(ω)_i 对向量 ω 的每个元素 ω_i 都不同:

b*(ω)i = E[(∂ log p(y)/∂ω_i)²](公式 20.68)。}[J(y) (∂ log p(y)/∂ω_i)²] / E_{p(y)

关于 ω_i 的梯度估计器变为 (J(y) - b(ω)i) ∂ log p(y)/∂ω_i(公式 20.69),其中 b(ω)_i 估计上述 b(ω)_i。估计 b 通常通过在神经网络加入额外输出并训练新输出来估计 E_{p(y)}[J(y) (∂ log p(y)/∂ω_i)²] 和 E_{p(y)}[(∂ log p(y)/∂ω_i)²],对 ω 的每个元素。这些额外输出可用 MSE 目标训练,分别用 J(y) (∂ log p(y)/∂ω_i)² 和 (∂ log p(y)/∂ω_i)² 作为目标(当 y 从 p(y) 采样,对给定 ω)。然后可通过把这些估计代入公式 20.68 恢复 b。Mnih and Gregor (2014) 偏好用单一共享输出*(在 ω 的所有元素 i 之间)以 J(y) 为目标训练,用 b(ω) ≈ E[J(y)] 作为 baseline。

方差缩减方法已在 RL 情境中引入(Sutton et al., 2000; Weaver and Tao, 2001),推广了 Dayan (1990) 对二元奖励情况的早期工作。Bengio et al. (2013b)、Mnih and Gregor (2014)、Ba et al. (2014)、Mnih et al. (2014)、Xu et al. (2015) 给出深度学习情境中 REINFORCE 算法方差缩减的现代使用例子。除了使用输入相关 baseline b(ω),Mnih and Gregor (2014) 发现 (J(y) - b(ω)) 的尺度可在训练中通过除以其训练中移动平均估计的标准差来调整,作为一种自适应学习率,以抵消训练过程中该量级发生的重要变化——Mnih and Gregor (2014) 称之为方差归一化

REINFORCE 类估计器可被理解为通过把 y 的选择与 J(y) 对应值相关联估计梯度——如果 y 的好值在当前参数化下不太可能,可能需要花很长时间通过偶然获得它,并得到应强化该配置的所需信号。

20.10 Directed Generative Nets(有向生成网络)

如第 16 章所述,有向图模型是图模型的一个突出类别。虽然有向图模型在整个机器学习社区中非常流行,但在更小的深度学习社区中,它们在 2013 年之前一直被 RBM 等无向模型所掩盖。本节我们回顾一些传统上与深度学习社区相关的标准有向图模型——已描述过 DBN(部分有向模型)和稀疏编码模型(可视为浅层有向生成模型——它们常用作深度学习情境中的特征学习器,但在样本生成和密度估计上表现较差)。现在我们描述各种深度、全有向模型。

20.10.1 Sigmoid Belief Nets(sigmoid 信念网络)

Sigmoid 信念网络(Neal, 1990)是一种有向图模型的简单形式,条件概率分布有特定形式。一般地,我们可以把 sigmoid 信念网络视为有二元状态向量 s,状态每个元素受其祖先影响:

p(s_i) = σ(∑{j<i} W(j,i) s_j + b_i)(公式 20.70)。

sigmoid 信念网络最常见的结构是分成许多层,祖先采样经过一系列许多隐层然后最终生成可见层。这一结构与 DBN 非常相似,只是采样开始处的单元之间相互独立,而非从 RBM 中采样这一结构有吸引力:它是可见单元上概率分布的万能逼近器——给定足够深度,即使各层宽度限制为可见层维度,它也能以任意精度逼近任何二元变量上的概率分布(Sutskever and Hinton, 2008)。

虽然生成可见单元样本在 sigmoid 信念网络中非常高效,大多数其他操作并不高效。给定可见单元的隐单元推断难处理——平均场推断也难处理,因为变分下界涉及对整个层大小的团取期望。该问题一直很困难以至于限制了有向离散网络的流行度。

执行 sigmoid 信念网络推断的一种方法是为其构造专门的下界(Saul et al., 1996)——该方法只被应用于非常小的网络。另一方法是使用 19.5 节描述的学习推断机制Helmholtz 机(Dayan et al., 1995; Dayan and Hinton, 1996)是 sigmoid 信念网络加上预测隐单元平均场分布参数的推断网络。sigmoid 信念网络的现代方法(Gregor et al., 2014; Mnih and Gregor, 2014)仍使用该推断网络方法。这些技术由于隐变量离散性质仍然困难——不能简单通过推断网络输出反向传播,而必须用 20.9.1 节描述的相对不可靠的离散采样反向传播机制。基于重要性采样、reweighted wake-sleep(Bornschein and Bengio, 2015)和双向 Helmholtz 机(Bornschein et al., 2015)的方法使快速训练 sigmoid 信念网络并在基准任务上达到 state-of-the-art 性能成为可能。

sigmoid 信念网络的一个特例是没有隐变量的情况——该情况下学习高效,因为无需从似然中边缘化隐变量。自回归网络族将这种全可见信念网络推广到二元变量以外的其他类型变量和 log-linear 关系以外的其他条件分布结构——见 20.10.7。

20.10.2 Differentiable Generator Nets(可微生成器网络)

许多生成模型基于使用可微生成器网络的思想。模型用可微函数 g(z; θ^(g))(通常由神经网络表示)将隐变量 z 样本变换为 x 样本或 x 样本上的分布。该模型类包括变分自编码器(生成器与推断网络配对)、生成对抗网络(生成器与判别器网络配对)以及孤立训练生成器网络的技术

生成器网络本质上只是生成样本的参数化计算过程——架构提供可能采样的分布族,参数从族内选择分布。

举例:标准从均值 μ、协方差 Σ 的正态分布采样的过程是:把零均值、单位协方差的正态分布样本 z 输入一个非常简单的生成器网络——该生成器网络只含一个仿射层:x = g(z) = μ + Lz(公式 20.71),其中 L 由 Σ 的 Cholesky 分解给出。

伪随机数生成器也可以用简单分布的非线性变换——例如逆变换采样(Devroye, 2013)从 U(0,1) 采样标量 z 并对标量 x 应用非线性变换:g(z) 由累积分布函数 F(x) = ∫_{-∞}^x p(v) dv 的反函数给出。如果能指定 p(x)、对 x 积分并对结果函数求逆,可无需机器学习从 p(x) 采样。

为从更复杂的分布(难以直接指定、难以积分或所得积分难以求反)生成样本,我们用前馈网络表示参数化非线性函数 g 族,并用训练数据推断选择所需函数的参数。我们可以把 g 视为提供把 z 上的分布变换为 x 上所需分布的非线性变量变换。回忆公式 3.47:对可逆、可微、连续 g,p_z(z) = p_x(g(z)) |det(∂g/∂z)|(公式 20.72)。这隐式施加 x 上的概率分布:p_x(x) = p_z(g^(-1)(x)) / |det(∂g/∂z)|(公式 20.73)。该公式可能难以求值,取决于 g 的选择,所以通常使用间接方法学习 g,而非直接最大化 log p(x)。

在某些情况下,我们用 g 给出 x 上的条件分布,而非直接给出 x 样本——例如可使用最终层由 sigmoid 输出组成的生成器网络来给出 Bernoulli 分布的均值参数:p(x_i = 1 | z) = g(z)_i(公式 20.74)。当用 g 给出 p(x|z) 时,通过边缘化 z 对 x 施加分布:p(x) = E_z p(x|z)(公式 20.75)。两种方法都定义分布 p_g(x) 并允许我们用 20.9 节重参数化技巧训练 p_g 的各种准则。

生成器网络的两种不同公式化方法——发出条件分布参数 vs 直接发出样本——具有互补的优缺点。当生成器网络定义 x 上的条件分布时,它能生成离散和连续数据。当生成器网络直接提供样本时,它只能生成连续数据(前向传播中可引入离散化,但模型不再能用反向传播训练)。直接采样的优势是:我们不再被迫使用条件分布——其形式必须能由人类设计者容易写出并代数操作。

基于可微生成器网络的方法受到梯度下降应用于可微前馈网络分类成功的启发。在监督学习情境中,给定足够多隐单元和训练数据,用基于梯度的学习训练的深度前馈网络似乎实际上保证能成功——这一成功配方能否转移到生成建模?生成建模似乎比分类或回归更困难——学习过程需要优化难处理准则。在可微生成器网络情境下,准则难处理是因为数据不指定生成器网络的输入 z 和输出 x。监督学习中输入 x 和输出 y 都给出,优化过程只需学习如何产生指定映射。生成建模中学习过程需要确定如何以有用方式安排 z 空间并另外如何从 z 映射到 x

Dosovitskiy et al. (2015) 研究了一个简化问题——z 到 x 的对应关系是给定的。训练数据是计算机渲染的椅子图像。隐变量 z 是给渲染引擎的参数,描述用哪种椅子模型、椅子位置以及其他影响图像渲染的配置细节。使用该合成数据,卷积网络能学习把 z 描述的图像内容映射到 x 近似渲染图像。这表明当代可微生成器网络有足够模型容量成为好生成模型,且当代优化算法有能力拟合它们——困难在于在每个 x 的 z 值未事先固定和已知时确定如何训练生成器网络。下文几节描述给定 x 训练样本训练可微生成器网络的几种方法。

20.10.3 Variational Autoencoders(变分自编码器)

变分自编码器或 VAE(Kingma, 2013; Rezende et al., 2014)是一种有向模型,使用学习的近似推断且能纯粹用基于梯度的方法训练。

生成模型样本时,VAE 首先从代码分布 p_model(z) 采样 z;样本然后通过可微生成器网络 g(z);最后 x 从分布 p_model(x; g(z)) = p_model(x|z) 采样。然而训练期间,近似推断网络(或编码器)q(z|x) 用于获得 z,p_model(x|z) 被视为解码器网络

VAE 的关键洞见是它们可通过最大化与数据点 x 关联的变分下界 L(q) 训练

L(q) = E_{z~q(z|x)} log p_model(z, x) + H(q(z|x))(公式 20.76) = E_{z~q(z|x)} log p_model(x|z) - D_KL(q(z|x) || p_model(z))(公式 20.77) ≤ log p_model(x)(公式 20.78)。

在公式 20.76 中,第一项是隐变量近似后验下可见和隐变量的联合对数似然(类似 EM,但用近似后验代替精确后验)。第二项是近似后验的熵。当 q 选为高斯分布且噪声加到预测均值上时,最大化该熵项鼓励增大该噪声的标准差;更一般地,该熵项鼓励变分后验把高概率质量放在许多能生成 x 的 z 值上,而非塌缩到最可能值的单点估计。在公式 20.77 中,第一项是其他自编码器中发现的重建对数似然。第二项试图让近似后验分布 q(z|x) 和模型先验 p_model(z) 彼此接近。

传统变分推断和学习方法通过优化算法(通常是迭代 fixed point 方程,19.4 节)推断 q——这些方法慢且常需要能以闭式计算 E_{z~q} log p_model(z, x)。VAE 的主要思想是训练参数化编码器(有时也称推断网络或识别模型)产生 q 的参数。只要 z 是连续变量,就可通过对从 q(z|x) = q(z; f(x; θ)) 采样的 z 应用反向传播获得关于 θ 的梯度。学习完全在于最大化 L 关于编码器和解码器参数。L 中所有期望都可用 Monte Carlo 采样近似。

VAE 方法优雅、理论上令人满意、实现简单。它也获得优秀结果,是生成建模 state-of-the-art 方法之一。主要缺点是在图像上训练的 VAE 样本倾向于略模糊——该现象原因尚不明确。一种可能是模糊是最大似然(最小化 D_KL(p_data || p_model))的内在效应:如图 3.6 所示,这意味着模型将对训练集中点赋予高概率,但也可能对其他点赋予高概率——这些其他点可能包括模糊图像。模型选择把概率质量放在模糊图像而非空间其他部分的部分原因是实践中使用的 VAE 通常对 p_model(x; g(z)) 用高斯分布。最大化该分布似然的下界类似于用 MSE 训练传统自编码器——倾向于忽略占用像素少或仅导致所占用像素亮度小幅变化的输入特征。该问题并非 VAE 特有,是所有优化对数似然(即 D_KL(p_data || p_model))的生成模型所共有——如 Theis et al. (2015) 和 Huszar (2015) 所论证。VAE 模型的另一困扰问题是它们倾向于仅使用 z 维度的一个小子集,仿佛编码器不能把输入空间足够多局部方向变换到边际分布匹配分解先验的空间。

VAE 框架非常容易扩展到广泛模型架构——这是相对玻尔兹曼机(需要极小心模型设计以保持可处理性)的关键优势。VAE 与多样化可微算子族都工作得很好。一个特别复杂的 VAE 是深度循环注意写者或 DRAW 模型(Gregor et al., 2015)——DRAW 用循环编码器和循环解码器加注意机制组合。DRAW 模型的生成过程包括顺序访问不同小图像块并绘制那些点的像素值。VAE 也可通过定义变分 RNN(Chung et al., 2015b)扩展为生成序列——在 VAE 框架内使用循环编码器和解码器。从传统 RNN 生成样本仅在输出空间涉及非确定性操作。变分 RNN 也在 VAE 隐变量捕获的潜在更抽象层次有随机可变性。

VAE 框架已被扩展为最大化不仅是传统变分下界,而是重要性加权自编码器(Burda et al., 2015)目标:

L_k(x, q) = E_{z^(1), ..., z^(k) ~ q(z|x)} log[(1/k) ∑_{i=1}^k p_model(x, z^(i)) / q(z^(i)|x)](公式 20.79)。

k = 1 时该新目标等价于传统下界 L。然而它也可被解释为用从提议分布 q(z|x) 的重要性采样形成真实 log p_model(x) 的估计。重要性加权自编码器目标也是 log p_model(x) 的下界,且随 k 增大而更紧

VAE 与 MP-DBM 和其他涉及通过近似推断图反向传播的方法有有趣联系(Goodfellow et al., 2013b; Stoyanov et al., 2011; Brakel et al., 2013)。这些之前方法需要均值场 fixed point 方程等推断程序提供计算图。VAE 可为任意计算图定义,这使其能应用于更广概率模型族——因为无需把模型选择限制为具有可处理均值场 fixed point 方程的模型。VAE 的另一优势是它增加模型对数似然的下界,而 MP-DBM 和相关模型的标准更启发式,超出使近似推断结果准确的范畴几乎没有概率解释。VAE 的一个缺点是它仅为一个问题学习推断网络——给定 x 推断 z;老方法能对任何变量子集给定任何其他子集做近似推断,因为均值场 fixed point 方程指定如何在所有这些问题计算图之间共享参数。

VAE 的一个非常好的性质是同时训练参数化编码器与生成器网络迫使模型学习编码器能捕获的可预测坐标系。这使其成为出色的流形学习算法——图 20.6 给出 VAE 学到的低维流形例子。在图示情况下算法发现了面部图像中存在的两个独立变化因素:旋转角度和情绪表达。

20.10.4 Generative Adversarial Networks(生成对抗网络)

生成对抗网络或 GAN(Goodfellow et al., 2014c)是另一种基于可微生成器网络的生成建模方法。

GAN 基于博弈论情境,其中生成器网络必须与对手竞争——生成器网络直接产生样本 x = g(z; θ^(g));其对手——判别器网络——试图区分从训练数据采样的样本和从生成器采样的样本。判别器发出概率值 d(x; θ^(d)),指示 x 是真实训练样本而非从模型采样的假样本的概率

生成对抗网络学习的最简单公式化为零和博弈,其中函数 v(θ^(g), θ^(d)) 决定判别器的收益;生成器接收 -v(θ^(g), θ^(d)) 作为其自身收益。学习期间,每个玩家试图最大化自己的收益,所以收敛时

g* = arg min_g max_d v(g, d)(公式 20.80)。

v 的默认选择是

v(θ^(g), θ^(d)) = E_{x~p_data} log d(x) + E_{x~p_model} log(1 - d(x))(公式 20.81)。

这驱动判别器试图学习正确分类样本为真或假;同时生成器试图欺骗分类器相信其样本是真的收敛时,生成器样本与真实数据不可区分,判别器到处都输出 1/2——然后判别器可被丢弃。

GAN 设计的主要动机是学习过程既不需要近似推断也不需要配分函数梯度近似。在 max_d v(g, d) 关于 θ^(g) 凸的情况下(如直接在概率密度函数空间优化时)该过程保证收敛且渐近一致。

遗憾地,实践中当 g 和 d 用神经网络表示且 max_d v(g, d) 非凸时,GAN 学习可能困难。Goodfellow (2014) 指出非收敛是可能导致 GAN 欠拟合的问题。一般地,两个玩家成本同时梯度下降不能保证达到均衡——考虑值函数 v(a, b) = ab 的例子,其中一个玩家控制 a 产生成本 ab,另一玩家控制 b 接收成本 -ab。如果把每个玩家建模为做无穷小梯度步,每玩家以另一玩家为代价减少自己成本,那么 a 和 b 进入稳定圆形轨道,而非到达原点的均衡点。注意极小极大博弈的均衡不是 v 的局部极小——它们是同时为两玩家成本极小值的点。这意味着它们是 v 关于第一玩家参数局部极小、关于第二玩家参数局部极大的鞍点。两玩家可能轮流增加然后减小 v 永远进行,而非准确落在无玩家能降低成本鞍点上。该非收敛问题对 GAN 的影响程度尚不明确。

Goodfellow (2014) 提出一种博弈非零和的替代收益公式化,在判别器最优时与最大似然学习有相同期望梯度。因为最大似然训练收敛,该 GAN 博弈的重新公式化也应收敛,给定足够样本。遗憾地,该替代公式化在实践中似乎不改善收敛,可能由于判别器次优,或可能由于期望梯度附近高方差。

在真实实验中,表现最好的 GAN 博弈公式化是 Goodfellow et al. (2014c) 引入的、既非零和也非等价于最大似然的不同公式化,启发式动机:在该最佳公式化中,生成器目标是增加判别器犯错的 log 概率,而非降低判别器做出正确预测的 log 概率该重新公式化的动机纯粹是观察结果——它使生成器成本函数关于判别器 logits 的导数在判别器自信拒绝所有生成器样本的情况下仍保持大。

GAN 学习的稳定仍是开放问题。幸运地,当模型架构和超参被仔细选择时 GAN 学习表现良好。Radford et al. (2015) 设计了深度卷积 GAN(DCGAN),对图像合成任务表现非常好,并显示其隐表示空间捕获了重要变化因素(如图 15.9)。图 20.7 给出 DCGAN 生成器生成的图像例子。

GAN 学习问题也可通过将生成过程分解为许多细节层次而简化。可以训练条件 GAN(Mirza and Osindero, 2014)从分布 p(x|y) 采样而非简单从边际分布 p(x) 采样。Denton et al. (2015) 显示一系列条件 GAN 可被训练为先生成极低分辨率版本图像,然后递增添加细节到图像——该技术称为 LAPGAN 模型(因为使用 Laplacian 金字塔生成含不同细节层次的图像)。LAPGAN 生成器能欺骗不仅是判别器网络,还有人类观察者——实验对象在网络输出中识别高达 40% 为真实数据。图 20.7 给出 LAPGAN 生成器生成图像的例子。

GAN 训练程序的一个不寻常能力是它能拟合对训练点赋予零概率的概率分布——生成器网络不是最大化特定点的对数概率,而是学习追踪一种流形——其点以某种方式类似于训练点。这有点矛盾地意味着模型可能对测试集赋予负无穷对数似然,但仍表示人类观察者认为抓住生成任务本质的流形。这未必是优势或劣势,也可通过让生成器网络最后一层对所有生成值加高斯噪声保证生成器网络对所有点赋予非零概率——以这种方式加高斯噪声的生成器网络从与使用生成器网络参数化条件高斯分布均值所获得的相同分布采样。

dropout 似乎在判别器网络中很重要——具体地,当计算生成器网络要遵循的梯度时,单元应被随机 dropout;跟随确定性版本判别器(其权重除以 2)的梯度似乎没那么有效;同样,从不使用 dropout 似乎产生差结果。

虽然 GAN 框架为可微生成器网络设计,相似原理可用于训练其他模型——例如自监督 boosting 可用于训练 RBM 生成器欺骗 logistic 回归判别器(Welling et al., 2002)。

20.10.5 Generative Moment Matching Networks(生成矩匹配网络)

生成矩匹配网络(Li et al., 2015; Dziugaite et al., 2015)是另一种基于可微生成器网络的生成模型形式。与 VAE 和 GAN 不同,它们不需要把生成器网络与任何其他网络配对——既不需要 VAE 用的推断网络也不需要 GAN 用的判别器网络。

这些网络用称为矩匹配(moment matching)的技术训练。矩匹配的基本思想是以模型生成样本的许多统计量尽可能与训练集示例的统计量相似的方式训练生成器。在该情境中,矩是随机变量不同幂的期望——例如第一矩是均值,第二矩是平方值的均值,依此类推。在多维情况下,随机向量的每个元素可被提升到不同幂,所以矩可以是 E_x ∏_i x_i^{n_i}(公式 20.82)形式的任何量,其中 n = [n_1, n_2, ..., n_d]^T 是非负整数向量。

初看该方法似乎计算上不可行——例如我们想匹配形式为 x_i x_j 的所有矩,那么需最小化的值数量是 x 维度的二次方。而且即使匹配所有第一和第二矩也仅足够拟合多元高斯分布(仅捕获值之间线性关系)。我们对神经网络的雄心是捕获复杂非线性关系——这将需要远多矩。GAN 通过使用动态更新的判别器避免该详尽枚举所有矩的问题——判别器自动聚焦其注意力于生成器网络最无效匹配的统计量。

生成矩匹配网络可改用称为 maximum mean discrepancy (MMD)(Schölkopf and Smola, 2002; Gretton et al., 2012)的成本函数训练——该成本函数用由核函数定义的隐式映射到特征空间以使对无限维向量的计算可处理,测量无限维空间中第一矩的误差。MMD 成本当且仅当所比较两分布相等时为零

视觉上,生成矩匹配网络的样本略令人失望。幸运地,可通过把生成器网络与自编码器组合改进——首先训练自编码器重建训练集;然后用自编码器编码器把整个训练集变换到代码空间;接着训练生成器网络生成代码样本,代码样本可通过解码器映射为视觉愉悦样本。

与 GAN 不同,成本函数仅根据来自训练集和生成器网络的一批示例定义——不可能只关于一个训练示例或一个生成器网络样本做训练更新。这是因为矩必须作为跨许多样本的经验平均计算。当批大小太小时,MMD 可能低估被采样分布的真实变化量。没有有限批大小足够大以完全消除该问题,但更大批减少低估量。当批大小太大时,训练过程变得不可行地慢——必须处理许多示例以计算单个小梯度步。

与 GAN 一样,即使生成器网络对训练点赋予零概率,也可用 MMD 训练生成器网络

20.10.6 Convolutional Generative Networks(卷积生成网络)

生成图像时,使用包含卷积结构的生成器网络通常有用(见例如 Goodfellow et al. (2014c) 或 Dosovitskiy et al. (2015))。为此,我们用卷积算子的"转置"(9.5 节)。该方法通常产生更真实图像,且使用比无参数共享的全连接层更少的参数

用于识别任务的卷积网络有从图像到网络顶部某摘要层(通常是类标签)的信息流。当该图像通过网络向上流动时,信息被丢弃——图像表示变得对干扰变换更不变。在生成器网络中,情况相反——当待生成图像的表示通过网络传播时,必须添加丰富细节,最终在图像本身的最终表示(当然是图像本身,含其所有详细辉煌,物体位置、姿态、纹理、光照)达到顶点。卷积识别网络丢弃信息的主要机制是池化层。生成器网络似乎需要添加信息——我们不能在生成器网络中放池化层的逆,因为大多数池化函数不可逆。一种较简单操作是仅增加表示的空间大小。一种看起来表现可接受的方法是使用 Dosovitskiy et al. (2015) 引入的"un-pooling"——该层在某些简化条件下对应 max-pooling 操作的逆:max-pooling 操作的 stride 被限制为等于池化区域宽度;假设每个池化区域内最大输入是左上角输入;假设每个池化区域内所有非最大输入为零。这些是非常强且不现实的假设,但它们确实允许 max-pooling 算子被求逆。逆 un-pooling 操作分配零张量,然后把输入空间坐标 i 的每个值复制到输出空间坐标 i×k整数值 k 定义池化区域大小。即使激发 un-pooling 算子定义的假设是不现实的,后续层能学习补偿其不寻常输出,所以模型整体生成的样本视觉上令人愉悦。

20.10.7 Auto-Regressive Networks(自回归网络)

自回归网络是没有任何隐随机变量的有向概率模型——这些模型中的条件概率分布由神经网络(有时是极简单神经网络如 logistic 回归)表示。这些模型的图结构是完全图——它们用概率链式法则把观察变量的联合概率分解为形如 P(x_d | x_{d-1}, ..., x_1) 的条件概率乘积。这种模型已被称为 fully-visible Bayes networks (FVBN),并以多种形式成功使用——最初用 logistic 回归作每个条件分布(Frey, 1998),然后用带隐单元的神经网络(Bengio and Bengio, 2000b; Larochelle and Murray, 2011)。在自回归网络的某些形式(如 NADE, Larochello and Murray, 2011,详见 20.10.10)中,我们可以引入一种参数共享形式——既带来统计优势(更少唯一参数)又带来计算优势(更少计算)。这是深度学习中反复出现的特征重用主题的另一例证

20.10.8 Linear Auto-Regressive Networks(线性自回归网络)

自回归网络的最简单形式没有隐单元、没有参数或特征共享——每个 P(x_i | x_{i-1}, ..., x_1) 被参数化为线性模型(实值数据用线性回归、二元数据用 logistic 回归、离散数据用 softmax 回归)。该模型由 Frey (1998) 引入,在有 d 个变量建模时含 O(d²) 参数——见图 20.8。

如果变量连续,线性自回归模型只是多元高斯分布的另一种公式化方式,捕获观察变量间的线性成对交互。线性自回归网络本质上是线性分类方法到生成建模的推广——因此它们与线性分类器有相同优缺点。像线性分类器一样,它们可用凸损失函数训练,有时有闭式解(如高斯情况)。像线性分类器一样,模型本身不提供增加容量的方法,所以容量必须用输入基展开或核技巧等技术提升。

20.10.9 Neural Auto-Regressive Networks(神经自回归网络)

神经自回归网络(Bengio and Bengio, 2000a,b)有与 logistic 自回归网络(图 20.8)相同的从左到右图模型,但采用图模型结构内条件分布的不同参数化。新参数化更有力,其容量可按需增加,允许逼近任何联合分布。新参数化也可通过引入深度学习共有的参数共享和特征共享原则改善泛化。模型由避免传统表格图模型维度灾难的目标激发——具有与图 20.8 相同的结构。在表格离散概率模型中,每个条件分布由概率表格表示,对所涉及变量的每种可能配置有一项和一个参数。通过用神经网络替代,获得两个优势:

  1. 用 (i-1)×k 输入和 k 输出(如果变量离散取 k 值,one-hot 编码)的神经网络参数化每个 P(x_i | x_{i-1}, ..., x_1),允许在不需要指数数量参数(和示例)的情况下估计条件概率,但仍能捕获随机变量间的高阶依赖。

  2. 不是为每个 x_i 预测有不同神经网络,而是图 20.9 所示的从左到右连接允许合并所有神经网络为一个——等价地,这意味着用于预测 x_i 的隐层特征可被重用预测 x_{i+k} (k > 0)。隐单元组织为组,第 i 组所有单元仅依赖输入值 x_1, ..., x_i;用于计算这些隐单元的参数被联合优化以改善序列中所有变量的预测。这是深度学习中反复出现的重用原则的例子——场景从循环和卷积网络架构到多任务和迁移学习。

每个 P(x_i | x_{i-1}, ..., x_1) 可通过使神经网络输出预测条件分布参数(如 6.2.1.1 节所述)来表示条件分布。虽然原始神经自回归网络最初在纯离散多元数据情境下评估(Bernoulli 变量用 sigmoid 输出、multinoulli 变量用 softmax 输出),但自然可把这种模型扩展到连续变量或同时含离散和连续变量的联合分布。

20.10.10 NADE(神经自回归密度估计器)

神经自回归密度估计器(NADE)是最近非常成功的神经自回归网络形式(Larochelle and Murray, 2011)。连接性与 Bengio and Bengio (2000b) 的原始神经自回归网络相同,但 NADE 引入额外参数共享方案——见图 20.10。不同组 j 的隐单元参数被共享

从第 i 个输入 x_i 到第 j 组第 k 个隐单元 h_k^(j) (j ≥ i) 的权重 W_(j,k,i)' 在组之间共享:

W_(j,k,i)' = W_(k,i)(公式 20.83)。

剩余权重(j < i 时)为零。

Larochelle and Murray (2011) 选择该共享方案使 NADE 模型中的前向传播松散类似于在 RBM 中填充缺失输入执行的均值场推断计算——该均值场推断对应运行共享权重的循环网络,其推断的第一步与 NADE 中相同。唯一区别是 NADE 中连接隐单元到输出的输出权重被独立于连接输入单元到隐单元的权重参数化——在 RBM 中,隐到输出权重是输入到隐权重的转置。NADE 架构可扩展为模拟不仅是均值场循环推断的一步而是 k 步——该方法称为 NADE-k(Raiko et al., 2014)。

如前所述,自回归网络可扩展为处理连续值数据。参数化连续密度的一种特别强大通用方式是作为高斯混合(3.9.6 节介绍)——混合权重 α_i(组分 i 的系数或先验概率)、每组分条件均值 μ_i 和每组分条件方差 σ_i²。称为 RNADE 的模型(Uria et al., 2013)用该参数化把 NADE 扩展到实值。像其他混合密度网络一样,分布参数是网络输出——混合权重概率由 softmax 单元产生,方差被参数化使其为正。随机梯度下降可能由于条件均值 μ_i 和条件方差 σ_i² 之间的交互而数值上表现不佳——为减少该困难,Uria et al. (2013) 使用在反向传播阶段替换均值梯度的伪梯度。

神经自回归架构的另一个非常有趣的扩展是消除对观察变量任意顺序选择的需要(Murray and Larochelle, 2014)。在自回归网络中,思想是通过随机采样顺序并向隐单元提供指定哪些输入被观察(条件条右侧)、哪些待预测因此被视为缺失(条件条左侧)的信息,训练网络能处理任何顺序。这很棒,因为它允许使用训练好的自回归网络极高效地执行任何推断问题(即对任何变量子集给定任何子集预测或从概率分布采样)。最后,因为许多变量顺序是可能的(n 个变量有 n! 种),每种顺序 o 产生不同 p(x|o),可对许多 o 值形成模型集成:

p_ensemble(x) = (1/k) ∑_{i=1}^k p(x|o^(i))(公式 20.84)。

该集成模型通常比由单一排序定义的个体模型泛化更好,并对测试集赋予更高概率

同一篇论文中,作者提出架构的深度版本,但遗憾地立即使计算变得与原始神经自回归神经网络(Bengio and Bengio, 2000b)一样昂贵。第一层和输出层仍可用 O(nh) 乘加计算(与常规 NADE 一样,其中 h 是隐单元数量即 h_i 组大小),而在 Bengio and Bengio (2000b) 中为 O(n²h)。然而对其他隐层,若层 l 的每个"前"组参与预测层 l+1 的"后"组(假设每层 n 个 h 单元组),则计算为 O(n²h²)使层 l+1 的第 i 组仅依赖层 l 的第 i 组(如 Murray and Larochelle (2014))把它降为 O(nh²),仍比常规 NADE 差 h 倍

20.11 Drawing Samples from Autoencoders(从自编码器采样)

第 14 章中我们看到许多种自编码器学习数据分布。分数匹配、去噪自编码器和收缩自编码器之间有密切联系——这些联系证明某些自编码器以某种方式学习数据分布。我们尚未看到如何从这种模型采样

某些自编码器(如 VAE)显式表示概率分布并允许直接的祖先采样。大多数其他自编码器需要 MCMC 采样。

收缩自编码器被设计为恢复数据流形切平面的估计——这意味着重复编码和解码并注入噪声将沿流形表面引起随机游走(Rifai et al., 2012; Mesnil et al., 2012)。该流形扩散技术是一种 Markov 链。还有一种更一般的 Markov 链可从任何去噪自编码器采样。

20.11.1 Markov Chain Associated with any Denoising Autoencoder(任何去噪自编码器关联的 Markov 链)

上述讨论留下了一个开放问题:注入什么噪声、在哪里注入以获得从自编码器估计分布生成的 Markov 链。Bengio et al. (2013c) 展示了如何为广义去噪自编码器构造这种 Markov 链广义去噪自编码器由用于采样给定损坏输入的干净输入估计的去噪分布指定

生成估计分布样本的 Markov 链每步包括以下子步骤(图 20.11):

  1. 从前态 x 开始,注入损坏噪声,从 C(x̃|x) 采样 x̃。

  2. 把 x̃ 编码为 h = f(x̃)。

  3. 解码 h 获得 p(x|ω = g(h)) = p(x|x̃) 的参数 ω = g(h)。

  4. 从 p(x|ω = g(h)) = p(x|x̃) 采样下一态 x。

Bengio et al. (2014) 证明如果自编码器 p(x|x̃) 形成对应真实条件分布的一致估计器,那么上述 Markov 链的平稳分布形成 x 数据生成分布的一致估计器(虽然该估计器是隐式的)。

20.11.2 Clamping and Conditional Sampling(钳位和条件采样)

类似玻尔兹曼机,去噪自编码器及其推广(如下文描述的 GSN)可用于从条件分布 p(x_f|x_o) 采样——只需钳位观察单元 x_f 并仅在给定 x_f 和采样隐变量(如有)时重新采样自由单元 x_o。例如 MP-DBM 可被解释为去噪自编码器的一种形式,并能采样缺失输入。GSN 后来推广了 MP-DBM 中的某些思想以执行相同操作(Bengio et al., 2014)。Alain et al. (2015) 识别了 Bengio et al. (2014) 命题 1 中缺失的条件——转移算子(由从链一个状态到下一状态的随机映射定义)应满足称为 detailed balance 的性质,该性质规定平衡时 Markov 链无论以正向还是反向运行转移算子都将保持平衡。图 20.12 显示一个实验——钳位图像右半部像素,每步只在左半部运行 Markov 链。

20.11.3 Walk-Back Training Procedure(回退训练程序)

回退训练程序由 Bengio et al. (2013c) 提出——作为加速去噪自编码器生成训练收敛的方法。该程序不是执行一步编码-解码重建,而是从训练示例初始化的多个随机编码-解码步骤(如生成 Markov 链中)交替进行(就像 CD 算法,18.2 节所述),惩罚最后概率重建(或沿途所有重建)。用 k 步训练等价于(在达到相同平稳分布意义上)用一步训练,但实际优势是更远离数据的伪模式能被更高效去除

20.12 Generative Stochastic Networks(生成随机网络)

生成随机网络或 GSN(Bengio et al., 2014)是去噪自编码器的推广,在生成 Markov 链中除可见变量(通常记为 x)外还包含隐变量 h。GSN 由指定 Markov 链一步的两个条件概率分布参数化

  1. p(x^(k) | h^(k)) 告知如何生成下一可见变量给定当前隐状态——这种"重建分布"也出现在去噪自编码器、RBM、DBN 和 DBM 中。

  2. p(h^(k) | h^(k-1), x^(k-1)) 告知如何更新隐状态变量,给定前一隐状态和可见变量。

去噪自编码器和 GSN 不同于经典概率模型(有向或无向),因为它们参数化生成过程本身而非可见和隐变量联合分布的数学规范。后者被隐式定义为生成 Markov 链的平稳分布(如果存在)。平稳分布存在的条件是温和的,与标准 MCMC 方法所需条件相同(17.3 节)。这些条件对保证链混合是必要的,但可被某些转移分布选择违反(例如如果它们是确定性的)。

可以想象 GSN 的不同训练准则。Bengio et al. (2014) 提出和评估的是仅在可见单元上的重建对数概率——就像去噪自编码器。通过钳位 x^(0) = x 到观察示例并最大化在某后续时间步生成 x 的概率实现——即最大化 log p(x^(k) = x | h^(k)),其中 h^(k) 从链采样给定 x^(0) = x。为估计 log p(x^(k) = x | h^(k)) 关于模型其他部分的梯度,Bengio et al. (2014) 使用 20.9 节引入的重参数化技巧。回退训练协议(20.11.3 节所述)被 Bengio et al. (2014) 用于改善 GSN 的训练收敛。

20.12.1 Discriminant GSNs(判别式 GSN)

GSN 的原始公式化(Bengio et al., 2014)旨在无监督学习并隐式建模观察数据 x 的 p(x),但可以修改框架以优化 p(y|x)

例如 Zhou and Troyanskaya (2014) 以这种方式推广 GSN——仅在输出变量上反向传播重建对数概率,保持输入变量固定。他们成功应用于建模序列(蛋白质二级结构)并在 Markov 链的转移算子中引入(一维)卷积结构。重要的是记住对 Markov 链每步,为每层生成新序列,该序列是用于在下一时间步计算其他层值(比如下方和上方的那层)的输入。因此 Markov 链实际上是在输出变量(及相关更高层)上的,输入序列仅用于条件该链,反向传播允许学习输入序列如何能隐式表示在 Markov 链中的输出分布——这是结构化输出情境中使用 GSN 的情况

Zöhrer and Pernkopf (2014) 引入结合监督目标(如上述工作)和无监督目标(如原始 GSN 工作)的混合模型——通过以不同权重简单相加监督和无监督成本(即 y 和 x 的重建对数概率)。这种混合准则以前由 Larochelle and Bengio (2008) 为 RBM 引入。他们证明使用该方案改善分类性能。

20.13 Other Generation Schemes(其他生成方案)

迄今我们描述的方法使用 MCMC 采样、祖先采样或两者某种混合生成样本。虽然这些是生成建模最流行的方法,但绝不是唯一方法。

Sohl-Dickstein et al. (2015) 开发了基于非平衡热力学的扩散反演训练方案学习生成模型——基于这样的思想:我们希望采样的概率分布有结构。该结构可通过逐渐改变概率分布使其有更多熵的扩散过程逐渐被破坏。为形成生成模型,可通过训练逐渐恢复结构到无结构分布的模型反向运行该过程通过迭代应用使分布更接近目标分布的过程,可逐渐接近该目标分布。该方法在涉及许多迭代以产生样本的方面类似于 MCMC 方法。然而模型被定义为链最后一步产生的概率分布——在此意义上没有由迭代过程引起的近似。Sohl-Dickstein et al. (2015) 引入的方法也非常接近去噪自编码器的生成解释(20.11.1 节)。与去噪自编码器一样,扩散反演训练转移算子试图概率性地撤销添加一些噪声的效果。区别是扩散反演需要撤销的只是扩散过程的一步,而非一路回到干净数据点。这解决了去噪自编码器普通重建对数似然目标中存在的以下两难——小噪声水平下学习者只看到接近数据点的配置,大噪声水平下被要求做几乎不可能的工作(因为去噪分布高度复杂且多模)。使用扩散反演目标,学习者能更精确地学习数据点周围密度形状,也能去除可能在远离数据点处出现的伪模式

另一种样本生成方法是 approximate Bayesian computation (ABC) 框架(Rubin et al., 1984)——在该方法中,样本被拒绝或修改以使所选样本函数矩与所需分布的矩匹配。虽然该思想使用样本矩(像在矩匹配中),但它与矩匹配不同,因为它修改样本本身,而非训练模型自动发出具有正确矩的样本。Bachman and Precup (2015) 展示如何在深度学习情境中使用 ABC 思想——用 ABC 塑造 GSN 的 MCMC 轨迹。我们预计许多其他可能的生成建模方法等待被发现

20.14 Evaluating Generative Models(评估生成模型)

研究生成模型的研究者经常需要比较一个生成模型与另一个,通常为了证明新发明的生成模型在捕捉某分布上比已有模型更好。这可能是困难且微妙的任务——在许多情况下,我们实际不能评估数据在模型下的对数概率,只能近似。这些情况下,重要的是清晰思考和交流实际测量什么——例如,假设我们能为模型 A 评估对数似然的随机估计,为模型 B 评估对数似然的确定性下界。如果模型 A 得分高于模型 B,哪个更好?如果我们关心确定哪个模型对分布有更好的内部表示,我们实际无法判断,除非我们有某种方法确定模型 B 的界有多松。然而如果我们关心如何在实践中使用模型——例如执行异常检测——那么根据特定于实际感兴趣任务的标准(如基于排序测试示例和排序标准如精度和召回)说某模型更优是公平的

评估生成模型的另一微妙性是评估指标本身经常是困难的研究问题——可能很难建立模型被公平比较。例如假设用 AIS 估计 log Z 以计算新模型的 log p̃(x) - log Z。AIS 的计算经济实现可能找不到模型分布的几个模式并低估 Z,这会导致我们高估 log p(x)。因此很难判断高似然估计是来自好模型还是差的 AIS 实现

机器学习的其他领域通常允许数据预处理的一定变化。例如比较目标识别算法精度时,通常可以基于每种算法的输入要求稍微不同地预处理输入图像。生成建模不同——因为输入数据的任何变化,即使非常小且微妙的,都完全不可接受。输入数据的任何改变改变要被捕捉的分布并根本性改变任务。例如把输入乘以 0.1 会人为地把似然增加 10 倍。

预处理问题在生成建模常用基准 MNIST 数据集上经常出现。MNIST 由灰度图像组成。有些模型把 MNIST 图像视为实向量空间中的点,有些视为二元;还有些把灰度值视为二元样本的概率必须只把实值模型与其他实值模型比较、只把二元值模型与其他二元值模型比较——否则测量的似然不在同一空间上。对二元值模型,对数似然最多为零;对实值模型,它可任意高,因为是密度的测量。在二元模型间,重要的是用完全相同种类的二值化比较模型。例如我们可通过 0.5 阈值把灰度像素二值化为 0 或 1,或通过以灰度像素强度为 1 的概率绘制随机样本实现二值化。如果用随机二值化,我们可一次二值化整个数据集,或为训练每步绘制不同随机示例然后为评估绘制多个样本。这三种方案都产生截然不同的似然数字——比较不同模型时重要的是两模型用相同二值化方案训练和评估。事实上应用单一随机二值化步骤的研究者共享含随机二值化结果的文件,所以结果不会有基于二值化步骤不同结果的差异。

因为从数据分布生成真实样本是生成模型目标之一,从业者经常通过视觉检查样本评估生成模型。最佳情况下,这不是研究者自己做的,而是不知道样本来源的实验对象(Denton et al., 2015)。遗憾地,非常差的概率模型可能产生非常好的样本——验证模型是否只复制某些训练示例的常见做法如图 16.1 所示——该思想是显示一些生成样本在训练集中按欧氏距离的最近邻。该测试旨在检测模型过拟合训练集并只再现训练实例的情况。甚至可能同时欠拟合和过拟合但仍产生个体看起来好的样本——想象一个在狗和猫图像上训练为只学习再现狗训练图像的生成模型——该模型显然过拟合(因为它不产生不在训练集中的图像)但也欠拟合(因为它对猫的训练图像不赋予任何概率);然而人类观察者会把每张狗图像判断为高质量。在该简单例子中,能检查许多样本的人类观察者容易确定猫缺失。在更现实设置中,在数万模式数据上训练的生成模型可能忽略小数量模式,人类观察者不容易检查或记住足够图像以检测缺失的变化

因为样本视觉质量不是可靠指导,我们也经常评估模型赋予测试数据的对数似然(当计算上可行时)。遗憾地,在某些情况下,似然似乎不度量我们真正关心的模型任何属性——例如 MNIST 的实值模型可通过给从不变化的背景像素赋予任意低方差获得任意高似然。检测这些常数特征的模型和算法能收获无限奖励,即使这是不太有用的事。对任何实值最大似然问题都存在获得成本接近负无穷的潜力,但对生成 MNIST 的模型尤其成问题,因为这么多输出值平凡可预测。这强烈暗示需要开发评估生成模型的其他方法

Theis et al. (2015) 综述了评估生成模型涉及的许多问题——包括上述许多思想。他们强调生成模型有许多不同用途,指标选择必须匹配模型预期用途——例如一些生成模型更善于对大多数真实点赋予高概率,而其他生成模型更善于很少对不真实点赋予高概率。这些差异可源于生成模型被设计为最小化 D_KL(p_data || p_model) 还是 D_KL(p_model || p_data),如图 3.6 所示。遗憾地,即使我们把每种指标的使用限制为其最适合的任务,当前使用的所有指标仍有严重弱点因此生成建模最重要研究主题之一实际上不仅是改进生成模型,而是设计新技术衡量我们的进展

20.15 Conclusion(结论)

用隐单元训练生成模型是使模型理解给定训练数据所表示世界的强大方式——通过学习模型 p_model(x) 和表示 p_model(h|x),生成模型可以提供关于 x 中输入变量关系许多推断问题的答案,并能通过在层次不同层对 h 取期望提供表示 x 的许多不同方式。生成模型有望为 AI 系统提供它们需要理解的所有不同直观概念的框架,以及在不确定性面前对这些概念推理的能力我们希望我们的读者能找到使这些方法更有力的新方式,并继续理解学习与智能背后原理的旅程

本章个人批注

读完本章最大的感觉是"全景图"——Goodfellow 等人把 16-19 章建立的工具(能量模型、配分函数处理、变分推断、随机梯度估计)几乎全部映射到具体模型上。本章不是新理论的展开,而是把前 19 章的"零件"组合成"机器"。这种结构使本章具有强烈的回顾性,但也容易在每一节里反复重提前面章节的细节,让读者在比较中体会差异。

第二个印象是作者鲜明的实践取向。他们反复提醒"intractable"、"biased gradient"、"ad hoc"、"heuristic",同时又给出可在 MNIST 上跑的训练配方(centered DBM、MP-DBM、ssRBM、GSN、DCGAN、VAE)。这不是一篇只讨论理论可行性的章节——作者明确告诉读者哪些模型在实践中工作、哪些不工作、为什么。例如 mcRBM 需要 HMC 采样而 ssRBM 不用,GAN 的非收敛性、VAE 的模糊样本、ssRBM 的非正定协方差问题——这些都是只有真正训练过这些模型的人才会注意到的细节。

第三个观察是本章对"评估"的诚实:作者在 20.14 节直接说"所有当前指标都有严重弱点",并指出 MNIST 实值 vs 二元、二值化方案、AIS 实现质量都可能让模型比较失效。这与许多综述一味追求"benchmark numbers"的写法形成对比——Goodfellow 是在告诉读者"这是一个开放问题,不是已解决的问题"。

个人好奇的点是:作者对 GAN 收敛性的讨论(saddle point 不是 local minimum)虽然正确,但 2014 年提出的几种训练技巧(heuristic log-prob-mistake)在后续工作中很多被改进甚至替代——这说明 2016 年写书时 GAN 训练还是个手工艺活;现在我们有了 WGAN、gradient penalty、Spectral Norm 等系统化方法,本书的论述现在看来是"早期 GAN 文献"。

另一个值得思考的是:作者把 DBN 和 DBM 分得很清楚,但在 VAE/GAN 之前,研究者确实更倾向 RBM/DBM/DBN 这类基于能量函数的模型;今天主导的生成模型(diffusion、transformer-based GAN、LLM-based 生成)几乎都是可微生成器网络或自回归结构——20.10 的那些模型才真正成为现代生成建模的主流。

与上下章的衔接(一段话)

本章是本书最后一个实质性章节,核心位置在整本书的"应用与综合"——前 19 章逐步建立了机器学习基础、深度前馈网络、正则化与优化、卷积网络、循环网络、线性因子模型、自编码器、表示学习、图模型、生成模型的蒙特卡洛与近似推断方法;本章反过来用这些工具系统综述 12 大类生成模型(Boltzmann 机族 8 类 + 有向生成网络 5 类 + 自编码器衍生 3 类 + 评估),构成一个"理论工具箱"与"具体模型"的映射表。

与上一章(第 19 章近似推断)的衔接:19 章讨论了 EM、MAP 与稀疏编码、变分推断(离散、变分法、连续、学习-推断交互、学习推断、wake-sleep、深度自编码器)作为通用推断工具;本章 20.4.2 节直接把平均场推断应用到 DBM,20.4.4 节给出 DBM 的 SML 训练算法(算法 20.1),20.10.3 节的 VAE 把变分下界从理论公式变成可训练模型,20.9 节把"通过随机操作反向传播"这一关键技术从抽象讨论落地为 VAE 的实现细节。换句话说,19 章告诉读者"为什么有这些工具",20 章告诉读者"这些工具具体怎么用"。

与本书结尾的关系:本章是 Goodfellow 等人在 2016 年对深度生成模型景观的一次"快照"——它把 2014-2015 年的关键进展(VAE, DCGAN, DRAW, NADE, MP-DBM, ssRBM, GSN)系统地呈现给读者。本章 20.15 节的结论非常简短但有总结性:作者把生成模型定位为"AI 系统理解世界的框架"——这呼应了全书从监督学习、无监督学习到生成学习的能力扩展路线。本书到此结束,读者如感兴趣可以进一步阅读后续文献(diffusion、normalizing flow、flow-based 模型、energy-based 模型、transformer-based 生成模型等)。20.14 节的"评估"讨论也是对整本书的实用提示:好的生成模型不止需要一个好的损失函数,还需要一个好的评估方法——这是开放问题。