VAE-变分推断

1.推荐材料

1.PRML 第十章节 变分推断
2.B站 白板推导 这部分讲解的很详细
https://www.bilibili.com/video/BV1aE411o7qd?p=70
https://www.bilibili.com/video/BV1aE411o7qd?p=71
https://www.bilibili.com/video/BV1aE411o7qd?p=72
https://www.bilibili.com/video/BV1aE411o7qd?p=73
https://www.bilibili.com/video/BV1aE411o7qd?p=74
3.鲁鹏老师 计算机视觉与深度学习 这个讲的比较浅显易懂
https://www.bilibili.com/video/BV1V54y1B7K3?p=14
4.知乎 - 有不少笔误,需要详细斟酌
https://zhuanlan.zhihu.com/p/94638850
5.邱锡鹏 - 蒲公英书 第13.2章节 变分自编码器
6.https://blog.csdn.net/lrt366/article/details/83154048
这篇文章解释了两个我一直困惑的点

  • 1.为什么P(Z)要假设为标准正态分布N(0,1)
  • 2.为什么有的VAE的代码中Z前面的拟合变量是μ,logσ2,σ

2.VAE的目标

对隐藏变量Z的特征提取(鲁鹏视频)


正常数据很难真的达到高斯分布,一般都是由多个高斯分布叠加组成,俗称GMM(混合高斯模型)

为了达到上面的目的需要完成下列两个事情
1.隐变量Z的真实概率分布P(Z)
2.求出生成概率模型P(X|Z)的参数θ

1XP(Z),ϕ,VAE
2ZX^,θ,VAE

模型结构

注意
  • 0.这里为什么放了两张图?
  • 1.首先要明白,第一张图是我们的最终目标,有的时候学习了VAE的结构,忘记了我们到底要做什么,第一张图就是时刻提醒自己
    VAE的最终目的是什么(最终目的就上面两个小点)
  • 2.那第二张图是做什么?因为想要求真实P(Z)是很难的,为了实现这一目标,需要借助样本X学习到P(Z)
  • 3.q是什么?下面逐步阐释
  • 4.隐变量Z是一连续参数
  • 5.很重要的一个点这里的编码器Z不是确定值,而是一个概率分布,Z在这个分布上滑动,输出不同的数据(看下鲁鹏老师的满月,半月案例),通常我们令P(Z)服从标准正态分布

3.流程梳理

1.梳理的第一步-主要网络结构

回到第一张图,我们先不看XZ这根虚线,ZX这条线是很明确的,就是为了实现2.2 这个小目标(邱锡鹏蒲公英书)
由贝叶斯公式得到P(X)=P(X|Z)P(Z)P(Z|X)
lnP(X)=lnP(Z,X)lnP(Z|X)=lnP(Z,X)q(Z)lnP(Z|X)q(Z)1
这里引入了一个新的分布q(Z),为什么要引入它?因为真实分布P(Z)无法获得,引入q(Z),希望q(Z)可以无限逼近P(Z)
那么这个q(Z)是怎么算出来的呢?这里就用到了VAE的前半段,也就是推断网络学习出来的
至此先梳理清楚VAE就是通过一个推断网络+生成网络组成的
另外一个很重要的点,前半段的生成网络q(Z)是通过学习样本X获得的,所以应该写成q(Z|X)的形式,并且我们令推断网络的参数为ϕ,生成网络的参数为θ,避免搞混
所以最终梳理一下标记
XfI(X,ϕ)P(Z)q(Z|X;ϕ)
q(Z|X;ϕ)Z,fG(Z,θ)XX^X^P(X|Z;θ)
:,(1/2)1/2(),-这也解释了上面的第5点,为什么P(Z)是一个分布,需要噪声才能学习

:ZX

2.梳理的第二步-重要的假设

回到这张图

还有这张

假设1 - 可以看到通常我们假设这些隐变量都是服从正态分布的,也就是GMM模型,现在假设P(Z)服从标准正态分布N(0,1)(\color{red}{为什么这么假设?先放一放,后面再解释,或者直接看我推荐的材料6}),可以这么理解,Z必须有一定的噪声,这样后半段的生成网络才能在一定区间内生成数据,参考上面的满月,半月案例

3.梳理的第三步-推导目标函数

假设2 - 假设我们已知真实分布P(Z),这样我们先处理VAE的后半段-生成模型,那么为了求解生成模型中的参数θ,我们用最常用的最大似然法,通过贝叶斯方法求解边缘分布P(X),使得对数似然函数logP(X;θ)最大即可
lnP(X;θ)=lnP(Z,X;θ)lnP(Z|X;ϕ)=lnP(Z,X;θ)q(Z|X,ϕ)lnP(Z|X;θ)q(Z|X,ϕ)1
大家可以看到这个公式无意中已经把前半段的推断网络也牵扯进来了,不再是单纯的求生成网络
还有一点,根据模型结构中的图1,其实也就是一个概率图模型,θ同时决定了ZX,所以P(Z,X)添加了一个解释说明的参数,P(Z,X;\theta)代表P(Z,X)这个模型中的参数也是θ
继续推导上面的公式
lnP(X;θ)=lnP(Z,X;θ)lnP(Z|X;ϕ)=lnP(Z,X;θ)q(Z|X,ϕ)lnP(Z|X;θ)q(Z|X,ϕ)
q(Z;ϕ)
=lnP(X;θ)q(Z|X;ϕ)dZ=lnP(X;θ),
=[lnP(Z,X;θ)q(Z|X,ϕ)lnP(Z|X;θ)q(Z|X,ϕ)]q(Z|X;ϕ)dZ
=lnP(Z,X;θ)q(Z|X,ϕ)q(Z|X;ϕ)dZlnP(Z|X;θ)q(Z|X,ϕ)q(Z|X;ϕ)dZ
ELBO(evidence lower bounds),KL,KL(q(Z|X;ϕ)||P(Z|X;θ))


小结一下
lnP(X;θ)=lnP(Z,X;θ)q(Z|X,ϕ)q(Z|X;ϕ)dZlnP(Z|X;θ)q(Z|X,ϕ)q(Z|X;ϕ)dZ
=ELBO+KL(q(Z|X;ϕ)||P(Z|X;θ))

  • 结论1,若想要对数似然函数最大,也就是为了求解生成网络的参数θ,那么就是使得上式最大化,后面的KL散度没法求(不知道真实P(Z|X;θ)),所以目标就是尽可能的maxELBO
  • 结论2,将上式改写为KL(q(Z|X;ϕ)||P(Z|X;θ))=lnP(X;θ)ELBO,若想要qP尽量相似,那么也就是推断网络的q使得KL尽量小,接近于0,故这个式子也代表着,为了求得推断网络的参数ϕ,要尽量使得maxELBO
  • 结论3,所以推断网络和生成网络的目标函数是一致,可以理解为整个VAE模型的目标函数就是maxELBO

4.梳理第四步-详解ELBO

ELBO = lnP(Z,X;θ)q(Z|X,ϕ)q(Z|X;ϕ)dZ
=EZq(Z|X;ϕ)[lnP(Z,X;θ)q(Z|X,ϕ)]
=EZq(Z|X;ϕ)[lnP(Z|X;θ)P(X;θ)q(Z|X,ϕ)]
=EZq(Z|X;ϕ)[lnP(Z|X;θ)]KL(q(Z|X;ϕ)||P(Z|X;θ))
先处理后一半
P(Z|X;θ)
q(Z|X;ϕ)(GMM)N(μI,σI2I),I
KL,13.24
KL(q(Z|X;θ)||P(Z;θ))=12(tr(σI2I)+μITμIdlog(|σI2I|))
d

5.梳理第四步-重参数化技巧

第四步中的前一半EZq(Z|X;ϕ)[lnP(Z|X;θ)]可以通过收集数据后取平均的方式,但是最大的问题是Z是通过采样得到的,没有确定的表达式,没办法求梯度
所以这里引入了重参数化技巧

重参数化

引入公式
Z=μI+σI×ϵ-?
ϵN(0,I)
EZq(Z|X;ϕ)[lnP(Z|X;θ)]Eϵp(ϵ[lnP(Z|g(ϕ,ϵ);θ)]
这样我们就改写了网络结构

6.目标函数总结


L(ϕ,θ|X)=n=1N(1Mn=1Nlogp(x(n)|z(n,m);θ)KL(q(z|x(n);θ,N(z;0,I))))13.27

μGμG13.18使μG,?
L(ϕ,θ|X)=12||xμG||2λKL(q(z|x(n);θ,N(z;0,I))))13.27

使ϵ=xμ=xx^,ϵN(0,1),

4.其他变分方法

PRML书上介绍了除了本章节要讲的方法,变分方法包括有限元方法,最大熵方法
除了基于梯度的变分方法,PRML书中还着重说明了基于平均场理论的变分方法

5.其他

为什么要求先验P(Z)?

https://blog.csdn.net/lrt366/article/details/83154048
1.VAE模型的输出是需要带有噪声的,否则就完全退化为AE了,但是添加了噪声后,经过学习的输出为了让损失函数减小必然会将方差缩小到0,那么谈何添加噪声呢?
2.为了保证第一点中保证有噪声,就必须让输出服从一定的概率分布,也就是P(Z|X;ϕ)服从标准正态分布,\color{red}{只有让Z具有一定噪声,才能让后面的\hat X输出能拟合出所有分布的数据,参考上面的满月,半月的案例}
3.基于2的结论,再反推回P(Z)也是标准正态分布

4.损失函数KL散度的计算,就是为了让P(Z|X;ϕ)能够尽量靠拢标准正态分布P(Z)

posted @   筷点雪糕侠  阅读(442)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示