变分自编码器(VAE)的原理介绍和公式推导
初学者可以先看看苏剑林的这篇博客 https://kexue.fm/archives/5253,本文主要是在公式推导方面
1.VAE的总体思想
VAE就是让样本 通过一个编码器(Encoder)输入到一个分布隐变量(latent variable)空间上去,这个隐变量空间猛地一听有点唬人,其实可以把它当成一个分布,比如正态分布。然后从这个隐空间上采样一个数据,再通过解码器(Decoder)输出
,使得
与
尽可能的一样。
(图片来自苏剑林博客)
如果像这个图的话,我们其实完全不清楚:究竟经过重新采样出来的
,是不是还对应着原来的
。
所以VAE的结构是这样的
(图片来自苏剑林博客)
vae 是为每个样本构造专属的正态分布,然后采样来重构
2. 数学原理推导
现在我们假设知道的确有这样的 latent variables,但是我们不知道它到底是一个怎样的分布,现在能够观测到的就是样本 ,我们希望在给定
的条件下去推出
的分布,即
。
根据贝叶斯定理,可得:
然而,这个后验概率 无法计算,因为
无法计算。所以我们用一个我们可求解的分布
去近似这个
。
那么怎么度量两个分布之间的近似关系呢? 这个时候KL散度就上场了。
KL散度的公式为:
所以为了让已知分布 和
近似,KL散度公式就变成了,
分母是用贝叶斯定理得到的。我们的目的要最小化这个公式,接下来就是把公式拆开
(因为
是可解的,所以它
是1)
把第二项提前
是已经给定的,所以虽然我不知道
是多少,但它的确肯定是个定值,于是最小化
相当于最小化后两项
令
最小化,等于最大化
,也就是说最大化
这个式子的第一项的意思是,不断在 z 上采样,然后使得重构的样本 与原始样本
的最接近。
第二项就是说使得我们假设的后验证分布 和先验分布
尽量接近,这里的后验分布是我们可求解的,先验分布
和 一开始的
不是一回事,一开始的
我们是没办法知道的,而这个先验分布
我们是可以人为定义的,在论文中将这个先验分布定义为标准正态分布
,而 后验分布
其实就是图二当中的这一部分,如下图,它是可以通过神经网络得到的。
所以整个VAE的图就变成了
所以讲标准正态分布带入到第二项中,就变成了
其实整个VAE到这里说的已经差不多了,里面还有一个重参数技巧,主要处理的是反向传播的求导问题
3.重参数技巧
由图三可知, 都是采样得到的,但是 “采样” 这个操作是不可导的,而采样的结果是可导的。所以利用
也就是从 中采样一个Z,相当于从
中采样一个ε,然后让
。
于是,我们将从 采样变成了从
中采样,然后通过参数变换得到从
中采样的结果。这样一来,“采样” 这个操作就不用参与梯度下降了,改为采样的结果参与,使得整个模型可训练了。
以上就是VAE的全部推导和原理解释了。
参考