生成式模型入门教程(生成式模型入门)

机器之心编译

参与:李志伟、Geek AI

生成模型不止有 GAN,本教程讨论了数学上最直接的生成模型(易处理的密度估计模型)。读罢本文,你将了解如何定量地比较似然模型。

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

生成模型(其实都是统计机器学习模型)旨在从一些(可能是条件的)概率分布 p(x) 中取样本数据,并学习对 p(x) 进行近似的模型 pθ(x)。建模过程使我们可以基于给定的原始数据外推观察到的信息。以下是可以通过生成模型实现的各种各样的操作:

  • 从 p(x) 中抽取新样本
  • 学习解释观测值 x 的分层潜变量 z
  • 你可以对潜变量进行干预,从而检查干预分布 p_θ(x|do(z))。请注意,只有当你的条件分布对正确的因果关系 z→x 建模,并且我们假设可忽略性(ignorability)成立,这样做才有效。
  • 在我们的模型分布下查询新数据点 x' 的似然,从而检测异常

由于我们可以将分类和回归问题解释为学习生成模型的过程,对条件分布进行建模具有更广泛的直接应用:

  • 机器翻译 p(句子的英语翻译 | 法语句子)
  • 字幕 p(字幕 | 图像)
  • 像最小化均方误差 min{1/2(x−μ)^2} 这样的回归目标函数在数学上等价于具有对角协方差的高斯分布的最大对数似然估计:max{−1/2(x−μ)^2}

为了使 pθ(x) 接近 p(x),我们首先必须提出两个分布之间距离的概念。在统计学中,更常见的是设计一种较弱的「距离」概念,我们将其称为「散度」。与几何距离不同,散度并不是对称的 (D(p,q)≠D(q,p))。如果我们可以定义概率分布之间形式化的散度,我们就可以尝试通过优化来最小化它。

我们可以定义各种各样的散度 D(p_θ||p),并且通常选用适应于生成模型算法的散度。在这里,我们只列出其中很少的一部分:

  • 最大平均差异(MMD)
  • Jensen-Shannon 散度(JSD)
  • Kullback-Leibler 散度(KLD)
  • 反向 KLD
  • KernelizedStein 散度(KSD)
  • Bregman 散度
  • Hyvärinen 得分
  • Chi-Squared 散度
  • Alpha 散度

生成式模型入门教程(生成式模型入门)(1)

由于我们实际上无法对所有的 x_i 进行枚举,平均对数概率是对真实似然 p 和模型似然 p_θ 之间的负交叉熵的蒙特卡罗估计。简而言之,这意味着「最大化数据的平均似然」,或者相当于「最小化真实分布和模型分布之间的负交叉熵」。

通过一些代数运算,负交叉熵可以用 KL 散度(相对熵)和 p 的绝对熵重写:

香农(Shannon)的信源编码定理(1948)告诉我们,熵 H(p) 是你可以构造的任何编码的平均编码长度的下界,以无损地传递来自 p(x) 的样本。更大的熵意味着更大的「随机性」,这是无法压缩的。特别是,当我们使用自然对数 log_e 计算熵时,它采用「自然信息单位」(或简称 nat)。用 log_2 计算熵时,结果的单位是我们熟悉的「位」。H(p) 项与 θ 无关,因此最大化 L(θ) 实际上恰好等价于最小化 KL(p,p_θ)。这就是最大似然也被称为最小化 KL 散度的原因。

KL 散度 KL(p,p_θ) 或相对熵,是对来自 p(x) 的数据编码所需的「额外的 nat」的数量,该过程使用基于 p_θ(x) 的熵编码方案。因此,负交叉熵的蒙特卡罗估计 L(θ) 也用 nat 表示。

将二者放在一起,交叉熵只不过是使用基于 p_θ 的码本,传送来自 p 的样本所需的平均编码长度。无论(最优编码)如何,我们都会支付 H(p) nat 的「基本费用」,我们还会为 p_θ 与 p 的任何偏差支付额外的「精细的」KL(p,p_θ) nat。

我们可以用一种可解释性很强的方式比较两个不同模型的交叉熵:假设模型 θ_1 具有平均似然 L(θ_1),模型 θ_2 具有平均似然 L(θ_2)。减去 L(θ1)-L(θ2) 使得熵项 H(p) 抵消,最终得到 KL(p,p_(θ_1))-KL(p,p_(θ_2))。该数是「从 p_(θ_1) 转换到编码 p_(θ_2) 时需要支付的减少的惩罚值」。

表达能力,优化和泛化能力是一个良好的生成模型的三个重要特性,而似然则提供了可解释的度量,用来在我们的模型中调试这些属性。如果生成模型不能记忆训练集,则表明在优化过程(会卡住)或表达能力(欠拟合)的方面存在困难。

Cifar10 图像数据集包含 50,000 个训练样本,因此我们知道能完美地记忆数据的模型将为训练数据集中的每个图像分配恰好 1/50000 的概率质量,从而得到 log_2(1/50000) 的负交叉熵,或者说为每个图像分配 15.6 位(这与每个图像有多少像素无关!)。当然,我们通常不希望我们的生成模型过拟合这种极端情况,但在调试生成模型时,记住这个上限,作为一种检合理性检查是很有用的。

比较训练和测试似然之间的差异可以告诉我们,网络是在生硬地记忆训练集还是学习泛化到测试集的东西,或者在模型无法捕获的数据上是否存在语义上有意义的模式。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页