生成模型(二):VAE

news2024/11/25 20:25:39

在这里插入图片描述

自动编码器的发明是为了重建高维数据(这可能不是变异自动编码器的真实情况)。一个很好的副产品是降维:瓶颈层捕获了一个压缩的潜在编码。这样的低维表示可以作为各种应用中的嵌入向量(如搜索),帮助数据压缩,或揭示潜在的数据生成因素。

Notation
在这里插入图片描述

Autoencoder
自动编码器是一个神经网络,旨在以无监督的方式学习一个恒等函数( identity function),以重建原始输入,同时在这个过程中压缩数据,从而发现一个更有效和压缩的表示。

包含以下两个部分:

编码器网络:将原始高维输入转换为低维隐变量编码, 输入尺寸大于输出尺寸。
解码器网络:解码器网络从编码中恢复数据,可能有越来越大的输出层。

编码器模型结构
编码器网络基本上完成了降维,就像我们使用主成分分析(PCA)或矩阵分解(MF)的方式。此外,自动编码器为从代码中重建数据进行了明确的优化。一个好的中间表征不仅可以捕捉潜在变量,而且还有利于全面解压过程。

该模型包含一个以\phi为参数的编码器函数g(.)和一个以\theta为参数的解码器函数f(.)。在瓶颈层为输入\mathbf{x}学习的低维编码是\mathbf{z} = g_\phi(\mathbf{x}),重建的输入是\mathbf{x}’ = f_\theta(g_\phi(\mathbf{x}))。

参数(\theta, \phi)一起学习,输出一个与原始输入相同的重建数据样本,\mathbf{x} \approx f_\theta(g_\phi(\mathbf{x})),或者换句话说,学习一个恒等函数。有各种指标可以量化两个向量之间的差异,比如激活函数为sigmoid时的交叉熵,或者简单的MSE损失。

L_\text{AE}(\theta, \phi) = \frac{1}{n}\sum_{i=1}^n (\mathbf{x}^{(i)} - f_\theta(g_\phi(\mathbf{x}{(i)})))2 \

去噪自动编码器
由于自动编码器学习的是恒等函数,当网络参数多于数据点的数量时,我们面临着过度拟合的风险。

为了避免过拟合和提高鲁棒性,去噪自动编码器(Vincent等人,2008)提出了对自动编码器的修改。通过在输入向量中添加噪声或以随机的方式掩盖一些数值,输入被部分破坏,\tilde{\mathbf{x}}\sim\mathcal{M}_\mathcal{D}(\tilde{\mathbf{x}} \vert \mathbf{x})。然后对模型进行训练以恢复原始输入。

\begin{aligned} \tilde{\mathbf{x}}^{(i)} &\sim \mathcal{M}\mathcal{D}(\tilde{\mathbf{x}}^{(i)} \vert \mathbf{x}^{(i)})\ L\text{DAE}(\theta, \phi) &= \frac{1}{n} \sum_{i=1}^n (\mathbf{x}^{(i)} - f_\theta(g_\phi(\tilde{\mathbf{x}}{(i)})))2 \end{aligned} \

其中\mathcal{M}_\mathcal{D}定义了从真实数据样本到噪声或损坏样本的映射。

设计的动机是人类可以很容易地识别一个物体或场景,即使视图被部分遮挡或损坏。为了修复部分被破坏的输入,去噪自动编码器必须发现和捕捉输入维度之间的关系,以推断出丢失的部分。

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

稀疏自动编码器
稀疏自动编码器在隐藏单元的激活上应用了一个稀疏约束,以避免过度拟合并提高鲁棒性。它迫使模型只有少量的隐藏单元同时被激活,或者换句话说,一个隐藏神经元应该在大部分时间内不被激活。

回顾一下,常见的激活函数包括sigmoid, tanh, relu, leaky relu等。当数值接近1时,一个神经元被激活,当数值接近0时,神经元被灭活。

假设在隐藏层l中有s_l的神经元,该层中j的神经元的激活函数被标记为a^{(l)}_j(.),j=1, \dots, s_l。这个神经元\hat{\rho}_j的激活部分预计是一个小数\rho,称为稀疏参数;常见的配置是\rho = 0.05。

\hat{\rho}j^{(l)} = \frac{1}{n} \sum{i=1}^n [a_j{(l)}(\mathbf{x}{(i)})] \approx \rho \

这个约束是通过在损失函数中加入一个惩罚项来实现的。KL 散度D_\text{KL}衡量两个伯努利分布之间的差异,一个是均值\rho,另一个是均值\hat{\rho}_j^{(l)}。超参数\beta控制了我们要对稀疏性损失进行多强的惩罚。

k-Sparse Autoencoder
在k-Sparse Autoencoder(Makhzani&Frey,2013)中,通过在具有线性激活函数的瓶颈层中只保留前k个最高的激活来强制执行稀疏性。

首先,我们通过编码器网络运行前馈网络,得到压缩后的编码。\mathbf{z} = g(\mathbf{x})。对编码向量\mathbf{z}中的值进行排序。只有最大的k个值被保留,而其他神经元被设置为0。现在我们有了一个稀疏的编码。\mathbf{z}’ = \text{Sparsify}(\mathbf{z}).计算输出和稀疏代码的损失,L = |\mathbf{x} - f(\mathbf{z}') |_2^2。而且,反向传播只经过最上面的k个激活的隐藏单元!

Contractive Autoencoder
与稀疏自动编码器类似,收缩自动编码器(Rifai, et al, 2011)鼓励学习到的表示停留在收缩空间中,以获得更好的鲁棒性。

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

|J_f(\mathbf{x})|F^2 = \sum{ij} \Big( \frac{\partial h_j(\mathbf{x})}{\partial x_i} \Big)^2 \

其中h_j是压缩b编码\mathbf{z}=f(x)中的一个单位输出。

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

VAE: Variational Autoencoder
变分自动编码器(Kingma &; Welling, 2014 )简称VAE,实际上与上述所有自动编码器模型不太相似,但深深扎根于变量贝叶斯和图形模型的方法。

他不是把输入映射成一个固定的向量,而是想把它映射成一个分布。我们把这个分布标记为p_\theta,参数为\theta。数据输入\mathbf{x}和潜在编码向量\mathbf{z}之间的关系可以完全定义为:

先验概率 p_\theta(\mathbf{z})
似然概率 p_\theta(\mathbf{x}\vert\mathbf{z})
后验概率 p_\theta(\mathbf{z}\vert\mathbf{x})
这个分布的真实参数\theta{*}。为了生成一个看起来像真实数据点的样本\mathbf{x}{(i)},我们遵循以下步骤: 首先,从先验分布p_{\theta*}(\mathbf{z})中抽取一个\mathbf{z}{(i)}。 然后,从条件分布p_{\theta^*}(\mathbf{x}\vert \mathbf{z} = \mathbf{z}^{(i)})中产生一个 \mathbf{x}^{(i)}的值。

最佳参数\theta^{*}是产生真实数据样本的概率最大化的参数。

\theta^{*} = \arg\max_\theta \prod_{i=1}^n p_\theta(\mathbf{x}^{(i)}) \

通常,我们使用对数概率将乘积转换为求和。

\theta^{*} = \arg\max_\theta \sum_{i=1}^n \log p_\theta(\mathbf{x}^{(i)}) \

现在让我们更新方程式,以更好地展示数据生成过程,以便涉及编码矢量。

p_\theta(\mathbf{x}^{(i)}) = \int p_\theta(\mathbf{x}^{(i)}\vert\mathbf{z}) p_\theta(\mathbf{z}) d\mathbf{z} \

不幸的是,以这种方式计算p_\theta(\mathbf{x}^{(i)})并不容易,因为遍历\mathbf{z}的所有可能值并将其相加是非常困难的。为了缩小数值空间以促进快速搜索,我们想引入一个新的近似函数q_\phi(\mathbf{z}\vert\mathbf{x}),输出在输入\mathbf{x}时可能出现的编码,参数是\phi。

这个结构看起来很像一个自动编码器。条件概率p_\theta(\mathbf{x} \vert \mathbf{z})定义了一个生成模型,与上面介绍的解码器f_\theta(\mathbf{x} \vert \mathbf{z})类似。p_\theta(\mathbf{x} \vert \mathbf{z})也被称为概率解码器。近似函数q_\phi(\mathbf{z} \vert \mathbf{x})是概率编码器,与上面的g_\phi(\mathbf{z} \vert \mathbf{x})的作用类似。

损失函数: ELBO
后验q_\phi(\mathbf{z}\vert\mathbf{x})的估计应该非常接近于真实的p_\theta(\mathbf{z}\vert\mathbf{x})。我们可以用Kullback-Leibler散度来量化这两个分布之间的距离。KL散度D_\text{KL}(X|Y)衡量如果用分布Y来表示X,会损失多少信息。我们希望D_\text{KL}( q_\phi(\mathbf{z}\vert\mathbf{x}) | p_\theta(\mathbf{z}\vert\mathbf{x}) )相对于\phi最小。

但是为什么要用D_\text{KL}(q_\phi | p_\theta)(反向KL)而不是D_\text{KL}(p_\theta | q_\phi)(正向KL)?Eric Jang在他的Bayesian Variational methods一文中有一个很好的解释。作为一个简单的回顾。

正向 KL 散度: D_\text{KL}(P|Q) = \mathbb{E}{z\sim P(z)} \log\frac{P(z)}{Q(z)}; 我们必须确保在 Q(z) >0 时 P(z) < 0. 优化的变量分布q(z) 必须覆盖整个 p(z).
反向 KL 散度: D
\text{KL}(Q|P) = \mathbb{E}_{z\sim Q(z)} \log\frac{Q(z)}{P(z)}; 最小化反转KL发散,在 P(z)下挤压Q(z)
接下来我们展开这个公式:

\begin{aligned} & D_\text{KL}( q_\phi(\mathbf{z}\vert\mathbf{x}) |p_\theta(\mathbf{z}\vert\mathbf{x}) ) & \ &=\int q_\phi(\mathbf{z} \vert \mathbf{x}) \log\frac{q_\phi(\mathbf{z} \vert \mathbf{x})}{p_\theta(\mathbf{z} \vert \mathbf{x})} d\mathbf{z} & \ &=\int q_\phi(\mathbf{z} \vert \mathbf{x}) \log\frac{q_\phi(\mathbf{z} \vert \mathbf{x})p_\theta(\mathbf{x})}{p_\theta(\mathbf{z}, \mathbf{x})} d\mathbf{z} & \scriptstyle{\text{; Because }p(z \vert x) = p(z, x) / p(x)} \ &=\int q_\phi(\mathbf{z} \vert \mathbf{x}) \big( \log p_\theta(\mathbf{x}) + \log\frac{q_\phi(\mathbf{z} \vert \mathbf{x})}{p_\theta(\mathbf{z}, \mathbf{x})} \big) d\mathbf{z} & \ &=\log p_\theta(\mathbf{x}) + \int q_\phi(\mathbf{z} \vert \mathbf{x})\log\frac{q_\phi(\mathbf{z} \vert \mathbf{x})}{p_\theta(\mathbf{z}, \mathbf{x})} d\mathbf{z} & \scriptstyle{\text{; Because }\int q(z \vert x) dz = 1}\ &=\log p_\theta(\mathbf{x}) + \int q_\phi(\mathbf{z} \vert \mathbf{x})\log\frac{q_\phi(\mathbf{z} \vert \mathbf{x})}{p_\theta(\mathbf{x}\vert\mathbf{z})p_\theta(\mathbf{z})} d\mathbf{z} & \scriptstyle{\text{; Because }p(z, x) = p(x \vert z) p(z)} \ &=\log p_\theta(\mathbf{x}) + \mathbb{E}{\mathbf{z}\sim q\phi(\mathbf{z} \vert \mathbf{x})}[\log \frac{q_\phi(\mathbf{z} \vert \mathbf{x})}{p_\theta(\mathbf{z})} - \log p_\theta(\mathbf{x} \vert \mathbf{z})] &\ &=\log p_\theta(\mathbf{x}) + D_\text{KL}(q_\phi(\mathbf{z}\vert\mathbf{x}) | p_\theta(\mathbf{z})) - \mathbb{E}{\mathbf{z}\sim q\phi(\mathbf{z}\vert\mathbf{x})}\log p_\theta(\mathbf{x}\vert\mathbf{z}) & \end{aligned} \

有:

D_\text{KL}( q_\phi(\mathbf{z}\vert\mathbf{x}) |p_\theta(\mathbf{z}\vert\mathbf{x}) ) =\log p_\theta(\mathbf{x}) + D_\text{KL}(q_\phi(\mathbf{z}\vert\mathbf{x}) \ p_\theta(\mathbf{z})) - \mathbb{E}{\mathbf{z}\sim q\phi(\mathbf{z}\vert\mathbf{x})}\log p_\theta(\mathbf{x}\vert\mathbf{z}) \

重新排列方程的左右:

\log p_\theta(\mathbf{x}) - D_\text{KL}( q_\phi(\mathbf{z}\vert\mathbf{x}) |p_\theta(\mathbf{z}\vert\mathbf{x}) ) = \mathbb{E}{\mathbf{z}\sim q\phi(\mathbf{z}\vert\mathbf{x})}\log p_\theta(\mathbf{x}\vert\mathbf{z}) - D_\text{KL}(q_\phi(\mathbf{z}\vert\mathbf{x}) | p_\theta(\mathbf{z})) \

方程左侧正是我们在学习真实分布时想要最大化的东西:我们想要最大化产生真实数据的(对数)可能性(即log p_\theta(\mathbf{x})),同时最小化真实分布和估计后验分布之间的差异(D_\text{KL}像一个正则器一样发挥作用)。请注意,p_\theta(\mathbf{x})相对于q_\phi是固定的。

上述内容的负数定义了我们的损失函数。

\begin{aligned} L_\text{VAE}(\theta, \phi) &= -\log p_\theta(\mathbf{x}) + D_\text{KL}( q_\phi(\mathbf{z}\vert\mathbf{x}) |p_\theta(\mathbf{z}\vert\mathbf{x}) )\ &= - \mathbb{E}{\mathbf{z} \sim q\phi(\mathbf{z}\vert\mathbf{x})} \log p_\theta(\mathbf{x}\vert\mathbf{z}) + D_\text{KL}( q_\phi(\mathbf{z}\vert\mathbf{x}) \ p_\theta(\mathbf{z}) ) \ \theta^{}, \phi^{} &= \arg\min_{\theta, \phi} L_\text{VAE} \end{aligned} \

在变分贝叶斯方法中,这个损失函数被称为变分下界,或证据下界。名字中的下界部分来自于KL散度总是非负的,因此-L_\text{VAE}是log p_\theta (\mathbf{x})的下界。

-L_\text{VAE} = \log p_\theta(\mathbf{x}) - D_\text{KL}( q_\phi(\mathbf{z}\vert\mathbf{x}) \ p_\theta(\mathbf{z}\vert\mathbf{x}) ) \leq \log p_\theta(\mathbf{x}) \

因此,通过最小化损失,即最大限度地提高生成真实数据样本的概率下界.

Reparameterization Trick
损失函数中的期望项涉及从\mathbf{z}\sim q_\phi(\mathbf{z}\vert\mathbf{x})生成的样本。采样是一个随机的过程,因此我们不能反向传播梯度。为了使其可训练,引入了重新参数化的技巧。通常可以将随机变量\mathbf{z}表达为确定性变量\mathbf{z} = \mathcal{T}\phi(\mathbf{x}, \boldsymbol{\epsilon})。其中\boldsymbol{\epsilon}是一个辅助的独立随机变量,转换函数\mathcal{T}\phi的参数为\phi,将\boldsymbol{\epsilon}转换成\mathbf{z}。例如,q_\phi(\mathbf{z}\vert\mathbf{x})的一个常见选择是具有对角线协方差结构的多变量高斯:

\begin{aligned} \mathbf{z} &\sim q_\phi(\mathbf{z}\vert\mathbf{x}^{(i)}) = \mathcal{N}(\mathbf{z}; \boldsymbol{\mu}^{(i)}, \boldsymbol{\sigma}^{2(i)}\boldsymbol{I}) & \ \mathbf{z} &= \boldsymbol{\mu} + \boldsymbol{\sigma} \odot \boldsymbol{\epsilon} \text{, where } \boldsymbol{\epsilon} \sim \mathcal{N}(0, \boldsymbol{I}) & \scriptstyle{\text{; Reparameterization trick.}} \end{aligned} \

其中 \odot 指点乘。.

重参数化技巧也适用于其他类型的分布,不仅仅是高斯分布。在多变量高斯的情况下,我们通过学习分布的均值和方差\mu和\sigma,重参数化技巧使模型可以训练,而随机性仍然在随机变量\boldsymbol{\epsilon}\sim\mathcal{N}(0, \boldsymbol{I})中。

Beta-VAE
如果推断出的潜在表征中的每个变量只对单一生成因素敏感,而对其他因素相对相对不变,我们就说这个表征是分解的或因素化的。分解表征通常带来的一个好处是良好的可解释性和易于推广到各种任务。

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

β-VAE(Higgins等人,2017)是对变异自动编码器的修改,特别强调发现分解的潜在因素。遵循VAE中相同的激励机制,我们希望最大化生成真实数据的概率,同时保持常数\delta下,真实分布和估计后验分布之间的距离足够小:

\begin{aligned} &\max_{\phi, \theta} \mathbb{E}{\mathbf{x}\sim\mathcal{D}}[\mathbb{E}{\mathbf{z} \sim q_\phi(\mathbf{z}\vert\mathbf{x})} \log p_\theta(\mathbf{x}\vert\mathbf{z})]\ &\text{subject to } D_\text{KL}(q_\phi(\mathbf{z}\vert\mathbf{x})|p_\theta(\mathbf{z})) < \delta \end{aligned} \

我们可以在KKT条件下改写成具有拉格朗日乘子\beta的拉格朗日函数。上述只有一个不等式约束的优化问题等同于最大化以下方程\mathcal{F}(\theta, \phi, \beta)。

\begin{aligned} \mathcal{F}(\theta, \phi, \beta) &= \mathbb{E}{\mathbf{z} \sim q\phi(\mathbf{z}\vert\mathbf{x})} \log p_\theta(\mathbf{x}\vert\mathbf{z}) - \beta(D_\text{KL}(q_\phi(\mathbf{z}\vert\mathbf{x})|p_\theta(\mathbf{z})) - \delta) & \ & = \mathbb{E}{\mathbf{z} \sim q\phi(\mathbf{z}\vert\mathbf{x})} \log p_\theta(\mathbf{x}\vert\mathbf{z}) - \beta D_\text{KL}(q_\phi(\mathbf{z}\vert\mathbf{x})|p_\theta(\mathbf{z})) + \beta \delta & \ & \geq \mathbb{E}{\mathbf{z} \sim q\phi(\mathbf{z}\vert\mathbf{x})} \log p_\theta(\mathbf{x}\vert\mathbf{z}) - \beta D_\text{KL}(q_\phi(\mathbf{z}\vert\mathbf{x})|p_\theta(\mathbf{z})) & \scriptstyle{\text{; Because }\beta,\delta\geq 0} \end{aligned} \

\beta-VAE损失函数定义为:

L_\text{BETA}(\phi, \beta) = - \mathbb{E}{\mathbf{z} \sim q\phi(\mathbf{z}\vert\mathbf{x})} \log p_\theta(\mathbf{x}\vert\mathbf{z}) + \beta D_\text{KL}(q_\phi(\mathbf{z}\vert\mathbf{x})|p_\theta(\mathbf{z})) \

其中拉格朗日乘子\beta被视为一个超参数。

由于L_\text{BETA}(\phi, \beta)的负值是拉格朗日\mathcal{F}(\theta, \phi, \beta)的下界。损失最小化等同于拉格朗日的最大化,因此对我们的初始优化问题有效。

当\beta=1时,它与VAE相同。当\beta>1时,它对latent bottleneck的约束更强,并限制了\mathbf{z}的表示能力。对于一些条件独立的生成因子,保持它们的分离是最有效的表示。因此,较高的\beta会鼓励更有效的隐编码,并进一步鼓励脱离纠缠的做法。同时,较高的\beta可能会在重建质量和分离程度之间产生权衡。

Burgess等人(2017)在信息瓶颈理论的启发下,深入讨论了beta-VAE中的distentangling问题,并进一步提出了对beta-VAE的修改,以更好地控制编码表达能力。

VQ-VAE and VQ-VAE-2
VQ-VAE(Vector Quantised-Variational AutoEncoder; van den Oord, et al. 2017)模型通过编码器学习一个离散的潜变量,因为离散的表示可能更适合语言、语音、推理等问题。

矢量量化(VQ)是一种将K维矢量映射为有限"编码 "矢量集的方法。这个过程与KNN算法非常相似。一个样本应该被映射到具有最小欧氏距离的最佳中心点编码向量。

让\mathbf{e}\in \mathbb{R}^{K \times D}, i=1, \dots, K为VQ-VAE中的隐向量空间(codebook),其中K为潜在变量类别的数量,D为嵌入的大小。一个单独的嵌入向量是\mathbf{e}_i\in\mathbb{R}^{D}, i=1, \dots, K。

编码器的输出E(\mathbf{x})=\mathbf{z}_e经过近邻查找,与K的一个嵌入向量相匹配,然后这个匹配的编码向量成为解码器D(.)的输入。

\mathbf{z}_q(\mathbf{x}) = \text{Quantize}(E(\mathbf{x})) = \mathbf{e}_k \text{ 其中 } k = \arg\min_i |E(\mathbf{x}) - \mathbf{e}_i |_2 \

在不同的应用中,离散的潜在变量可以有不同的形状;例如,一维的语音,二维的图像和三维的视频。

因为argmin()在离散空间上是不可微分的,来自解码器输入\mathbf{z}_q的梯度\nabla_z L被复制到编码器输出\mathbf{z}_e。除了重建损失外,VQ-VAE还可以优化:

VQ损失是向量空间和编码器输出之间的L2误差。
Commitment损失:鼓励编码器输出接近向量空间的方法,防止它从一个编码矢量到另一个编码矢量的波动过于频繁。
L = \underbrace{|\mathbf{x} - D(\mathbf{e}_k)|2^2}{\textrm{reconstruction loss}} + \underbrace{|\text{sg}[E(\mathbf{x})] - \mathbf{e}_k|2^2}{\textrm{VQ loss}} + \underbrace{\beta |E(\mathbf{x}) - \text{sg}[\mathbf{e}_k]|2^2}{\textrm{commitment loss}} \

其中 \text{sq}[.] 是stop_gradient操作. 编码本中的嵌入向量是通过EMA(指数移动平均)来更新的。给定一个编码向量\mathbf{e}i,假设我们有n_i编码器输出向量{{\mathbf{z}{i,j}}}_{j=1}^{n_i},它们被量化为\mathbf{e}_i。

N_i^{(t)} = \gamma N_i^{(t-1)} + (1-\gamma)n_i^{(t)};;; \mathbf{m}i^{(t)} = \gamma \mathbf{m}i^{(t-1)} + (1-\gamma)\sum{j=1}{n_i{(t)}}\mathbf{z}{i,j}^{(t)};;; \mathbf{e}_i^{(t)} = \mathbf{m}_i^{(t)} / N_i^{(t)} \

编码本中的嵌入向量是通过EMA(指数移动平均)来更新的。给定一个编码向量\mathbf{e}i,假设我们有n_i编码器输出向量,{{\mathbf{z}{i,j}}}_{j=1}^{n_i},它们被量化为\mathbf{e}_i。

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

第一阶段是训练分层的VQ-VAE:分层潜变量的设计意在将局部模式(即纹理)与全局信息(即物体形状)分开。较大的底层codebook的训练也是以较小的顶层编码为条件的,因此它不必从头开始学习一切。

第二阶段是在潜在的离散编码本上学习先验,以便我们从中取样并生成图像。通过这种方式,解码器可以接收从类似于训练中的分布中采样的输入向量。一个强大的自回归模型通过multi-headed self-attention 层来捕捉先验分布(PixelSNAIL; Chen et al 2017)。

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

TD-VAE
TD-VAE (“Temporal Difference VAE”; Gregor et al., 2019) 适用于连续的数据。它依赖于三个主要想法,描述如下。

状态空间模型 在(潜在)状态空间模型中,一连串未观察到的隐藏状态\mathbf{z} = (z_1, \dots, z_T)决定了观察状态\mathbf{x} = (x_1, \dots, x_T)。图中马尔科夫链模型的每个时间步骤都可以用类似VAE的方式进行训练,其中难以解决的后验p(z\vert x)被一个函数q(z\vert x)所近似。
信念状态 代理应该学会编码所有过去的状态来推理未来,命名为信念状态(belief state),b_t = belief(x_1, \dots, x_t) = belief(b_{t-1}, x_t)。鉴于此,以过去为条件的未来状态分布可以写成p(x_{t+1}, \dots, x_T \vert x_1, \dots, x_t) \approx p(x_{t+1}, \dots, x_T \vert b_t) 。循环机制中的隐藏状态在TD-VAE中被用作代理的信念状态。因此,我们有b_t = \text{RNN}(b_{t-1}, x_t)。
跳跃性预测 此外,代理被期望根据迄今为止收集到的所有信息来预测遥远的未来,这表明他有能力进行跳跃式预测,也就是预测未来几步的状态。
回顾我们前面讲述的变分下界:

\begin{aligned} \log p(x) &\geq \log p(x) - D_\text{KL}(q(z|x)|p(z|x)) \ &= \mathbb{E}{z\sim q} \log p(x|z) - D\text{KL}(q(z|x)|p(z)) \ &= \mathbb{E}{z \sim q} \log p(x|z) - \mathbb{E}{z \sim q} \log \frac{q(z|x)}{p(z)} \ &= \mathbb{E}{z \sim q}[\log p(x|z) -\log q(z|x) + \log p(z)] \ &= \mathbb{E}{z \sim q}[\log p(x, z) -\log q(z|x)] \ \log p(x) &\geq \mathbb{E}_{z \sim q}[\log p(x, z) -\log q(z|x)] \end{aligned} \

现在让我们把状态x_t的分布建模为一个概率函数,它以所有过去的状态$x_{ \log p(x_t|x_{\lt {t}}) \geq \mathbb{E}{(z{t-1}, z_t) \sim q}[\log p(x_t, z_{t-1}, z_{t}|x_{\lt {t}}) -\log q(z_{t-1}, z_t|x_{\leq t})] \

继续展开:

\begin{aligned} & \log p(x_t|x_{\lt {t}}) \ &\geq \mathbb{E}{(z{t-1}, z_t) \sim q}[\log p(x_t, z_{t-1}, z_{t}|x_{\lt {t}}) -\log q(z_{t-1}, z_t|x_{\leq t})] \ &\geq \mathbb{E}{(z{t-1}, z_t) \sim q}[\log p(x_t|\color{red}{z_{t-1}}, z_{t}, \color{red}{x_{\lt {t}}}) + \color{blue}{\log p(z_{t-1}, z_{t}|x_{\lt {t}})} -\log q(z_{t-1}, z_t|x_{\leq t})] \ &\geq \mathbb{E}{(z{t-1}, z_t) \sim q}[\log p(x_t|z_{t}) + \color{blue}{\log p(z_{t-1}|x_{\lt {t}})} + \color{blue}{\log p(z_{t}|z_{t-1})} - \color{green}{\log q(z_{t-1}, z_t|x_{\leq t})}] \ &\geq \mathbb{E}{(z{t-1}, z_t) \sim q}[\log p(x_t|z_{t}) + \log p(z_{t-1}|x_{\lt {t}}) + \log p(z_{t}|z_{t-1}) - \color{green}{\log q(z_t|x_{\leq t})} - \color{green}{\log q(z_{t-1}|z_t, x_{\leq t})}] \end{aligned} \

其中: 根据马尔可夫假设,红色项可以被忽略。蓝色项根据马尔科夫假设被扩展。绿色项被扩展为包括回溯到过去的一步预测,作为一个平滑分布。具体一点,我们需要学习4个分布:

解码分布p_D(.):
p(x_t \mid z_t) 编码;
p(x_t \mid z_t) \to p_D(x_t \mid z_t);
转移分布p_T(.) :
p(z_t \mid z_{t-1}) 捕获隐状态间的序列依赖
p(z_t \mid z_{t-1}) \to p_T(z_t \mid z_{t-1});
信念分布p_B(.):
p(z_{t-1} \mid x_{\lt t}) 和 q(z_t \mid x_{\leq t}) 能根据信念状态预测隐变量;
p(z_{t-1} \mid x_{\lt t}) \to p_B(z_{t-1} \mid b_{t-1});
q(z_{t} \mid x_{\leq t}) \to p_B(z_t \mid b_t);
平滑分布p_S(.) :
回溯平滑项 q(z_{t-1} \mid z_t, x_{\leq t})也可以改写为取决于信念状态;
q(z_{t-1} \mid z_t, x_{\leq t}) \to p_S(z_{t-1} \mid z_t, b_{t-1}, b_t);
为了纳入跳跃性预测,顺序ELBO不仅要对t, t+1工作,还要对两个遥远的时间戳t_1 \lt t_2工作。这是最终要最大化的TD-VAE目标函数:

J_{t_1, t_2} = \mathbb{E}[ \log p_D(x_{t_2}|z_{t_2}) + \log p_B(z_{t_1}|b_{t_1}) + \log p_T(z_{t_2}|z_{t_1}) - \log p_B(z_{t_2}|b_{t_2}) - \log p_S(z_{t_1}|z_{t_2}, b_{t_1}, b_{t_2})] \

参考文献
[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 http://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. “\beta-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.




参考资料:
生成模型(二):VAE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84088.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机研究生就业方向之大厂销售(营销)

我一直跟学生们说你考计算机的研究生之前一定要想好你想干什么&#xff0c;如果你只是转码&#xff0c;那么你不一定要考研&#xff0c;至少以下几个职位研究生是没有啥优势的&#xff1a; 1&#xff0c;软件测试工程师&#xff08;培训一下就行&#xff09; 2&#xff0c;前…

世界杯---人生就是一届又一届世界杯

注意&#xff1a;下面有视频看到文章会有声音&#xff0c;如果打扰到您非常抱歉&#xff0c;视频在文章最下面&#xff0c;还望观众老爷们不要在意&#xff0c;蟹蟹理解~ &#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &a…

OTP语音芯片是用什么软件来编程,以及如何烧录的?

目录 OTP语音芯片的开发环境&#xff1a; 也就是一般的客户想自己开发&#xff0c;基本不可能了&#xff0c;因为前期的培训成本、工具成本都是比较高的 OTP语音芯片的烧录方法&#xff1a; 第1步&#xff0c;是开发编译好程序之后&#xff0c;生成了对应的bin文件&#xf…

15、Redis集群

文章目录15、Redis集群15.1 问题15.2 什么是集群15.3 删除持久化数据15.4 制作6个实例15.4.1 配置基本信息15.4.2. redis cluster配置修改15.4.3. 修改好redis6379.conf文件&#xff0c;拷贝多个redis.conf文件15.4.4 使用查找替换修改另外5个文件15.4.5 启动6个redis服务15.5 …

MySQL innodb引擎架构分析- Double Write Buffer

文章目录系列文章目录前言一、Double Write Buffer是什么&#xff1f;二、Double Write Buffer步骤步骤对性能的影响总结系列文章目录 1. MySQL innodb引擎架构分析-Buffer Pool 2. MySQL innodb引擎架构分析-Redo log 3. MySQL innodb引擎架构分析- Double Write Buffer 前言…

java基于ssm+vue+elementUI实验报告管理系统

BS的实验报告管理系统是针对目前大学推广与交流的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的实验报告管理系统存在的问题进行分析&#xff0c;完善用户的使用体会。采用计算机系统来管理信息&#xff0c;取代人工管理模式&#xff0c;查询便利&#xff0c;信息准…

鸡血篇:网络工程师为什么要学Python,如何学Python

两个多月之前写了一篇“送给打算考IE&#xff0c;正在学网络&#xff0c;纠结要不要转行学网络的你们”的文章&#xff0c;意外地收到了不少小伙伴的私信&#xff0c;大多咨询如何学习网络工程&#xff0c;以及什么方向的IE更有前景之类的问题。其实IE的话题我不想再多说&#…

Redis缓存一致性问题

目录 1、背景 2、缓存读写模式 2.1、Cache-Aside Pattern(旁路缓存模式) 2.2、Read-Through/Write-Through&#xff08;读写穿透模式&#xff09; 2.3、Write Behind Pattern(异步缓存写入) 3、数据不一致的几种场景 3.1、先删缓存&#xff0c;再更新数据库 3.2、先更新…

豆瓣评分9.1!据说入门Python的人都读过

前言 你是否正在寻找一本适合初学者入门Python的书籍呢&#xff1f; 如果是&#xff0c;那你来对地方了&#xff0c;以我个人经验&#xff0c;开始学习一门新的编程语言是相当困难和耗时的&#xff0c;这也是我今天要和大家分享这本书的原因&#xff0c;不卖关子了&#xff0…

算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075)

算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075&#xff09; 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f;目录1. MT2051 矩阵01变2. MT2052 矩形3. MT2053 切蛋糕4. MT…

面试怕问到缓存穿透?看这篇就够了

面试怕问到缓存穿透&#xff1f;看这篇就够了&#xff01; 缓存穿透 缓存穿透指的是请求的数据在数据库和缓存中都不存在&#xff0c;这样缓存永远都不会生效&#xff0c;这些请求就会直接打到数据库中。 就比方说&#xff0c;你去查询一个商户&#xff0c;带着id为负数的参数…

艾美捷SAM甲基转移酶活性分析试剂盒使用前准备方案

关键生物分子和蛋白质的甲基化在许多生物系统&#xff0c;包括信号转导、生物合成、蛋白质修复、基因沉默和染色质调节。S-腺苷甲硫氨酸&#xff08;SAM&#xff09;依赖性甲基转移酶使用SAM ATP后最常用的酶辅因子。SAM&#xff0c;也称为AdoMet作为修饰蛋白质和DNA所需的甲基…

通俗理解决策树

目录前言决策树的结构决策树的构建信息增益&#xff08;ID3算法&#xff09;信息增益率&#xff08;C4.5算法&#xff09;基尼指数&#xff08;CART算法&#xff09;熵VS基尼指数剪枝优缺点及适用场景参考文献前言 从这一期开始&#xff0c;我们准备介绍一系列经典机器学习算法…

Linux:虚拟机配置免密登录和文件同步分发

记录下&#xff0c;以后照抄就好了 文章目录ssh免密登录SCP安全拷贝rsync同步修改xsync集群分发ssh免密登录 免密登录原理 生成公钥和私钥 ssh-keygen -t rsa后连敲三个回车 将公钥拷贝到要免密登录的目标机器上 遇到yes/no的都输入yes ssh-copy-id m1 ssh-copy-id m2 ssh-co…

JAVA毕业设计——基于Springboot+vue的校园二手交易和交流论坛系统(源代码+数据库)

github代码地址 https://github.com/ynwynw/stuSecond-public 毕业设计所有选题地址 https://github.com/ynwynw/allProject 基于Springbootvue的校园二手交易和交流论坛系统(源代码数据库)039 一、系统介绍 这是集校园二手交易、校园交流论坛、校园表白墙为一体的项目。分为…

Java基于微信小程序的新冠疫苗预约小程序 springboot+vue+elementUI

项目介绍 基于小程序的疫苗预约系统是计算机技术与疫苗管理相结合的产物&#xff0c;通过疫苗预约系统实现了对疫苗的高效管理。随着计算机技术的不断提高,计算机已经深入到社会生活的各个角落.而采用人工疫苗预约的方法&#xff0c;不仅效率低&#xff0c;易出错&#xff0c;手…

Python基础(十四):公共操作的讲解

文章目录 公共操作的讲解 一、运算符 1、+ 2、* 3、in或not in 二、公

面了个腾讯35k出来的,他让我见识到什么叫“精通MySQL调优”

始末 MySQL调优对于很多程序员而言&#xff0c;都是一个非常棘手的问题&#xff0c;多数情况都是因为对数据库出现问题的情况和处理思路不清晰。在进行MySQL的优化之前必须要了解的就是MySQL的查询过程&#xff0c;很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能…

CN_@TCP可靠机制@差错控制@流量控制@拥塞控制

文章目录CN_TCP可靠机制差错控制流量控制拥塞控制TCP的可靠性机制序号确认窗口大小和累计确认&#x1f388;Window scaling重传超时冗余ACK&#xff08;冗余确认快速重传&#xff09;差错控制&#x1f388;TCP流量控制&#x1f388;接收窗口:拥塞窗口:发送窗口例例例1例2例3例例…

【Node.js】实现微信小程序订阅消息推送功能

实战项目名称&#xff1a;实现微信小程序订阅消息通知 文章目录一、实战步骤1. 登录微信小程序管理端&#xff0c;添加订阅消息模板2. 定义好需要发送的消息3.获取小程序的access_token4. 发起请求&#xff0c;向用户推送消息4. 小程序端添加接收订阅消息的按钮二、完整源代码三…