变分推断 Variational Inference
贝叶斯与近似贝叶斯
贝叶斯推断(Bayesian Inference) ,在贝叶斯推断中我们有观测数据
\mathrm{x} = \{\mathrm{x}_1, \mathrm{x}_2, \cdots, \mathrm{x}_n\},将模型的参数设置为
\mathrm{z},它具有
m个参数
\mathrm{z} = \{\mathrm{z}_1, \mathrm{z}_2, \cdots, \mathrm{z}_m\}。给定一个 先验(prior) 分布
p(\mathrm{z}),在我们观测到数据
\mathrm{x}之后,我们依据这个数据对
\mathrm{z}的分布有一个更新。这种更新我们通常称之为计算 后验分布(posterior distribution)
p(\mathrm{z|x}):
p(\mathrm{z|x}) = \dfrac{p(\mathrm{x,z})}{p(\mathrm{x})} = \dfrac{p(\mathrm{x|z}) \cdot p(\mathrm{z})}{p(\mathrm{x})}
其中
p(\mathrm{z|x})是 后验分布(posterior distribution) ;
p(\mathrm{x|z}) 是 likelihood,相当于是一个方程,将数据
\mathrm{x}和我们所关心的参数
\mathrm{z}联系在了一起;
p(\mathrm{z})是参数的先验prior信息;而
p(\mathrm{x})是我们对于数据的信息,通常称之为evidence。
一般来说,贝叶斯建模需要走以下几步:
- 选一个prior,然后去选一个给定的likelihood。一般我们需要有一些假设,比如prior或者likelihood是服从某种分布的。
- 基于观测数据,去计算后验分布。
- 如果后验分布变量z\mathrm{z}z的维度非常高的话,我们就没办法将其全部表示出来,我们一般用后验分布的一些统计量,来代表整个后验分布。比如常见的用posterior mean and variances。
但是有一个问题,就是要去计算后验分布
p(\mathrm{z∣x}) 的话,我们需要去计算
\displaystyle p(\mathrm{x})=\int p(\mathrm{x,z})\mathrm{dz} 这个积分,如果是高维度上的积分,数值上计算是非常困难的。并且有些情况是可能不存在解析解的。常用的方法有Markov Chain Monte Carlo(MCMC),但是计算比较慢。
另外一种思路,把贝叶斯模型的计算问题转化为一个优化问题。之后就可以通过一些优化上的手段来进行加速。
KL散度 Kullback-Leibler divergence
机器学习中比较重要的一个概念—相对熵(relative entropy)。相对熵又被称为KL散度(Kullback–Leibler divergence) 或信息散度 (information divergence),是两个概率分布间差异的非对称性度量 。在信息论中,相对熵等价于两个概率分布的信息熵的差值,若其中一个概率分布为真实分布,另一个为理论(拟合)分布,则此时相对熵等于交叉熵与真实分布的信息熵之差,表示使用理论分布拟合真实分布时产生的信息损耗。其公式如下:
\begin{aligned}
D_{KL} (p||q) &= \sum_{i=1}^N \Big[
p(\mathrm{x}_i) \log p(\mathrm{x}_i) - p(\mathrm{x}_i) \log q(\mathrm{x}_i)
\Big]\\ &= \sum_{i=1}^N
p(\mathrm{x}_i) \log \dfrac{p(\mathrm{x}_i)}{q(\mathrm{x}_i)}
\end{aligned}
假设理论拟合出来的事件概率分布
q(\mathrm{x})跟真实的分布
p(\mathrm{x})一模一样,即
q(\mathrm{x}) = p(\mathrm{x}),那么
p(\mathrm{x}_i) \log q(\mathrm{x}_i)就等于真实事件的信息熵,这一点显而易见。在理论拟合出来的事件概率分布跟真实的一模一样的时候,相对熵等于
0。而拟合出来不太一样的时候,相对熵大于
0。其证明如下:
\begin{aligned}
D_{KL} (p||q) &= \sum_{i=1}^N p(\mathrm{x}_i) \log \dfrac{p(\mathrm{x}_i)}{q(\mathrm{x}_i)}\\
&= -\sum_{i=1}^N p(\mathrm{x}_i) \log \dfrac{q(\mathrm{x}_i)}{p(\mathrm{x}_i)}\\
&\ge -\sum_{i=1}^N p(\mathrm{x}_i) \Big(\dfrac{q(\mathrm{x}_i)}{p(\mathrm{x}_i)} - 1\Big)\\
&= -\sum_{i=1}^N \Big(q(\mathrm{x}_i) - p(\mathrm{x}_i)\Big)\\
&= -\sum_{i=1}^N q(\mathrm{x}_i) + \sum_{i=1}^N p(\mathrm{x}_i)\\
&= -1 + 1\\
&= 0
\end{aligned}
放缩那一步是根据
\ln(1+x) \le x 进行的,因此当且仅当
\forall i, p(\mathrm{x}_i) = q(\mathrm{x}_i) 时,取等号。
这个性质很关键,因为它正是深度学习梯度下降法需要的特性。假设神经网络拟合完美了,那么它就不再梯度下降,而不完美则因为它大于
0而继续下降。但它有不好的地方,就是它是不对称的。也就是用
P来拟合
Q和用
Q来拟合
P的相对熵居然不一样,而他们的距离是一样的。这也就是说,相对熵的大小并不跟距离有一一对应的关系。
变分推断 Variational Inference
我们经常利用贝叶斯公式求posterior distribution:
p(\mathrm{z|x})p(\mathrm{z|x}) = \dfrac{p(\mathrm{x,z})}{p(\mathrm{x})} = \dfrac{p(\mathrm{x,z})}{\displaystyle \int p(\mathrm{x, z}) \mathrm{dz}}
但posterior distribution
p(\mathrm{z|x}) 求解用贝叶斯的方法是比较困难的,因为我们需要去计算
\displaystyle \int p(\mathrm{x, z}) \mathrm{dz}。而
\mathrm{z}通常会是一个高维的随机变量,这个积分计算起来就非常困难。在贝叶斯统计中,所有的对于未知量的 推断(inference) 问题可以看做是对 后验概率(posterior) 的计算。因此提出了 Variational Inference 来计算 posterior distribution 。
Variational Inference 核心思想主要包括两步:
- 假设一个用于近似的简单分布
q(\mathrm{z;\lambda})- 通过改变分布的参数
\lambda,使
q(\mathrm{z;\lambda})靠近
p(\mathrm{z|x})。
总结称一句话就是,为真实的后验分布引入了一个参数化的模型。 即:用一个简单的分布
q(\mathrm{z;\lambda})拟合复杂的分布
p(\mathrm{z|x})。
这种策略将计算
p(\mathrm{z|x})的问题转化成优化问题了
对
D_{KL}\Big( p(\mathrm{z|x}) || q(\mathrm{z;\lambda}) \Big)进行如下变形:
\begin{aligned}
D_{KL}\Big( q(\mathrm{z;\lambda}) || p(\mathrm{z|x}) \Big)
&= \mathbb{E}_{\mathrm{z}\sim q(\mathrm{z;\lambda})}\Big(\log q(\mathrm{z;\lambda})\Big) - \mathbb{E}_{\mathrm{z}\sim q(\mathrm{z;\lambda})} \Big(\log p(\mathrm{z|x}) \Big)\\
&= \mathbb{E}_{\mathrm{z}\sim q(\mathrm{z;\lambda})}\Big(\log q(\mathrm{z;\lambda})\Big) - \mathbb{E}_{\mathrm{z}\sim q(\mathrm{z;\lambda})} \Big(\log \dfrac{p(\mathrm{x, z})}{p(\mathrm{x})}\Big)\\
&= \mathbb{E}_{\mathrm{z}\sim q(\mathrm{z;\lambda})}\Big(\log q(\mathrm{z;\lambda})\Big) - \mathbb{E}_{\mathrm{z}\sim q(\mathrm{z;\lambda})} \Big(\log p(\mathrm{x, z})\Big) + \mathbb{E}_{\mathrm{z}\sim q(\mathrm{z;\lambda})} \Big(\log p(\mathrm{x})\Big)\\
&= \mathbb{E}_{\mathrm{z}\sim q(\mathrm{z;\lambda})}\Big(\log q(\mathrm{z;\lambda})\Big) - \mathbb{E}_{\mathrm{z}\sim q(\mathrm{z;\lambda})} \Big(\log p(\mathrm{x, z})\Big) + \log p(\mathrm{x})\\
&= -\Big[\underbrace{\mathbb{E}_{\mathrm{z}\sim q(\mathrm{z;\lambda})} \Big(\log p(\mathrm{x, z})\Big) - \mathbb{E}_{\mathrm{z}\sim q(\mathrm{z;\lambda})}\Big(\log q(\mathrm{z;\lambda})\Big)}_{\text{ELBO}}\Big] + \log p(\mathrm{x})
\end{aligned}
由此我们获得等式:
\log p(\mathrm{x}) = D_{KL}\Big( q(\mathrm{z;\lambda}) || p(\mathrm{z|x}) \Big) + \text{ELBO},已知KL Divergence的最小值为
0,于是有不等式
\begin{aligned}
\log p(\mathrm{x}) &= D_{KL}\Big( q(\mathrm{z;\lambda}) || p(\mathrm{z|x}) \Big) + \text{ELBO}\\
&\ge \text{ELBO}
\end{aligned}
其中
\log p(\mathrm{x})称为evidence,所以根据上述不等式,
\mathbb{E}_{\mathrm{z}\sim q(\mathrm{z;\lambda})} \Big(\log p(\mathrm{x, z}) - \log q(\mathrm{z;\lambda})\Big)这一项称为ELBO(Evidence Lower Bound)。当evidence达到ELBO时,KL Divergence为0,两个分布相同。
再结合之前的最优化问题的目标函数,有:
由此可见,最小化KL Divergence 就等价于 最大化ELBO(Evidence Lower Bound)。
暂时只需要知道这么多,以后还需要更多内容的时候再更新。
Reference