海阔天空蓝

一个玩过n种运动的语音合成算法攻城狮

0%

Auto-Encoding Variational Bayes and Tutorials

Auto-Encoding Variational Bayes 自编码变分贝叶斯 https://arxiv.org/pdf/1312.6114v5.pdf --- Diederik P. Kingma, Max Welling (Machine Learning Group, Universiteit van Amsterdam) May 2014

感想

看了个Abstract就隐约感觉自己看不懂文章正文了。。。果断跳到tutorials(tutorials在下面)。看完tutorials后又回来想看看原文,看了四个章节,发现着实看不懂。。。没办法给分了。。

Abstract

在存在具有难以处理的后验分布的连续潜在变量和大型数据集的情况下,我们如何在有向概率模型中执行有效的推理和学习?我们引入了一种可扩展到大型数据集的随机变分推理和学习算法,并且在一些温和的可微性条件下,甚至可以在棘手的情况下工作。我们的贡献是双重的。 首先,我们展示了变分下界的重新参数化产生了下界估计量,可以使用标准随机梯度方法直接优化该估计量。 其次,我们证明对于 i.i.d. 对于每个数据点具有连续潜在变量的数据集,通过使用建议的下限估计器将近似推理模型(也称为识别模型)拟合到棘手的后验模型,可以使后验推理特别有效。 理论优势体现在实验结果上。

Introduction

我们如何使用定向概率模型执行有效的近似推理和学习,这些模型的连续潜在变量和/或参数具有难以处理的后验分布? 变分贝叶斯 (VB) 方法涉及对难以处理的后验的近似的优化。 不幸的是,常见的平均场方法需要期望 w.r.t. 的解析解。 近似后验,这在一般情况下也是难以处理的。 我们展示了变分下界的重新参数化如何产生下界的简单可微无偏估计量; 这种 SGVB(随机梯度变分贝叶斯)估计器可用于几乎任何具有连续潜在变量和/或参数的模型中的有效近似后验推断,并且可以直接使用标准随机梯度上升技术进行优化。

对于 i.i.d. 数据集和每个数据点的连续潜在变量,我们提出了自动编码 VB (AEVB) 算法。 在 AEVB 算法中,我们通过使用 SGVB 估计器优化识别模型使推理和学习特别高效,该模型允许我们使用简单的祖先采样执行非常有效的近似后验推理,这反过来又使我们能够有效地学习模型参数,而无需 每个数据点需要昂贵的迭代推理方案(例如 MCMC)。 学习到的近似后验推理模型还可用于许多任务,例如识别、去噪、表示和可视化目的。 当神经网络用于识别模型时,我们就得到了变分自动编码器。

方法

本节中的策略可用于为具有连续潜在变量的各种有向图模型推导出下界估计量(随机目标函数)。 我们将把自己限制在我们有一个 i.i.d 的常见情况下。 每个数据点具有潜在变量的数据集,以及我们喜欢对(全局)参数执行最大似然(ML)或最大后验(MAP)推断,以及对潜在变量进行变分推断。例如,可以直接将此场景扩展到我们还对全局参数执行变分推理的情况; 该算法放在附录中,但这种情况下的实验留待未来工作。 请注意,我们的方法可以应用于在线的非平稳设置,例如 流数据,但为了简单起见,我们在这里假设一个固定的数据集。

2.1 问题情景

让我们考虑一些由 \(N\)个 i.i.d. 组成的数据集 \(X = \{x(i)\}^N_{i=1}\)。 一些连续或离散变量 \(x\) 的样本。 我们假设数据是由一些随机过程生成的,涉及一个未观察到的连续随机变量 \(z\)。 该过程包括两个步骤:(1)从一些先验分布 \(p_{θ∗}(z)\) 生成一个值 \(z(i)\); (2) 值 \(x^{(i)}\) 是从一些条件分布 \(p_{θ∗} (x|z)\) 生成的。 我们假设先验 \(p_{θ∗} (z)\) 和似然 \(p_{θ∗} (x|z)\) 来自分布 \(p_{θ} (z)\)\(p_θ (x|z)\) 的参数族,并且它们的 PDF 几乎在任何地方都是可微的 w.r.t. \(θ\)\(z\)。 不幸的是,这个过程中有很多是隐藏在我们看来的:真实参数 \(θ∗\) 以及潜在变量 \(z^{(i)}\) 的值对我们来说是未知的。

非常重要的是,我们没有对边际或后验概率做出常见的简化假设。 相反,我们在这里对一种通用算法感兴趣,该算法甚至在以下情况下也能有效工作:

  1. 难处理性:边际似然 \(p_θ(x) = 􏰇\int p_θ(z)p_θ(x|z)dz\) 的积分是难处理的(因此我们无法评估或区分边际似然)的情况,其中真正的后验 密度 \(p_θ(z|x) = p_θ(x|z)p_θ(z)/p_θ(x)\) 是难以处理的(因此不能使用 EM 算法),以及任何合理的平均场 VB 算法所需的积分 也难治。 这些难以处理的问题很常见,出现在中等复杂的似然函数 \(p_θ(x|z)\) 的情况下,例如 具有非线性隐藏层的神经网络。
  2. 大数据集:我们有太多的数据,批量优化成本太高; 我们希望使用小批量甚至单个数据点进行参数更新。 基于采样的解决方案,例如 Monte Carlo EM 通常会太慢,因为它涉及每个数据点的典型昂贵的采样循环。

我们对上述场景中的三个相关问题感兴趣并提出了解决方案:

  1. 参数 \(θ\) 的有效近似 ML 或 MAP 估计。 参数本身可能很有趣,例如 如果我们正在分析一些自然过程。 它们还允许我们模拟隐藏的随机过程并生成类似于真实数据的人工数据。
  2. 给定参数 \(θ\) 的观测值 \(x\) 的潜在变量 \(z\) 的有效近似后验推断。 这对于编码或数据表示任务很有用。
  3. 变量\(x\)的有效近似边际推断。 这使我们能够执行需要先验于 \(x\) 的各种推理任务。 计算机视觉中的常见应用包括图像去噪、修复和超分辨率。

为了解决上述问题,我们引入一个识别模型\(q_{\phi}(z|x)\):对难处理的真实后验\(p_θ(z|x)\)的近似。 请注意,与平均场变分推理中的近似后验相反,它不一定是阶乘的,并且它的参数 \(\phi\) 不是从某些封闭形式的期望中计算出来的。 相反,我们将介绍一种学习识别模型参数 \(\phi\) 和生成模型参数 \(θ\) 的方法。

从编码理论的角度来看,未观察到的变量 \(z\) 具有作为潜在表示或代码的解释。 因此,在本文中,我们还将识别模型 \(q_{\phi}(z|x)\) 称为概率编码器,因为给定一个数据点 \(x\),它会在代码 \(z\) 的可能值上产生分布(例如高斯分布),数据点 \(x\) 来自该值 本来可以生成的。 类似地,我们将 \(p_θ(x|z)\) 称为概率解码器,因为给定一个代码 \(z\),它会在 \(x\) 的可能对应值上产生分布。

2.2 变分边界

边际似然由单个数据点的边际似然总和 \(log p_θ(x^{(1)}, · · · , x^{(N)}) = 􏰍\sum^N_{i=1} log p_θ(x^{(i)})\) 组成,每个都可以是 改写为: \[ log p_θ(x^{(i)}) = D_{KL}(q_{\phi}(z|x^{(i)})||p_θ(z|x^{(i)})) + \mathcal{L}(θ, \phi; x^{(i)}) \] 第一个 RHS 项是近似值与真实后验值的 KL 散度。 由于这个 KL 散度是非负的,第二个 RHS 项 \(\mathcal{L}(θ, \phi; x^{(i)})\) 被称为数据点 i 的边际似然的(变分)下界,可以写成: \[ log p_θ(x^{(i)}) ≥ \mathcal{L}(θ, \phi; x^{(i)}) = E_{q_{\phi}(z|x)} [− log q_{\phi}(z|x) + log p_θ(x, z)] \] 也可以写成: \[ \mathcal{L}(θ,\phi;x^{(i)} )=−D_{KL}(q_{\phi}(z|x^{(i)})||p_θ(z))+E_{q_{\phi}(z|x^{(i)})} [logp_θ(x^{(i)} |z)] \] 我们想要区分和优化下界 \(L(θ,\phi;x^{(i)})\) w.r.t. 变分参数 \(\phi\) 和生成参数 \(θ\)。 然而,下界的梯度 w.r.t. \(\phi\) 有点问题。 这类问题通常的 (na ̈ıve) Monte Carlo 梯度估计量是: \(∇_{\phi}E_{q_{\phi}(z)} [f(z)] = E_{q_{\phi} (z)} 􏰋f(z)∇_{q_{\phi} (z)} log q_{\phi}(z) ≃ \frac{1} {􏰍L} \sum^L_{l=1} f(z)∇_{q_{\phi}(z^{(l)})} log q_{\phi}(z^{(l)})\) 其中 $ z^{(l)} ∼ q_{}(z|x^{(i)})$。 这个梯度估计器表现出非常高的方差(参见例如 [BJP12]),对于我们的目的来说是不切实际的。

2.3 SGVB 估计器和 AEVB 算法

在本节中,我们将介绍一个实际估计器的下界及其w.r.t参数的导数。 我们假设近似后验形式为 \(q_{\phi}(z|x)\),但请注意,该技术也适用于 \(q_{\phi}(z)\) 的情况,即我们不以 \(x\) 为条件的情况。 用于推断参数后验的全变分贝叶斯方法在附录中给出。

在 2.4 节概述的某些温和条件下,对于选定的近似后验 \(q_{\phi}(z|x)\),我们可以使用(辅助)噪声变量\(ε\)的可微变换 \(g_{\phi} (ε, x)\) 重新参数化随机变量 \(􏰐\tilde z ∼ q_{\phi} (z|x)\)\[ 􏰐z=g_{\phi}(ε,x), ε∼p(ε) \]

有关选择此类适当分布 \(p(ε)\) 和函数 \(g_{\phi}(ε,x)\) 的一般策略,请参见第 2.4 节。 我们现在可以对某函数 \(f(z)\) w.r.t. $q_{}(z|x) $的期望形成蒙特卡罗估计。 如下: \[ E_{q_{\phi}(z|x^{(i)})} [f(z)] = E_{p(ε)} [f(g_{\phi}(ε, x^{(i)}))] ≃ \frac{1}{L} \sum^L_{l=1} f(g_{\phi}(\epsilon^{(l)}, x^{(i)})), ε^{(l)} ∼ p(ε) \]

我们将这个技巧应用到变分下界,公式(2),可以生成通用“随机梯度变分贝叶斯 (SGVB) 估计器” $ L^A(θ, ; x^{(i)}) ≃ (θ, ; x^{(i)}):$ \[ \tilde L^A(θ, \phi; x^{(i)}) =\frac{1}{L} \sum^L_{l=1}log p_θ(x^{(i)}, z^{(i,l)}) − log q_{\phi}(z^{(i,l)}|x^{(i)}) \] 其中 \(z^{(i,l)} = g_{\phi}(ε^{(i,l)}, x^{(i)}), ε^{(l)} ∼ p(ε)\)

通常,方程(3)的 KL 散度 \(D_{KL}(q_{\phi}(z|x^{(i)})||p_θ(z))\)可以通过解析积分(见附录 B),使得只有预期的重构误差 \(E_{q_{\phi}(z|x^{(i)}) }􏰋logp_θ(x^{(i)}|z)\) 需要抽样估计。 KL 散度项可以被解释为正则化 \(\phi\),鼓励近似后验接近先验 \(p_θ(z)\)。 这产生了第二个版本SGVB 估计量 \(\tilde L^B(θ,\phi;x^{(i)}) ≃ L(θ,\phi;x^{(i)})\),对应于方程 (3),它通常比通用估计量的方差更小: \[ \tilde L^B(θ,\phi;x^{(i)}) = - D_{KL}(q_{\phi}(z|x^{(i)})||p_θ(z)) + \frac{1}{L} \sum^L_{l=1}log p_θ(x^{(i)}, z^{(i,l)}) \] 其中,\(z^{(i,l)} = g_{\phi}(ε^{(i,l)}, x^{(i)}), ε^{(l)} ∼ p(ε)\)

给定来自具有 \(N\) 个数据点的数据集 \(X\) 的多个数据点,我们可以构建完整数据集的边际似然下界,基于小批量: \[ L(θ,\phi;X) ≃\tilde L^M(θ,\phi;X^M) = \frac{N}{M}\sum^M_{i=1}\tilde L(θ,\phi;x^{(i)}) \] 其中小批量 \(X^M = \{x^{(i)}\}^M_{i=1}\) 是从具有 \(N\) 个数据点的完整数据集 \(X\) 中随机抽取的 \(M\) 个数据点样本。 在我们的实验中,我们发现只要小批量大小 \(M\) 足够大,每个数据点的样本数\(L\) 可以设置为 1,例如 \(M = 100\)。可以取导数 \(∇_{θ,\phi}L􏰐(θ;X^M)\),得到的梯度可以与随机优化方法(例如 SGD 或 Adagrad)结合使用。 有关计算随机梯度的基本方法,请参阅算法 1。

当查看 以上公式给出的目标函数时,与自动编码器的联系变得清晰。公式(7) 第一项是(近似后验与先验的 KL 散度)充当正则化器,而第二项是预期的负重建误差。 选择函数 \(g_{\phi}(.)\) 使其将数据点 \(x^{(i)}\) 和随机噪声向量 \(ε^{(l)}\) 映射到来自该数据点的近似后验的样本: \(z^{(i,l)} = g_{\phi}(ε^{(l)}, x^{(i)})\) 其中 \(z^{(i,l)} ∼ q_{\phi}(z|x^{(i)})\)。 随后,样本 \(z^{(i,l)}\) 被输入到函数 \(logp_θ(x^{(i)}|z^{(i,l)})\) 中,它等于给定 \(z^{(i,l)}\)数据点 \(x^{(i)}\) 在生成式模型下的概率密度(或质量)。 该术语是自动编码器术语中的negative reconstruction error。

2.4 重新参数化的技巧

3 例子:VAE

在本节中,我们将给出一个示例,其中我们将神经网络用于概率编码器 \(q_{\phi} (z|x)\)(生成模型 \(p_θ (x, z)\) 的后验的近似值)以及参数 \(\phi\)\(θ\) 与 AEVB 算法联合优化。

让潜在变量的先验是中心各向同性多元高斯 \(p_θ(z) = \mathcal{N}(z;0,I)\)。 请注意,在这种情况下,先验缺少参数。 我们让 \(p_θ(x|z)\) 是一个多元高斯(在实值数据的情况下)或伯努利(在二进制数据的情况下),其分布参数是从 \(z\) 用 MLP(一个全连接的神经网络,具有 单个隐藏层,见附录 C)。 请注意,在这种情况下,真正的后验 \(p_θ(z|x)\) 是难以处理的。 虽然 \(q_{\phi}(z|x)\) 的形式有很多自由度,但我们将假设真实的(但难以处理的)后验呈现为具有近似对角协方差的近似高斯形式。在这种情况下,我们可以让变分近似后验是一个具有对角协方差结构的多元高斯: \[ log q_{\phi}(z|x^{(i)}) = log \mathcal{N} (z; μ^{(i)}, σ^{2(i)}I) \] 其中 近似后验的均值和标准差 \(μ^{(i)}\)\(σ^{(i)}\) 是编码 MLP 的输出,即数据点 \(x^{(i)}\) 和变分参数 \(\phi\) 的非线性函数(参见附录 C)。

如第 2.4 节所述,我们使用 \(z^{(i,l)} = g_{\phi}(x^{(i)}, ε^{(l)}) = μ^{(i)} + σ^{(i)} ⊙ ε^{(l)}\) 其中 \(ε^{(l)} ∼ \mathcal{N} (0, I)\)\(⊙\) 我们表示element-wise product。 在这个模型中,\(p_θ(z)\)(先验)和 q_{}(z|x) 都是高斯分布的; 在这种情况下,我们可以使用 公式(7)的估计量,其中(7)无需估计即可计算和区分 KL 散度(参见附录 B)。 该模型的结果估计量和数据点 \(x^{(i)}\) 为: \[ L(θ,\phi;x^{(i)})≃ 􏰏 \frac{1}{2}\sum^J_{j=1}(1+log((σ^{(i)}_j)^2)−(μ^{(i)}_j)^2 −(σ^{(i)}_j)^2 + \frac{1}{L} \sum^L_{l=1}􏰏logp_θ(x^{(i)}|z^{(i,l)}) \] 其中,\(z^{(i,l)} = μ^{(i)} + σ^{(i)} ⊙ ε^{(l)}, ε^{(l)} ∼ \mathcal{N} (0, I)\)

如上所述和附录 C 中,解码项 \(log p_θ (x^{(i)} |z^{(i,l)} )\) 是伯努利或高斯 MLP,取决于我们建模的数据类型。

VAE Tutorials https://arxiv.org/pdf/1606.05908v2.pdf --- Carl Doersch CMU / UC Berkeley Aug 2016

感想

直到2.1章节,公式(5)以上其实还能够看得懂,再往下的数学推断就有点迷茫,摸不清头脑了,所以这一次先记住公式(5)的内容,下一次继续深入理解吧。文章打分:🌟🌟🌟🌟🌟,果然初创论文以及相关的tutorials才是带来灵感的更多碰撞。 \[ log P(X)- \mathcal{D} [Q(z|X)∥P(z|X)] = E_{z∼Q} [log P(X|z)] − \mathcal{D}[Q(z|X)||P(z)] \]

Abstract

在短短三年内,变分自动编码器 (VAE) 已成为最流行的复杂分布无监督学习方法之一。 VAE 很有吸引力,因为它们建立在标准函数逼近器(神经网络)之上,并且可以使用随机梯度下降进行训练。 VAEs 已经显示出在生成多种复杂数据方面的前景,包括手写数字 [1, 2]、人脸 [1, 3, 4]、门牌号码 [5, 6]、CIFAR 图像 [6]、 场景 [4]、分割 [7] 和从静态图像预测未来 [8]。 本教程介绍了 VAE 背后的直觉,解释了它们背后的数学原理,并描述了一些经验行为。 本文假设读者没有变分贝叶斯方法的先验知识。

1 Introduction

“生成建模” (Generative modelling) 是机器学习的一个广泛领域,它处理分布 P(X) 的模型,在一些潜在的高维空间 \(\mathcal{X}\)中的数据点 \(X\) 上定义。 例如,图像是一种流行的数据,我们可以为其创建生成模型。 每个“数据点”(图像)都有数千或数百万个维度(像素),生成模型的工作是以某种方式捕获像素之间的依赖关系,例如,附近像素具有相似的颜色,并被组织成对象。 “捕获”这些依赖关系的确切含义取决于我们想要对模型做什么。 一种简单的生成模型允许我们以数值方式计算 P(X)。在图像的情况下,看起来像真实图像的 \(X\) 值应该获得高概率,而看起来像随机噪声的图像应该获得低概率。 然而,像这样的模型不一定有用:知道一个图像不太可能并不能帮助我们合成一个可能的图像。

相反,人们通常关心生成更多与数据库中已有的示例类似但又不完全相同的示例。 我们可以从原始图像数据库开始,然后合成新的、看不见的图像。 我们可能会采用植物等 3D 模型的数据库,并生成更多的模型来填充视频游戏中的森林。 我们可以采用手写文本并尝试生成更多手写文本。 像这样的工具实际上可能对图形设计师有用。 我们可以通过说我们根据某个未知分布 $P_{gt}(X) $得到分布的样本 X 来形式化这个设置,我们的目标是学习一个我们可以从中采样的模型 P,使得 P 尽可能类似于 \(P_{gt}\)

训练这种类型的模型一直是机器学习社区中的一个长期问题,而且经典地,大多数方法都具有三个严重缺陷之一。 首先,他们可能需要对数据结构进行强有力的假设。 其次,他们可能会进行严格的近似,从而导致次优模型。 或者第三,他们可能依赖于像马尔可夫链蒙特卡罗这样的计算昂贵的推理程序。 最近,一些工作在通过反向传播将神经网络训练为强大的函数逼近器方面取得了巨大进展。 这些进步催生了有前景的框架,这些框架可以使用基于反向传播的函数逼近器来构建生成模型。

最流行的此类框架之一是变分自动编码器 ,这是本教程的主题。 这个模型的假设很弱,而且通过反向传播训练很快。 VAE 确实进行了近似,但考虑到高容量模型,这种近似引入的误差可以说是很小的。 这些特点使其受欢迎程度迅速上升。

本教程旨在对 VAE 进行非正式介绍,而不是关于它们的正式科学论文。 它针对那些可能对生成模型有用,但在变分贝叶斯方法和 VAE 所基于的“最小描述长度”编码模型方面可能没有很强背景的人。 本教程最初是为加州大学伯克利分校和卡内基梅隆大学的计算机视觉阅读小组提供的演示文稿,因此偏向于视觉受众。

1.1 预备知识:潜在变量模型

在训练生成模型时,维度之间的依赖关系越复杂,模型训练就越困难。以生成手写字符图像的问题为例。为简单起见,我们只关心数字 0-9 的建模。如果字符的左半部分包含 5 的左半部分,则右半部分不能包含 0 的左半部分,否则该字符将非常明显地不像任何真正的数字。直观地说,如果模型在为任何特定像素分配值之前首先决定要生成哪个字符,这会有所帮助。这种决策正式称为潜在变量。也就是说,在我们的模型绘制任何东西之前,它首先从集合 [0, ..., 9] 中随机采样一个数字值 z,然后确保所有笔画都匹配该字符。\(z\) 被称为“潜在”,因为仅给定模型生成的字符,我们不一定知道潜在变量的哪些设置生成了字符。我们需要使用诸如计算机视觉之类的东西来推断它。

在我们可以说我们的模型代表我们的数据集之前,我们需要确保对于数据集中的每个数据点 \(X\),都有一个(或多个)潜在变量设置,这会导致模型生成与 \(X\) 非常相似的东西 . 正式地说,假设我们在高维空间 \(\mathcal{Z}\) 中有一个潜在变量 \(z\) 的向量,我们可以根据在 \(\mathcal{Z}\) 上定义的一些概率密度函数 (PDF) \(P(z)\) 轻松地对其进行采样。

然后,假设我们有一系列确定性函数 \(f (z; θ)\),由向量\(\theta\)在空间\(\mathcal{\Theta}\)参数化,其中 \(f :\mathcal{Z}×\mathcal{\Theta}→\mathcal{X}\)\(f\) 是确定性的,但如果 \(z\) 是随机的且 \(θ\) 是固定的,则 \(f (z; θ)\) 是空间 X 中的随机变量。 我们希望优化 \(θ\),以便我们可以从 \(P(z)\) 中采样 z,并且很有可能,\(f (z; θ)\) 将类似于我们数据集中的 \(X\)

为了使这个概念在数学上精确,我们的目标是在整个生成过程中最大化训练集中每个 \(X\) 的概率,根据: \[ P(X) = \int P(X|z; θ)P(z)dz. \] 在这里,\(f (z; θ)\) 已被分布 \(P(X|z; θ)\) 取代,这使我们能够通过使用总概率定律(the law of total probability)明确 \(X\)\(z\) 的依赖关系。 这个框架背后的直觉——称为“最大似然”——是如果模型可能产生训练集样本,那么它也可能产生相似的样本,而不太可能产生不同的样本。 在 VAE 中,此输出分布的选择通常是高斯分布,即 \(P(X|z;θ) = \mathcal{N}(X|f(z;θ),σ^2 ∗ I)\)。也就是说,它的均值 \(f(z;θ)\) 和协方差等于单位矩阵 \(I\) 乘以某个标量 \(σ\)(这是一个超参数)。这种替换对于形式化直觉是必要的,即某些 \(z\) 需要产生仅像 \(X\) 的样本。一般来说,特别是在训练初期,我们的模型不会产生与任何特定 \(X\) 相同的输出。通过高斯分布,我们可以使用梯度下降(或任何其他优化技术)通过使某些\(z\)\(f(z; θ)\) 逼近$ X$来增加 P(X),即在生成模型下逐渐使训练数据更有可能。 如果 \(P(X|z)\) 是 Dirac delta 函数,这将是不可能的,就像我们确定性地使用 \(X = f (z; θ)\) 一样! 请注意,输出分布不需要是高斯分布:例如,如果 \(X\) 是二进制的,那么 $P(X|z) $可能是由 \(f (z; θ)\) 参数化的伯努利。 重要的性质很简单,\(P(X|z)\) 可以计算,并且在 \(θ\) 上是连续的。 从这里开始,我们将从 \(f (z; θ)\) 中省略 \(θ\) 以避免混乱。

2 Variational Autoencoders

VAEs 的数学基础实际上与经典的自编码器关系不大,例如 稀疏自编码器或去噪自编码器。 根据图 1 所示的模型,VAE 近似最大化Equation 1。它们被称为“自动编码器”只是因为从该设置导出的最终训练目标确实具有编码器和解码器,并且类似于传统的自动编码器。 与稀疏自编码器不同,通常没有类似于稀疏惩罚的调整参数。

vae_tutorials_fig1

vae_tutorials_fig1

与稀疏和去噪自编码器不同,我们可以直接从 \(P(X)\) 中采样(无需执行马尔可夫链蒙特卡罗)。要解决方程 1,VAE 必须处理两个问题:如何定义潜在变量 \(z\)(即决定它们代表什么信息),以及如何处理 \(z\) 上的积分。 VAE 对两者都给出了明确的答案。

首先,我们如何选择潜在变量 \(z\) 以捕获潜在信息? 回到我们的数字示例,模型在开始绘制数字之前需要做出的“潜在”决定实际上相当复杂。 它不仅需要选择数字,还需要选择绘制数字的角度、笔画宽度以及抽象的风格属性。 更糟糕的是,这些属性可能是相关的:如果写得更快,可能会产生更多倾斜的数字,这也可能会导致笔画更细。理想情况下,我们希望避免手动决定 \(z\) 的每个维度编码的信息(尽管我们可能希望为某些维度手动指定它)。 我们还希望避免明确描述 \(z\) 维度之间的依赖关系——即潜在结构。 VAE 采取了一种不同寻常的方法来处理这个问题:他们假设 \(z\) 的维度没有简单的解释,而是断言 \(z\) 的样本可以从一个简单的分布中抽取,即 \(\mathcal{N} (0, I)\),其中 \(I\) 是单位矩阵。

vae_tutorials_dist_mapping

vae_tutorials_dist_mapping

关键是要注意,任何 \(d\) 维分布都可以通过取一组正态分布的 \(d\) 变量并通过足够复杂的函数映射它们来生成样本。例如,假设我们想构造一个值位于环上的二维随机变量。如果 \(z\) 是二维且正态分布的,则 \(g(z) = z/10 + z/||z||\) 大致呈环形,如图 2 所示。因此,如果提供强大的函数逼近器,我们可以简单地学习一个函数,该函数将我们独立的、正态分布的 \(z\) 值映射到模型可能需要的任何潜在变量,然后映射那些\(X\) 的潜在变量。事实上,回想一下 \(P(X|z; θ) = \mathcal{N} (X| f (z; θ), σ^2 ∗ I)\)。如果\(f (z; θ)\) 是一个多层神经网络,那么我们可以想象网络使用它的前几层将正态分布的 \(z\) 映射到潜在值(如数字标识、笔画粗细、角度等)完全正确的统计数据。然后它可以使用后面的层将这些潜在值映射到一个完全渲染的数字。一般来说,我们不需要担心确保潜在结构存在。如果这种潜在结构有助于模型准确地再现(即最大化)训练集的可能性,那么网络将在某个层学习该结构。

vae_tutorials_fig3

vae_tutorials_fig3

现在剩下的就是最大化 Equation 1,其中 \(P(z) = \mathcal{N} (z|0, I)\)。 正如机器学习中常见的那样,如果我们可以找到 \(P(X)\) 的可计算公式,并且我们可以采用该公式的梯度,那么我们就可以使用随机梯度上升来优化模型。 实际上,近似计算 \(P(X)\) 在概念上很简单:我们首先对大量 \(z\)\(\{z_1, ..., z_n\}\) 进行采样,然后计算 \(P(X) ≈ \frac{1}{n} ∑_i P(X|z_i)\)。 这里的问题是在高维空间中,在我们准确估计 \(P(X)\) 之前,\(n\) 可能需要非常大。 要了解原因,请考虑我们的手写数字示例。假设我们的数字数据点存储在像素空间中,在 28x28 图像中,如图 3 所示。 由于 \(P(X|z)\) 是各向同性高斯分布 (isotropic Gaussian),因此 \(X\) 的负对数概率是\(f (z)\)\(X\) 之间的欧几里德距离的平方的比例 . 假设图 3(a) 是我们试图为其寻找 \(P(X)\) 的目标 (\(X\))。 产生图 3(b) 所示图像的模型可能是一个糟糕的模型,因为这个数字不像 2。因此,我们应该设置我们的高斯分布的 \(σ\) 超参数,使得这种错误的数字不会 对 \(P(X)\) 做出贡献。 另一方面,产生图 3(c)(与 \(X\) 相同但向下和向右移动半个像素)的模型可能是一个很好的模型。 我们希望这个样本对 \(P(X)\) 有贡献。然而不幸的是,我们不能同时拥有它:\(X\) 和图 3(c) 之间的平方距离是 \(.2693\)(假设像素范围在 0 和 1 之间),但在 \(X\) 和图 3(b) 之间它只是 \(.0387\)。 这里的教训是,为了拒绝像图 3(b) 这样的样本,我们需要将 \(σ\) 设置得非常小,这样模型需要生成比图 3(c) 更像 X 的东西! 即使我们的模型是一个准确的数字生成器,我们也可能需要对数千个数字进行采样,然后才能生成与图 3(a) 中的 2 非常相似的 2。 我们可能会通过使用更好的相似性度量来解决这个问题,但在实践中,这些很难在视觉等复杂领域进行工程设计,而且如果没有指示哪些数据点彼此相似的标签,它们也很难训练。 相反,VAE 会改变采样程序以使其更快,而不会改变相似性度量,解决了这个棘手的问题。

2.1 设定目标函数

在使用采样来计算公式 1 时,我们可以采取什么捷径吗? 实际上,对于大多数 \(z\)\(P(X|z)\) 几乎为零,因此对我们对 \(P(X)\) 的估计几乎没有贡献。 变分自编码器背后的关键思想是尝试对可能产生 X 的 z 值进行采样,并仅从这些值中计算 P(X)。 这意味着我们需要一个新函数 \(Q(z|X)\),它可以取 \(X\) 的值,并为我们提供可能产生 \(X\)\(z\) 值的分布。希望可能在 \(Q\) 下的 \(z\) 值的空间会远小于所有可能在先验 \(P(z)\) 下的 \(z\) 的空间。 例如,这让我们可以相对容易地计算 \(E_{z∼Q}P(X|z)\)。但是,如果 \(z\) 是从PDF \(Q(z)\)的任意分布中采样的,而不是 \(\mathcal{N}(0, I)\),那么这如何帮助我们优化 \(P(X)\)? 我们需要做的第一件事是关联 \(E_{z∼Q}P(X|z)\)\(P(X)\)。 稍后我们将看到 \(Q\) 的来源。

\(E_{z∼Q}P(X|z)\)\(P(X)\)之间的关系是变分贝叶斯方法的基石之一。 我们首先定义 \(P(z|X)\)\(Q(z)\) 之间的 Kullback-Leibler 散度(KL 散度或 \(\mathcal{D}\)),对于一些任意 \(Q\)(可能取决于也可能不取决于 \(X\)): \[ D [Q(z)∥P(z|X)] = E_{z∼Q} [log Q(z) − log P(z|X)] . \] 通过对 \(P(z|X)\) 应用贝叶斯规则\(P(z|X)=\frac{P(X|z)\cdot P(z)}{P(X)}\),我们可以将 \(P(X)\)\(P(X|z)\) 都放入这个方程中: \[ D [Q(z)∥P(z|X)] = E_{z∼Q} [log Q(z) − log P(X|z) − log P(z)] + log P(X). \] 这里,\(log P(X)\) 跳出了期望\(E\),因为它不依赖于 \(z\)。 将两边取反、重新排列,将 \(E_{z∼Q}\) 的部分项总结为另一个 KL 散度项,产生: \[ log P(X)- \mathcal{D} [Q(z)∥P(z|X)] = E_{z∼Q} [log P(X|z)] − \mathcal{D}[Q(z)||P(z)] \] 请注意,\(X\) 是固定的,并且 \(Q\) 可以是任何分布,而不仅仅是将 \(X\) 很好地映射到可以产生 \(X\)\(z\) 的分布。 由于我们对推断 \(P(X)\) 感兴趣,因此构造一个 \(Q\) 确实取决于(does depend on) \(X\),特别是使 \(\mathcal{D} [Q(z)∥P(z|X)]\) 变小的一个是有意义的: \[ log P(X)- \mathcal{D} [Q(z|X)∥P(z|X)] = E_{z∼Q} [log P(X|z)] − \mathcal{D}[Q(z|X)||P(z)] \] 这个方程是变分自编码器的核心,值得花一些时间思考它所说的内容(从历史上看,这个数学公式(尤其是公式 5)早在 VAE 之前就已为人所知。 例如, Helmholtz Machines [16](见公式 5)使用几乎相同的数学,但有一个关键区别。 期望中的积分被 Dayan [16] 的总和 (sum) 所取代。 因为Helmholtz Machines假设潜在变量为离散分布。 这种选择可以避免一些转换使 VAE 中的梯度下降易于处理。) 在以上两个公式中,左边有我们想要最大化的量:\(log P(X)\)(加上一个误差项,这使得 \(Q\) 产生可以重现给定 \(X\)\(z\);如果 \(Q\) 是高容量的,这个项会变小 )。 右侧是我们可以通过随机梯度下降优化 \(Q\) 的正确选择(尽管它可能还不明显)。 请注意,该框架——尤其是等式 5 的右侧——突然采用了一种看起来像自动编码器的形式,因为 \(Q\)\(X\)“编码”为 \(z\),而 \(P\) 正在“解码”它以重建 \(X\)我们' 稍后将更详细地探讨这种联系。

现在详细了解方程 5。从左侧开始,我们最大化 \(log P(X)\),同时最小化 \(\mathcal{D}[Q(z|X)∥P(z|X)]\)\(P(z|X)\) 不是我们可以分析计算的:它描述了 \(z\) 的值,这些值可能会在我们的模型下产生像图 1 中的 \(X\) 这样的样本。 然而,左边的第二项拉动 \(Q( z|x)\) 匹配 \(P(z|X)\)。 假设我们对 \(Q(z|x)\) 使用任意高容量模型,那么 \(Q(z|x)\) 将有望实际匹配 \(P(z|X)\),在这种情况下,这个 KL-散度项将为零,我们将 直接优化 \(log P(X)\)。 作为额外的奖励,我们使棘手的 \(P(z|X)\) 变得易于处理:我们可以只使用 \(Q(z|x)\) 来计算它。

2.2 最优化目标函数

那么我们如何在等式 5 的右侧执行随机梯度下降呢? 首先,我们需要更具体地了解 \(Q(z|X)\) 将采用的形式。 通常的选择是说 \(Q(z|X) = \mathcal{N} (z|μ(X; θ), Σ(X; θ))\),其中 \(μ\)\(Σ\) 是任意确定性函数,其参数 θ 可以从数据中学习 (我们将在后面的方程中省略 θ)。 在实践中,μ 和 Σ 再次通过神经网络实现,并且 \(Σ\) 被约束为对角矩阵。 这种选择的优点是计算性的,因为它们清楚地说明了如何计算右侧。 最后一项——\(D [Q(z|X)∥P(z)]\)——现在是两个多元高斯分布之间的 KL 散度,可以用封闭形式计算为: \[ D[\mathcal{N}(μ_0, Σ_0)∥ \mathcal{N}(μ_1, Σ_1)] = \frac{1}{2} 􏰃(tr(􏰃Σ^{-1}_1Σ_0) 􏰄+(μ_1 −μ_0 )^⊤ Σ^{-1}_1(μ_1−μ_0 )−k+log􏰃(\frac{detΣ_1}{detΣ_0}) 􏰄) \] 其中 \(k\) 是分布的维数。 在我们的例子中,这简化为:

\[ D[\mathcal{N}(μ(X), Σ(X))∥ \mathcal{N} (0, I)] = \frac{1}{2}(tr (Σ(X)) + (μ(X))⊤ (μ(X)) − k − log det (Σ(X)) 􏰄 . \] 公式 5 右侧的第一项有点棘手。 我们可以使用采样来估计 \(E_{z∼Q} [log P(X|z)]\),但是要得到一个好的估计需要通过 \(f\) 传递 \(z\) 的许多样本,这将是昂贵的。 因此,作为随机梯度下降的标准,我们取 \(z\) 的一个样本并将该 \(z\)\(log P(X|z)\) 视为 \(E_{z∼Q} [log P(X|z)]\) 的近似值。 毕竟,我们已经在对从数据集 \(D\) 中采样的不同 \(X\) 值进行随机梯度下降。因此我们想要优化的目标函数整理如下: \[ E_{X∼D} [log P(X) − \mathcal{D} [Q(z|X)∥P(z|X)]] = E_{X∼D} [E_{z∼Q} [log P(X|z)] − \mathcal{D} [Q(z|X)∥P(z)]] . \]

如果我们取这个方程的梯度,梯度符号可以移动到期望中。 因此,我们可以从分布 \(Q(z|X)\) 中采样单个 \(X\) 值和单个 \(z\) 值,并计算梯度: \[ log P(X|z) − \mathcal{D} [Q(z|X)∥P(z)] . \] 然后我们可以在 \(X\)\(z\) 的任意多个样本上平均这个函数的梯度,结果收敛到方程 8 的梯度。

然而,方程 9 存在一个重大问题。 \(E_{z∼Q} [log P(X|z)]\) 不仅取决于 \(P\) 的参数,还取决于 \(Q\) 的参数。 然而,在方程 9 中,这种依赖性有 消失了! 为了使 VAE 工作,必须驱动 \(Q\)\(X\) 生成 \(P\) 可以可靠解码的代码。 从不同的角度来看问题,等式 9 中描述的网络与图 4(左)所示的网络非常相似。 该网络的前向传递工作正常,如果输出对 \(X\)\(z\) 的许多样本进行平均,则会产生正确的预期值。

vae_fig4

vae_fig4

然而,我们需要通过一个从 \(Q(z|X)\) 中采样 \(z\) 的层来反向传播误差,这是一个非连续的操作,没有梯度。 通过反向传播的随机梯度下降可以处理随机输入,但不能处理网络中的随机单元! 这种方法,被称为“重新参数化技巧”,解决方案是将采样移动到输入层。 给定 \(μ(X)\)\(Σ(X)\)——\(Q(z|X)\) 的均值和协方差——我们可以通过第一次采样 \(ε ∼ N (0, I)\)\(\mathcal{N} (μ(X), Σ(X))\) 中采样 ,然后计算 \(z = μ(X) + Σ^{1/2}(X) ∗ ε\)。 因此,我们实际取梯度的方程是: \[ E_{X\sim D}E_{\epsilon \sim \mathcal{N}(0, I)} [log P(X|z = μ(X) + Σ^{1/2}(X) ∗ ε)] − \mathcal{D} [Q(z|X)∥P(z)]􏰊 \] 这在图 4(右)中示意性地显示。 请注意,没有任何期望与依赖于我们模型参数的分布有关,因此我们可以安全地将梯度符号移动到它们中,同时保持相等。 也就是说,给定一个固定的 \(X\)\(ε\),这个函数在 \(P\)\(Q\) 的参数中是确定性和连续的,这意味着反向传播可以计算出一个适用于随机梯度下降的梯度。 值得指出的是,“重新参数化技巧”只有在我们可以通过评估函数 \(h(η, X)\)\(Q(z|X)\) 中采样时才有效,其中 \(η\) 是来自未被学习的分布的噪声。 此外,\(h\) 必须在 \(X\) 中连续,以便我们可以反向传播它。 这意味着 \(Q(z|X)\)(因此 \(P(z)\))不能是离散分布! 如果 \(Q\) 是离散的,那么对于固定的 \(η\),要么 \(h\) 需要忽略 \(X\),要么需要某个点 \(h(η, X)\)\(Q\) 的样本空间中的一个可能值“跳跃”到另一个,即 不连续性。

2.3 测试学习到的模型

vae_fig5

vae_fig5

在测试时,当我们想要生成新样本时,我们只需将 \(z ∼ N (0, I)\) 的值输入到解码器中。 也就是说,我们移除了“编码器”,包括会改变 \(z\) 分布的乘法和加法运算。 这个(非常简单的)测试时间网络如图 5 所示。

假设我们要评估模型下测试示例的概率。 这通常是难以处理的。 但是请注意,\(\mathcal{D} [Q(z|X)∥P(z|X)]\) 是正数,这意味着等式 5 的右侧是 P(X) 的下限。 由于对 z 的期望,这个下界仍然不能完全以封闭形式计算,这需要采样。 然而,从 \(Q\) 中采样 \(z\) 给出了期望的估计量,其收敛速度通常比第 2 节中讨论的从 \(\mathcal{N} (0, I)\) 中采样 \(z\) 快得多。因此,这个下界可以成为获得粗略想法的有用工具,例如我们的模型捕获特定数据点 \(X\) 的效果如何。

2.4 直观理解目标函数

到现在为止,您希望相信 VAE 中的学习是易于处理的,并且它优化了我们整个数据集的 \(log P(X)\) 之类的东西。 然而,我们并没有精确地优化 \(log P(X)\),因此本节旨在更深入地了解目标函数实际在做什么。 我们讨论三个主题。 首先,我们探求通过优化 \(\mathcal{D}[Q(z|X)∥P(z|X)]\),会给 \(log P(X)\)引入多少误差。 其次,我们描述了 VAE 框架——尤其是 r.h.s. 等式 5——在信息论方面,将其与基于最小描述长度的其他方法联系起来。 最后,我们研究了 VAE 是否具有类似于稀疏自编码器中的稀疏惩罚的“正则化参数”。

2.4.1 来自 $ [Q(z|X)∥P(z|X)]$的误差

该模型的易处理性依赖于我们的假设,即 \(Q(z|X)\) 可以建模为具有某均值 \(μ(X)\) 和方差 \(Σ(X)\)的高斯分布。当且仅当 \(\mathcal{D}[Q(z|X)∥P(z|X)]\) 趋近于0时,\(P(X)\) 收敛(在分布中)到真实分布。不幸的是,要确保这种情况发生并不容易。即使我们假设 \(μ(X)\)\(Σ(X)\) 是任意高的容量,对于我们用来定义 \(P\) 的任意 \(f\) 函数,后验 \(P(z|X)\) 不一定是高斯的。对于固定的 \(P\),这可能意味着 \(D[Q(z|X)∥P(z|X)]\) 永远不会变为零。然而,好消息是,给定足够高容量的神经网络,有许多 \(f\) 函数会导致我们的模型生成任何给定的输出分布。这些函数中的任何一个都会同样好地最大化 \(log P(X)\)。因此,我们所需要的只是一个函数 \(f\),它既最大化 \(log P(X)\) 又导致 \(P(z|X)\) 对于所有 \(X\) 都是高斯分布的。如果是这样,$ [Q(z|X)∥P(z|X) ]$ 会将我们的模型拉向分布的参数化。那么,对于我们可能想要近似的所有分布,这样的函数是否存在?我还没有意识到有人总体上证明了这一点,但事实证明,如果 \(σ\) 相对于真实分布的 CDF 的曲率很小(至少在 1D 中),则可以证明这样的函数确实存在。 (证据包含在附录 A)中。 在实践中,这么小的 \(σ\) 可能会给现有的机器学习算法带来问题,因为梯度会变得很糟糕。 然而,令人欣慰的是,至少在这种情况下,VAE 的近似误差为零。 这一事实表明,未来的理论工作可能会向我们展示 VAE 在更实际的设置中具有多少近似误差。 (在我看来,应该可以将附录 A 中的证明技术扩展到多个维度,但这留待以后的工作。)

2.4.2 信息论解释

查看等式 5 右侧的另一个重要方式是信息论,特别是“最小描述长度”原则,它激发了许多 VAE 的前辈,如亥姆霍兹机 [16]、Wake-睡眠算法 [17]、深度信念网 [18] 和玻尔兹曼机 [19]。 - $log P(X) $可以看作是在我们的模型下使用理想编码构造给定 \(X\) 所需的总位数。等式 5 的右侧将此视为构造 \(X\) 的两步过程。我们首先使用一些位来构造 \(z\)。回想一下,KL 散度以位(或更准确地说,nats)为单位。具体来说,\(\mathcal{D}[Q(z|X)||P(z)]\) 是将 \(P(z)\) 中的无信息样本转换为 \(Q(z|X)\) 中的样本所需的预期信息(所谓的KL 散度的“信息增益”解释)。也就是说,当 \(z\) 来自 \(Q(z|X)\) 而不是来自 \(P(z)\) 时,它测量我们获得的关于 \(X\) 的额外信息量(有关更多详细信息,请参阅 [20, 21] 的“bits back”参数) )。在第二步中,\(P(X|z)\) 测量在理想编码下从 \(z\) 重建 \(X\) 所需的信息量。因此,总位数 (− \(log P(X)\)) 是这两个步骤的总和,减去我们为 \(Q\) 作为次优编码 (\(\mathcal{D}[Q(z|X)||P(z) |X)]\))。

2.4.3 VAEs和正则化参数

查看等式 5,将 \(\mathcal{D}[Q(z|X)||P(z)]\) 视为正则化项很有趣,很像稀疏自编码器中的稀疏正则化 [10]。 从这个角度来看,询问变分自编码器是否有任何“正则化参数”是很有趣的。 也就是说,在稀疏自编码器目标中,我们在目标函数中有一个 \(λ\) 正则化参数,如下所示: \[ ∥\phi(ψ(X)) − X∥^2 + λ∥ψ(X)∥_0 \] 其中 \(ψ\)\(\phi\) 分别是编码器和解码器函数,\(∥·∥_0\) 是鼓励编码稀疏的 \(L_0\) 范数。 这个 \(λ\) 必须手动设置。

然而,变分自编码器通常没有这样的正则化参数,这很好,因为程序员需要调整的参数少了一个。 然而,对于某些模型,我们可以让它看起来像这样一个正则化参数存在。 很容易认为这个参数可以来自改变 \(z ∼N(0, I)\) 到类似 \(z′ ∼ \mathcal{N}(0,λ∗I)\) 的东西,但事实证明这不会改变模型。要看到这一点,请注意我们可以将这个常数吸收到 \(P\) 中 和 \(Q\) 将它们写成 \(f'(z') = f(z'/λ), μ'(X) = μ(X) ∗ λ\), 并且 \(Σ'(X) = Σ(X) ∗ λ^2\)。 这将产生一个目标函数,其值(等式 5 的右侧)与我们在 \(z ∼ \mathcal{N} (0, I)\) 中的损失相同。 此外,采样 \(X\) 的模型将是相同的,因为 \(z'/λ ∼ \mathcal{N} (0, I)\)

然而,正则化参数可以来自另一个地方。回想一下,对于我们提供的一些 \(σ\),连续数据的输出分布的一个很好的选择是 \(P(X|z) ∼ \mathcal{N} ( f (z), σ^2 ∗ I)\)。因此,\(log P(X|z) = C − \frac{1}{2} ∥X − f (z)∥^2/σ^2\)(其中 \(C\) 是一个不依赖于 \(f\) 的常数,在优化过程中可以忽略)。当我们编写完整的优化目标时,\(σ\) 出现在等式5的 r.h.s. 的第二项,但不是第一个;从这个意义上说,我们选择的 \(σ\) 表现得像控制两项权重的 \(λ\)。但是请注意,此参数的存在取决于我们对给定 \(z\)\(X\) 分布的选择。如果 \(X\) 是二元的并且我们使用伯努利输出模型,那么这个正则化参数就会消失,唯一的方法就是使用复制 \(X\) 的维度之类的技巧。从信息论的角度来看,这是有道理的:当 \(X\) 是二进制,我们实际上可以计算编码 \(X\) 所需的位数,公式 5 右侧的两项都使用相同的单位来计算这些位数。但是,当 \(X\) 是连续的时,每个样本都包含无限的信息。我们对 \(σ\) 的选择决定了我们期望模型重建 \(X\) 的准确程度,这是必要的,以便信息内容可以变得有限。

3. 条件变分自编码器

让我们回到生成手写数字的运行示例。 假设我们不只是想生成新数字,而是想将数字添加到由一个人编写的现有数字字符串中。 这类似于计算机图形学中一个真正实际的问题,称为填孔(hole filling):给定一个现有图像,其中用户删除了不需要的对象,目标是用看似合理的像素填充孔。这两个问题的一个重要困难是似真输出的空间是多模态的:下一个数字或外推像素有很多可能性。 在这种情况下,标准回归模型将失败,因为训练目标通常会惩罚单个预测与真实情况之间的距离。 面对这样的问题,回归器可以产生的最佳解决方案是介于可能性之间的东西,因为它最小化了预期距离。在数字的情况下,这很可能看起来像一个毫无意义的模糊,它是所有可能的数字和所有可能出现的样式的“平均图像”。 我们需要的是一种算法,它接受一个字符串或一个图像,并产生一个复杂的多模态分布,我们可以从中进行采样。 进入条件变分自编码器 (CVAE),它通过简单地调节输入的整个生成过程来修改上一节中的数学。 CVAE 允许我们解决输入到输出映射是一对多的问题,而无需我们明确指定输出分布的结构。

给定一个输入 \(X\) 和一个输出 \(Y\),我们想创建一个模型 \(P(Y|X)\),这最大限度地提高了基本事实的概率(我很抱歉在这里重新定义 \(X\)。但是,标准机器学习符号将 \(X\) 映射到 \(Y\),所以我也会这样做)。 我们通过引入一个潜在变量 \(z ∼ N (0, I)\) 来定义模型,使得: \[ P(Y|X) = \mathcal{N} ( f (z, X), σ^2 ∗ I) \] 其中 \(f\) 是我们可以从数据中学习的确定性函数。 我们可以将方程 2 到 5 对 \(X\) 的条件重写如下: \[ \mathcal{D} [Q(z|Y, X)∥P(z|Y, X)] = E_{z∼Q(·|Y,X)} [log Q(z|Y, X) − log P(z|Y, X) \]

\[ \mathcal{D} [Q(z|Y, X)∥P(z|Y, X)] = E_{z∼Q(·|Y,X)} [log Q(z|Y, X) − log P(Y|z, X) − log P(z|X)] + log P(Y|X) \]

\[ log P(Y|X) − \mathcal{D} [Q(z|Y, X)∥P(z|Y, X)] = E_{z∼Q(·|Y,X)} [log P(Y|z, X)] − \mathcal{D} [Q(z|Y, X)∥P(z|X)] \]

请注意,\(P(z|X)\) 仍然是 \(\mathcal{N} (0, I)\),因为我们的模型假设 \(z\) 在测试时独立于 \(X\) 进行采样。 该模型的结构如下图6。

vae-fig6

vae-fig6

在测试时,我们可以简单地从分布 \(P(Y|X)\) 中采样 \(z ∼ \mathcal{N} (0, I)\)

4. 案例

4.1 MNIST 变分自编码器

vae-fig7

vae-fig7

为了演示 VAE 框架的分布学习能力,让我们在 MNIST 上训练一个变分自编码器。 为了表明该框架并不严重依赖于初始化或网络结构,我们不使用现有的已发布的 VAE 网络结构,而是采用 Caffe 中包含的基本 MNIST AutoEncoder 示例。 (然而,我们使用 ReLU 非线性 和 ADAM,因为两者都是加速收敛的标准技术。)虽然 MNIST 是实值的,但它被限制在 0 和 1 之间,所以我们对 \(P(X|z)\) 使用 Sigmoid 交叉熵损失。 这有一个概率解释:假设我们通过将每个维度独立采样为 \(Xi' ∼ Bernoulli(Xi)\) 来创建一个新的数据点 \(X'\)。 交叉熵测量 \(X'\) 的预期概率。 因此,我们实际上是在建模 \(X'\),即 MNIST 的随机二值化版本,但我们只给出了该数据 \(X\)\(q\) 摘要。诚然,这与 VAE 框架规定的不太一样,但在实践中运行良好,并且用于其他 VAE 文献。 尽管我们的模型比 [1] 和 [3] 深得多,但训练模型并不困难。 训练只运行了一次(尽管训练重新开始了 5 次以找到使损失下降最快的学习率)。 噪声产生的数字如图 7 所示。值得注意的是,这些样本很难评估,因为没有简单的方法来衡量这些样本与训练集的不同 [24]。 然而,失败案例很有趣:虽然大多数数字看起来很现实,但重要的数字是“中间”不同的数字。 例如,最左边一列从上数的第七个数字显然介于 7 和 9 之间。发生这种情况是因为我们正在通过平滑函数映射连续分布。

在实践中,模型似乎对 \(z\) 的维度非常不敏感,除非 \(z\) 过大或过小。 \(z\) 太少意味着模型无法再捕获所有变化:少于 4 个 \(z\) 维度会产生明显更差的结果。 1,000 个 \(z\) 的结果很好,但 10,000 个 \(z\) 的结果也下降了。 理论上,如果有 \(n\)\(z\) 的模型是好的,那么有 \(m>>n\) 的模型应该不会更糟,因为模型可以简单地学会忽略额外的维度。 然而,在实践中,当 \(z\) 非常大时,随机梯度下降似乎很难保持 \(D[Q(z|X)||P(z)]\) 低。

vae-fig8

vae-fig8

5. MNIST 条件变分自编码器

我原本打算展示一个条件变分自动编码器,只给定每个数字的一半来完成 MNIST 数字。虽然 CVAE 为此目的工作得很好,但不幸的是,回归器实际上也工作得很好,产生了相对清晰的样本。明显的原因是 MNIST 的大小。与 4.1 节中的网络容量相似的网络可以轻松记住整个数据集,因此回归量过拟合严重。因此,在测试时,它产生的预测表现类似于最近邻匹配,实际上非常敏锐。当给定训练示例输出不明确时,CVAE 模型最有可能胜过简单回归。因此,让我们对问题进行两次修改以使其更加模糊,但代价是使其更加人为化。首先,输入是取自数字中间的一列像素。在 MNIST 中,每个像素都有一个介于 0 和 1 之间的值,这意味着即使在这一列像素中仍然有足够的信息供网络识别特定的训练示例。因此,第二个修改是用二进制值(0 或 1)替换我们列中的每个像素,选择 1 的概率等于像素强度。每次向网络传递一个数字时,都会对这些二进制值进行重新采样。图 8 显示了结果。请注意,回归器模型通过模糊其输出来处理歧义(尽管在某些情况下,回归器在做出错误猜测时非常自信,这表明过度拟合仍然是一个问题)。回归器输出中的模糊使与可能产生输入的许多数字集的距离最小化。另一方面,CVAE 通常会选择一个特定的数字来输出并且不会模糊,从而产生更可信的图像。

附录A 一维情况下证明给定任意强大的学习器,VAE 的近似误差为零。

基本上全部是数学公式证明,隐约感觉难以理解,暂时先不做过多赘述了。