变分自编码器(VAE)的原理介绍和公式推导

初学者可以先看看苏剑林的这篇博客 https://kexue.fm/archives/5253,本文主要是在公式推导方面

1.VAE的总体思想

VAE就是让样本 x 通过一个编码器(Encoder)输入到一个分布隐变量(latent variable)空间上去,这个隐变量空间猛地一听有点唬人,其实可以把它当成一个分布,比如正态分布。然后从这个隐空间上采样一个数据,再通过解码器(Decoder)输出 x',使得 x 与 x' 尽可能的一样。

 

变分自编码器(VAE)的原理介绍和公式推导_第1张图片

(图片来自苏剑林博客)

如果像这个图的话,我们其实完全不清楚:究竟经过重新采样出来的Z_k,是不是还对应着原来的X_k

所以VAE的结构是这样的

变分自编码器(VAE)的原理介绍和公式推导_第2张图片

(图片来自苏剑林博客)

vae 是为每个样本构造专属的正态分布,然后采样来重构

2. 数学原理推导

现在我们假设知道的确有这样的 latent variables,但是我们不知道它到底是一个怎样的分布,现在能够观测到的就是样本 x ,我们希望在给定 x 的条件下去推出 z 的分布,即 p(z|x)

根据贝叶斯定理,可得:

p(z|x) = \frac{p(x|z)p(z)}{p(x)}

然而,这个后验概率 p(z|x) 无法计算,因为 p(x) 无法计算。所以我们用一个我们可求解的分布 q(z|x) 去近似这个 p(z|x) 。

那么怎么度量两个分布之间的近似关系呢? 这个时候KL散度就上场了。

KL散度的公式为:

所以为了让已知分布 q(z|x) 和 p(z|x) 近似,KL散度公式就变成了,

KL(q(z|x)||p(z|x))=\int q(z|x)log \frac{q(z|x)}{p(z|x)}dz = \int q(z|x)log \frac{q(z|x)}{\frac {p(x|z)p(z)}{p(x)}}dz 

分母是用贝叶斯定理得到的。我们的目的要最小化这个公式,接下来就是把公式拆开

=\int q(z|x)logq(z|x)dz+\int q(z|x)logp(x)dz-\int q(z|x)log[p(x|z)p(z)]dz

=\int q(z|x)logq(z|x)dz+logp(x)\int q(z|x)dz-\int q(z|x)log[p(x|z)p(z)]dz(因为q(z|x)是可解的,所以它\int q(z|x)dz是1)

把第二项提前

=logp(x)+\int q(z|x)logq(z|x)dz-\int q(z|x)log[p(x|z)p(z)]dz

x 是已经给定的,所以虽然我不知道 p(x)是多少,但它的确肯定是个定值,于是最小化KL(q(z|x)||p(z|x)) 相当于最小化后两项

令 L = \int q(z|x)logq(z|x)dz-\int q(z|x)log[p(x|z)p(z)]dz

L = \int q(z|x)logq(z|x)dz-\int q(z|x)logp(x|z)dz-\int q(z|x)p(z)dz

= \int q(z|x) log\frac{q(z|x)}{p(z)} dz-\int q(z|x) log(x|z)dz

=KL(q(x|z)||p(z))-E_{z\sim ~q(x|z)}[logp(x|z)]

最小化L,等于最大化-L,也就是说最大化

=E_{z\sim ~q(x|z)}[logp(x|z)]-KL(q(x|z)||p(z))

变分自编码器(VAE)的原理介绍和公式推导_第3张图片

这个式子的第一项的意思是,不断在 z 上采样,然后使得重构的样本\hat{x} 与原始样本 x的最接近。

第二项就是说使得我们假设的后验证分布 q(z|x)和先验分布 p(z) 尽量接近,这里的后验分布是我们可求解的,先验分布 p(z) 和 一开始的p(z|x) 不是一回事,一开始的p(z|x) 我们是没办法知道的,而这个先验分布p(z) 我们是可以人为定义的,在论文中将这个先验分布定义为标准正态分布 N(0,1),而 后验分布 q(z|x)  其实就是图二当中的这一部分,如下图,它是可以通过神经网络得到的。

变分自编码器(VAE)的原理介绍和公式推导_第4张图片

所以整个VAE的图就变成了

变分自编码器(VAE)的原理介绍和公式推导_第5张图片

所以讲标准正态分布带入到第二项中,就变成了

其实整个VAE到这里说的已经差不多了,里面还有一个重参数技巧,主要处理的是反向传播的求导问题

3.重参数技巧

变分自编码器(VAE)的原理介绍和公式推导_第6张图片

由图三可知,Z_i 都是采样得到的,但是 “采样” 这个操作是不可导的,而采样的结果是可导的。所以利用

变分自编码器(VAE)的原理介绍和公式推导_第7张图片

也就是从N(\mu,\sigma^2) 中采样一个Z,相当于从N(0,1)中采样一个ε,然后让 Z=\mu+\varepsilon \times \sigma

于是,我们将从N(\mu,\sigma^2) 采样变成了从N(0,1) 中采样,然后通过参数变换得到从N(\mu,\sigma^2) 中采样的结果。这样一来,“采样” 这个操作就不用参与梯度下降了,改为采样的结果参与,使得整个模型可训练了。

以上就是VAE的全部推导和原理解释了。

 

参考 

https://kexue.fm/archives/5253

变分自编码器介绍、推导及实现 - Hola的文章

你可能感兴趣的:(机器学习算法,机器学习,深度学习)