Skip to content

从 AutoEncoder 到 Beta-VAE

自编码器(Autoencoder)是一种通过瓶颈层(bottleneck layer)压缩高维数据并重建输入的神经网络模型。其副产物是降维:瓶颈层学习到的低维表示可作为嵌入向量用于检索、数据压缩,或揭示数据的潜在生成因素。变分自编码器(VAE)在自编码器的基础上引入了概率化建模,将在后文详细介绍。

1. 符号

SymbolMean
D数据集,D={x(1),x(2),,x(n)},包含 n 个数据样本;
x(i)每个数据点都是一个d 维向量,x(i)=[x1(i),x2(i),,xd(i)]
x来自数据集的一个数据样本,xD
xx 的重构版本
x~x 的损坏版本
z在 bottleneck layer 学习到的压缩向量
aj(l)l-th 隐藏层的j-th 神经元的激活函数。
gϕ(.)参数化的编码函数ϕ
fθ(.)参数化的解码函数θ
qϕ(z|x)估计后验概率函数,也称为概率编码器
pθ(x|z)给定潜在编码生成真实数据样本的似然,也称为概率解码器

2. AutoEncoder

自编码器是一种神经网络,旨在以无监督的方式学习恒等函数以重建原始输入,同时压缩过程中的数据,从而发现更高效和压缩的表示。这个想法起源于20 世纪 80 年代,后来由Hinton & Salakhutdinov 于 2006 年发表的开创性论文得到推广。

它由两个网络组成:

  • 编码器网络:它将原始的高维输入变换成潜在的低维编码。输入尺寸大于输出。
  • 解码器网络:解码器网络从编码中恢复数据,可能具有越来越大的输出层。

img

图 1. AutoEncoder 模型架构图。

编码器网络本质上完成了降维,就像我们使用主成分分析(PCA)或矩阵分解(MF)一样。此外,AutoEncoder 针对数据重建在编码层面进行了显式优化。一个好的中间表示不仅可以捕获隐变量,而且有利于完整的解压过程。

该模型包含由 ϕ 参数化的编码器函数g(),和由θ 参数化的解码器函数f()。输入x 在 bottleneck layer 学习到的低维编码为z=gϕ(x),重建的输入是x=fθ(gϕ(x))

参数(θ,ϕ)一起学习以输出与原始输入相同的重构数据样本,xfθ(gϕ(x)),或者换句话说,学习恒等函数。有各种度量来量化两个向量之间的差异,例如激活函数为 sigmoid 时的交叉熵,或者简单的 MSE 损失:

LAE(θ,ϕ)=1ni=1n(x(i)fθ(gϕ(x(i))))2

3. 降噪 AutoEncoder

由于 AutoEncoder 学习恒等函数,当网络参数多于数据点个数时,我们面临“过度拟合”的风险。

为了避免过度拟合并提高鲁棒性, Denoising Autoencoder (Vincent et al. 2008) 提出了对基本 AutoEncoder 的修改。通过以随机方式向输入向量的某些值添加噪声或mask输入向量的某些值来部分破坏输入,x~MD(x~|x). 然后训练模型以恢复原始输入(注意:不是损坏的输入)。

x~(i)MD(x~(i)|x(i))LDAE(θ,ϕ)=1ni=1n(x(i)fθ(gϕ(x~(i))))2

其中MD定义了从真实数据样本到噪声或损坏样本的映射。

img

图 2. 去噪 AutoEncoder 模型架构图。

这种设计的动机是,即使视图被部分遮挡或损坏,人类也可以轻松识别物体或场景。为了“修复”部分损坏的输入,去噪 AutoEncoder 必须发现并捕获输入维度之间的关系,以便推断缺失的部分。

对于具有高冗余度的高维输入(如图像),模型可能依赖于从许多输入维度的组合中收集的证据来恢复去噪版本,而不是过度拟合一个维度。这为学习强大的潜在表示奠定了良好的基础。

噪声由随机映射MD(x~|x)控制,并且它并不特定于特定类型的损坏过程(即掩蔽噪声、高斯噪声、椒盐噪声等)。自然地,破坏过程可以配备先验知识。

在原始 DAE 论文的实验中,是这样应用噪声的:随机选择固定比例的输入维度,并将它们的值强制为 0。听起来很像 dropout,对吧?好吧,去噪 AutoEncoder 是在 2008 年提出的,比 dropout 论文早了 4 年(Hinton,等人,2012 年);)

4. 稀疏 AutoEncoder

稀疏自动编码器对隐藏单元激活应用“稀疏”约束,以避免过度拟合并提高稳健性。它强制模型只有少量隐藏单元同时被激活,或者换句话说,隐藏神经元在大部分时间应该是不活动的。

回想一下,常见的激活函数包括 sigmoid、tanh、relu、leaky relu 等。神经元在值接近 1 时激活,在值接近 0 时不激活。

假设在第 l 隐藏层有 sl 个神经元,这一层中的第 j 个神经元的激活函数被标记为 aj(l)()j=1,,sl。该神经元的激活比例 ρ^j 是一个较小数字 ρ,称为稀疏参数;一个常见的配置是 ρ=0.05

ρ^j(l)=1ni=1n[aj(l)(x(i))]ρ

该约束是通过在损失函数中添加惩罚项来实现的。KL 散度DKL测量两个伯努利分布之间的差异,一个具有均值ρ另一个均值是ρ^j(l). 超参数β 控制我们想要对稀疏损失应用的惩罚强度。

img

图 4. 具有均值ρ=0.25和具有均值的伯努利分布0ρ^1 之间的 KL 散度

5. k-稀疏 AutoEncoder

k稀疏 AutoEncoder(Makhzani 和 Frey,2013 年)中,稀疏性是通过仅在具有线性激活函数的 bottleneck layer 中保留前 k 个最高激活来强制执行的。首先我们通过编码器网络运行以获得压缩编码:z=g(x). 对编码向量z中的值进行排序, 仅保留 k 个最大值,而其他神经元设置为 0。这也可以在具有可调阈值的 ReLU 层中完成。现在我们有了一个稀疏编码:z=Sparsify(z). 计算稀疏编码的输出和损失,L=|xf(z)|22. 而且,反向传播只经过前 k 个激活的隐藏单元!

img

图 5. 不同稀疏度 k 的 k-稀疏 AutoEncoder 的过滤器,从具有 1000 个隐藏单元的 MNIST 中学习。(图片来源:Makhzani 和 Frey,2013 年

6. 收缩 AutoEncoder

与稀疏 AutoEncoder 类似,收缩AutoEncoder( Rifai, et al, 2011 ) 鼓励学习的表示留在收缩空间中以获得更好的鲁棒性。

它在损失函数中添加了一个项来惩罚对输入过于敏感的表示,从而提高对训练数据点周围小扰动的鲁棒性。灵敏度是通过编码器激活的雅可比矩阵相对于输入的 Frobenius 范数来衡量的:

Jf(x)F2=ij(hj(x)xi)2

其中hj是压缩编码中的一个单元输出z=f(x).

该惩罚项是学习编码相对于输入维度的所有偏导数的平方和。作者声称,根据经验,发现这种惩罚可以刻画对应于低维非线性流形的表示,同时对与流形正交的多数方向保持更大的不变性。

7. VAE:变分 AutoEncoder

Variational Autoencoder ( Kingma & Welling, 2014 ) 的缩写VAE的思想实际上与上述所有 AutoEncoder 模型不太相似,但深深植根于变分贝叶斯和图模型的方法。

不是将输入映射到固定向量,而是将其映射到分布。我们将参数化为θ的分布标记为pθ . 数据输入之间的关系x 和 latent encoding 向量和可以完全定义为:

  • Prior pθ(z)
  • Likelihood pθ(x|z)
  • Posterior pθ(z|x)

假设我们知道对于这个分布的真实参数θ。为了生成看起来像真实数据点的样本x(i),我们遵循以下步骤:

  1. 首先,从先验分布pθ(z)采样z(i).
  2. 然后由条件分布pθ(x|z=z(i))生成一个值x(i).

最优参数θ即是最大化生成真实数据样本的概率:

θ=argmaxθi=1npθ(x(i))

通常我们使用对数概率将 RHS 上的乘积转换为总和:

θ=argmaxθi=1nlogpθ(x(i))

现在我们更新方程以更好地演示数据生成过程,从而导出编码向量:

pθ(x(i))=pθ(x(i)|z)pθ(z)dz

不幸的是,以这种方式计算pθ(x(i))并不容易,因为检查所有z可能的值是非常昂贵的,并对它们进行加和。为了缩小值空间以促进更快的搜索,我们想引入一个新的近似函数来输出的可能编码,在给定输入x, 参数为ϕqϕ(z|x)时 .

img

图 6. Variational Autoencoder 涉及的图形模型。实线表示生成分布p_θ(.) 虚线表示分布q_ϕ(z|x)来近似难以处理的 posteriorp_θ(z|x).

现在,这个结构看起来很像一个 AutoEncoder:

  • 条件概率pθ(x|z)定义一个生成模型,类似于上面介绍过的解码器fθ(x|z)pθ(x|z)也称为概率解码器
  • 逼近函数qϕ(z|x)概率编码器,起着和gϕ(z|x) 类似的作用。

7.1 损失函数:ELBO

估计后验qϕ(z|x)应该和真实分布pθ(z|x)很接近. 我们可以使用Kullback-Leibler 散度来量化这两个分布之间的距离。KL 散度DKL(X|Y) 衡量了如果使用分布 Y 来表示 X,丢失的信息量。

在我们的例子中,我们想最小化 DKL(qϕ(z|x)|pθ(z|x)) 关于ϕ 的值。

但是为什么要用DKL(qϕ|pθ)(反向 KL)而不是DKL(pθ|qϕ)?Eric Jang 在他关于贝叶斯变分方法的帖子中有很好的解释。快速回顾一下:

img

图 7. 正向和反向 KL 散度对如何匹配两个分布有不同的要求。(图片来源:blog.evjang.com/2016/08/variational-bayes.html

  • 前向 KL 散度:DKL(P|Q)=EzP(z)logP(z)Q(z); 我们必须确保 P(z)>0 时 Q(z)>0。优化的变分分布q(z)必须覆盖整个p(z)
  • 反向 KL 散度:DKL(Q|P)=EzQ(z)logQ(z)P(z); 最小化反向 KL 散度, 在P(z)下, 压缩Q(z).

现在让我们扩展等式:

DKL(qϕ(z|x)pθ(z|x))=qϕ(z|x)logqϕ(z|x)pθ(z|x)dz=qϕ(z|x)logqϕ(z|x)pθ(x)pθ(z,x)dz; Becausep(z|x)=p(z,x)/p(x)=qϕ(z|x)(logpθ(x)+logqϕ(z|x)pθ(z,x))dz=logpθ(x)+qϕ(z|x)logqϕ(z|x)pθ(z,x)dz; Becauseq(z|x)dz=1=logpθ(x)+qϕ(z|x)logqϕ(z|x)pθ(x|z)pθ(z)dz; Becausep(z,x)=p(x|z)p(z)=logpθ(x)+Ezqϕ(z|x)[logqϕ(z|x)pθ(z)logpθ(x|z)]=logpθ(x)+DKL(qϕ(z|x)pθ(z))Ezqϕ(z|x)logpθ(x|z)

所以我们有:

DKL(qϕ(z|x)pθ(z|x))=logpθ(x)+DKL(qϕ(z|x)pθ(z))Ezqϕ(z|x)logpθ(x|z)

重新排列等式的左侧和右侧,

logpθ(x)DKL(qϕ(z|x)pθ(z|x))=Ezqϕ(z|x)logpθ(x|z)DKL(qϕ(z|x)pθ(z))

等式的 LHS 正是我们在学习真实分布时想要最大化的:我们想要最大化生成真实数据的(对数)似然(即日志⁡logpθ(x) 并且还最小化真实后验分布和估计后验分布之间的差异(术语DKL在像正则化器起作用)。注意pθ(x)相对于qϕ是固定的。

上面的定义了我们的损失函数:

LVAE(θ,ϕ)=logpθ(x)+DKL(qϕ(z|x)pθ(z|x))=Ezqϕ(z|x)logpθ(x|z)+DKL(qϕ(z|x)pθ(z))θ,ϕ=argminθ,ϕLVAE

在变分贝叶斯方法中,此损失函数称为变分下界证据下界。名称中的“下界”部分来自于 KL 散度始终为非负的事实,因此LVAElogpθ(x)下界。

LVAE=logpθ(x)DKL(qϕ(z|x)pθ(z|x))logpθ(x)

因此,通过最小化损失,我们正在最大化生成真实数据样本的概率下限。

7.2 重新参数化技巧

损失函数中的期望项调用生成样本zqϕ(z|x). 采样是一个随机过程,因此我们不能反向传播梯度。为了使其可训练,引入了重参数化技巧:通常可以表达随机变量z作为确定性变量z=Tϕ(x,ϵ), 其中ϵ是辅助独立随机变量,由ϕ参数化的变换函数Tϕ 转换εz.

例如,常见的选择形式qϕ(z|x)是具有对角协方差结构的多元高斯分布:

zqϕ(z|x(i))=N(z;μ(i),σ2(i)I)z=μ+σϵ, whereϵN(0,I); Reparameterization trick.

其中⊙指的是逐元素乘积。

img

图 8. 重参数化技巧如何使z采样过程可训练。(图片来源:Kingma 的 NIPS 2015 研讨会演讲中的幻灯片 12 )

重参数化技巧也适用于其他类型的分布,而不仅仅是高斯分布。在多元高斯情况下,我们通过学习分布的均值和方差,μσ, 使模型可训练,明确使用重参数化技巧,而随机性保留在随机变量中ϵN(0,I).

img

图 9. 具有多元高斯假设的变分 AutoEncoder 模型的图示。

8. Beta-VAE

如果推断的潜在表示中的每个变量z只对单一的生成因素敏感并且对其他因素相对不变,我们会说这种表示是可分离的或可因式分解的。分离表示通常带来的一个好处是具有良好的可解释性和易于泛化到各种任务。

例如,一个基于人脸照片训练的模型可能会在不同的维度上捕捉到温柔、肤色、头发颜色、头发长度、情绪、是否戴眼镜等许多其他相对独立的因素。这种解构表示对人脸图像的生成非常有利。

β-VAE ( Higgins et al., 2017 ) 是变分 AutoEncoder 的一种改进,特别强调发现解构潜在因子。在 VAE 中遵循相同的动机,我们希望最大化生成真实数据的概率,同时保持真实后验分布和估计后验分布之间的距离很小(比如,在一个小常数 d 下):

maxϕ,θExD[Ezqϕ(z|x)logpθ(x|z)]subject toDKL(qϕ(z|x)pθ(z))<δ

我们可以将其重写在KKT 条件下带有拉格朗日乘数β为的拉格朗日公式。上述只有一个不等式约束的优化问题等价于最大化以下方程F(θ,ϕ,β):

F(θ,ϕ,β)=Ezqϕ(z|x)logpθ(x|z)β(DKL(qϕ(z|x)pθ(z))δ)=Ezqϕ(z|x)logpθ(x|z)βDKL(qϕ(z|x)pθ(z))+βδEzqϕ(z|x)logpθ(x|z)βDKL(qϕ(z|x)pθ(z)); Becauseβ,δ0

β-VAE 的损失函数定义为:

LBETA(ϕ,β)=Ezqϕ(z|x)logpθ(x|z)+βDKL(qϕ(z|x)pθ(z))

其中拉格朗日乘数β被视为超参数。

由于否定LBETA(ϕ,β)是拉格朗日量的下界F(θ,ϕ,β). 最小化损失等同于最大化拉格朗日量,因此适用于我们的初始优化问题。

β=1, 它与 VAE 相同。当β>1,它对潜在的瓶颈施加了更强的约束并限制z. 对于一些条件独立的生成因子,将它们分开是最有效的表示。因此更高的β鼓励更有效的 latent encoding 并进一步鼓励分离。同时,更高β可能会在重建质量和分离程度之间做出权衡。

伯吉斯等人。(2017)讨论了在β-VAE 在信息瓶颈理论的启发下深入研究并进一步提出修改β-VAE 更好地控制编码表示能力。

9. VQ-VAE 和 VQ-VAE-2

VQ-VAE 模型(“矢量量化变分 AutoEncoder”;van den Oord 等人,2017 年)通过编码器学习离散隐变量,因为离散表示可能更自然地适合语言、语音、推理等问题,等等

矢量量化 (VQ) 是一种将K维向量转换为一组有限的“编码”向量的映射方法。该过程与 KNN算法非常相似。样本应映射到的最佳质心编码向量是具有最小欧氏距离的向量。

eRK×D,i=1,,K是 VQ-VAE 中的潜在嵌入空间(也称为“密码本”),其中K是隐变量类别的数量,D是嵌入尺寸。一个单独的嵌入向量是eiRD,i=1,,K.

编码器输出E(x)=ze通过最近邻查找以匹配其中一个K维嵌入向量,然后这个匹配的编码向量成为解码器的输入D(.):

zq(x)=Quantize(E(x))=ek wherek=argminiE(x)ei2

请注意,离散隐变量在不同的应用程序中可以具有不同的形状;例如,1D 用于语音,2D 用于图像,3D 用于视频。

img

图 10. VQ-VAE 的架构(图片来源:van den Oord, et al. 2017

因为 argmin() 在离散空间上不可微,所以来自解码器输入zq的梯度zL被复制到编码器的输出ze. 除了重建损失,VQ-VAE 还优化了:

  • VQ 损失:嵌入空间和编码器输出之间的 L2 误差。
  • 重建损失:一种鼓励编码器输出靠近嵌入空间并防止它从一个编码向量到另一个编码向量波动过于频繁的措施。
L=xD(ek)22reconstruction loss+sg[E(x)]ek22VQ loss+βE(x)sg[ek]22commitment loss

其中sq[.]stop_gradient运算符。

嵌入向量通过 EMA(指数移动平均)更新。给定一个编码向量ei, 假设我们有ni个编码器输出向量,{zi,j}j=1ni 被量化为ei:

Ni(t)=γNi(t1)+(1γ)ni(t)mi(t)=γmi(t1)+(1γ)j=1ni(t)zi,j(t)ei(t)=mi(t)/Ni(t)

其中((t))指时间上的批次顺序。Nimi分别是累积矢量计数和体积。

VQ-VAE-2 ( Ali Razavi, et al. 2019 ) 是一个结合自注意力自回归模型的两层的层次结构的 VQ-VAE 。

  1. 阶段 1 是训练分层 VQ-VAE:分层隐变量的设计旨在将局部信息(即纹理)与全局信息(即对象形状)分开。较大的底层编码的训练是以较小的顶层编码为条件的,因此它不必从头开始学习所有内容。
  2. 第 2 阶段是在潜在的离散 codebook 上学习先验知识,以便我们从中采样并生成图像。通过这种方式,解码器可以接收与训练中的分布相似的分布中采样的输入向量。使用多头自注意力层增强的强大自回归模型用于捕获先验分布(如PixelSNAIL;Chen 等人 2017)。

考虑到 VQ-VAE-2 依赖于在简单的分层设置中配置的离散隐变量,其生成的图像质量非常惊人。

img

图 11. 分层 VQ-VAE 和多阶段图像生成的架构。(图片来源:Ali Razavi, et al. 2019

img

VQ-VAE-2 算法。(图片来源:Ali Razavi, et al. 2019)

10. TD-VAE

TD-VAE(“Temporal Difference VAE”;Gregor 等人,2019 年)处理时序数据。它依赖于三个主要思想,如下所述。

img

图 13. 作为马尔可夫链模型的状态空间模型。

1. 状态空间模型

在(潜在)状态空间模型中,一系列未观察到的隐藏状态z=(z1,,zT). 决定了观测状态x=(x1,,xT)

图 13 中的马尔可夫链模型中的每个时间步都可以用与图 6 类似的方式进行训练,其中难处理的后验p(z|x)由一个函数q(z|x)逼近

2. 信念状态

Agent 应该学习对所有过去的状态进行编码以推理未来,称为信念状态bt=belief(x1,,xt)=belief(bt1,xt). 鉴于此,以过去为条件的未来状态的分布可以写成p(xt+1,,xT|x1,,xt)p(xt+1,,xT|bt). 循环策略中的隐藏状态用作 Agent’s 在 TD-VAE 中的信念状态。因此我们有bt=RNN(bt1,xt).

3. 跳跃式预测

此外,智能体需要根据目前收集到的所有信息来想象遥远的未来,这表明具有跳跃式预测的能力,即预测未来几个步骤的状态。

回想一下我们从上面的方差下限中学到的东西:

logp(x)logp(x)DKL(q(z|x)p(z|x))=Ezqlogp(x|z)DKL(q(z|x)p(z))=Ezqlogp(x|z)Ezqlogq(z|x)p(z)=Ezq[logp(x|z)logq(z|x)+logp(z)]=Ezq[logp(x,z)logq(z|x)]logp(x)Ezq[logp(x,z)logq(z|x)]

现在让我们模拟状态的分布xt作为以所有过去状态为条件的概率函数x<t和两个隐变量,ztzt1,在当前时间步后退一步:

logp(xt|x<t)E(zt1,zt)q[logp(xt,zt1,zt|x<t)logq(zt1,zt|xt)]

继续扩大等式:

logp(xt|x<t)E(zt1,zt)q[logp(xt,zt1,zt|x<t)logq(zt1,zt|xt)]E(zt1,zt)q[logp(xt|zt1,zt,x<t)+logp(zt1,zt|x<t)logq(zt1,zt|xt)]E(zt1,zt)q[logp(xt|zt)+logp(zt1|x<t)+logp(zt|zt1)logq(zt1,zt|xt)]E(zt1,zt)q[logp(xt|zt)+logp(zt1|x<t)+logp(zt|zt1)logq(zt|xt)logq(zt1|zt,xt)]

注意两点:

  • 根据马尔可夫假设,可以忽略红色项。
  • 蓝色项根据马尔可夫假设展开。
  • 绿色项被扩展为包括回到过去的一步预测作为平滑分布。

准确地说,有四种类型的分布需要学习:

  1. pD(.)解码器分布:
  • p(xtzt)是通用定义的编码器;
  • p(xtzt)pD(xtzt)
  1. pT(.)过渡分布:
  • p(ztzt1)捕获隐变量之间的顺序依赖性;
  • p(ztzt1)pT(ztzt1)
  1. pB(.)信念分布:
  • 两个p(zt1x<t)q(ztxt)都可以使用信念状态来预测隐变量;
  • p(zt1x<t)pB(zt1bt1);
  • q(ztxt)pB(ztbt);
  1. pS(.)平滑分布:
  • 回到过去的平滑项q(zt1zt,xt)也可以重写为依赖于信念状态;
  • q(zt1zt,xt)pS(zt1zt,bt1,bt);

为了结合跳跃预测的思想,顺序 ELBO 不仅要在t,t+1, 还有两个遥远的时间t1<t2. 这是要最大化的最终 TD-VAE 目标函数:

Jt1,t2=E[logpD(xt2|zt2)+logpB(zt1|bt1)+logpT(zt2|zt1)logpB(zt2|bt2)logpS(zt1|zt2,bt1,bt2)]

img

图 14. TD-VAE 架构的详细概述。(图片来源:TD-VAE 论文

参考

[1] Geoffrey E. Hinton, and Ruslan R. Salakhutdinov. “Reducing the dimensionality of data with neural networks." Science 313.5786 (2006): 504-507.

[2] Pascal Vincent, et al. “Extracting and composing robust features with denoising autoencoders." ICML, 2008.

[3] Pascal Vincent, et al. “Stacked denoising autoencoders: Learning useful representations in a deep network with a local denoising criterion.". Journal of machine learning research 11.Dec (2010): 3371-3408.

[4] Geoffrey E. Hinton, Nitish Srivastava, Alex Krizhevsky, Ilya Sutskever, and Ruslan R. Salakhutdinov. “Improving neural networks by preventing co-adaptation of feature detectors.” arXiv preprint arXiv:1207.0580 (2012).

[5] Sparse Autoencoder by Andrew Ng.

[6] Alireza Makhzani, Brendan Frey (2013). “k-sparse autoencoder”. ICLR 2014.

[7] Salah Rifai, et al. “Contractive auto-encoders: Explicit invariance during feature extraction." ICML, 2011.

[8] Diederik P. Kingma, and Max Welling. “Auto-encoding variational bayes." ICLR 2014.

[9] Tutorial - What is a variational autoencoder? on jaan.io

[10] Youtube tutorial: Variational Autoencoders by Arxiv Insights

[11] “A Beginner’s Guide to Variational Methods: Mean-Field Approximation” by Eric Jang.

[12] Carl Doersch. “Tutorial on variational autoencoders." arXiv:1606.05908, 2016.

[13] Irina Higgins, et al. "β-VAE: Learning basic visual concepts with a constrained variational framework." ICLR 2017.

[14] Christopher P. Burgess, et al. “Understanding disentangling in beta-VAE." NIPS 2017.

[15] Aaron van den Oord, et al. “Neural Discrete Representation Learning” NIPS 2017.

[16] Ali Razavi, et al. “Generating Diverse High-Fidelity Images with VQ-VAE-2”. arXiv preprint arXiv:1906.00446 (2019).

[17] Xi Chen, et al. “PixelSNAIL: An Improved Autoregressive Generative Model." arXiv preprint arXiv:1712.09763 (2017).

[18] Karol Gregor, et al. “Temporal Difference Variational Auto-Encoder." ICLR 2019.

Maintained by Robin