变分自编码器 Variational AutoEncoders

变分自编码器(VAEs)是深度潜变量表示学习模型,常用于图像生成和半监督学习。通过变分推断和重参数化技巧解决后验概率计算难题,结合神经网络参数化实现概率分布。实验表明,VAEs在图像数据上能学习到有意义的潜变量表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

变分自编码器(Variational AutoEncoders,VAEs)是一种深度潜变量表示学习模型。其已经被用于图像生成,并且在半监督学习上取得目前最好(state-of-the-art)的性能。

深度生成模型

考虑这样一个有向潜变量模型。

p(x,z)=p(x|z)p(z) p ( x , z ) = p ( x | z ) p ( z )
其中观测值 xX x ∈ X ,而 X X 可以是连续、离散变量,隐变量 zRk z ∈ R k
举个例子,观测值 x x 可以想象成一张图片(例如一张人脸),z是潜因子(训练过程中不可见),刻画人脸的特征。 z z 的一个坐标可以编码这张脸是否高兴、是男是女等。
隐变量z可以有许多层,例如 p(xz1)p(z2z3)p(zm1zm)p(zm) p ( x ∣ z 1 ) p ( z 2 ∣ z 3 ) ⋯ p ( z m − 1 ∣ z m ) p ( z m ) 。这就叫做 深度生成模型,从潜变量的表示可以学习出层次关系,这里我们建设只有一个隐层。

深度生成模型的学习

假设我们有一个数据集 D={x1,x2,...,xn} D = { x 1 , x 2 , . . . , x n } ,我们需要关注的是模型的推断学习

  • 学习模型 p p 的参数θ
  • z z 的近似后验推断:给定图片x的情况下,其潜变量 z z 是什么?
  • x的近似后验推断:给定部分缺失的图片 x x ,怎样填补缺失部分?

我们在这些任务中有这些假设:

  • 难以积分 后验概率p(z|x)难以积分
  • 大数据 数据集 D D 大到内存中无法存放,一次只能处理D的一个小批量

变分自编码器就是处理这样情况的模型。

传统方法

EM算法能够完成潜变量模型的学习任务。然而,EM算法的E步骤要求计算近似后验 p(z|x) p ( z | x ) ,我们已经假设其难以计算。M步骤中,模型参数 θ θ 的更新是根据整个数据集的,这又违反了内存限制。
近似后验的推断可以使用平均场方法。回想一下,平均场近似的一步需要计算期望,这个计算的时间复杂度是目标变量马尔科夫毯规模的指数级别。
隐变量 z z 的马尔科夫毯有几个变量?我们假设x中的至少一个分量由 z z 的所有分量决定。这在模型的图结构里引入了一个V结构。这样,z中某一个分量 zi z i 的马尔科夫毯包含了其余所有分量。这就使得平均场近似难以计算。简单地说,模型 p p 包含了因子p(xiz1,...,zk),这些 z z 分量都互相系在一起。
另外一个路径是使用基于采样的方法。在原始的VAE论文中,作者比较了这类方法,并指出其不使用于大规模数据集。此外,Metropolis-Hastings之类的方法要求手动指定一种分布,这往往难以确定。

自编码变分贝叶斯

现在讨论自编码变分贝叶斯(Auto-encoding variational Bayes,AEVB),一种能够有效解决上述三种推理、学习任务的算法;而变分自编码器就是AEVB的一个实例。
AEVB基于变分推断的思想。回想变分推断,我们试图在泛函qϕ中最大化证据下界(Evidence lower bound,ELBO)

L(pθ,qϕ)=Eqϕ(z|x)[logpθ(x,z)logqϕ(z|x)] L ( p θ , q ϕ ) = E q ϕ ( z | x ) [ log ⁡ p θ ( x , z ) − log ⁡ q ϕ ( z | x ) ]

而ELBO满足这个分解
logpθ(x)=KL(qϕ(z|x)||p(z|x))+L(pθ,qϕ) log ⁡ p θ ( x ) = K L ( q ϕ ( z | x ) | | p ( z | x ) ) + L ( p θ , q ϕ )

因为 x x 是固定的,我们就可以定义x条件下的分布 q(z|x) q ( z | x ) 。这使得我们可以对每个 x x 选择不同的q(z),从而相比于相同的 q(z) q ( z ) ,这有着更佳的后验近似。
怎样优化 q(z|x) q ( z | x ) ?平均场近似的方法对我们的目标来说不够精确。平均场的假设将 q q 完全因子化过于“强烈”,而坐标下降优化算法又过于简单。

黑盒变分推断

第一个AEVB用的思路是一个通用的优化q的方法,并且其适用于大规模数据集(比平均场更复杂)。我们稍后将这个算法与 q q 的特定选择结合起来。
这个方法称作黑盒变分推断——使用对ϕ的梯度下降法最大化证据下界(而不是平均场中的坐标下降法)。故这里只假设 qϕ q ϕ 对其参数 ϕ ϕ 是可微的。
此外,这个过程不仅仅是一个推断过程。我们同时对于 ϕ ϕ θ θ 的联合梯度下降完成了学习。关于 ϕ ϕ 的优化会保持ELBO关于 logp(x) log ⁡ p ( x ) 紧的下界。这个方法某种程度上与EM算法优化边缘似然上的下界类似。

评价函数梯度估计量

为了实现黑盒变分推断,需要计算梯度

θ,ϕEqϕ(z)[logpθ(x,z)logqϕ(z)] ∇ θ , ϕ E q ϕ ( z ) [ log ⁡ p θ ( x , z ) − log ⁡ q ϕ ( z ) ]

计算关于 q q 期望的闭式解往往不可能。可以从q中使用Monte Carlo方法采样,估计这个梯度。这也可以轻易地计算出 p p 的梯度。也可以交换求梯度和求期望的顺序,使用Monte Carlo估计
Eqϕ(z)[θlogpθ(x,z)]

然而这个式子关于 q q 求梯度就更难了。注意在这里再次交换顺序是不可行的,因为这个分布的期望不一定是可微的。
估计这个梯度的一个方法使用评价函数估计量:
ϕEqϕ(z)[logpθ(x,z)logqϕ(z)]=Eqϕ(z)[(logpθ(x,z)logqϕ(z))ϕlogqϕ(z)]

这个式子的推导需要一些代数和微积分知识,完全的推导过程在 本文的附录B。
上式将求梯度放在求期望内,这就使得可以使用Monte Carlo评估正确性。本文将其称为梯度估计量的 评价函数
不幸的是,评价函数估计量有一个重要的缺点:高方差。这是什么意思?假设用Monte Carlo估计一个均值为1的某个期望。如果采样过程中的估计量是0.9, 1.1, 0.96, 1.05,…这些接近1的量。再过不了几个采样,就可以得到真实期望的良好估计量。假如你对0采样了九十九次,对100采样了一次,这样仍然可以得到正确的期望,但是你必须要设定一个非常大的采样次数才能保证采样出的期望是1,这就称作高方差。
我们在使用评价函数估计量的时候经常遇到这类问题。事实上,其方差高到我们不能用其学习很多模型。
VAE论文的关键贡献是提出了另一个性质更好的估计量。其分为两步:1. 重写ELBO的形式以保证其部分拥有闭式解(不需要Monte Carlo采样);2. 使用基于“重参数化”技巧的另一个梯度估计量。

SGVB估计量

ELBO的重写形式如下

logp(x)Eqϕ(z|x)[logpθ(x|z)]KL(qϕ(z|x)||p(z)) log ⁡ p ( x ) ≥ E q ϕ ( z | x ) [ log ⁡ p θ ( x | z ) ] − K L ( q ϕ ( z | x ) | | p ( z ) )

从代数的角度出发很容易验证这是相同的ELBO。
重参数化有个很有趣的解释。首先,认为 x x 是一个观测到的数据点,右侧由两部分组成,都包含了采样量zq(zx)。而 z z 可以解释成为描述x的“编码”,故 q q 可以称为编码器
第一项中,logp(x|z)是采样到的编码 z z 关于观测量x对数似然。 p(xz) p ( x ∣ z ) 对于原始数据 x x 分配较高的概率时,该项此时最大。其试图从编码z中重建 x x 。因此p(xz)称为 解码器,该项称为 编码误差
第二项是 q(zx) q ( z ∣ x ) 与后验 p(z) p ( z ) 的KL散度,其中我们会令其为单位正态分布。这使得 z z 向高斯分布的形态靠拢。我们称之为正则项。它避免了q(zx)是简单地对数据的同一映射编码,而是令其学习到一些有意义的表示(例如脸部特征)。
因此,我们的优化目标是拟合 q(z|x) q ( z | x ) ,其映射 x x 到有意义的隐空间z中,并且可以从 p(x|z) p ( x | z ) 中重建 x x 。这个目标与神经网络自编码器类似,也是AEVB名称的来源。

重参数化技巧

正如之前所提到的,优化我们的目标需要梯度的良好估计量。VAE论文的另一个主要贡献是提出了基于重参数化技巧的低方差梯度估计量。
在普通条件下,可以用以下两步的生成过程描述分布qϕ(zx)
1. 首先,从一个类似于标准正态分布 N(0,1) N ( 0 , 1 ) 的简单分布 p(ϵ) p ( ϵ ) 采样一个随机噪声 ϵ ϵ

ϵp(ϵ) ϵ ∼ p ( ϵ )

2. 随后,使用一个确定性变换 gϕ(ϵ,x) g ϕ ( ϵ , x ) 将这个随机噪声映射到一个更加复杂的分布
z=gϕ(ϵ,x) z = g ϕ ( ϵ , x )

若要获取有意义的分布族 qϕ q ϕ ,可以选择一个 gϕ(ϵ,x) g ϕ ( ϵ , x ) ,例如 z=gϕ(ϵ,x) z = g ϕ ( ϵ , x ) ,就可以得到分布 qϕ(zx) q ϕ ( z ∣ x )
现在在高斯分布上提供一个重参数化的例子,这也是最简单的例子。考虑 zqμ,σ(z)=N(μ,σ) z ∼ q μ , σ ( z ) = N ( μ , σ ) ,可以重写成
z=gμ,σ(ϵ)=μ+ϵσ z = g μ , σ ( ϵ ) = μ + ϵ ⋅ σ

其中 ϵN(0,1) ϵ ∼ N ( 0 , 1 ) 。显然这两种写法都表示随机变量 z z 具有相同的分布。
这种方法的最大好处就是可以写出q(z)期望的梯度(对于任何 f f )为
ϕEzq(zx)[f(x,z)]=ϕEϵp(ϵ)[f(x,g(ϵ,x))]=Eϵp(ϵ)[ϕf(x,g(ϵ,x))]

求梯度现在位于求期望的内部,因此可以使用Monte Carlo估计右项。这种方法的方差比评价函数估计量的方差低得多,使得之前不能学习的许多模型可以学习。

选择 q q p

到此为止,我们没有明确 p p q的形式,除了它们可以是任意函数之外。怎样参数化这些分布?最佳的 q(zx) q ( z ∣ x ) 应当是能能够近似真实后验 p(zx) p ( z ∣ x ) 。相似地, p(x) p ( x ) 应当具有足够的灵活度,以足够表示任意复杂度的数据。
因为这些原因,我们可以使用神经网络参数化 q q p。神经网络是极具表现力的函数逼近器,可以在大型数据集上进行高效的优化。这个选择为经典机器学习方法(近似贝叶斯推断)和现代深度学习之间架起了一座桥梁。
然而怎么用神经网络参数化一个概率分布呢?假设 q(xz) q ( x ∣ z ) p(xz) p ( x ∣ z ) 都是正态分布,可以写成

q(zx)=N(z;μ⃗ (x),σ⃗ (x)I) q ( z ∣ x ) = N ( z ; μ → ( x ) , σ → ( x ) ⊙ I )

其中 μ⃗ (x),σ⃗ (x) μ → ( x ) , σ → ( x ) 都是 x x 的确定性向量值函数,被任意复杂度的神经网络参数化。
跟一般地,同样的参数化方法可以应用在任何指数族分布上——用一个关于x的函数参数化其充分统计量。

变分自编码器

现在我们可以将AEVB应用到变分自编码器上了。
AEVB包含了以下三项方法:1. 自编码ELBO重写形式;2. 黑盒变分推断;3. 重参数化的低方差梯度估计量。其使用重参数化的梯度估计量、黑盒变分推断优化自编码ELBO。这个算法可以适用于任何深度生成潜变量模型 pθ p θ (需要关于 θ θ 可微分)。
变分自编码器使用AEVB、一个特定的编码器 q q 学习模型p。模型 p p 的参数化形式是

p(xz)=N(x;μ(z),σ(z)I)p(z)=N(z;0,I)

其中 μ⃗ (z),σ⃗ (z) μ → ( z ) , σ → ( z ) 各自由神经网络参数化(通常是2隐层、500个神经元每层)。模型 q q 的参数化形式
q(zx)=N(z;μ(x),σ(x)I)

p p q的神经网络参数化形式更进一步简化了自编码ELBO。特别地我们使用一个闭式解计算正则化项。Monte Carlo估计仅用于重建项。这些式子的具体形式已经在文中给出。
我们可以将变分自编码器解释成一个有向潜变量概率图模型。我们也可以将其视为一个特殊的神经网络神经网络自编码器优化目标。不像之前的神经网络自编码器,VAEs的重建项和正则项更具有贝叶斯学习的视角。

实验结果

VAE能够应用到图像 x x <script type="math/tex" id="MathJax-Element-243">x</script>上,学习有意义的潜变量表示。原论文包含了VAE的几个例子,Frey人脸数据集和MNIST数据集。在人脸数据集上,在不同潜变量之间,表情逐渐变化(例如在“惊讶”和“生气”两种表情中间有着平滑的过度表情)。在MNIST数据及上,也有平滑的“插值”数字显现。
作者把他的方法同另外三种方法做了比较:wake-sleep算法、Monte-Carlo EM和hybrid Monte-Carlo。后两种是基于采样的方法,它们都很精确,但是难以扩展到大数据集上。Wake-Sleep算法是一种变分推断算法,拥有较好的可扩展性,然而其没有使用ELBO的精确梯度(用一个近似替代),因此不如AEVB精确。文章中还绘图予以说明。

参考文献

The variational auto-encoder, https://ermongroup.github.io/cs228-notes/extras/vae/
Auto-Encoding Variational Bayes, https://arxiv.org/abs/1312.6114

变分自编码器Variational AutoencodersVAE)是一种生成模型,结合了自编码器和变分推断的概念。 VAE的目标是学习输入数据的潜在表示,并通过该表示生成新的样本。与传统的自编码器不同,VAE引入了概率分布的概念,并通过变分推断来学习数据的分布。 以下是VAE的主要组成部分和工作流程: 1. 编码器(Encoder):编码器将输入数据映射到潜在空间中的潜在变量(latent variable),也称为编码(encoding)。编码器的目标是学习数据的分布,并产生潜在变量的均值和方差。 2. 解码器(Decoder):解码器接收潜在变量作为输入,并将其映射回原始数据空间中,以重构输入数据。解码器的目标是学习生成数据的分布,并尽可能准确地重构输入数据。 3. 潜在变量采样(Latent Variable Sampling):在训练过程中,从编码器中获得的均值和方差用于参数化一个概率分布,然后从该分布中采样潜在变量。这个采样过程使得VAE能够生成多样化的样本。 4. 损失函数(Loss Function):VAE使用重构损失和KL散度损失来训练模型。重构损失衡量重构样本与原始样本之间的差异,KL散度损失衡量潜在变量的分布与预定义的先验分布之间的差异。通过最小化这两个损失函数,VAE能够学习到数据的潜在表示。 VAE的训练过程可以概括为以下几个步骤: 1. 输入数据经过编码器,获得潜在变量的均值和方差。 2. 根据潜在变量的均值和方差,从潜在空间中采样一些潜在变量。 3. 采样的潜在变量输入解码器,生成重构样本。 4. 计算重构损失和KL散度损失,并将它们相加得到总体损失。 5. 使用反向传播算法更新编码器和解码器的参数。 6. 重复步骤1-5,直到达到预定的训练迭代次数或达到训练目标。 VAE通过学习数据的潜在表示,能够生成新的样本,并且具有较好的样本多样性和连续性。它在图像生成、特征提取和数据压缩等领域具有广泛的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值