机器学习-白板推导系列(三十二)-变分自编码器(VAE,Variational AutoEncoder)

1. Introduction

本小节主要介绍的是 变 分 自 编 码 器 ( V a r i a t i o n a l    A u t o E n c o d e r ) \color{red}变分自编码器(Variational\;AutoEncoder) VariationalAutoEncoder,VAE在之前的变分推断中就有介绍,具体在“随机梯度变分推断(SGVI)”中已进行描述。其中采用了重参数化技巧,也就是Amortized Inference。VAE在很多blog中都有详细的解释,这里只是很简单的描述其思想,希望可以抛转引玉。

VAE中的V指的是变分推断,这个概念是来自于概率图模型。而AE的概念是来自于神经网络。所以,VAE实际上是神经网络和概率图的结合模型。

2. 从GMM到VAE

VAE是一个Latent Variable Model(LVM)。我们之前介绍的最简单的LVM是高斯混合模型(GMM),那么GMM是如何一步一步演变成VAE的呢?GMM是k个高斯分布(Gaussian Dist)的混合,而VAE的思想是无限(infinite)个Gaussian Dist的混合。在GMM中, Z ∼ Z\sim Z Categorical Distribution(1维离散型分布),如下表所示,

Z C 1 C_1 C1 C 2 C_2 C2 ⋯ \cdots C k C_k Ck
P ( Z ) P(Z) P(Z) p 1 p_1 p1 p 2 p_2 p2 ⋯ \cdots p k p_k pk

其中 ∑ i = 1 k p i = 1 \sum_{i=1}^k p_i = 1 i=1kpi=1,在给定 Z = C k Z=C_k Z=Ck的情况下,满足 P ( X ∣ Z = C i ) ∼ N ( μ i , ∑ i ) P(X|Z=C_i)\sim \mathcal{N}(\mu_i, \sum_i) P(XZ=Ci)N(μi,i)

很容易可以感觉到,这个GMM顶多就用来做一做聚类分布,复杂的任务根本做不了。比如,目标检测,GMM肯定就做不了,因为 Z Z Z只是离散的类别,它太简单了。

下面举一个例子,假设 X X X是人民群众,我们想把他们分成工人,农民和反动派。由于, Z Z Z是一个一维的变量,那么我们获得的特征就很有限,所以分类就很简单。
机器学习-白板推导系列(三十二)-变分自编码器(VAE,Variational AutoEncoder)_第1张图片
那么,怎样才可以增加 Z Z Z的特征信息呢?因为 Z Z Z是离散的一维的隐变量,那么把它扩展成离散的高维的随机变量,不就行了。那么,变化就来了,大家看好了。GMM中 Z Z Z是离散的一维变量,那么在VAE被扩展为 m m m维的高斯分布 Z ∼ N ( 0 , I m × m ) Z\sim \mathcal{N}(0,I_{m\times m}) ZN(0,Im×m)。而在给定 Z Z Z的条件下, P ( X ∣ Z ) ∼ N ( μ θ ( Z ) , ∑ θ ( Z ) ) P(X|Z)\sim \mathcal{N}(\mu_{\theta}(Z),\sum_{\theta}(Z)) P(XZ)N(μθ(Z),θ(Z))。这里采用神经网络来逼近均值和方差,而不通过重参数化技巧这些直接去算(太麻烦了)。那么均值和方差是一个以 Z Z Z为自变量, θ \theta θ为参数的函数。那么,假设条件可以总结为:
{ Z ∼ N ( 0 , I m × m ) P ( X ∣ Z ) ∼ N ( μ θ ( Z ) , ∑ θ ( Z ) ) (1) \begin{aligned} \left\{ \begin{array}{ll} Z\sim \mathcal{N}(0,I_{m\times m}) & \\ P(X|Z)\sim \mathcal{N}(\mu_{\theta}(Z),\sum_{\theta}(Z)) & \end{array}\right.\end{aligned}\tag{1} {ZN(0,Im×m)P(XZ)N(μθ(Z),θ(Z))(1)
其中 Z ∼ N ( 0 , I m × m ) Z\sim \mathcal{N}(0,I_{m\times m}) ZN(0,Im×m)是一个先验分布假设, Z Z Z服从怎样的先验分布都没有关系,只要是高维的连续的就行了,只是在这里假设为Gaussian。我们关心的不是先验,我们实际上关心的是后验 P ( Z ∣ X ) P(Z|X) P(ZX) Z Z Z实际上只是帮助我们建模的。那么,接下来可以做一系列的推导:
P θ ( X ) = ∫ Z P θ ( X , Z ) d Z = ∫ Z P ( Z ) P θ ( X ∣ Z ) d Z (2) \begin{aligned} P_\theta(X) = \int_Z P_\theta(X,Z)dZ = \int_Z P(Z)P_\theta(X|Z) dZ \end{aligned}\tag{2} Pθ(X)=ZPθ(X,Z)dZ=ZP(Z)Pθ(XZ)dZ(2)
推导到了这里有个什么问题呢?因为 Z Z Z是一个高维的变量,所以 ∫ z P ( Z ) P θ ( X ∣ Z ) d Z \int_z P(Z)P_\theta(X|Z) dZ zP(Z)Pθ(XZ)dZ是intractable,积分根本算不出来。由于, P θ ( X ) P_\theta(X) Pθ(X)是intractable,直接导致 P θ ( Z ∣ X ) P_\theta(Z|X) Pθ(ZX)也算不出来。因为根据Bayesian公式,
P θ ( Z ∣ X ) = P θ ( Z ) P θ ( X ∣ Z ) P θ ( X ) (3) \begin{aligned} P_\theta(Z|X) = \frac{P_\theta(Z)P_\theta(X|Z)}{P_\theta(X)} \end{aligned}\tag{3} Pθ(ZX)=Pθ(X)Pθ(Z)Pθ(XZ)(3)
实际上这里就是贝叶斯推断中一个很常见的现象,即为归一化因子计算困难。 \textbf{实际上这里就是贝叶斯推断中一个很常见的现象,即为归一化因子计算困难。} 实际上这里就是贝叶斯推断中一个很常见的现象,即为归一化因子计算困难。

本小节主要从建模的角度介绍了VAE,实际上这就是一个Latent Variable Model。而GMM是 k k k个离散的高斯分布的组合,由于隐变量 Z Z Z是一维的离散变量,所以表达能力有限。为了增加其泛化能力,将其扩展为高维连续的变量。又因为其维度过高,导致通常情况下,后验分布基本是intractable。所以,下一小节将介绍如何求解此类问题。

3. VAE的推断和学习

上一小节中简要的描述了VAE的模型表示,下图则是VAE的模型图。
机器学习-白板推导系列(三十二)-变分自编码器(VAE,Variational AutoEncoder)_第2张图片

假设 θ \theta θ这些都已经求出来了。如果要生成一个样本,怎么生成呢?我们先从 Z ∼ P ( Z ) Z\sim P(Z) ZP(Z)中进行采样得到一个 z ( i ) z^{(i)} z(i)。那么, x ( i ) ∼ P θ ( X ∣ Z = z ( i ) ) x^{(i)}\sim P_\theta(X|Z=z^{(i)}) x(i)Pθ(XZ=z(i))进行采样即可。所以,这下大家可以深刻的理解,为什么我们关注的是后验 P ( X ∣ Z ) P(X|Z) P(XZ)了。而 P θ ( X ∣ Z = z ( i ) ) P_\theta(X|Z=z^{(i)}) Pθ(XZ=z(i))是什么?我们用一个神经网络取逼近它就行了。\textbf{注意:本文中将其假设为高斯分布,并不是必要的,这个都是我们自定义的,是不是高斯分布都没有关系。}由于 P θ ( X ∣ Z ) P\theta(X|Z) Pθ(XZ)是intractable的,所以自然的想到可以用一个简单分布去逼近它: Q ϕ ( z ∣ x ) → P θ ( x ∣ z ) Q_\phi(z|x) \to P\theta(x|z) Qϕ(zx)Pθ(xz),即为:
机器学习-白板推导系列(三十二)-变分自编码器(VAE,Variational AutoEncoder)_第3张图片

前面已经讲过很多遍了,通常方法可以将 log ⁡ P ( X ) \log P(X) logP(X)做如下分解:
log ⁡ P ( X ) = ELBO + KL ( Q ϕ ( z ∣ x ) ∥ P θ ( z ∣ x ) ) (4) \begin{aligned} \log P(X)=\text{ELBO}+\text{KL}\left(Q_{\phi}(z \mid x) \| P_{\theta}(z \mid x)\right) \end{aligned}\tag{4} logP(X)=ELBO+KL(Qϕ(zx)Pθ(zx))(4)
然后采用EM算法求解,EM算法是一种基于时间的迭代算法,之前已经做了详细的解释,大家可以自行查阅,

E-step为:当 Q = P θ ( z ∣ x ) Q=P_\theta(z|x) Q=Pθ(zx)时,KL=0,此时expectation就是ELBO。

M-step为:
θ = arg ⁡ max ⁡ θ ELBO = arg ⁡ max ⁡ θ E P θ ( z ∣ x ) [ log ⁡ P θ ( x , z ) ] (5) \begin{aligned} \theta = \arg\max_\theta \text{ELBO} = \arg\max_\theta \mathbb{E}_{P_\theta(z |x)}[\log P_\theta(x,z)] \end{aligned}\tag{5} θ=argθmaxELBO=argθmaxEPθ(zx)[logPθ(x,z)](5)
但是,肯定EM算法是用不了的,原因很简单 Q = P θ ( z ∣ x ) Q=P_\theta(z|x) Q=Pθ(zx)这一步根本就做不到, P θ ( z ∣ x ) P_\theta(z|x) Pθ(zx)求不出来的。我们的求解目标是使 P θ ( z ∣ x ) P_\theta(z|x) Pθ(zx) Q ϕ ( z ∣ x ) Q_\phi(z|x) Qϕ(zx)靠的越近越好。那么可以表达为:
⟨ θ ^ , ϕ ^ ⟩ = arg ⁡ min ⁡ θ , ϕ KL ( Q ϕ ( z ∣ x ) ∥ P θ ( z ∣ x ) ) = arg ⁡ max ⁡ θ , ϕ a x ELBO = arg ⁡ max ⁡ θ , ϕ E Q θ ( z ∣ x ) [ log ⁡ P θ ( x , z ) ] ⏟ P θ ( x ∣ z ) P ( z ) + H ( Q ϕ ( z ∣ x ) ) = arg ⁡ max ⁡ θ , ϕ E Q θ ( z ∣ x ) [ log ⁡ P θ ( x ∣ z ) ] − KL ( Q ϕ ( z ∣ x ) ∥ P θ ( z ) ) (6) \begin{aligned} \langle \hat{\theta}, \hat{\phi} \rangle = & \arg\min_{\theta,\phi} \text{KL}(Q_\phi(z|x) \|P_\theta(z|x) ) \\ = & \arg\max_{\theta,\phi}ax \text{ELBO} \\ = & \arg\max_{\theta,\phi} \mathbb{E}_{Q_\theta(z|x)}[\log \underbrace{P_\theta(x,z)]}_{P_\theta(x|z)P(z)} + \text{H}(Q_\phi(z|x)) \\ = & \arg\max_{\theta,\phi} \mathbb{E}_{Q_\theta(z|x)}[\log P_\theta(x|z)] - \text{KL}(Q_\phi(z|x) \|P_\theta(z)) \\ \end{aligned}\tag{6} θ^,ϕ^====argθ,ϕminKL(Qϕ(zx)Pθ(zx))argθ,ϕmaxaxELBOargθ,ϕmaxEQθ(zx)[logPθ(xz)P(z) Pθ(x,z)]+H(Qϕ(zx))argθ,ϕmaxEQθ(zx)[logPθ(xz)]KL(Qϕ(zx)Pθ(z))(6)
然后,关于 θ \theta θ ϕ \phi ϕ求梯度,采用梯度上升法来求解最优参数。可能大家会看到很多的叫法,SGVI,SGVB,SVI,Amortized Inference,实际上都是一样的,都是结合概率图模型和神经网络,使用重参数化技巧来近似后验分布,至于梯度怎么求,在“变分推断”中详细的介绍了SGVI方法的梯度计算方法。而怎样从分布 Q ϕ ( Z ∣ X ) Q_\phi(Z|X) Qϕ(ZX)中进行采样呢?用到的是重参数化技巧。
机器学习-白板推导系列(三十二)-变分自编码器(VAE,Variational AutoEncoder)_第4张图片

其中, ϵ \epsilon ϵ是噪声,通常假定为 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0,I) ϵN(0,I);而且, P ( Z ∣ X ) ∼ N ( μ ϕ ( X ) , ∑ ϕ ( X ) ) P(Z|X) \sim \mathcal{N}(\mu_\phi(X),\sum_\phi(X)) P(ZX)N(μϕ(X),ϕ(X)),而很容易可以得到, Z = μ ϕ ( X ) + ∑ ϕ ( X ) 1 2 ⋅ ϵ Z = \mu_\phi(X) + \sum_\phi(X)^{\frac{1}{2}}\cdot \epsilon Z=μϕ(X)+ϕ(X)21ϵ

  • 实际上大家会发现,所谓的VAE不过是“新瓶装旧酒”。只不过是用之前的技术对当前的概念进行了包装而已。大家可以关注一下这两项, E Q ϕ ( Z ∣ X ) [ log ⁡ P θ ( X ∣ Z ) ] \mathbb{E}_{Q_\phi(Z|X)}[\log P_\theta(X|Z)] EQϕ(ZX)[logPθ(XZ)] KL ( Q ϕ ( Z ∣ X ) ∥ P θ ( Z ) ) \text{KL}(Q_\phi(Z|X) \|P_\theta(Z)) KL(Qϕ(ZX)Pθ(Z))

    • 这个 Z → X Z\to X ZX的过程可以被称为Decode,
    • X → Z X \to Z XZ被称为Encode。
  • 我们可以看到,在训练过程中,首先是从 Q ϕ ( Z ∣ X ) Q_\phi(Z|X) Qϕ(ZX)中采样得到 z ( i ) z^{(i)} z(i) z ( i ) ∼ Q ϕ ( Z ∣ X ) z^{(i)} \sim Q_\phi(Z|X) z(i)Qϕ(ZX),然后利用 z ( i ) z^{(i)} z(i)生成出样本 x ( i ) x^{(i)} x(i),即为 x ( i ) = X ∼ P ( X ∣ Z = z ( i ) ) x^{(i)} = X \sim P(X|Z=z^{(i)}) x(i)=XP(XZ=z(i))。这样就形成了一个环,从 X X X开始到 X X X结束。

    注 意 : 训 练 时 , Z 由 Q ϕ ( Z ∣ X ) 生 成 , 而 生 成 样 本 时 , Z 是 从 简 单 的 高 斯 分 布 中 采 样 得 到 的 。 \color{red}{注意:训练时,Z由Q_\phi(Z|X)生成,而生成样本时,Z是从简单的高斯分布中采样得到的。} ZQϕ(ZX),Z

  • KL ( Q ϕ ( Z ∣ X ) ∥ P θ ( Z ) ) \text{KL}(Q_\phi(Z|X) \|P_\theta(Z)) KL(Qϕ(ZX)Pθ(Z))就是一个正则化项,对 Q ϕ ( Z ∣ X ) Q_\phi(Z|X) Qϕ(ZX)有一个约束,希望其尽量靠近标准高斯分布。不让模型坍缩到一个点上,如果没有这一项,只是去学习 E Q ϕ ( Z ∣ X ) [ log ⁡ P θ ( X ∣ Z ) ] \mathbb{E}_{Q_\phi(Z|X)}[\log P_\theta(X|Z)] EQϕ(ZX)[logPθ(XZ)]就很有可能会过拟合。

  • 第一项应该是真正的objective function,而第二项是一个regularization。实际上第二项扮演的功能和熵正则化项是一样的,都是使分布尽可能均匀,从而保留更多的可能性,因为熵就是信息量的表现,熵越大可能性越大。

以上就是对公式(6)中结果的详细解释。

3. 小结

本节只是对VAE的简单描述,更深层次的思想可以参考苏建林的blog。本节主要介绍了VAE的模型表示和推断学习过程。

  • 有关变分推断的部分,请大家自行阅读“变分推断”中的SGVI方法和“近似推断”那一小节,其中都做了详细的描述。
  • 我觉得本章的可读点在:
    • 1.从GMM模型中引出了VAE,VAE不过是GMM的进阶版。
    • 2.进阶以后发现维度太高,后验分布 P θ ( Z ∣ X ) P_\theta(Z|X) Pθ(ZX)计算不出来,于是采用简单分布 Q ϕ ( Z ∣ X ) Q_\phi(Z|X) Qϕ(ZX)来近似,这就变分法的思想。
    • 3.详细的介绍了优化ELBO中每一项的意思,这里 KL ( Q ϕ ( Z ∣ X ) ∥ P θ ( Z ) ) \text{KL}(Q_\phi(Z|X) \|P_\theta(Z)) KL(Qϕ(ZX)Pθ(Z))是正则化项,相信很多同学在看VAE中,描述令表示层服从高斯分布的时候都是一脸懵逼的吧。
    • 4.本文中还复习了用神经网络,代替分布进行采样的重参数化技巧。

其实VAE不过是“新瓶装旧酒”,本身并没有什么技术的革新,用到的算法和思想都是比较老的。

你可能感兴趣的:(机器学习-白板推导,机器学习,深度学习)