DL花书阅读笔记-直面配分函数
date
Jun 22, 2022
Last edited time
Sep 5, 2022 05:07 PM
status
Published
slug
DL花书阅读笔记-直面配分函数
tags
DL
summary
2022.09.06@修改了一些错误
type
Post
Field
Plat
许多概率模型(通常是无向图模型)由一个未归一化的概率分布 定义。我们必须通过除以配分函数 来归一化 ,以获得一个有效的概率分布:
配分函数是未归一化概率所有状态的积分(对于连续变量)或求和(对于离散变量):
对数似然梯度
通过最大似然学习无向模型特别困难的原因在于配分函数依赖于参数。对数似然相对于参数的梯度具有一项对应于配分函数的梯度:
这是机器学习中非常著名的正相(positive phase)和负相(negative phase)的分解。
其中, 对于大多数感兴趣的无向模型而言,负相计算是困难的。没有潜变量或潜变量之间很少相互作用的模型通常会有一个易于计算的正相。
对于保证所有的 都有 的模型,我们可以用 代替 :
即
该等式是使用各种蒙特卡罗方法近似最大化(具有难计算配分函数模型的)似然的基础。
在正相中,我们增大从数据中采样(样本)得到的 。在负相中,我们通过降低从模型分布中采样(例如使用Gibbs采样对模型进行采样)的 来降低配分函数。
随机最大似然和对比散度
- 朴素MCMC算法
一种朴素的MCMC算法,使用梯度上升最大化具有难以计算配分函数的对数似然。
设步长 为一个小正数。
设吉布斯步数 大到足以允许磨合。在小图像集上训练一个 RBM 大致设为 100。
while
不收敛 do
从训练集中采包含 个样本 的小批量。
# 正项
初始化 个样本 为随机值(例如,从均匀或正态分布中采,或大致与模型边缘分布匹配的分布)
for
to
do
for
to
do
← gibbs_update().
end for
end for
# 减去负项, 得到归一化模型对于参数的梯度end while
简单的MCMC算法的计算成本主要来自每一步的随机初始化磨合马尔可夫链。一个自然的解决方法是初始化马尔可夫链为一个非常接近模型分布的分布,从而大大减少磨合步骤, 就得到下面的对比散度算法。
- 对比散度(CD)
- 缺点
- 它不能抑制远离真实训练样本的高概率区域。这些区域在模型上具有高概率,但是在数据生成区域上具有低概率,被称为虚假模态(spurious modes)。
- CD并不直接有助于训练更深的模型。这是因为在给定可见单元样本的情况下,很难获得隐藏单元的样本。由于隐藏单元不包括在数据中,所以使用训练点初始化无法解决这个问题。即使我们使用数据初始化可见单元,我们仍然需要磨合在给定这些可见单元的隐藏单元条件分布上采样的马尔可夫链。
对比散度(CD,或者是具有 k 个 Gibbs 步骤的 CD-k)算法在每个步骤中初始化马尔可夫链为采样自数据分布中的样本 (Hinton, 2000, 2010).
对比散度算法,使用梯度上升作为优化过程。
设步长 为一个小正数。
设吉布斯步数 大到足以让从 初始化并从 采样的马尔可夫链混合 。
在小图像集上训练一个 RBM 大致设为 1-20。
while
不收敛 do
从训练集中采包含 个样本 的小批量。
# 正项
# 初始化马尔可夫链为采样自数据分布中的样本
for
to
do
end for
for
to
do
for
to
do
← gibbs_update().
end for
end for
# 减去负项, 得到归一化模型对于参数的梯度
end while
初始时,数据分布并不接近模型分布,因此负相不是非常准确。幸运的是,正相仍然可以准确地增加数据的模型概率。进行正相阶段一段时间之后,模型分布会更接近于数据分布,并且负相开始变得准确。
对模型进行采样可以得到所有的单元样本 , 但是从数据中我们只有一部分 可见, 那么另一部分 称为隐藏样本.
- 随机最大似然(SMl) 又称 持续性对比散度(PCD)
- 优点
- 因为每个马尔可夫链在整个学习过程中不断更新,而不是在每个梯度步骤中重新开始,马尔可夫链可以自由探索很远,以找到模型的所有峰值。因此,SML比CD更不容易形成具有虚假模态的模型。
- 因为可以存储所有采样变量的状态,无论是可见的还是潜在的,SML为隐藏单元和可见单元都提供了初始值。CD只能为可见单元提供初始化,因此深度模型需要进行磨合步骤。
- 缺点
- 在 太小或 太大时,随机梯度算法移动模型的速率比马尔可夫链在迭代步中混合更快,此时SML容易变得不准确。
另一个解决CD中许多问题的不同策略是,在每个梯度步骤中初始化马尔可夫链为先前梯度步骤的状态值。这种方法的基本思想是,只要随机梯度算法得到的步长很小,那么前一步骤的模型将类似于当前步骤的模型。
随机最大似然/持续性对比散度算法,使用梯度上升作为优化过程。
设步长 为一个小正数。
设吉布斯步数 大到足以让从 采样的马尔可夫链磨合(从采自 的样本开始)。在小图像集上训练一个RBM大致设为 1,对于更复杂的模型如深度玻尔兹曼机可能要设为 5 到 50。
初始化 个样本 为随机值(例如,从均匀或正态分布中采,或大致与模型边缘分布匹配的分布)
while
不收敛 do
从训练集中采包含 个样本 的小批量。
# 正项
# 保留上一次的状态值
for
to
do
for
to
do
← gibbs_update().
end for
end for
# 减去负项, 得到归一化模型对于参数的梯度end while
- 快速持续性对比散度(fast persistent contrastive divergence)
一种在学习期间加速混合的方法是,不改变蒙特卡罗采样技术,而是改变模型的参数化和代价函数。快速持续性对比散度(fast persistent contrastive divergence),或者FPCD (Tieleman and Hinton, 2009) 使用如下表达式去替换传统模型的参数
现在的参数是以前的两倍多,将其逐个相加以定义原始模型的参数。快速复制参数可以使用更大的学习率来训练,从而使其快速响应学习的负相,并促使马尔可夫链探索新的区域。这能够使马尔可夫链快速混合,尽管这种效应只会发生在学习期间快速权重可以自由改变的时候。通常,在短时间地将快速权重设为大值并保持足够长时间,使马尔可夫链改变峰值之后,我们会对快速权重使用显著的权重衰减,促使它们收敛到较小的值。
伪似然
蒙特卡罗近似配分函数及其梯度需要直接处理配分函数。有些其他方法通过训练不需要计算配分函数的模型来绕开这个问题。
无向概率模型中很容易计算概率的比率。这是因为配分函数同时出现在比率的分子和分母中,互相抵消:
伪似然正是基于条件概率可以采用这种基于比率的形式,因此可以在没有配分函数的情况下进行计算。
假设我们将 分为 ,其中 包含我们想要的条件分布的变量, 包含我们想要条件化的变量, 包含除 之外的变量, 那么条件概率 可以写为:
我们可以将模型的对数似然写为:
我们使 尽可能小, 扩大到 以减少计算代价, 这便产生了伪似然(pseudolikelihood)(Besag, 1975)目标函数,给定所有其他特征 ,预测特征 的值:
如果每个随机变量有 个不同的值,那么计算 需要 次估计,而计算配分函数需要 次估计. 另外, 可以证明最大化伪似然的估计是渐近一致的 (Mase, 1995)。
- 伪似然比SML在每个梯度步骤中的计算代价要大得多,这是由于其对所有条件进行显式计算。但是,如果每个样本只计算一个随机选择的条件,那么广义伪似然和类似标准仍然可以很好地运行,从而使计算代价降低到和SML差不多的程度 (Goodfellow et al., 2013d)。
- 虽然伪似然估计没有显式地最小化 logZ,但是我们仍然认为它具有类似负相的效果。每个条件分布的分母会使得学习算法降低所有仅具有一个变量不同于训练样本的状态的概率。
得分匹配和比率匹配
得分匹配 (Hyvärinen, 2005b) 提供了另一种训练模型而不需要估计 或其导数的一致性方法。对数密度关于参数的导数 ,被称为其得分(score).
得分匹配采用的策略是,最小化模型对数密度和数据对数密度关于输入的导数之间的平方差期望:
最小化 的期望等价于最小化下式的期望
其中 是 的维度。这样计算数据分布的得分不需要知道生成训练数据的真实分布 。
该目标函数避免了微分配分函数 带来的难题,因为 不是 的函数,所以。
- 缺点
- 因为得分匹配需要关于 的导数,所以它不适用于具有离散数据的模型,但是模型中的潜变量可以是离散的。
- 类似于伪似然,得分匹配只有在我们能够直接估计 及其导数的时候才有效。
- 它与对 仅提供下界的方法不兼容,因为得分匹配需要 的导数和二阶导数,而下限不能传达关于导数的任何信息。这意味着得分匹配不能应用于隐藏单元之间具有复杂相互作用的模型估计,例如稀疏编码模型或深度玻尔兹曼机。
- 改进
一种成功地将得分匹配的基本想法扩展到离散数据的方法是比率匹配(ratio matching) (Hyvärinen, 2007b)。比率匹配特别适用于二值数据。比率匹配最小化以下目标函数在样本上的均值:
其中 返回 处位值取反的 。比率匹配使用了与伪似然估计相同的策略来绕开配分函数:配分函数会在两个概率的比率中抵消掉。
去噪得分匹配
某些情况下,我们希望拟合以下分布来正则化得分匹配
而不是拟合真实分布 。分布 是一个损坏过程,通常在形成 的过程中会向 中添加少量噪声。
去噪得分匹配非常有用,因为在实践中,通常我们不能获取真实的 ,而只能得到其样本确定的经验分布。给定足够容量,任何一致估计都会使 成为一组以训练点为中心的 Dirac 分布。
噪声对比估计
具有难求解的配分函数的大多数模型估计都没有估计配分函数。SML和CD只估计对数配分函数的梯度,而不是估计配分函数本身。得分匹配和伪似然避免了和配分函数相关的计算。
噪声对比估计(noise-contrastive estimation,NCE)采取了一种不同的策略。在这种方法中,模型估计的概率分布被明确表示为:
其中 是 的近似。噪声对比估计过程将 视为另一参数,使用相同的算法同时估计 和 。
但是这种方法不可能使用最大似然作为估计的标准。最大似然标准可以设置 为任意大的值,而不是设置 以创建一个有效的概率分布。因此, NCE 将估计 的无监督学习问题转化为学习一个概率二元分类器,其中一个类别对应模型生成的数据。
我们定义一个噪声分布(noise distribution), 噪声分布应该易于估计和从中采样。我们现在可以构造一个联合 和新二值变量 的模型。在新的联合模型中,我们指定
是一个决定我们从模型还是从噪声分布中生成 的开关变量。
同样的, 我们可以在训练数据上构造一个类似的联合模型, 开关变量决定是从数据还是从噪声分布中抽取 。正式地, ,,和 。
现在我们可以应用标准的最大似然学习拟合 到 的监督学习问题:
那么:
注
可以看出, 这里就相当于GAN中的判别器
那么由于最优判别器 , 可以得到 , 而实际上:
即优化 , 其中 .
- NCE 的特点
- NCE能够非常成功地应用于随机变量较少的问题,但即使随机变量有很多可以取的值时,它也很有效。
- 当NCE应用于具有许多随机变量的问题时,其效率会变得较低。
- 当 比较简单时,大多数采样可能与数据有着明显不同,而不会迫使 进行显著改进。
- 类似于得分匹配和伪似然,如果 只有下界,那么NCE不会有效。
噪声对比估计是基于良好生成模型应该能够区分数据和噪声的想法。一个密切相关的想法是,良好的生成模型能够生成分类器无法将其与数据区分的样本。这个想法诞生了生成式对抗网络。
估计配分函数
本节中我们将会讨论几种直接估计配分函数的方法。
假设我们有两个模型:概率分布为 的模型 和概率分布为 的模型 。比较模型的常用方法是评估和比较两个模型分配给独立同分布测试数据集的似然。假设测试集含 个样本 。如果 ,或等价地,如果, 那么我们说 是一个比 更好的模型,这是指它有一个更好的测试对数似然。不幸的是,测试这个条件是否成立需要知道配分函数。我们可以通过将上式重新转化为另一种形式来简化情况,在该形式中我们只需要知道两个模型的配分函数的比率:
因此,我们可以在不知道任一模型的配分函数,而只知道它们比率的情况下,判断模型 是否比模型 更优。
蒙特卡罗方法估计配分函数
一种估计配分函数的简单方法是使用蒙特卡罗方法,例如简单重要采样。我们使用提议分布 ,其在配分函数 和未归一化分布 上易于采样和估计。
在最后一行,我们使用蒙特卡罗估计,使用从 中抽取的采样计算积分 ,然后用未归一化的 和提议分布 的比率对每个采样加权。
这种方法使得我们可以估计配分函数之间的比率:
如果分布 接近 ,那么式 (8) 能够有效地估计配分函数 (Minka, 2005)。不幸的是,大多数时候 都很复杂(通常是多峰值的),并且定义在高维空间中。很难找到一个易求解的 ,既能易于评估,又能充分接近 以保持高质量的近似。如果 和 不接近,那么 的大多数采样将在 中具有较低的概率,从而在式 (8) 的求和中产生(相对的)可忽略的贡献。并且如果求和中只有少数几个具有显著权重的样本,那么将会由于高方差而导致估计的效果很差。
注
目标重要性权重 定义为:
退火重要采样
在 很大的情况下(即 和 之间几乎没有重叠),一种称为退火重要采样(annealed importance sampling,AIS)的方法试图通过引入中间分布来缩小这种差距 (Jarzynski, 1997; Neal, 2001)。退火重要采样首先由 Jarzynski (1997) 发现,然后由 Neal (2001) 再次独立发现。目前它是估计无向概率模型的配分函数的最常用方法。
考虑分布序列 ,其中 ,分布序列中的第一个和最后一个分别是 和 。
现在我们可以将比率 写作
如果对于所有的 ,分布 和 足够接近,那么我们能够使用简单的重要采样来估计每个因子 ,然后使用这些得到 的估计。
我们将中间分布定义为使用目标分布 与起始分布(其配分函数是已知的)的加权几何平均:
为了从这些中间分布中采样,我们定义了一组马尔可夫链转移函数 ,定义了给定 转移到 的条件概率分布。转移算子 定义如下:
这些转移可以被构造为任何马尔可夫链蒙特卡罗方法(例如,Metropolis-Hastings,Gibbs),包括涉及多次遍历所有随机变量或其他迭代的方法。
然后,AIS采样方法从 开始生成样本,并使用转移算子从中间分布顺序地生成采样,直到我们得到目标分布 的采样:
- 采样算法
- 对于
- 采样
- 采样
- …
- 采样
- 采样 na
那么, 中间分布的目标重要性权重为:
配分函数的比率估计如下:
桥式采样
桥式采样 (Bennett, 1976) 是另一种处理重要采样缺点的方法。并非将一系列中间分布连接在一起,桥式采样依赖于单个分布 (被称为桥),在已知配分函数的分布 和分布 (我们试图估计其配分函数 )之间插值。
如果仔细选择桥式采样 ,使其与 和 都有很大重合的话,那么桥式采样能够允许两个分布(或更正式地,)之间有较大差距(相对标准重要采样而言)。
- 链接重要采样
AIS和桥式采样各有优点。如果 不太大(由于 和 足够接近)的话,那么桥式采样能比AIS更高效地估计配分函数比率。然而,如果对于单个分布 而言,两个分布相距太远难以桥接差距,那么AIS至少可以使用许多潜在中间分布来跨越 和 之间的差距。
- 在训练期间估计配分函数
虽然AIS已经被认为是用于估计许多无向模型配分函数的标准方法,但是它在计算上代价很高,以致其在训练期间仍然不很实用。