“驯估学”(上)
原题:Tips for Training Likelihood Models(似然模型的训练建议)
作者:Eric Jang
译者:尹肖贻
写在前面
本文要推荐给读者一点实践建议,关于训练直接优化似然函数的生成式模型——例如自回归模型和标准化流模型——方面的。深度生成式建模是一个快速发展的领域,【受到不同领域和水平研究者的关注,】所以我希望本文能使更多的新手获益。【鉴于此,】我将介绍在不同的研究论文中一致使用的基本评估术语,特别是在建模更复杂的分布、如RGB图像时【也都通用的术语】。
本教程讨论了数学形式最简单的生成式模型(易处理的密度估计模型),对建模图像的像素的场景,提供了设计要素。读完本文后,你将了解定量地比较似然模型的方法。这些方法甚至在网络架构和像素建模方式上有所差异的模型之间,仍然成立。
散度最小化:生成式建模的一般框架
生成式建模的目标(实际上包括所有统计机器学习建模)是从一些(可能是条件的)概率分布中采集数据并学习一个模型去近似。建模允许我们在给定的原始数据向外推断的洞察力。以下是可以使用生成式模型执行的一些操作:
- 从中采样数据;
- 学习一个隐变量的层级模型,用以解释的现象;
- 干预数据生成的过程,产生新的分布。注意,只有在控制变量后,变量之间真正存在因果关系的情况下,干预才会成功;
- 对于某新样本点,查询其是否服从我们的模型,以检测异常情况。
建模条件概率分布具有更广泛的落地应用,因为我们可以将分类和回归问题转写为学习生成式模型的问题:
- 机器翻译
- 机器起题名
- 最小化回归的目标损失 ,在数学上等价于最大化对角线协方差的高斯分布的log似然估计:
为了使匹配,我们首先要提出两种分布之间距离的概念。 在统计学中,较常见的做法是设计一种较弱的“距离”概念,称为散度度量【度量或称“度规”】。与通常的距离度量不同,它是不对称的()。 一旦我们在分布之间有形式化的散度度量,我们就可以尝试通过优化来最小化这个量。
有很多很多散度的形式化方法,通常合适的方法将被选做生成式建模算法的目标。这里列举了其中少数几种形式:
- Maximum Mean Discrepancy (MMD)
- Jensen-Shannon Divergence (JSD)
- Kullback-Leibler divergence (KLD)
- Reverse KLD
- Kernelized Stein discrepancy (KSD)
- Bregman Divergence
- Hyvärinen score
- Chi-Squared Divergence
- Alpha Divergence
与【一般的】度量不同,两个分布之间的散度不需要对称。在无限数据和算力下,所有这些散度都得出相同的答案,即当且仅当。请注意,这些散度的形式与主观感知评估指标(如Inception Score或Fréchet Inception距离)不同,后者无法保证在无限数据时收敛到相同的结果(但如果你关心图像的视觉质量,这些指标是有用的)。
然而,大多数实验拿到的数据和拥有的算力是有限的,因此度量的选择很重要。实际上,不同的度量将会使生成分布学到不同的定性性质。例如,如果目标密度是多模态的,而模型分布的表达能力不够,最小化前向将收敛到模式覆盖。与此相对,最小化反向可能导致模式丢失。请参阅此文,了解原因。
我们应当在最小化散度的框架下,思考生成式建模的目标,以恰当的原则选择散度的形式,以将欲得的性质从生成式模型映射到散度上去。它可以是隐式密度模型(GAN),特点是采样容易、但得不到对数概率形式;或者是基于能量的模型,特点是不能采样、但(非标准化的)对数概率形式容易处理。
这篇博文将使用最直接的指标:Kullback-Leibler散度(KLD),涵盖训练和评估的模型。这些模型包括自回归模型、标准化流和变分自动编码器(类似的模型)。优化KLD等价于优化对数概率,我们将在下一节中推导出二者等价的原因。
平均对数概率和压缩
我们想要建模,通过随机过程,从这一概率分布生成数据。 我们通常假设,从足够大的数据集中采样,与从真实数据的生成过程中采样的情况,大致相同。【大数定理】 例如,从MNIST数据集中采样图像,等同于从创建MNIST数据集的真实手写过程中绘制样本。
给定一组测试图像,独立同分布于,其似然模型的参数为,我们希望最大化下面这个量:
【由此可见,】平均对数概率值,和负交叉熵的蒙特卡洛估计是相等的,交叉熵发生在真实似然函数和模型似然函数之间。【由于】我们无法在实际操作中枚举所有的【,所以使用了估计值】。用大白话说就是,我们把“最大化数据似然”,翻译为“最小化真实分布与模型分布之间的负交叉熵”。
多做一点代数,负交叉熵可以被KL散度(相对熵)和的绝对熵重写:
香农源编码定理(1948)告诉我们,信息熵是传递的样本时、构造的无损编码之中、平均编码长度的下限。 更大的熵意味着更多的“随机性”,将是无法被【或更短长度的编码】无损压缩。 需要留意,当我们使用自然对数计算熵时,将以“自然信息单位”或nats做单位【“natural”的前三个字母】;以计算熵时,单位是我们熟悉的“bits”。这一项独立于,最大化实际上只相当于最小化。这就是为什么最大似然等价于最小化KL散度的原因。
KL散度或相对熵,等于编码方案为基准、编码数据所需消耗的“额外nats”数量的信息。 因此,负交叉熵的蒙特卡罗估计也用nats作单位。
将两者【相对熵和绝对熵】放在一起【考虑】,交叉熵只不过是基于传输的码本【即编码规则】、编码的样本所需的平均编码长度。 我们首先必须支付至少nats这么多的“基本费”(因为它是最短编码),而后再支付额外的“罚款” nats用来抵付从到的任何偏差。
我们可以用一种非常可解释的方式比较两种不同模型的交叉熵:假设模型的平均似然损失、模型的平均似然损失。二者相减导致熵项抵消,只剩下【译者按:原文写反了】。 此数量表示“从编码切换到编码时需要支付的惩罚”。
表达力、优化和泛化是优秀生成式模型的三个重要特性。似然值提供了可解释的度量,用于调试模型的这些特性。如果生成式模型不能记忆训练集,则会表现出优化(卡住)或表现力(欠拟合)方面的困难。
Cifar10图像数据集有50000个训练样本,因此记忆全部数据的模型将为训练数据集中的每个图像分配恰好1/50000的概率值,从而实现负信息熵,或每个图像15.6bits(这与图像有多少像素无关!)。当然,我们通常不希望我们的生成式模型过度拟合这种极端情况,但在调试模型时,将它作为上限,检查模型的健全性是有用的。
比较训练集和测试集之间的似然差异,可以告诉我们网络是在记忆训练集,还是具备到了推广到测试集的能力;或者可以用以检查模型是否存在缺漏,模型是否捕获到语义上有意义【但未必显式地体现在训练集中】的模式。
对图像建模感兴趣的读者,敬请参看“驯估学”(下)。