数学基础:变分推断
摘要: 贝叶斯推断通过贝叶斯公式将先验信息与样本信息结合,得到参数的后验分布。核心公式为$\pi(\theta|x_1,...,x_n) \propto p(x_1,...,x_n|\theta)\pi(\theta)$,但高维积分计算边缘似然困难。变分推断通过优化近似分布$q(z)$逼近真实后验,最大化证据下界(ELBO)替代直接计算。传统方法如CAVI手动推导,而深度生成模型中采用神经网络参数
贝叶斯推断方法
从贝叶斯公式说起,在概率论中接触过贝叶斯,然后最著名的还是贝叶斯公式求条件概率
p ( A ∣ B ) = p ( B ∣ A ) p ( B ) . p ( A ) p(A|B)=\frac{p(B|A)}{p(B)}.p(A) p(A∣B)=p(B)p(B∣A).p(A)
上面公式的理解:在给出先验信息之前事件A发生的概率为p(A),当我们有个先验信息B,那么就可以去修正A, p ( B ∣ A ) p ( B ) \frac{p(B|A)}{p(B)} p(B)p(B∣A)就可以被看作是信息。
上面是对离散型随机变量,对于连续型随机变量需要引入概率密度函数。
假设一:随机变量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(z∣x)=p(x)p(x,z)=p(x)p(x∣z)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(z∣x))=∫q(z)logp(z∣x)q(z)dz
在这里其实我是有一个疑问的,我们希望的是用q(z)分布去逼近p(z|x)分布,这里的KL散度我原来认为应该写作 K L ( p ( z ∣ x ) ∣ ∣ q ( z ) ) KL(p(z|x)||q(z)) KL(p(z∣x)∣∣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(z∣x)−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(z∣x)∣∣q(z))这个散度。
我们希望最小化这个KL散度,但是问题是 p ( z ∣ x ) p(z|x) p(z∣x)是未知的,直接优化这个散度是不可行的,于是需要做一下数学推导
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(z∣x))=∫q(z)logp(z∣x)q(z)dz=∫q(z)logq(z)dz−∫q(z)logp(z∣x)dz=Eq[logq(z)]−Eq[logp(z∣x)]
将贝叶斯公式 p ( z ∣ x ) = p ( x , z ) p ( x ) p(z|x)=\frac{p(x,z)}{p(x)} p(z∣x)=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(z∣x)]=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(z∣x))
- 其中 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) KL≥0所以ELBO≤logp(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)=argq∈QmaxL(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ϕ(z∣x),并通过梯度优化自动学习最优近似后验。
基本思路:用神经网络参数化q(z)
这里不再假设q(z)是某个简单分布族,而是让神经网络根据输入数据x,动态输出隐变量z的近似后验分布的参数
q ϕ ( z ∣ x ) = 由神经网络 ϕ 定义的分布 q_{\phi}(z|x)=由神经网络\phi定义的分布 qϕ(z∣x)=由神经网络ϕ定义的分布
- ϕ \phi ϕ:神经网络的参数
- 输入: 观测数据x
- 输出:分布 q ϕ ( z ∣ x ) q_{\phi}(z|x) qϕ(z∣x)的参数
目标:最大化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ϕ(z∣x)[logpθ(x∣z)+logp(z)−logqϕ(z∣x)]
- p θ ( x ∣ z ) p_{\theta}(x|z) pθ(x∣z):生成模型(decoder),通常也有神经网络参数化
- p(z):先验( N ( 0 , I ) \mathcal{N}(0,I) N(0,I))
- q ϕ ( z ∣ x ) q_{\phi}(z|x) qϕ(z∣x):推理网络(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可以输出对应的后验
总结
关于变分推断内容太多了,其实到这里我感觉对变分推断里面的很多内容还是一知半解,很模糊,后面有了更深的理解再来补充。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)