贝叶斯推断的优势在于可以结合一些我们已知的先验信息。对于复杂的一些问题建模也非常灵活,很适合用于应用统计方面的工作。但是贝叶斯模型有一些问题,如果用传统的MCMC
来求的话速度会非常慢,而现今问题的数据量和维度都比较大,在这样的问题上做贝叶斯推理的话就会有很大的挑战。
贝叶斯与近似贝叶斯
贝叶斯推断(Bayesian Inference
),在贝叶斯推断中我们有观测数据
x
=
{
x
1
,
x
2
,
⋯
,
x
n
}
x=\{x_{1},x_{2},\cdots, x_{n}\}
x={x1,x2,⋯,xn},将模型的参数设置为
z
z
z,它具有
m
m
m个参数
z
=
{
z
1
,
z
2
,
⋯
,
z
m
}
z=\{z_{1},z_{2},\cdots,z_{m}\}
z={z1,z2,⋯,zm}。给定一个先验(prior
)分布
p
(
z
)
p(z)
p(z),在我们观测到数据
x
x
x之后,我们依据这个数据对
z
z
z的分布有一个更新。这种更新我们通常称之为计算后验分布(posterior distribution
)
p
(
z
∣
x
)
p(z|x)
p(z∣x)。
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)
其中
p
(
z
∣
x
)
p(z|x)
p(z∣x)是后验分布;
p
(
x
∣
z
)
p(x|z)
p(x∣z)是likelihood
,相当于是一个方程,将数据
x
x
x和我们所关心的参数
z
z
z联系在了一起;
p
(
z
)
p(z)
p(z)是参数的先验prior
信息;而
p
(
x
)
p(x)
p(x)是我们对于数据的信息,通常称之为evidence
。
一般来说,贝叶斯建模需要走以下几步:
- 选一个
prior
,然后去选一个给定的likelihood
。一般我们需要有一些假设,比如prior
或者likelihood
是服从某种分布的。 - 基于观测数据,去计算后验分布。
- 如果后验分布变量
z
z
z的维度非常高的话,我们就没办法将其全部表示出来,我们一般用后验分布的一些统计量,来代表整个后验分布。比如常见的用
posterior mean and variances
。
但是有一个问题,就是要去计算后验分布
p
(
z
∣
x
)
p(z|x)
p(z∣x)的话,我们需要去计算
p
(
x
)
=
∫
z
p
(
x
,
z
)
d
z
p(x)=\int_{z} p(x, z) d z
p(x)=∫zp(x,z)dz这个积分,如果是高维度上的积分,数值上计算是非常困难的。并且有些情况是可能不存在解析解的。常用的方法有Markov Chain Monte Carlo
(MCMC),但是计算比较慢。
另外一种思路,把贝叶斯模型的计算问题转化为一个优化问题。之后就可以通过一些优化上的手段来进行加速。
KL散度
而用一个分布去拟合另一个分布通常需要衡量这两个分布之间的相似性,通常采用KL
散度,当然还有其他的一些方法,像JS
散度这种。下面介绍KL散度:
机器学习中比较重要的一个概念—相对熵(relative entropy
)。相对熵又被称为KL散度(Kullback–Leibler divergence
) 或信息散度 (information divergence
),是两个概率分布间差异的非对称性度量 。在信息论中,相对熵等价于两个概率分布的信息熵的差值,若其中一个概率分布为真实分布,另一个为理论(拟合)分布,则此时相对熵等于交叉熵与真实分布的信息熵之差,表示使用理论分布拟合真实分布时产生的信息损耗 。其公式如下:
D K L ( p ∥ q ) = ∑ i = 1 N [ p ( x i ) log p ( x i ) − p ( x i ) log q ( x i ) ] D_{K L}(p \| q)=\sum_{i=1}^{N}\left[p\left(x_{i}\right) \log p\left(x_{i}\right)-p\left(x_{i}\right) \log q\left(x_{i}\right)\right] DKL(p∥q)=i=1∑N[p(xi)logp(xi)−p(xi)logq(xi)]
合并之后表示为:
D K L ( p ∥ q ) = ∑ i = 1 N p ( x i ) log ( p ( x i ) q ( x i ) ) D_{K L}(p \| q)=\sum_{i=1}^{N} p\left(x_{i}\right) \log \left(\frac{p\left(x_{i}\right)}{q\left(x_{i}\right)}\right) DKL(p∥q)=i=1∑Np(xi)log(q(xi)p(xi))
假设理论拟合出来的事件概率分布 q ( x ) q(x) q(x)跟真实的分布 p ( x ) p(x) p(x)一模一样,即 p ( x ) = q ( x ) p(x)=q(x) p(x)=q(x),那么 p ( x i ) log q ( x i ) p\left(x_{i}\right) \log q\left(x_{i}\right) p(xi)logq(xi)就等于真实事件的信息熵,这一点显而易见。在理论拟合出来的事件概率分布跟真实的一模一样的时候,相对熵等于0。而拟合出来不太一样的时候,相对熵大于0。其证明如下:
∑ i = 1 N p ( x i ) log q ( x i ) p ( x i ) ≤ ∑ i = 1 N p ( x i ) ( q ( x i ) p ( x i ) − 1 ) = ∑ i = 1 N [ p ( x i ) − q ( x i ) ] = 0 \sum_{i=1}^{N} p\left(x_{i}\right) \log \frac{q\left(x_{i}\right)}{p\left(x_{i}\right)} \leq \sum_{i=1}^{N} p\left(x_{i}\right)\left(\frac{q\left(x_{i}\right)}{p\left(x_{i}\right)}-1\right)=\sum_{i=1}^{N}\left[p\left(x_{i}\right)-q\left(x_{i}\right)\right]=0 i=1∑Np(xi)logp(xi)q(xi)≤i=1∑Np(xi)(p(xi)q(xi)−1)=i=1∑N[p(xi)−q(xi)]=0
其中第一个不等式是由 l n ( x ) ≤ x − 1 ln(x) \leq x -1 ln(x)≤x−1推导出来的,只在 p ( x i ) = q ( x i ) p(x_{i})=q(x_{i}) p(xi)=q(xi)时取到等号。
这个性质很关键,因为它正是深度学习梯度下降法需要的特性。假设神经网络拟合完美了,那么它就不再梯度下降,而不完美则因为它大于0而继续下降。
但它有不好的地方,就是它是不对称的。也就是用 P P P 来拟合 Q Q Q 和用 Q Q Q 来拟合 P P P 的相对熵居然不一样,而他们的距离是一样的。这也就是说,相对熵的大小并不跟距离有一一对应的关系。
变分贝叶斯
我们经常利用贝叶斯公式求posterior distribution
P
(
Z
∣
X
)
P(Z | X)
P(Z∣X)
P ( Z ∣ X ) = p ( X , Z ) ∫ z p ( X , Z = z ) d z P(Z | X)=\frac{p(X, Z)}{\int_{z} p(X, Z=z) d z} P(Z∣X)=∫zp(X,Z=z)dzp(X,Z)
但posterior distribution
P
(
Z
∣
X
)
P(Z | X)
P(Z∣X)求解用贝叶斯的方法是比较困难的,因为我们需要去计算
∫
z
p
(
X
=
x
,
Z
=
z
)
d
z
\int_{z} p(X=x, Z=z) d z
∫zp(X=x,Z=z)dz,而
Z
Z
Z通常会是一个高维的随机变量,这个积分计算起来就非常困难。在贝叶斯统计中,所有的对于未知量的推断(inference
)问题可以看做是对后验概率(posterior
)的计算。因此提出了Variational Inference
来计算posterior distribution
。
那Variational Inference
怎么做的呢?其核心思想主要包括两步:
- 假设一个分布 q ( z ; λ ) q(z ; \lambda) q(z;λ) (这个分布是我们搞得定的,搞不定的就没意义了)
- 通过改变分布的参数 λ \lambda λ,使 q ( z ; λ ) q(z ; \lambda) q(z;λ) 靠近 p ( z ∣ x ) p(z|x) p(z∣x)。
总结称一句话就是,为真实的后验分布引入了一个参数话的模型。 即:用一个简单的分布 q ( z ; λ ) q(z ; \lambda) q(z;λ) 拟合复杂的分布 p ( z ∣ x ) p(z|x) p(z∣x)。
这种策略将计算 p ( z ∣ x ) p(z|x) p(z∣x) 的问题转化成优化问题了
λ ∗ = arg min λ divergence ( p ( z ∣ x ) , q ( z ; λ ) ) \lambda^{*}=\arg \min _{\lambda} \operatorname{divergence}(p(z | x), q(z ; \lambda)) λ∗=argλmindivergence(p(z∣x),q(z;λ))
收敛后,就可以用 q ( z ; λ ) q(z;\lambda) q(z;λ) 来代替 p ( z ∣ x ) p(z|x) p(z∣x)了。
本文的目的还是来求这个变分推理,不要走偏了。下面涉及一些公式等价转换:
log P ( x ) = log P ( x , z ) − log P ( z ∣ x ) = log P ( x , z ) Q ( z ; λ ) − log P ( z ∣ x ) Q ( z ; λ ) \begin{aligned} \log P(x) &=\log P(x, z)-\log P(z | x) \\ &=\log \frac{P(x, z)}{Q(z ; \lambda)}-\log \frac{P(z | x)}{Q(z ; \lambda)} \end{aligned} logP(x)=logP(x,z)−logP(z∣x)=logQ(z;λ)P(x,z)−logQ(z;λ)P(z∣x)
等式两边同时对 Q ( z ) Q(z) Q(z)求期望,得:
E q ( z ; λ ) log P ( x ) = E q ( z ; λ ) log P ( x , z ) − E q ( z ; λ ) log P ( z ∣ x ) log P ( x ) = E q ( z ; λ ) log p ( x , z ) q ( z ; λ ) − E q ( z ; λ ) log p ( z ∣ x ) q ( z ; λ ) = K L ( q ( z ; λ ) ∥ p ( z ∣ x ) ) + E q ( z ; λ ) log p ( x , z ) q ( z ; λ ) log P ( x ) = K L ( q ( z ; λ ) ∥ p ( z ∣ x ) ) + E q ( z ; λ ) log p ( x , z ) q ( z ; λ ) \begin{aligned} \mathbb{E}_{q(z ; \lambda)} \log P(x) &=\mathbb{E}_{q(z ; \lambda)} \log P(x, z)-\mathbb{E}_{q(z ; \lambda)} \log P(z | x) \\ \log P(x) &=\mathbb{E}_{q(z ; \lambda)} \log \frac{p(x, z)}{q(z ; \lambda)}-\mathbb{E}_{q(z ; \lambda)} \log \frac{p(z | x)}{q(z ; \lambda)} \\ &=K L(q(z ; \lambda) \| p(z | x))+\mathbb{E}_{q(z ; \lambda)} \log \frac{p(x, z)}{q(z ; \lambda)} \\ \log P(x) &=K L(q(z ; \lambda) \| p(z | x))+\mathbb{E}_{q(z ; \lambda)} \log \frac{p(x, z)}{q(z ; \lambda)} \end{aligned} Eq(z;λ)logP(x)logP(x)logP(x)=Eq(z;λ)logP(x,z)−Eq(z;λ)logP(z∣x)=Eq(z;λ)logq(z;λ)p(x,z)−Eq(z;λ)logq(z;λ)p(z∣x)=KL(q(z;λ)∥p(z∣x))+Eq(z;λ)logq(z;λ)p(x,z)=KL(q(z;λ)∥p(z∣x))+Eq(z;λ)logq(z;λ)p(x,z)
到这里我们需要回顾一下我们的问题,从另一个角度再来思考一遍,寻找一个近似后验 q ∗ ( z ) ∈ Q q^{*}(z) \in Q q∗(z)∈Q去近似 p ( z ∣ x ) p(z|x) p(z∣x)。
q ∗ ( z ) = arg min q ( z ) ∈ Q L ( q ( z ) , p ( z ∣ x ) ) q^{*}(z) = \argmin_{q(z) \in Q} L(q(z),p(z|x)) q∗(z)=q(z)∈QargminL(q(z),p(z∣x))
这里有两个注意点。1. 如何来选取这个
Q
Q
Q。2.
L
L
L表示它们之间的距离度量,通常用KL-divergence
来表示:
L
(
q
(
z
)
,
p
(
z
∣
x
)
)
=
K
L
(
q
(
z
)
∣
∣
p
(
z
∣
x
)
)
L(q(z),p(z|x)) = KL(q(z) || p(z|x))
L(q(z),p(z∣x))=KL(q(z)∣∣p(z∣x))。用KL
的原因在于它满足一些凸性,可导等性质。另一方面在于它具备一些性质:
q ∗ ( z ) = arg min q ( z ) ∈ Q K L ( q ( z ) , p ( z ∣ x ) ) = arg min q ( z ) ∈ Q − ∫ z q ( z ) l o g [ p ( z ∣ x ) q ( z ) ] q^{*}(z) = \argmin_{q(z) \in Q} KL(q(z),p(z|x)) \\ = \argmin_{q(z) \in Q} - \int_{z} q(z) log[\frac{p(z|x)}{q(z)}] q∗(z)=q(z)∈QargminKL(q(z),p(z∣x))=q(z)∈Qargmin−∫zq(z)log[q(z)p(z∣x)]
p
(
z
∣
x
)
p(z|x)
p(z∣x)是我们的target
,
q
(
z
)
q(z)
q(z)是我们提出的,需要去优化的分布。要去算这个优化的目标函数,我们需要已知
p
(
z
∣
x
)
p(z|x)
p(z∣x)这个后验分布,但是我们不知道这个后验分布是什么。因此,上述这个公式我们是无法直接计算的。这就变成了一个循环的问题,为了要去算
p
(
z
∣
x
)
p(z|x)
p(z∣x),要去计算
q
(
z
)
q(z)
q(z),而要计算
q
(
z
)
q(z)
q(z)又需要计算
p
(
z
∣
x
)
p(z|x)
p(z∣x)。在没有其它约束的情况下,当
q
∗
=
p
(
z
∣
x
)
q^{*}=p(z|x)
q∗=p(z∣x)的时候能够取到理论的最优值,但是
p
(
z
∣
x
)
p(z|x)
p(z∣x)并不知道。
我们对KL Divergence
最小化的问题做一些形式上的转变,期望去找到一个等价的问题:
K L ( q ( z ) ∥ p ( z ∣ x ) ) = − ∫ z q ( z ) log [ p ( z ∣ x ) q ( z ) ] d z = ∫ z q ( z ) log q ( z ) d z − ∫ z q ( z ) log p ( z ∣ x ) d z = E q [ log q ( z ) ] − E q [ log p ( z ∣ x ) ] = E q [ log q ( z ) ] − E q [ log [ p ( x , z ) p ( x ) ] ] = E q [ log q ( z ) ] − E q [ log p ( x , z ) ] + E q [ log p ( x ) ] = E q [ log q ( z ) ] − E q [ log p ( x , z ) ] ⏟ − ELBO + log p ( x ) \begin{aligned} \mathrm{KL}(q(z) \| p(z \mid x)) &=-\int_{z} q(z) \log \left[\frac{p(z \mid x)}{q(z)}\right] d z \\ &=\int_{z} q(z) \log q(z) d z-\int_{z} q(z) \log p(z \mid x) d z \\ &=\mathbb{E}_{q}[\log q(z)]-\mathbb{E}_{q}[\log p(z \mid x)] \\ &=\mathbb{E}_{q}[\log q(z)]-\mathbb{E}_{q}\left[\log \left[\frac{p(x, z)}{p(x)}\right]\right] \\ &=\mathbb{E}_{q}[\log q(z)]-\mathbb{E}_{q}[\log p(x, z)]+\mathbb{E}_{q}[\log p(x)] \\ &=\underbrace{\mathbb{E}_{q}[\log q(z)]-\mathbb{E}_{q}[\log p(x, z)]}_{-\text {ELBO }}+\log p(x) \end{aligned} KL(q(z)∥p(z∣x))=−∫zq(z)log[q(z)p(z∣x)]dz=∫zq(z)logq(z)dz−∫zq(z)logp(z∣x)dz=Eq[logq(z)]−Eq[logp(z∣x)]=Eq[logq(z)]−Eq[log[p(x)p(x,z)]]=Eq[logq(z)]−Eq[logp(x,z)]+Eq[logp(x)]=−ELBO Eq[logq(z)]−Eq[logp(x,z)]+logp(x)
上述公式经过一定的变型之后,ELBO
就是log-likelihood
的一个下界函数:
log p ( x ) = E L B O ( q ) + K L ( q ( z ) ∥ p ( z ∣ x ) ) ≥ E L B O ( q ) \begin{aligned} \log p(x) &=\mathrm{ELBO}(q)+\mathrm{KL}(q(z) \| p(z \mid x)) \\ & \geq \mathrm{ELBO}(q) \end{aligned} logp(x)=ELBO(q)+KL(q(z)∥p(z∣x))≥ELBO(q)
因为
log
p
(
x
)
\log p(x)
logp(x)是一个与
q
q
q无关的常数,那么对
K
L
(
q
(
z
)
∥
p
(
z
∣
x
)
)
\mathrm{KL}(q(z) \| p(z \mid x))
KL(q(z)∥p(z∣x))的Minimizing
问题就可以等价于Maximizing ELBO
(
q
q
q)。
我们为什么要去做这样的一个替换呢?之前我们并不知道
q
∗
(
z
)
=
arg min
q
(
z
)
∈
Q
K
L
(
q
(
z
)
,
p
(
z
∣
x
)
)
q^{*}(z) = \argmin_{q(z) \in Q} KL(q(z),p(z|x))
q∗(z)=argminq(z)∈QKL(q(z),p(z∣x))中的后验分布
p
(
z
∣
x
)
p(z|x)
p(z∣x)。因为想要计算它的话,需要计算一个积分。而ELBO
的表达式如下:
E L B O ( q ) = E q [ log p ( x , z ) ] − E q [ log q ( z ) ] = ∫ z q ( z ) log [ p ( x , z ) q ( z ) ⏞ known ] d z \begin{aligned} \mathrm{ELBO}(q) &=\mathbb{E}_{q}[\log p(x, z)]-\mathbb{E}_{q}[\log q(z)] \\ &=\int_{z} q(z) \log [\overbrace{\frac{p(x, z)}{q(z)}}^{\text {known }}] d z \end{aligned} ELBO(q)=Eq[logp(x,z)]−Eq[logq(z)]=∫zq(z)log[q(z)p(x,z) known ]dz
其中
p
(
x
,
z
)
=
p
(
x
∣
z
)
p
(
z
)
p(x,z)=p(x|z)p(z)
p(x,z)=p(x∣z)p(z),是一个先验分布与likelihood
的乘积。因此可以对ELBO
做优化求解。现在,variational inference
的目标变成:
max λ E q ( z ; λ ) [ log p ( x , z ) − log q ( z ; λ ) ] \max_{\lambda}\mathbb E_{q(z;\lambda)}[\text{log}p(x,z)-\text{log}q(z;\lambda)] λmaxEq(z;λ)[logp(x,z)−logq(z;λ)]
E
q
(
z
;
λ
)
[
log
p
(
x
,
z
)
−
log
q
(
z
;
λ
)
]
\mathbb E_{q(z;\lambda)}[\text{log}p(x,z)-\text{log}q(z;\lambda)]
Eq(z;λ)[logp(x,z)−logq(z;λ)]称为Evidence Lower Bound(ELBO)
。
p
(
x
)
p(x)
p(x)一般被称之为evidence
,又因为
K
L
(
q
∣
∣
p
)
>
=
0
KL(q||p)>=0
KL(q∣∣p)>=0, 所以
p
(
x
)
>
=
E
q
(
z
;
λ
)
[
log
p
(
x
,
z
)
−
log
q
(
z
;
λ
)
]
p(x)>=E_{q(z;\lambda)}[\text{log}p(x,z)-\text{log}q(z;\lambda)]
p(x)>=Eq(z;λ)[logp(x,z)−logq(z;λ)], 这就是为什么被称为ELBO
。
实际上EM
算法(Expectation-Maximization
)就是利用了这一特征,它分为交替进行的两步:E step
假设模型参数不变,
q
(
z
)
=
p
(
z
∣
x
)
q(z)=p(z|x)
q(z)=p(z∣x),计算对数似然率,在M step
再做ELBO
相对于模型参数的优化。与变分法比较,EM算法假设了当模型参数固定时,
p
(
z
∣
x
)
p(z|x)
p(z∣x) 是易计算的形式,而变分法并无这一限制,对于条件概率难于计算的情况,变分法仍然有效。
那如何来求解上述公式呢?下面介绍平均场(mean-field
)、蒙特卡洛、和黑盒变分推断 (Black Box Variational Inference
) 的方法。
平均场变分族(mean-field variational family)
之前我们说我们选择一族合适的近似概率分布 q ( Z ; λ ) q(Z;\lambda) q(Z;λ),那么实际问题中,我们可以选择什么形式的 q ( Z ; λ ) q(Z;\lambda) q(Z;λ) 呢?
一个简单而有效的变分族为平均场变分族(mean-field variational family
)。它假设了隐藏变量间是相互独立的:
q ( Z ; λ ) = ∏ k = 1 K q k ( Z k ; λ k ) q(Z;\lambda) = \prod_{k=1}^{K}q_k(Z_k;\lambda_k) q(Z;λ)=k=1∏Kqk(Zk;λk)
这个假设看起来似乎比较强,但实际应用范围还是比较广泛,我们可以将其延展为将有实际相互关联的隐藏变量分组,而化为各组联合分布的乘积形式即可。
利用ELBO
和平均场假设,我们就可以利用coordinate ascent variational inference
(简称CAVI
)方法来处理:
- 利用条件概率分布的链式法则有 :
p ( z 1 : m , x 1 : n ) = p ( x 1 : n ) ∏ j = 1 m p ( z j ∣ z 1 : ( j − 1 ) , x 1 : n ) p\left(z_{1: m}, x_{1: n}\right)=p\left(x_{1: n}\right) \prod_{j=1}^{m} p\left(z_{j} | z_{1:(j-1)}, x_{1: n}\right) p(z1:m,x1:n)=p(x1:n)j=1∏mp(zj∣z1:(j−1),x1:n)
- 变分分布的期望为:
E [ log q ( z 1 : m ) ] = ∑ j = 1 m E j [ log q ( z j ) ] E\left[\log q\left(z_{1: m}\right)\right]=\sum_{j=1}^{m} E_{j}\left[\log q\left(z_{j}\right)\right] E[logq(z1:m)]=j=1∑mEj[logq(zj)]
将其代入ELBO
的定义得到:
E L B O = logp ( x 1 : n ) + ∑ j = 1 m E [ log p ( z j ∣ z 1 : ( j − 1 ) , x 1 : n ) ] − E j [ log q ( z j ) ] E L B O=\operatorname{logp}\left(x_{1: n}\right)+\sum_{j=1}^{m} E\left[\log p\left(z_{j} | z_{1:(j-1)}, x_{1: n}\right)\right]-E_{j}\left[\log q\left(z_{j}\right)\right] ELBO=logp(x1:n)+j=1∑mE[logp(zj∣z1:(j−1),x1:n)]−Ej[logq(zj)]
将其对 z k z_{k} zk 求导并令导数为零有:
d E L B O d q ( z k ) = E − k [ log p ( z k ∣ z − k , x ) ] − log q ( z k ) − 1 = 0 \frac{d E L B O}{d q\left(z_{k}\right)}=E_{-k}\left[\log p\left(z_{k} | z_{-k}, x\right)\right]-\log q\left(z_{k}\right)-1=0 dq(zk)dELBO=E−k[logp(zk∣z−k,x)]−logq(zk)−1=0
由此得到coordinate ascent
的更新法则为:
q ∗ ( z k ) ∝ exp E − k [ log p ( z k , z − k , x ) ] q^{*}\left(z_{k}\right) \propto \exp E_{-k}\left[\log p\left(z_{k}, z_{-k}, x\right)\right] q∗(zk)∝expE−k[logp(zk,z−k,x)]
我们可以利用这一法则不断的固定其他的
z
z
z 的坐标来更新当前的坐标对应的
z
z
z值,这与Gibbs Sampling
过程类似,不过Gibbs Sampling
是不断的从条件概率中采样,而CAVI
算法中是不断的用如下形式更新:
q ∗ ( z k ) ∝ exp E [ log ( conditional ) ] q^{*}\left(z_{k}\right) \propto \exp E[\log (\text {conditional})] q∗(zk)∝expE[log(conditional)]
Proof:
E L B O ( q ) = E q [ log p ( x , z ) ] − E q [ log q ( z ) ] = ∫ z q ( z ) log p ( z , x ) d z − [ E q j [ log q j ( z j ) ] + ∑ i ≠ j E q i [ log q i ( z i ) ] ⏟ const ] = ∫ z j q j ( z j ) [ ∫ z − j q − j ( z − j ) log p ( z , x ) d z − j ] d z j − E q j [ log q j ( z j ) ] − const = ∫ z j q j ( z j ) E q − j [ log p ( z , x ) ] d z j − ∫ z j q j ( z j ) log q j ( z j ) d z j − const \begin{aligned} \mathrm{ELBO}(q)=& \mathbb{E}_{q}[\log p(x, z)]-\mathbb{E}_{q}[\log q(z)] \\ =& \int_{z} q(z) \log p(z, x) d z-\left[\mathbb{E}_{q_{j}}\left[\log q_{j}\left(z_{j}\right)\right]+\underbrace{\sum_{i \neq j} \mathbb{E}_{q_{i}}\left[\log q_{i}\left(z_{i}\right)\right]}_{\text {const }}\right] \\ =& \int_{z_{j}} q_{j}\left(z_{j}\right)\left[\int_{z_{-j}} q_{-j}\left(z_{-j}\right) \log p(z, x) d z_{-j}\right] d z_{j} \\ &-\mathbb{E}_{q_{j}}\left[\log q_{j}\left(z_{j}\right)\right]-\text { const } \\ =& \int_{z_{j}} q_{j}\left(z_{j}\right) \mathbb{E}_{q-j}[\log p(z, x)] d z_{j}-\int_{z_{j}} q_{j}\left(z_{j}\right) \log q_{j}\left(z_{j}\right) d z_{j}-\text { const } \end{aligned} ELBO(q)====Eq[logp(x,z)]−Eq[logq(z)]∫zq(z)logp(z,x)dz− Eqj[logqj(zj)]+const i=j∑Eqi[logqi(zi)] ∫zjqj(zj)[∫z−jq−j(z−j)logp(z,x)dz−j]dzj−Eqj[logqj(zj)]− const ∫zjqj(zj)Eq−j[logp(z,x)]dzj−∫zjqj(zj)logqj(zj)dzj− const
定义一个新的分布:
log p ~ j ( z j , x ) = E q − j [ log p ( z , x ) ] + const \log \tilde{p}_{j}\left(z_{j}, x\right)=\mathbb{E}_{q-j}[\log p(z, x)]+\text { const } logp~j(zj,x)=Eq−j[logp(z,x)]+ const
此时的ELBO
就可以写成如下形式:
E L B O ( q ) = ∫ z j q j ( z j ) log p ~ j ( z j , x ) d z j − ∫ z j q j ( z j ) log q j ( z j ) d z j + const = ∫ z j q j ( z j ) log p ~ j ( z j , x ) q j ( z j ) d z j + const = − K L ( q j ( z j ) ∥ p ~ j ( z j , x ) ) + const \begin{aligned} \mathrm{ELBO}(q) &=\int_{z_{j}} q_{j}\left(z_{j}\right) \log \tilde{p}_{j}\left(z_{j}, x\right) d z_{j}-\int_{z_{j}} q_{j}\left(z_{j}\right) \log q_{j}\left(z_{j}\right) d z_{j}+\text { const } \\ &=\int_{z_{j}} q_{j}\left(z_{j}\right) \log \frac{\tilde{p}_{j}\left(z_{j}, x\right)}{q_{j}\left(z_{j}\right)} d z_{j}+\text { const } \\ &=-\mathrm{KL}\left(q_{j}\left(z_{j}\right) \| \tilde{p}_{j}\left(z_{j}, x\right)\right)+\text { const } \end{aligned} ELBO(q)=∫zjqj(zj)logp~j(zj,x)dzj−∫zjqj(zj)logqj(zj)dzj+ const =∫zjqj(zj)logqj(zj)p~j(zj,x)dzj+ const =−KL(qj(zj)∥p~j(zj,x))+ const
此时的KL divergence
达到最小值时,当:
q j ∗ ( z j ) = p ~ j ( z j , x ) ∝ exp { E q − j [ log p ( z , x ) ] } ( normalize ) = exp { E q − j [ log p ( z , x ) ] } ∫ z j exp { E q − j [ log p ( z , x ) ] } d z j \begin{aligned} q_{j}^{*}\left(z_{j}\right) &=\tilde{p}_{j}\left(z_{j}, x\right) \\ & \propto \exp \left\{\mathbb{E}_{q-j}[\log p(z, x)]\right\} \\ (\text { normalize }) &=\frac{\exp \left\{\mathbb{E}_{q-j}[\log p(z, x)]\right\}}{\int_{z_{j}} \exp \left\{\mathbb{E}_{q_{-j}}[\log p(z, x)]\right\} d z_{j}} \end{aligned} qj∗(zj)( normalize )=p~j(zj,x)∝exp{Eq−j[logp(z,x)]}=∫zjexp{Eq−j[logp(z,x)]}dzjexp{Eq−j[logp(z,x)]}
其完整算法如下所示:
MCMC
MCMC
方法是利用马尔科夫链取样来近似后验概率,变分法是利用优化结果来近似后验概率,那么我们什么时候用MCMC
,什么时候用变分法呢?
首先,MCMC
相较于变分法计算上消耗更大,但是它可以保证取得与目标分布相同的样本,而变分法没有这个保证:它只能寻找到近似于目标分布一个密度分布,但同时变分法计算上更快,由于我们将其转化为了优化问题,所以可以利用诸如随机优化(stochastic optimization
)或分布优化(distributed optimization
)等方法快速的得到结果。所以当数据量较小时,我们可以用MCMC
方法消耗更多的计算力但得到更精确的样本。当数据量较大时,我们用变分法处理比较合适。
另一方面,后验概率的分布形式也影响着我们的选择。比如对于有多个峰值的混合模型,MCMC
可能只注重其中的一个峰而不能很好的描述其他峰值,而变分法对于此类问题即使样本量较小也可能优于MCMC
方法。
黑盒变分推断(BBVI)
ELBO
公式表达为:
E q ( z ; λ ) [ log p ( x , z ) − log q ( z ; λ ) ] \mathbb E_{q(z;\lambda)}[\text{log}p(x,z)-\text{log}q(z;\lambda)] Eq(z;λ)[logp(x,z)−logq(z;λ)]
对用参数 θ \theta θ替代 λ \lambda λ,并对其求导:
∇ θ ELBO ( θ ) = ∇ θ E q ( log p ( x , z ) − log q θ ( z ) ) \nabla_{\theta} \operatorname{ELBO}(\theta)=\nabla_{\theta} \mathbb{E}_{q}\left(\log p(x, z)-\log q_{\theta}(z)\right) ∇θELBO(θ)=∇θEq(logp(x,z)−logqθ(z))
直接展开计算如下:
∂ ∂ θ ∫ q θ ( z ) ( log p ( x , z ) − log q θ ( z ) ) d z = ∫ ∂ ∂ θ [ q θ ( z ) ( log p ( x , z ) − log q θ ( z ) ) ] d z = ∫ ∂ ∂ θ ( q θ ( z ) log p ( x , z ) ) − ∂ ∂ θ ( q θ ( z ) log q θ ( z ) ) d z = ∫ ∂ q θ ( z ) ∂ θ log p ( x , z ) − ∂ q θ ( z ) ∂ θ log q θ ( z ) − ∂ q θ ( z ) ∂ θ d z \begin{aligned} & \frac{\partial}{\partial \theta} \int q_{\theta}(z)\left(\log p(x, z)-\log q_{\theta}(z)\right) d z \\ =& \int \frac{\partial}{\partial \theta}\left[q_{\theta}(z)\left(\log p(x, z)-\log q_{\theta}(z)\right)\right] d z \\ =& \int \frac{\partial}{\partial \theta}\left(q_{\theta}(z) \log p(x, z)\right)-\frac{\partial}{\partial \theta}\left(q_{\theta}(z) \log q_{\theta}(z)\right) d z \\ =& \int \frac{\partial q_{\theta}(z)}{\partial \theta} \log p(x, z)-\frac{\partial q_{\theta}(z)}{\partial \theta} \log q_{\theta}(z)-\frac{\partial q_{\theta}(z)}{\partial \theta} d z \end{aligned} ===∂θ∂∫qθ(z)(logp(x,z)−logqθ(z))dz∫∂θ∂[qθ(z)(logp(x,z)−logqθ(z))]dz∫∂θ∂(qθ(z)logp(x,z))−∂θ∂(qθ(z)logqθ(z))dz∫∂θ∂qθ(z)logp(x,z)−∂θ∂qθ(z)logqθ(z)−∂θ∂qθ(z)dz
由于:
∫ ∂ q θ ( z ) ∂ θ d z = ∂ ∂ θ ∫ q θ ( z ) d z = ∂ ∂ θ 1 = 0 \int \frac{\partial q_{\theta}(z)}{\partial \theta} d z=\frac{\partial}{\partial \theta} \int q_{\theta}(z) d z=\frac{\partial}{\partial \theta} 1=0 ∫∂θ∂qθ(z)dz=∂θ∂∫qθ(z)dz=∂θ∂1=0
因此:
∇ θ ELBO ( θ ) = ∫ ∂ q θ ( z ) ∂ θ ( log p ( x , z ) − log q θ ( z ) ) d z = ∫ q θ ( z ) ∂ log q θ ( z ) ∂ θ ( log p ( x , z ) − log q θ ( z ) ) d z = ∫ q θ ( z ) ∇ θ log q θ ( z ) ( log p ( x , z ) − log q θ ( z ) ) d z = E q [ ∇ θ log q θ ( z ) ( log p ( x , z ) − log q θ ( z ) ) ] \begin{aligned} \nabla_{\theta} \operatorname{ELBO}(\theta) &=\int \frac{\partial q_{\theta}(z)}{\partial \theta}\left(\log p(x, z)-\log q_{\theta}(z)\right) d z \\ &=\int q_{\theta}(z) \frac{\partial \log q_{\theta}(z)}{\partial \theta}\left(\log p(x, z)-\log q_{\theta}(z)\right) d z \\ &=\int q_{\theta}(z) \nabla_{\theta} \log q_{\theta}(z)\left(\log p(x, z)-\log q_{\theta}(z)\right) d z \\ &=\mathbb{E}_{q}\left[\nabla_{\theta} \log q_{\theta}(z)\left(\log p(x, z)-\log q_{\theta}(z)\right)\right] \end{aligned} ∇θELBO(θ)=∫∂θ∂qθ(z)(logp(x,z)−logqθ(z))dz=∫qθ(z)∂θ∂logqθ(z)(logp(x,z)−logqθ(z))dz=∫qθ(z)∇θlogqθ(z)(logp(x,z)−logqθ(z))dz=Eq[∇θlogqθ(z)(logp(x,z)−logqθ(z))]
然后写成 SGD
,就是所谓 Black Box Variational Inference (BBVI)
。
E z ∼ q θ ( z ) [ ∇ θ log q θ ( z ) ( log p ( x , z ) − log q θ ( z ) ) ] ≈ 1 N ∑ i = 1 N ∇ θ log q θ ( z i ) ( log p ( x , z i ) − log q θ ( z i ) ) \begin{aligned} & \mathbb{E}_{z \sim q_{\theta}(z)}\left[\nabla_{\theta} \log q_{\theta}(z)\left(\log p(x, z)-\log q_{\theta}(z)\right)\right] \\ \approx & \frac{1}{N} \sum_{i=1}^{N} \nabla_{\theta} \log q_{\theta}\left(z_{i}\right)\left(\log p\left(x, z_{i}\right)-\log q_{\theta}\left(z_{i}\right)\right) \end{aligned} ≈Ez∼qθ(z)[∇θlogqθ(z)(logp(x,z)−logqθ(z))]N1i=1∑N∇θlogqθ(zi)(logp(x,zi)−logqθ(zi))
其中 z i ∼ q θ ( z ) z_{i} \sim q_{\theta}(z) zi∼qθ(z)。
参考
- https://www.jianshu.com/p/b8ecabf9af07
- https://blog.csdn.net/weixinhum/article/details/85064685
- https://zhuanlan.zhihu.com/p/51567052
- https://zhuanlan.zhihu.com/p/49401976
- https://space.bilibili.com/491707363/channel/detail?cid=162191
我的微信公众号名称:小小何先生
公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!