变分自编码(VAE)学习笔记

参考原文1:变分自编码器(一):原来是这么一回事
这是苏老师的一篇博客,非常经典。
参考原文2:【VAE学习笔记】全面通透地理解VAE(Variational Auto Encoder)

VAE原理

对于生成模型而言,主流的理论模型可以分为隐马尔可夫模型HMM、朴素贝叶斯模型NB和高斯混合模型GMM,而VAE的理论基础就是高斯混合模型。
  什么是高斯混合模型呢?就是说,任何一个数据的分布,都可以看作是若干高斯分布的叠加。

在这里插入图片描述
  如图所示,如果P(X)代表一种分布的话,存在一种拆分方法能让它表示成图中若干浅蓝色曲线对应的高斯分布的叠加。有意思的是,这种拆分方法已经证明出,当拆分的数量达到512时,其叠加的分布相对于原始分布而言,误差是非常非常小的了。
  于是我们可以利用这一理论模型去考虑如何给数据进行编码。一种最直接的思路是,直接用每一组高斯分布的参数作为一个编码值实现编码。
在这里插入图片描述
  如上图所示,m代表着编码维度上的编号,譬如实现一个512维的编码,m的取值范围就是1,2,3……512。m会服从于一个概率分布P(m)(多项式分布)。现在编码的对应关系是,每采样一个m,其对应到一个小的高斯分布N(μm ,Σm),P(X)就可以等价为所有的这些高斯分布的叠加,即:
在这里插入图片描述
  其中,m~P(m),x|m ~ N(μm ,Σm)。
  上述的这种编码方式是非常简单粗暴的,它对应的是我们之前提到的离散的、有大量失真区域的编码方式。于是我们需要对目前的编码方式进行改进,使得它成为连续有效的编码。
在这里插入图片描述
  现在我们的编码换成一个连续变量z,我们规定z服从正态分布N(0,1)(实际上并不一定要选用N(0,1),其他的连续分布都是可行的)。每对于一个采样z,会有两个函数μ和σ,分别决定z对应到的高斯分布的均值和方差,然后在积分域上所有的高斯分布的累加就成为了原始分布P(X),即:
  在这里插入图片描述
  其中z~N(0,1),x|z ~ N(μ(z),σ(z))。
  接下来就可以求解这个式子。由于P(z)是已知的,P(x|z)未知,而x|z~N(μ(z),σ(z)),于是我们真正需要求解的,是μ和σ两个函数的表达式。又因为P(x)通常非常复杂,导致μ和σ难以计算,我们需要引入两个神经网络来帮助我们求解。
  为什么需要神经网络来求解?
  
在这里插入图片描述
  上图表明:原样本集X服从正态分布,采样出来Z,通过生成器G可以生成新样本X,但是存在一个问题就是,新样本Xk和原样本Xk之间的关系并不能对应起来,所以我们如果直接最小化D(X^k,Xk)2(这里D代表某种距离函数)是很不科学的。
  
  其实,在整个VAE模型中,我们并没有去使用p(Z)(隐变量空间的分布)是正态分布的假设,我们用的是假设p(Z|X)(后验分布)是正态分布!!
  
  具体来说,给定一个真实样本Xk,我们**假设存在一个专属于Xk的分布p(Z|Xk)(学名叫后验分布),并进一步假设这个分布是(独立的、多元的)正态分布。**为什么要强调“专属”呢?因为我们后面要训练一个生成器X=g(Z),希望能够把从分布p(Z|Xk)采样出来的一个Zk还原为Xk。如果假设p(Z)是正态分布,然后从p(Z)中采样一个Z,那么我们怎么知道这个Z对应于哪个真实的X呢?现在p(Z|Xk)专属于Xk,我们有理由说从这个分布采样出来的Z应该要还原到Xk中去。
  
  回到本文,这时候每一个Xk都配上了一个专属的正态分布,才方便后面的生成器做还原。但这样有多少个X就有多少个正态分布了。我们知道正态分布有两组参数:均值μ和方差σ2(多元的话,它们都是向量),那我怎么找出专属于Xk的正态分布p(Z|Xk)的均值和方差呢?好像并没有什么直接的思路。那好吧,那我就用神经网络来拟合出来吧!这就是神经网络时代的哲学:难算的我们都用神经网络来拟合,在WGAN那里我们已经体验过一次了,现在再次体验到了。
  于是我们构建两个神经网络
  μk=f1(Xk),logσ2k=f2(Xk)
  来算它们了。我们选择拟合logσ2k而不是直接拟合σ2k,是因为σ2k总是非负的,需要加激活函数处理,而拟合logσ2k不需要加激活函数,因为它可正可负。到这里,我能知道专属于Xk的均值和方差了,也就知道它的正态分布长什么样了,然后从这个专属分布中采样一个Zk出来,然后经过一个生成器得到Xk=g(Zk),现在我们可以放心地最小化D(Xk,Xk)2,因为Zk是从专属Xk的分布中采样出来的,这个生成器应该要把开始的Xk还原回来。于是可以画出VAE的示意图:
  在这里插入图片描述
下一步是标准化正态分布。待续。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值