Auto-Encoding Variational Bayes (VAE原文)、变分推理

21480编辑收藏

  变分自动编码器的大致概念已经理解了快一年多了,但是其中的数学原理还是没有搞懂,在看到相关的变体时,总会被数学公式卡住。下决心搞懂后,在此记录下我的理解。

1  公式推导——变分下界#

  这篇文章提出一种拟合数据集分布的方法,拟合分布最常见的应用就是生成模型。该方法遵循极大似然策略,即对于数据集X={x(i)}i=1N,对生成模型pθ(x)(注意!这里的pθ(x)既代表生成模型本身,又代表模型生成数据x的边缘概率,下面类似)完成如下优化:

(1)maxθL=i=1Nlogpθ(x(i))

  但是,模型不可能凭空产生数据,必须要有输入才能有输出,所以作者对数据的生成过程进行了假设,假设数据集X={x(i)}i=1N的生成过程由以下两步组成:

  1、通过某个先验分布pθ(z),抽样获得隐变量z(i)

  2、再通过某个条件分布pθ(x|z),抽样生成x(i)

  显然,以上参数θ的值、个数,甚至是计算推演的过程,都是未知的。为了使优化得以进行,就要对参数的个数和计算流程进行约束,通常专家会根据经验来给予特定数据集特定的计算过程。不失一般性,作者假设先验分布pθ(z)和似然函数pθ(x|z)来自于参数族pθ(z)pθ(x|z),并且它们的概率分布函数(PDFs)几乎处处可微。换句话说,作者定义生成模型为pθ(z)pθ(x|z)

  尽管有如上假设,由于数据x(i)与隐变量抽样z之间的关系未知,pθ(x|z)还是无法直接进行优化。于是,作者采用一种迂回的方式,让模型自己学会zx之间的关系。作者使用自动编码器的机制,与生成模型同时训练一个后验分布模型qϕ(z|x),用来模拟其后验分布pθ(z|x),称为编码器,并称pθ(x|z)为解码器。概率图如下:

  其中θ表示生成模型pθ(z)pθ(x|z)的待优化参数,ϕ表示用于估计pθ(z|x)的模型的参数。

  有了qϕ(z|x)作为辅助后,针对每一数据集样本x,待优化式可转换如下:

(2)logpθ(x)(3)=Eqϕ(z|x)logpθ(x)(4)=Eqϕ(z|x)logpθ(x,z)pθ(z|x)(5)=Eqϕ(z|x)[logpθ(x,z)logpθ(z|x)+logqϕ(z|x)logqϕ(z|x)](6)=Eqϕ(z|x)[logqϕ(z|x)pθ(z|x)+logpθ(x,z)logqϕ(z|x)](7)=KL[qϕ(z|x)||pθ(z|x)]+Eqϕ(z|x)[logpθ(x,z)logqϕ(z|x)](8)=KL[qϕ(z|x)||pθ(z|x)]+L(θ,ϕ)

  容易看出,由于(8)式第一项是相对熵非负,第二项就可看作(2)式的下界,称之为变分下界或证据下界(evidence lower bound, ELBO)。获得如下不等式

(9)logpθ(x)L(θ,ϕ)

  当且仅当qϕ(z|x)=pθ(z|x)时,不等式取等。因为pθ(z|x)未知,第一项KL散度无法计算,又因为它有非负的性质,对优化的影响有限。所以,我们只需对L(θ,ϕ)进行优化,原式自然变大。将L(θ,ϕ)进行变换如下:

(10)L(θ,ϕ)=Eqϕ(z|x)[logpθ(x,z)logqϕ(z|x)+logθ(z)logθ(z)](11)=Eqϕ(z|x)[logqϕ(z|x)+logθ(z)+logpθ(x,z)logθ(z)](12)=Eqϕ(z|x)[logqϕ(z|x)pθ(z)+logpθ(x,z)pθ(z)](13)=KL[qϕ(z|x)||pθ(z)]+Eqϕ(z|x)[logpθ(x|z)]

  对于以上两项,我们可以把第一项理解为正则项,也就是说拟合的后验分布应该和生成模型先验分布比较接近才好;第二项理解为重构损失,就是自编码器的损失。同时对这两项进行优化,就可以使生成模型向目标靠近。

  最终的目标函数如下:

(14)1Ni=1NKL[qϕ(z|x(i))||pθ(z)]+Eqϕ(z|x(i))[logpθ(x(i)|z)]

  换成期望的写法:

(15)ExXEqϕ(z|x)[logqϕ(z|x)+logpθ(z)+logpθ(x|z)]

2  重参数化#

  在以上优化式中包含随机采样过程,作者提出使用重参数化来建立可反向传播的采样。实际上就是给模型额外添加一个已知的随机变量作为输入,从而使模型的抽样过程可微。

  将作者于文中对以上推导的举例——变分自动编码器(VAE),拿来与(13)式做对比,推导的式子以及重参数化的意义就一目了然了。其中VAE的pθ(z)定义为相互独立的多维高斯分布;qϕ(z|x)z的采样则是先用模型产生其方差与均值,再使用标准高斯分布的抽样重参数化获得;pθ(x|z)z条件下对x的抽样,由于图像数据分布的复杂性,在实践中并没有使用重参数化,也就是解码器直接对z进行解码产生x

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
很高兴能帮到你~
点赞
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示