深度学习-李宏毅GAN学习之VAE

VAE(变分自编码器)直觉解释

普通的自编码器大家已经比较熟悉了,比如输入一张图片,然后提取出一个向量,最后再复原回图片。
就如下图,我们有两张图片,都编码成一个code,然后可以复原,但是如果我们取了中间的code,应该是什么呢,虽然我们会认为应该是中间的插值图吧,但是不是的。那如果我们希望有中间插值的图片呢,所以需要VAE啦,加入噪声,貌似有点像正太分布的样子,然后又2个正太分布重合的地方貌似就可以是插值图片啦。
在这里插入图片描述
VAE所做的就是在生产的code上加入噪音,如果两张图之间的噪音有重叠的地方,那这个地方去复原照片,既要像第一张照片,又要像第二张,所以可能就会产生一半一半的照片啦,也就是插值图片。如下:
在这里插入图片描述
我们知道了,VAE貌似可以生成中间的图片。

VAE直觉架构

再来看看,VAE(Variational Autoencoder)和AE(Autoencoder)的架构区别:
在这里插入图片描述
我们可以看到VAE和AE区别在于Encoder除了生成code之外,还外加了噪音,也就是方差,可以理解为一个点旁边还加了很多噪声点,至于噪声和这个点的分散程度,就看方差啦。方差是由Encoder产生的σ取exp,保证是正的,然后与正太分布采样出来的e相乘而得到的,e的方差是1,所以相乘之后来表示噪音的方差取决于Encoder所产生的σ,要产生怎么样的噪音,Encoder可以通过学习产生。

这样看似好像没问题了,之后只要使得input和output越接近越好。但是这样的话,Encoder可能就会直接把方差学成0,也就是没有噪音了,就变成AE了。自然也学不出中间的插值了。所以要对方差做个限制,即对σ做限制:
在这里插入图片描述
可以看到上面的式子,蓝色的线是 e σ e^σ eσ,红色的是 1 + σ 1+σ 1+σ,相减之后就是绿色的线,最低点σ=0,即方差为1,这样就限制了方差的最小值。最后那像就是正则化惩罚项,避免拟合。

VAE数学解释

在这里插入图片描述
用宝可梦来做例子,将高维宝可梦的图映射到一维上,我们要的就是一个概率分布P(x),可以根据它来采样小精灵了,几率高的地方就是好的图。那怎么来获得这个概率分布呢,可以用传统GMM,就是高斯混合模型,简单来说就是用很多个高斯分布的组合来拟合一个分布。

高斯混合模型拟合

在这里插入图片描述
如上图,我们可以看到,P(x)可以表示成N个高斯分布的组合,不同的高斯分布有不同的权重和参数,然后堆叠起来就是P(x)。学过GAN的话就知道,GAN是直接学习分布。
在这里插入图片描述
m表示从第m个高斯分布里采样。m=1,2,3,4…
x|m表示从第m个高斯分布采样出x。
P(m)表示从第m个高斯分布采样的概率。
P(x|m)表示从第m个采样出x的概率。
每个x都可能有很多个高斯分布贡献,只是有大小概率,和权重,所以是把所有情况堆叠起来,即是上面的式子定义。而VAE刚好是高斯混合模型的分布表示。

VAE分布映射

在这里插入图片描述
我们看看VAE是如何来表示这个高斯混合模型的,其实就是用x|z服从的某个高斯分布,关联到高斯混合模型里去。我们可以有个向量z,服从高斯分布,则在z的情况下采样出x的概率服也从某个高斯分布,这个高斯分布的参数跟z有关。比如我们把z降到1维,可以看到
在这里插入图片描述
每个z对应采样出来的x对应着一个高斯模型,至于高斯模型的参数,是跟z有关的即μ(z),σ(z)。因为z是连续的,所以我们有无穷多个高斯模型,从z映射到某个高斯模型能采样x,用这些高斯模型堆叠出来就是个P(x)。所以我们可以有
在这里插入图片描述
那我们怎么知道μ(z),σ(z)呢,这时候就想到了神经网络,输入就是z,输出就是高斯分布的参数,神经网络本身就可以看成一个函数,刚好可以用来生成μ(z),σ(z),即:
在这里插入图片描述
当然我们的z不一定要服从高斯分布,也可以是其他分布,不会有影响,因为我们的神经网络足够强大,只要通过学习,理论上可以表示任何函数。

最大似然估计

在这里插入图片描述
接下去就是去估计μ(z),σ(z)了,当然是用最大似然估计啦,P(z)服从高斯分布,x|z也服从某个高斯分布,估计参数即可。同时我们需要另外一个分布q(z|x),在x下的z的高斯分布参数。刚好可以看做Encoder和Decoder。

我们继续看最大似然估计,将q(z|x)为任何分布,凑进去得:
在这里插入图片描述
进行恒等变形:
在这里插入图片描述
然后把log分开,凑出KL散度,KL散度就是两个分布之间的差异,这个可以看我的GAN原理里有讲:
在这里插入图片描述
之后将P(z,x)展开后就可以推出:
在这里插入图片描述
把这个叫做lower bound Lb,就是下界的意思。
即变为:
在这里插入图片描述
在这里插入图片描述
本来我们要找的是P(x|z)让P(x)越大越好,现在变成要同时找P(x|z)和q(z|x)最大化Lb.这个时候就是q(z|x)这项的作用来了,如果仅仅找P(x|z)去最大化Lb,因为P(x|z)会影响logP(x),所以会出现虽然Lb最大化了,但是logP(x)却变小了,所以我们不应该去动P(x|z),而去找q(z|x)。
在这里插入图片描述
可以看到,如果我们固定P(x|z)通过q(z|x)去最大化Lb,q(z|x)和logP(x)也没关系,就会看到,Lb变大了,KL变小了,如果最终Lb和logP(x)一样的时候,KL=0,即P(x|z)=q(z|x)。
我们来看下Lb的式子:
在这里插入图片描述
可以看到,最后可以化出KL散度,即让q(z|x)和P(z)越近越好,而q(z|x)是Encoder:
在这里插入图片描述
只要让Encoder输出的跟z的高斯分布参数越接近越好。

最后我们要做的就是这些事啦:
在这里插入图片描述
最小化KL(q(z|x) || P(z)),
即最小化KL(N(μ,σ)||N(0,1)),得到:

在这里插入图片描述
最大化
在这里插入图片描述
在这里插入图片描述
这个式子也就是AE在做的事情:
在这里插入图片描述
最后只要生成的μ(z)和x越接近,则在均值的地方概率最大。

总结

其实那么多数学公式推导,我自己都有点晕,但是本质上就是用自编码器去产生很多高斯分布,去拟合样本的分布,然后某个x对应的高斯分布里采样z,然后复原成x,跟GAN区别就是这个是完全去模仿分布,只能生成数据中已有的图片,很难创造新的图片,最多也就是插值图片了。

也可以理解成图片的特征向量z采样于某种高斯分布,我们要把他给找出来,我们希望这个分布贴近标准正太分布,然后通过编码器生成对应均值和方差,然后采样z,希望z又能复原图片,这样就找到了这个z背后的高斯分布。这个高斯分布的均值就是最大概率生成特征z,可以复原图片,当然均值旁边采样出来的z可能可以复原的不是很像,但是也是在数据集里的,如果有2个图片的特征分布都在这个点有所重合的话,可能就是2个图片中间的插值图片了。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自李宏毅课件,侵删。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值