数学基础:变分推断

【投稿赢 iPhone 17】「我的第一个开源项目」故事征集:用代码换C位出道! 10w+人浏览 1.6k人参与

贝叶斯推断方法

从贝叶斯公式说起,在概率论中接触过贝叶斯,然后最著名的还是贝叶斯公式求条件概率
p ( A ∣ B ) = p ( B ∣ A ) p ( B ) . p ( A ) p(A|B)=\frac{p(B|A)}{p(B)}.p(A) p(AB)=p(B)p(BA).p(A)
上面公式的理解:在给出先验信息之前事件A发生的概率为p(A),当我们有个先验信息B,那么就可以去修正A, p ( B ∣ A ) p ( B ) \frac{p(B|A)}{p(B)} p(B)p(BA)就可以被看作是信息。
上面是对离散型随机变量,对于连续型随机变量需要引入概率密度函数。

假设一:随机变量X有一个密度函数 p ( x ; θ ) p(x;\theta) p(x;θ),其中 θ \theta θ是一个参数,不同的 θ \theta θ对应不同的密度函数,故从贝叶斯观点看, p ( x ; θ ) p(x;\theta) p(x;θ)是在给定 θ \theta θ后是一个条件密度函数,因此记为 p ( x ∣ θ ) p(x|\theta) p(xθ)更恰当一些。这个条件密度能提供的有关 θ \theta θ的信息就是总体信息
假设二:当给定 θ \theta θ后,从总体 p ( x ∣ θ ) p(x|\theta) p(xθ)中随机抽取样本 X 1 , . . . , X n X_1,...,X_n X1,...,Xn,该样本中含有 θ \theta θ的有关信息。这种信息就是样本信息。
假设三:我们对参数 θ \theta θ已经积累了很多资料,经过分析、整理和加工,可以获得一些有关 θ \theta θ的有用信息,这种信息就是先验信息。参数 θ \theta θ不是永远固定在一个值上,而是一个事先不能确定的量。从贝叶斯的观点来看,未知参数 θ \theta θ是一个随机变量。而描述这个随机变量的分布可以从先验信息中归纳出来,这个分布称为先验分布,其密度函数用 π ( θ ) \pi(\theta) π(θ)

概念:
先验分布:将总体中的未知参数 θ ∈ Θ \theta \in \Theta θΘ看成一取值于 Θ \Theta Θ的随机变量,它有一概率分布,记为 π ( θ ) \pi(\theta) π(θ),称为参数 θ \theta θ的先验分布。
后验分布:在贝叶斯统计学中,把上面总体、样本、先验信息归纳起来的最好形式就是在总体分布基础上获得样本 X 1 , . . . , X n , X_1,...,X_n, X1,...,Xn,和参数的联合密度函数
p ( x 1 , . . . , x n , θ ) = p ( x 1 , . . . , x n ∣ θ ) π ( θ ) p(x_1,...,x_n,\theta)=p(x_1,...,x_n|\theta)\pi(\theta) p(x1,...,xn,θ)=p(x1,...,xnθ)π(θ),在这个联合密度函数中,样本给后,我们关心的是参数 θ \theta θ的条件密度函数。
将上面公式中的样本和参数位置互换得到 π ( θ ∣ x 1 , . . . , x n ) = p ( x 1 , . . . , x n , θ ) p ( x 1 , . . . , x n ) \pi(\theta|x_1,...,x_n)=\frac{p(x_1,...,x_n,\theta)}{p(x_1,...,x_n)} π(θx1,...,xn)=p(x1,...,xn)p(x1,...,xn,θ),再用上面的公式将联合概率密度替换。
π ( θ ∣ x 1 , . . . , x n ) = p ( x 1 , . . . , x n , θ ) p ( x 1 , . . . , x n ) = p ( x 1 , . . . , x n ∣ θ ) π ( θ ) ∫ p ( x 1 , . . . , x n ∣ θ ) π ( θ ) d θ \pi(\theta|x_1,...,x_n)=\frac{p(x_1,...,x_n,\theta)}{p(x_1,...,x_n)}\\=\frac{p(x_1,...,x_n|\theta)\pi(\theta)}{\int p(x_1,...,x_n| \theta)\pi(\theta)d\theta} π(θx1,...,xn)=p(x1,...,xn)p(x1,...,xn,θ)=p(x1,...,xnθ)π(θ)dθp(x1,...,xnθ)π(θ)

上面的公式就是贝叶斯推断,在贝叶斯推断中,核心目标是求后验分布:
上面公式中每项的含义

  • θ \theta θ:参数或隐变量
  • x 1 , . . . . , x n x_1,....,x_n x1,....,xn:观测到的数据
  • π θ \pi_{\theta} πθ:是先验分布
  • p ( x 1 , . . . , x n ∣ θ ) p(x_1,...,x_n|\theta) p(x1,...,xnθ):是似然函数
  • π ( θ ∣ x 1 , . . . , x n ) \pi(\theta|x_1,...,x_n) π(θx1,...,xn):是后验分布
  • ∫ p ( x 1 , . . . , x n ∣ θ ) π ( θ ) d θ \int p(x_1,...,x_n|\theta)\pi(\theta)d\theta p(x1,...,xnθ)π(θ)dθ:边缘似然和证据,是一个归一化常数

对于贝叶斯推断来说, π θ \pi_{\theta} πθ是先验分布,是已知的,似然函数 p ( x 1 , . . . , x n ∣ θ ) p(x_1,...,x_n|\theta) p(x1,...,xnθ)是似然函数,也是已知的,边缘似然也是可以通过积分得到的,于是后验分布就可以求得。

但是贝叶斯推断存在一个问题,对于高维参数 θ \theta θ,边缘似然需要进行高维积分,这通常来说是难以计算的,于是便有了后文。

变分推断

变分推断是一种解决上面高维积分难以计算,进而难以计算后验分布的解决方案。
变分推断的核心思想是用一个简单的参数化分布族q(z)来 近似真实后验p(z|x),并通过最小化p(z|x)和q(z)之间的距离来找到最佳的近似,这里我们更关心的是后验分布,对贝叶斯推断进行变形
p ( z ∣ x ) = p ( x , z ) p ( x ) = p ( x ∣ z ) p ( z ) p ( x ) p(z|x)=\frac{p(x,z)}{p(x)}\\=\frac{p(x|z)p(z)}{p(x)} p(zx)=p(x)p(x,z)=p(x)p(xz)p(z)
这里x是观测数据(已知),z是隐变量或参数,p(x,z)是联合分布, p ( z ) = ∫ p ( x , z ) d z p(z)=\int p(x,z)dz p(z)=p(x,z)dz是边缘似然。
这里的距离通常用KL散度(Kullback-Leibler Divergence)衡量
K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) = ∫ q ( z ) l o g q ( z ) p ( z ∣ x ) d z KL(q(z)||p(z|x))=\int q(z) log\frac{q(z)}{p(z|x)}dz KL(q(z)∣∣p(zx))=q(z)logp(zx)q(z)dz

在这里其实我是有一个疑问的,我们希望的是用q(z)分布去逼近p(z|x)分布,这里的KL散度我原来认为应该写作 K L ( p ( z ∣ x ) ∣ ∣ q ( z ) ) KL(p(z|x)||q(z)) KL(p(zx)∣∣q(z)),这样好像是更合理一点,但实际上我们可以利用下面推导的结论代换一下这个散度,得到的结果应该是 K L ( p ∣ ∣ q ) = E p [ log ⁡ p ( z ∣ x ) − log ⁡ q ( z ) ] KL(p||q)=\mathbb{E}_p[\log p(z|x) - \log q(z)] KL(p∣∣q)=Ep[logp(zx)logq(z)],而对于p(z|x)分布我们是不知道的就更不可能求这个期望,但是q(z)是我们选择的分布用于近似p(z|x),是可以计算的,于是乎就可以计算 K L ( p ( z ∣ x ) ∣ ∣ q ( z ) ) KL(p(z|x)||q(z)) KL(p(zx)∣∣q(z))这个散度。

我们希望最小化这个KL散度,但是问题是 p ( z ∣ x ) p(z|x) p(zx)是未知的,直接优化这个散度是不可行的,于是需要做一下数学推导
K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) = ∫ q ( z ) log ⁡ q ( z ) p ( z ∣ x ) d z = ∫ q ( z ) log ⁡ q ( z ) d z − ∫ q ( z ) log ⁡ p ( z ∣ x ) d z = E q [ log ⁡ q ( z ) ] − E q [ log ⁡ p ( z ∣ x ) ] KL(q(z)||p(z|x))=\int q(z) \log \frac{q(z)}{p(z|x)}dz\\=\int q(z)\log q(z)dz-\int q(z)\log p(z|x)dz \\=\mathbb{E}_q[\log q(z)]-\mathbb{E}_q[\log p(z|x)] KL(q(z)∣∣p(zx))=q(z)logp(zx)q(z)dz=q(z)logq(z)dzq(z)logp(zx)dz=Eq[logq(z)]Eq[logp(zx)]
将贝叶斯公式 p ( z ∣ x ) = p ( x , z ) p ( x ) p(z|x)=\frac{p(x,z)}{p(x)} p(zx)=p(x)p(x,z)代入
E q [ log ⁡ q ( z ) ] − E q [ log ⁡ p ( z ∣ x ) ] = E q [ log ⁡ q ( z ) ] − E q [ log ⁡ p ( x , z ) ] + E q [ p ( x ) ] = E q [ log ⁡ q ( z ) ] − E q [ log ⁡ p ( x , z ) ] + p ( x ) \mathbb{E}_q[\log q(z)]-\mathbb{E}_q[\log p(z|x)] \\=\mathbb{E}_q[\log q(z)]-\mathbb{E}_q[\log p(x,z)] + \mathbb{E}_q[p(x)]\\=\mathbb{E}_q[\log q(z)]-\mathbb{E}_q[\log p(x,z)] + p(x) Eq[logq(z)]Eq[logp(zx)]=Eq[logq(z)]Eq[logp(x,z)]+Eq[p(x)]=Eq[logq(z)]Eq[logp(x,z)]+p(x)
于是整理的到
log ⁡ p ( x ) = E q [ log ⁡ p ( x , z ) ] − E q [ log ⁡ q ( z ) ] + K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) \log p(x) = \mathbb{E}_q[\log p(x,z)]-\mathbb{E}_q[\log q(z)] + KL(q(z)||p(z|x)) logp(x)=Eq[logp(x,z)]Eq[logq(z)]+KL(q(z)∣∣p(zx))

  • 其中 E q [ log ⁡ p ( x , z ) ] − E q [ log ⁡ q ( z ) ] \mathbb{E}_q[\log p(x,z)]-\mathbb{E}_q[\log q(z)] Eq[logp(x,z)]Eq[logq(z)]被称为证据下界(Evidence Lower Bound, ELBO)
  • 为因 K L ≥ 0 所以 E L B O ≤ log ⁡ p ( x ) KL\geq 0 所以ELBO\leq \log p(x) KL0所以ELBOlogp(x).

由于 log ⁡ p ( x ) \log p(x) logp(x)是与 q ( z ) q(z) q(z)无关的常数,于是最小化KL散度就等价于最大化ELBO,因此任务的目标进一步变为寻找一个 q ( z ) q(z) q(z)使得ELBO最大,由于ELBO和q有关于是我们将其记为 L ( q ) L(q) L(q)
q ∗ ( z ) = arg ⁡ max ⁡ q ∈ Q L ( q ) q^{*}(z)=\arg \max _{q\in Q}L(q) q(z)=argqQmaxL(q)
其中Q就是我们选择的近似分布族。

分布族 是指具有相同函数形式、但由一组参数控制的一类概率分布的集合。
换句话说,它是一个“模板”或“模型类”,通过调整参数就能得到该族中的不同具体分布。

分布族参数具体示例
高斯分布族(正态分布族)均值 μ ,方差 σ \mu,方差 \sigma μ,方差σ N ( 0 , 1 ) 、 N ( 2 , 0.5 ) \mathcal{N}(0,1)、\mathcal{N}(2,0.5) N(0,1)N(2,0.5)
指数分布族速率 λ \lambda λExp(1), Exp(0.2)

关于 q ∗ ( z ) q^*(z) q(z)的求解传统变分推断是通过手动推导q(z)的更新公式(平均场变分推断中的坐标上升变分推断CAVI)这是一种方法
但是在复杂模型如深度生成模型中,主要是利用神经网络来参数化变分分布 q ϕ ( z ∣ x ) q_{\phi}(z|x) qϕ(zx),并通过梯度优化自动学习最优近似后验。

基本思路:用神经网络参数化q(z)
这里不再假设q(z)是某个简单分布族,而是让神经网络根据输入数据x,动态输出隐变量z的近似后验分布的参数
q ϕ ( z ∣ x ) = 由神经网络 ϕ 定义的分布 q_{\phi}(z|x)=由神经网络\phi定义的分布 qϕ(zx)=由神经网络ϕ定义的分布

  • ϕ \phi ϕ:神经网络的参数
  • 输入: 观测数据x
  • 输出:分布 q ϕ ( z ∣ x ) q_{\phi}(z|x) qϕ(zx)的参数

目标:最大化ELBO
L ( ϕ ) = E q ϕ ( z ∣ x ) [ log ⁡ p θ ( x ∣ z ) + log ⁡ p ( z ) − log ⁡ q ϕ ( z ∣ x ) ] L(\phi)=\mathbb{E}_{q_{\phi}(z|x)}[\log p_{\theta}(x|z)+\log p(z) - \log q_{\phi}(z|x)] L(ϕ)=Eqϕ(zx)[logpθ(xz)+logp(z)logqϕ(zx)]

  • p θ ( x ∣ z ) p_{\theta}(x|z) pθ(xz):生成模型(decoder),通常也有神经网络参数化
  • p(z):先验( N ( 0 , I ) \mathcal{N}(0,I) N(0,I)
  • q ϕ ( z ∣ x ) q_{\phi}(z|x) qϕ(zx):推理网络(encoder),即我们要学习的q

最后就是对 E q ϕ \mathbb{E}_{q_{\phi}} Eqϕ求梯度
∇ ϕ E q ϕ ( z ) [ f ( z ) ] = E q ϕ ( z ) [ f ( z ) ∇ ϕ log ⁡ q ϕ ( z ) ] \nabla_{\phi} \mathbb{E}_{q_{\phi(z)}}[f(z)]=\mathbb{E}_{q_{\phi(z)}}[f(z) \nabla_{\phi} \log q_{\phi}(z)] ϕEqϕ(z)[f(z)]=Eqϕ(z)[f(z)ϕlogqϕ(z)]
上面的REINFORCE梯度方差大难以优化可以通过重参数技巧,总之最后可以求解。

关于为什么之前用q(z),这里却用q(z|x),这里的解释是是否将数据集x视为固定,在传统的变分推断中我们将数据集x固定,只推断对应的隐变量,而这里用神经网络近似时我们的数据集不是固定的,我们希望输入x可以输出对应的后验

总结

关于变分推断内容太多了,其实到这里我感觉对变分推断里面的很多内容还是一知半解,很模糊,后面有了更深的理解再来补充。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值