大数据,机器学习,人工智能深度学习-推荐系统-CV-NLP机器学习和人工智能入门

“驯估学”(上)

2019-07-17  本文已影响18人  WilliamY

原题:Tips for Training Likelihood Models(似然模型的训练建议)
作者:Eric Jang
译者:尹肖贻

写在前面

本文要推荐给读者一点实践建议,关于训练直接优化似然函数的生成式模型——例如自回归模型标准化流模型——方面的。深度生成式建模是一个快速发展的领域,【受到不同领域和水平研究者的关注,】所以我希望本文能使更多的新手获益。【鉴于此,】我将介绍在不同的研究论文中一致使用的基本评估术语,特别是在建模更复杂的分布、如RGB图像时【也都通用的术语】。

本教程讨论了数学形式最简单的生成式模型(易处理的密度估计模型),对建模图像的像素的场景,提供了设计要素。读完本文后,你将了解定量地比较似然模型的方法。这些方法甚至在网络架构和像素建模方式上有所差异的模型之间,仍然成立。

散度最小化:生成式建模的一般框架

生成式建模的目标(实际上包括所有统计机器学习建模)是从一些(可能是条件的)概率分布中采集数据P(X)并学习一个模型p_\theta(X)去近似P(X)。建模允许我们在给定的原始数据向外推断的洞察力。以下是可以使用生成式模型执行的一些操作:

建模条件概率分布具有更广泛的落地应用,因为我们可以将分类和回归问题转写为学习生成式模型的问题:

为了使p_\theta(X)匹配P(X),我们首先要提出两种分布之间距离的概念。 在统计学中,较常见的做法是设计一种较弱的“距离”概念,称为散度度量【度量或称“度规”】。与通常的距离度量不同,它是不对称的(D(P,Q)\neq D(Q,P))。 一旦我们在分布之间有形式化的散度度量,我们就可以尝试通过优化来最小化这个量。
有很多很多散度D(p_\theta||p)的形式化方法,通常合适的方法将被选做生成式建模算法的目标。这里列举了其中少数几种形式:

与【一般的】度量不同,两个分布之间的散度不需要对称。在无限数据和算力下,所有这些散度都得出相同的答案,即D(p_\theta || p) = 0当且仅当p_\theta \equiv p。请注意,这些散度的形式与主观感知评估指标(如Inception Score或Fréchet Inception距离)不同,后者无法保证在无限数据时收敛到相同的结果(但如果你关心图像的视觉质量,这些指标是有用的)。

然而,大多数实验拿到的数据和拥有的算力是有限的,因此度量的选择很重要。实际上,不同的度量将会使生成分布p_\theta(X)学到不同的定性性质。例如,如果目标密度p是多模态的,而模型分布q的表达能力不够,最小化前向KL(p||q)将收敛到模式覆盖。与此相对,最小化反向KL(q||p)可能导致模式丢失。请参阅此文,了解原因。

我们应当在最小化散度的框架下,思考生成式建模的目标,以恰当的原则选择散度的形式,以将欲得的性质从生成式模型映射到散度上去。它可以是隐式密度模型(GAN),特点是采样容易、但得不到对数概率形式;或者是基于能量的模型,特点是不能采样、但(非标准化的)对数概率形式容易处理。

这篇博文将使用最直接的指标:Kullback-Leibler散度(KLD),涵盖训练和评估的模型。这些模型包括自回归模型、标准化流和变分自动编码器(类似的模型)。优化KLD等价于优化对数概率,我们将在下一节中推导出二者等价的原因。

平均对数概率和压缩

我们想要建模P(X),通过随机过程,从这一概率分布生成数据。 我们通常假设,从足够大的数据集中采样,与从真实数据的生成过程中采样的情况,大致相同。【大数定理】 例如,从MNIST数据集中采样图像,等同于从创建MNIST数据集的真实手写过程中绘制样本。

给定一组测试图像x^1,...,x^N,独立同分布于p(x),其似然模型p_\theta的参数为\theta,我们希望最大化下面这个量:
\mathcal{L}(\theta) = \frac{1}{N}\sum_{i=1}^{N}\log p_\theta(x^i) \approx \int p(x) \log p_\theta(x) dx = -H(p, p_\theta)
【由此可见,】平均对数概率值,和负交叉熵蒙特卡洛估计是相等的,交叉熵发生在真实似然函数p和模型似然函数p_\theta之间。【由于】我们无法在实际操作中枚举所有的x^i【,所以使用了估计值】。用大白话说就是,我们把“最大化数据似然”,翻译为“最小化真实分布与模型分布之间的负交叉熵”。

多做一点代数,负交叉熵可以被KL散度(相对熵)和p的绝对熵重写:
\mathcal{L}(\theta) \approx \int p(x) \log p_\theta(x) dx = \int p(x) \log \frac{p_\theta(x)}{p(x)} dx + \int p(x) \log p(x)dx = -KL(p, p_\theta) - H(p)
香农源编码定理(1948)告诉我们,信息熵H(p)是传递p(x)的样本时、构造的无损编码之中、平均编码长度的下限。 更大的熵意味着更多的“随机性”,将是无法被【H(p)或更短长度的编码】无损压缩。 需要留意,当我们使用自然对数log_e计算熵时,将以“自然信息单位”或nats做单位【“natural”的前三个字母】;以log_2计算熵时,单位是我们熟悉的“bits”。H(p)这一项独立于\theta,最大化\mathcal{L}(\theta)实际上只相当于最小化KL(p,p_\theta)。这就是为什么最大似然等价于最小化KL散度的原因。

KL散度KL(p,p_\theta)或相对熵,等于编码方案p_\theta(x)为基准、编码p(x)数据所需消耗的“额外nats”数量的信息。 因此,负交叉熵的蒙特卡罗估计\mathcal{L}(\theta)也用nats作单位。

将两者【相对熵和绝对熵】放在一起【考虑】,交叉熵只不过是基于传输p_\theta的码本【即编码规则】、编码p的样本所需的平均编码长度。 我们首先必须支付至少H(p)nats这么多的“基本费”(因为它是最短编码),而后再支付额外的“罚款”KL(p, p_\theta) nats用来抵付从pp_\theta的任何偏差。

我们可以用一种非常可解释的方式比较两种不同模型的交叉熵:假设模型\theta_1的平均似然损失\mathcal{L}({\theta_1})、模型\theta_2的平均似然损失\mathcal{L}({\theta_2})。二者相减\mathcal{L}({\theta_1})-\mathcal{L}({\theta_2})导致熵项H(p)抵消,只剩下KL(p,p_{\theta_2}) - KL(p,p_{\theta_1})【译者按:原文写反了】。 此数量表示“从编码p_{\theta_1}切换到编码p_{\theta_2}时需要支付的惩罚”。
\mathcal{L}({\theta_1})-\mathcal{L}({\theta_2})=-KL(p, p_{\theta_1}) - H(p)-(-KL(p, p_{\theta_2}) - H(p))=KL(p,p_{\theta_2}) - KL(p,p_{\theta_1})
表达力、优化和泛化是优秀生成式模型的三个重要特性。似然值提供了可解释的度量,用于调试模型的这些特性。如果生成式模型不能记忆训练集,则会表现出优化(卡住)或表现力(欠拟合)方面的困难。

Cifar10图像数据集有50000个训练样本,因此记忆全部数据的模型将为训练数据集中的每个图像分配恰好1/50000的概率值,从而实现负信息熵log_2(\frac{1}{50000}),或每个图像15.6bits(这与图像有多少像素无关!)。当然,我们通常不希望我们的生成式模型过度拟合这种极端情况,但在调试模型时,将它作为上限,检查模型的健全性是有用的。

比较训练集和测试集之间的似然差异,可以告诉我们网络是在记忆训练集,还是具备到了推广到测试集的能力;或者可以用以检查模型是否存在缺漏,模型是否捕获到语义上有意义【但未必显式地体现在训练集中】的模式。

对图像建模感兴趣的读者,敬请参看“驯估学”(下)。

上一篇下一篇

猜你喜欢

热点阅读