贝叶斯推断方法
从贝叶斯公式说起,在概率论中接触过贝叶斯,然后最著名的还是贝叶斯公式求条件概率
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可以输出对应的后验
总结
关于变分推断内容太多了,其实到这里我感觉对变分推断里面的很多内容还是一知半解,很模糊,后面有了更深的理解再来补充。

1116

被折叠的 条评论
为什么被折叠?



