近似后验 $q_\phi(z|x)$ 的表达能力是变分自编码器 (VAE) 性能的主要因素。诸如对角高斯分布等常见选择,通常难以充分捕捉 $p_\theta(z|x)$ 的真实复杂性。为变分后验甚至先验使用隐式模型,提供了一种强有力的方法。什么是隐式模型?隐式模型是指我们可以轻松地从分布中采样,但难以(或根本无法)计算给定点的概率密度函数(PDF)或概率质量函数(PMF)的分布。以生成式神经网络为例:你输入随机噪声,它会产生复杂的输出。你可以获得样本,但对于特定 $z$,其 $\log q(z)$ 是多少呢?这通常是难以计算的。形式上,如果我们想要一个隐式后验 $q_\phi(z|x)$,我们通过简单噪声变量 $\epsilon$(例如,$\epsilon \sim \mathcal{N}(0, I)$)和输入 $x$ 的确定性变换 $g_\phi$ 来定义它: $$ z = g_\phi(\epsilon, x) $$ 尽管我们可以通过先采样 $\epsilon$ 然后应用 $g_\phi$ 来从 $q_\phi(z|x)$ 生成样本 $z$,但 $q_\phi(z|x)$ 的密度本身是无法直接获得的。这与高斯后验(例如 $q_\phi(z|x) = \mathcal{N}(z | \mu_\phi(x), \Sigma_\phi(x))$)形成鲜明对比,在高斯后验中,我们可以直接计算 $\log q_\phi(z|x)$。挑战:ELBO与隐式密度VAEs的证据下界(ELBO)是: $$ L(\theta, \phi; x) = E_{z \sim q_\phi(z|x)}[\log p_\theta(x|z)] - KL(q_\phi(z|x) || p(z)) $$ 我们来展开KL散度项: $$ KL(q_\phi(z|x) || p(z)) = E_{z \sim q_\phi(z|x)}[\log q_\phi(z|x) - \log p(z)] $$ 如果 $q_\phi(z|x)$ 是隐式的,则项 $E_{z \sim q_\phi(z|x)}[\log q_\phi(z|x)]$(即 $q_\phi$ 的负熵)变得难以处理,因为 $\log q_\phi(z|x)$ 未知。这是将隐式模型用于变分后验时的主要难题。如果先验 $p(z)$ 也被选为隐式模型(也许是为了表示潜在空间中复杂的标的结构),那么 $E_{z \sim q_\phi(z|x)}[\log p(z)]$ 项也无法通过直接评估得到。然而,如果 $p(z)$ 简单(例如,$\mathcal{N}(0, I)$),这一项仍然可以通过采样 $z \sim q_\phi(z|x)$ 并评估 $\log p(z)$ 来估计。处理难以计算的对数密度那么,如果无法计算 $\log q_\phi(z|x)$,我们如何优化ELBO呢?已经出现了几种策略,其中对抗训练尤为突出。密度比估计 / 对抗方法: KL散度或其部分,通常可以使用类似于生成对抗网络(GANs)的技术进行重写或近似。核心思想是训练一个判别器(或评论器)网络 $D_\psi(z)$(如果以 $x$ 为条件,则为 $D_\psi(z, x)$),以区分来自 $q_\phi(z|x)$ 的样本和来自 $p(z)$ 的样本。 然后, $q_\phi$ 的目标(具体来说,是 $g_\phi$ 的参数)是生成能够“欺骗”这个判别器的样本 $z$。例如,项 $KL(q_\phi(z|x) || p(z))$ 可以间接估计或优化。如果 $p(z)$ 是一个简单分布,主要问题是熵项 $H(q_\phi(z|x)) = -E_{z \sim q_\phi(z|x)}[\log q_\phi(z|x)]$。 各种f-散度,包括KL散度,可以使用涉及判别器的变分表示来表达。例如,詹森-香农散度 $JS(q_\phi || p)$,由原始GAN目标函数最小化,是这样一种情况。对抗变分贝叶斯(AVB)框架,我们将在下一节讨论,它提供了一种具体机制。它通常涉及训练一个独立的网络 $T(z)$ 以近似 $\log q_\phi(z|x)$ 或直接估计KL项。重点是 $q_\phi(z|x)$ 通过 $z = g_\phi(\epsilon,x)$ 隐式定义,其参数根据来自重构项和近似KL散度的对抗项的梯度流进行更新。核密度估计(KDE): 原则上,可以从 $q_\phi(z|x)$ 中抽取大量样本,并使用KDE来估计任何点 $z$ 的密度 $q_\phi(z|x)$。然后,$\log q_\phi(z|x)$ 可以被近似。然而,KDE严重受维度灾难影响,并需要非常大量的样本,这使其在VAEs典型的潜在空间维度中不切实际。无似然推断方法: 更广泛的无似然推断领域(也称为近似贝叶斯计算,ABC)处理似然(或在本例中,后验密度)难以计算但可以采样的情况。该领域的一些技术可以为带有隐式后验的VAEs的方法提供启发,通常涉及比较从不同模型生成的数据的概括统计量。以下图表说明了如何将隐式后验集成到VAE中,并使用对抗方法处理KL散度项。digraph G { rankdir="TB"; splines="ortho"; node [shape="box", style="rounded,filled", fillcolor="#e9ecef", fontname="sans-serif"]; edge [fontname="sans-serif"]; subgraph cluster_encoder { label="隐式后验 q_φ(z|x)"; style="rounded"; bgcolor="#f8f9fa"; x_node [label="输入 x", shape="ellipse", fillcolor="#a5d8ff", margin="0.1"]; encoder_nn [label="编码器网络\nf_φ", margin="0.15"]; epsilon_node [label="噪声 ε ~ p(ε)", shape="ellipse", fillcolor="#b2f2bb", margin="0.1"]; sampler_g [label="采样器 z = g_φ(ε, x)", fillcolor="#ffec99", margin="0.15"]; z_sample_node [label="潜在样本\nz ~ q_φ(z|x)", shape="ellipse", fillcolor="#ffc9c9", margin="0.1"]; x_node -> encoder_nn; encoder_nn -> sampler_g [label="参数"]; epsilon_node -> sampler_g; sampler_g -> z_sample_node; } subgraph cluster_decoder { label="解码器 p_θ(x|z)"; style="rounded"; bgcolor="#f8f9fa"; decoder_nn [label="解码器网络\nd_θ", margin="0.15"]; x_recon_node [label="重构 x̂", shape="ellipse", fillcolor="#a5d8ff", margin="0.1"]; z_sample_node -> decoder_nn; decoder_nn -> x_recon_node; } subgraph cluster_prior_discriminator { label="KL散度处理(对抗式)"; style="rounded"; bgcolor="#f8f9fa"; prior_z_node [label="先验样本\nz' ~ p(z)", shape="ellipse", fillcolor="#d0bfff", margin="0.1"]; discriminator_node [label="判别器 D_ψ(z)", fillcolor="#fcc2d7", margin="0.15"]; kl_loss_node [label="对抗损失\n(近似KL或其组成部分)", shape="plaintext"]; z_sample_node -> discriminator_node [label="来自 q_φ(z|x)"]; prior_z_node -> discriminator_node [label="来自 p(z)"]; discriminator_node -> kl_loss_node; } reconstruction_loss_node [label="重构损失\nE[log p_θ(x|z)]", shape="plaintext"]; x_recon_node -> reconstruction_loss_node [style="dashed", arrowhead="none"]; // 表示计算 elbo_objective_node [label="总ELBO(或替代目标)", shape="underline", style="filled", fillcolor="#ced4da", margin="0.15"]; reconstruction_loss_node -> elbo_objective_node [style="solid"]; kl_loss_node -> elbo_objective_node [style="solid"]; }带有隐式后验 $q_\phi(z|x)$ 和用于KL散度的对抗机制的VAE中的信息流。采样器 $g_\phi$ 生成潜在编码 $z$,这些编码用于重构。这些样本连同来自先验 $p(z)$ 的样本被输入到判别器 $D_\psi$ 中,以计算对抗损失,从而辅助塑形 $q_\phi(z|x)$。隐式先验 $p(z)$同样的思路可以应用于先验分布 $p(z)$。替代固定、简单的先验(如 $\mathcal{N}(0, I)$),人们可能希望学习一个更复杂的先验,也许它本身就是一个隐式模型。对抗式自编码器(AAEs),我们将在第7章中提及,通常使用对抗损失来将聚合后验 $q(z) = E_{p_{data}(x)}[q_\phi(z|x)]$ 匹配到一个选定的先验 $p(z)$,并且这个 $p(z)$ 可以通过来自另一个生成器的样本隐式定义。如果 $q_\phi(z|x)$ 和 $p(z)$ 都是隐式的,那么 $KL(q_\phi(z|x) || p(z))$ 项通常完全依赖于对抗或密度比估计技术。优点与缺点优点:表达能力强的后验/先验: 隐式模型能够表示任意复杂的分布,潜在地捕捉真实后验 $p_\theta(z|x)$ 或期望先验 $p(z)$ 的多模态或非高斯特性。这可以导致更紧密的ELBO(如果可以估计)和更好的生成性能。改进的样本质量: 更准确的后验可以带来更高质量的重构和生成样本,因为潜在空间可能结构更好。灵活性: 避免了对 $q_\phi(z|x)$ 形式的限制性参数假设。缺点:训练不稳定: 对抗训练组件出了名的难以稳定和调整,需要仔细平衡生成器和判别器更新、损失函数选择和网络架构。评估难题: 评估真正的ELBO变得困难。尽管我们可以优化一个替代目标,但了解界限的实际紧密程度更难。模型比较通常依赖于样本质量、使用如重要性采样(之前已涵盖)的方法进行留存似然估计,或下游任务性能。复杂性增加: 由于额外的网络(例如,判别器或评论器)和更复杂的训练循环,整体模型复杂性增加。展望使用隐式模型的变分推断为增强VAEs提供了丰富途径。通过采样过程 $z = g_\phi(\epsilon, x)$ 来定义 $q_\phi(z|x)$(以及潜在的 $p(z)$),我们可以建模远比标准高斯分布更复杂的分布。主要障碍,即 $\log q_\phi(z|x)$ 的不可计算性,通常使用对抗训练方案来解决。关于对抗变分贝叶斯(AVB)的下一节将提供一个更具体的例子,说明这些理念如何付诸实践以创建更强大的VAEs。这些方法代表着在弥合基本VAEs的可计算但有限的后验与像GANs这类模型的高度灵活但通常无结构的潜在空间之间差距方面迈出的重要一步。