变分贝叶斯(Variational Bayesian,简称VB)是处理复杂概率模型中的一种强大的近似推断技术。它的核心目标是找到一个更简单的概率分布来近似一个难以直接计算的复杂后验分布。
为了让你能更清晰地理解变分贝叶斯,我们将从以下几个方面进行详细阐述:
一、 回顾贝叶斯推断的基础
在深入VB之前,我们先回顾一下贝叶斯推断的基本框架。
模型: 我们有一个概率模型,通常由似然函数 $p(D| heta)$ 和先验分布 $p( heta)$ 组成。
$D$: 观测数据 (Data)。
$ heta$: 模型的未知参数或潜在变量 (Parameters/Latent Variables)。
$p(D| heta)$: 描述在给定参数 $ heta$ 下,数据 $D$ 出现的概率。
$p( heta)$: 描述我们对参数 $ heta$ 在观测数据之前所持有的信念。
目标: 我们最关心的是后验分布 $p( heta|D)$,它反映了在观测到数据 $D$ 后,我们对参数 $ heta$ 的更新信念。根据贝叶斯定理:
$$p( heta|D) = frac{p(D| heta)p( heta)}{p(D)}$$
挑战: 后验分布的计算往往非常困难,尤其是当模型复杂、参数维度很高,或者存在潜在变量时。其中的主要障碍是分母 $p(D)$,也就是数据的边缘似然或模型证据:
$$p(D) = int p(D| heta)p( heta)d heta quad ext{或} quad p(D) = sum_{ heta} p(D| heta)p( heta) quad ( ext{对于离散参数})$$
这个积分(或求和)通常是不可积的,导致我们无法直接得到精确的后验分布。
二、 精确推断的困境与近似推断的需求
当无法精确计算后验分布时,我们就需要近似推断 (Approximate Inference)。近似推断的目标是找到一个我们能够处理的简单分布 $q( heta)$ 来近似目标后验分布 $p( heta|D)$。
常见的近似推断方法有:
1. MCMC (Markov Chain Monte Carlo): 通过构建马尔可夫链,采样得到后验分布的样本。这是精确的(渐近精确),但计算成本可能非常高,尤其是当模型复杂或需要大量样本时。
2. 变分推断 (Variational Inference, VI): 将近似推断转化为一个优化问题。它试图找到一个“最接近”目标后验分布的简单分布,并将其中的“接近程度”量化为一个可优化的目标函数。
变分贝叶斯是变分推断的一个分支,它将贝叶斯推断与变分方法结合起来,旨在找到一个近似后验分布。
三、 变分推断的核心思想:最小化KL散度
变分推断的核心思想是找到一个分布 $q( heta)$,使得它与目标后验分布 $p( heta|D)$ 之间的“距离”最小。在变分推断中,这个“距离”通常用KullbackLeibler (KL) 散度来衡量:
$$KL(q( heta) || p( heta|D)) = int q( heta) log frac{q( heta)}{p( heta|D)} d heta$$
我们希望最小化这个KL散度。
理解KL散度:
KL散度度量的是从一个分布到另一个分布的信息增益。它总是非负的,并且当两个分布完全相同时才为零。最小化KL散度意味着让 $q( heta)$ 尽可能地“像” $p( heta|D)$。
四、 导出变分下界 (Evidence Lower Bound, ELBO)
直接最小化 $KL(q( heta) || p( heta|D))$ 仍然需要知道 $p( heta|D)$,这又回到了我们遇到的问题。幸运的是,我们可以对KL散度进行一些数学推导,得到一个我们可以直接优化的目标函数。
我们知道:
$$KL(q( heta) || p( heta|D)) = int q( heta) log frac{q( heta)}{p( heta|D)} d heta$$
代入 $p( heta|D) = frac{p(D| heta)p( heta)}{p(D)}$:
$$KL(q( heta) || p( heta|D)) = int q( heta) log frac{q( heta)}{frac{p(D| heta)p( heta)}{p(D)}} d heta$$
$$= int q( heta) left( log q( heta) log p(D| heta) log p( heta) + log p(D)
ight) d heta$$
$$= int q( heta) log q( heta) d heta int q( heta) log p(D| heta) d heta int q( heta) log p( heta) d heta + int q( heta) log p(D) d heta$$
注意到 $log p(D)$ 是一个常数,与 $ heta$ 无关,且 $int q( heta) d heta = 1$:
$$KL(q( heta) || p( heta|D)) = mathbb{E}_{q( heta)}[log q( heta)] mathbb{E}_{q( heta)}[log p(D| heta)] mathbb{E}_{q( heta)}[log p( heta)] + log p(D)$$
重新整理一下:
$$KL(q( heta) || p( heta|D)) = mathbb{E}_{q( heta)}[log q( heta)] mathbb{E}_{q( heta)}[log p(D| heta, heta)p( heta)] + log p(D)$$
$$KL(q( heta) || p( heta|D)) = mathbb{E}_{q( heta)}[log q( heta)] mathbb{E}_{q( heta)}[log p(D, heta)] + log p(D)$$
现在,我们有:
$$KL(q( heta) || p( heta|D)) = log p(D) mathbb{E}_{q( heta)}[log p(D, heta)] + mathbb{E}_{q( heta)}[log frac{q( heta)}{p( heta)}]$$
我们可以将 $log p(D)$ 移到左边:
$$log p(D) KL(q( heta) || p( heta|D)) = mathbb{E}_{q( heta)}[log p(D, heta)] mathbb{E}_{q( heta)}[log q( heta)]$$
$$log p(D) KL(q( heta) || p( heta|D)) = mathbb{E}_{q( heta)}[log frac{p(D, heta)}{q( heta)}]$$
我们定义变分下界 (Evidence Lower Bound, ELBO) 为:
$$mathcal{L}(q) = mathbb{E}_{q( heta)}[log p(D, heta)] mathbb{E}_{q( heta)}[log q( heta)]$$
那么,我们得到:
$$log p(D) = mathcal{L}(q) + KL(q( heta) || p( heta|D))$$
由于 $KL$ 散度总是非负的,所以 $log p(D) ge mathcal{L}(q)$。这表明 $mathcal{L}(q)$ 是 $log p(D)$ 的一个下界。
核心关键:最小化KL散度等价于最大化ELBO。
因为 $log p(D)$ 是一个常数(关于 $q$),所以最小化 $KL(q( heta) || p( heta|D))$ 就等价于最大化 $mathcal{L}(q)$。
ELBO 可以进一步写成:
$$mathcal{L}(q) = mathbb{E}_{q( heta)}[log p(D| heta) + log p( heta) log q( heta)]$$
$$mathcal{L}(q) = mathbb{E}_{q( heta)}[log p(D| heta)] + mathbb{E}_{q( heta)}[log p( heta) log q( heta)]$$
$$mathcal{L}(q) = mathbb{E}_{q( heta)}[log p(D| heta)] KL(q( heta) || p( heta))$$
这个形式非常直观:
$mathbb{E}_{q( heta)}[log p(D| heta)]$: 表示在近似后验分布 $q( heta)$ 下,数据似然的期望。这鼓励 $q( heta)$ 使得数据出现得更可能。
$ KL(q( heta) || p( heta))$: 表示近似分布 $q( heta)$ 与先验分布 $p( heta)$ 之间的KL散度的负值。这鼓励 $q( heta)$ 不要偏离先验太远。
最大化ELBO就是在数据拟合(似然)和先验约束(正则化)之间取得平衡。
五、 选择近似分布族 $q( heta)$
ELBO 的形式表明,我们可以在某个函数族中选择 $q( heta)$ 来最大化ELBO。这个函数族的选择至关重要,它决定了近似的简易程度和准确性。
简单分布族: 通常选择一个因子分解的形式,这被称为均值场近似 (MeanField Approximation)。
如果 $ heta$ 可以被分解成一组不相交的变量集合 $ heta_1, heta_2, dots, heta_M$,即 $ heta = { heta_1, dots, heta_M}$,那么均值场近似假设 $q( heta)$ 也具有因子分解的形式:
$$q( heta) = prod_{i=1}^M q_i( heta_i)$$
其中 $q_i( heta_i)$ 是关于 $ heta_i$ 的一个简单分布(例如高斯分布、狄拉克 Delta 函数等)。
为什么选择因子分解?
因子分解的近似分布 $q( heta)$ 是最简单的形式之一,并且它能够被迭代优化求解(下面会讲到)。虽然它忽略了潜在变量之间的依赖关系(即假设 $q_i( heta_i)$ 和 $q_j( heta_j)$ 之间是独立的),但这使得计算变得可行。
六、 均值场变分推断的优化算法
如果我们选择了均值场近似 $q( heta) = prod_{i=1}^M q_i( heta_i)$,我们可以利用坐标下降法(coordinate descent)来优化ELBO。通过迭代更新每一个 $q_i( heta_i)$,同时保持其他的 $q_j( heta_j)$ (其中 $j
eq i$) 固定,直到收敛。
推导过程如下:
我们想要最大化:
$$mathcal{L}(q) = mathbb{E}_{q( heta)}[log p(D, heta)] mathbb{E}_{q( heta)}[log q( heta)]$$
$$= mathbb{E}_{prod_j q_j( heta_j)}[log p(D, heta)] sum_i mathbb{E}_{q_i( heta_i)}[log q_i( heta_i)]$$
考虑更新 $q_k( heta_k)$,令 $q_{k}( heta_{k}) = prod_{j
eq k} q_j( heta_j)$。
$$mathcal{L}(q) = mathbb{E}_{q_k( heta_k)} mathbb{E}_{q_{k}( heta_{k})}[log p(D, heta)] mathbb{E}_{q_k( heta_k)}[log q_k( heta_k)] sum_{j
eq k} mathbb{E}_{q_j( heta_j)}[log q_j( heta_j)]$$
为了最大化 $mathcal{L}(q)$ 关于 $q_k( heta_k)$,我们只需要关注包含 $q_k( heta_k)$ 的项。这些项是:
$$mathbb{E}_{q_k( heta_k)} mathbb{E}_{q_{k}( heta_{k})}[log p(D, heta)] mathbb{E}_{q_k( heta_k)}[log q_k( heta_k)]$$
展开联合概率 $p(D, heta) = p(D| heta)p( heta)$:
$$mathbb{E}_{q_k( heta_k)} mathbb{E}_{q_{k}( heta_{k})}[log p(D| heta)p( heta)] mathbb{E}_{q_k( heta_k)}[log q_k( heta_k)]$$
将 $ heta$ 拆开成 $ heta_k$ 和 $ heta_{k}$:
$$mathbb{E}_{q_k( heta_k)} mathbb{E}_{q_{k}( heta_{k})}[log p(D| heta_k, heta_{k})p( heta_k, heta_{k})] mathbb{E}_{q_k( heta_k)}[log q_k( heta_k)]$$
对于固定的 $q_{k}( heta_{k})$,令:
$$f( heta_k) = mathbb{E}_{q_{k}( heta_{k})}[log p(D| heta_k, heta_{k})p( heta_k, heta_{k})]$$
那么我们需要最大化:
$$mathbb{E}_{q_k( heta_k)}[f( heta_k)] mathbb{E}_{q_k( heta_k)}[log q_k( heta_k)]$$
我们知道 $int q_k( heta_k) d heta_k = 1$。
这式子正是 $KL(q_k( heta_k) || p_{new}( heta_k))$ 的展开形式:
$KL(q_k || p_{new}) = int q_k( heta_k) log frac{q_k( heta_k)}{p_{new}( heta_k)} d heta_k = int q_k( heta_k) (log q_k( heta_k) log p_{new}( heta_k)) d heta_k$
$KL(q_k || p_{new}) = mathbb{E}_{q_k}[log q_k] mathbb{E}_{q_k}[log p_{new}]$
所以,为了最小化 $KL(q_k || p_{new})$,我们应该选择 $q_k( heta_k) propto p_{new}( heta_k)$。
对比我们的目标函数 $mathbb{E}_{q_k}[f( heta_k)] mathbb{E}_{q_k}[log q_k( heta_k)]$,它实际上是 $mathcal{L}_{k}(q_k)$ 的形式,其中 $mathcal{L}_{k}(q_k) = mathbb{E}_{q_k}[log q_k] mathbb{E}_{q_k}[f( heta_k)]$。
因此,最优的 $q_k( heta_k)$ 应该满足:
$$log q_k^( heta_k) = f( heta_k) + C$$
$$log q_k^( heta_k) = mathbb{E}_{q_{k}( heta_{k})}[log p(D| heta_k, heta_{k})p( heta_k, heta_{k})] + C$$
$$q_k^( heta_k) propto exp(mathbb{E}_{q_{k}( heta_{k})}[log p(D| heta_k, heta_{k})p( heta_k, heta_{k})]$$
这个公式告诉我们,第 $k$ 个近似分布 $q_k( heta_k)$ 的形式由联合概率的对数在其他近似分布 $q_{k}( heta_{k})$ 下的期望决定。
迭代更新规则总结:
1. 初始化: 随机初始化 $q_i( heta_i)$ 的参数。
2. 迭代更新: 对每个变量组 $i=1, dots, M$ 循环执行以下步骤:
计算:
$$log q_i^( heta_i) = mathbb{E}_{q_{i}( heta_{i})}[log p(D| heta_i, heta_{i})p( heta_i, heta_{i})] + ext{常数}$$
这里 $mathbb{E}_{q_{i}( heta_{i})}[dots]$ 表示对除了 $ heta_i$ 之外的所有变量的期望,使用当前已知的 $q_j( heta_j)$ (j $
eq$ i) 来计算。
根据上式更新 $q_i( heta_i)$ 的参数。例如,如果 $q_i( heta_i)$ 是高斯分布,则计算出新的均值和方差。
3. 收敛判断: 重复步骤2,直到ELBO不再显著增加,或者 $q( heta)$ 的参数不再显著变化。
需要注意的是:
计算期望 $mathbb{E}_{q_{i}( heta_{i})}[log p(D| heta_i, heta_{i})p( heta_i, heta_{i})]$ 可能仍然是困难的。这取决于具体模型的结构以及所选用的简单分布族。
如果模型的结构使得联合对数概率的期望易于计算(例如,如果模型是指数族),那么这个方法会非常有效。
七、 变分贝叶斯 (VB) vs. 普通变分推断 (VI)
“变分贝叶斯”这个术语有时会与更广泛的“变分推断”混淆。然而,通常当我们提到“变分贝叶斯”时,我们特指:
贝叶斯模型: 模型中包含先验分布和后验分布的推断。
变分近似: 使用变分方法(如最大化ELBO)来近似后验分布。
均值场近似: 通常采用因子分解的近似分布族。
有时候,特别是对于主题模型(如LDA)等,VB方法通常包含一个变分 EM 算法的框架。在这种情况下:
E 步 (Expectation Step): 对应于计算变分近似后验分布 $q( heta)$(通常是均值场形式),以最小化KL散度。这是我们上面讨论的变分推断的核心。
M 步 (Maximization Step): 对应于更新模型参数 $phi$(如果模型中存在需要估计的参数)。这个更新是基于当前近似的后验分布 $q( heta)$ 来最大化期望的对数似然。
整个过程迭代进行,直到收敛。
八、 变分贝叶斯方法的优势和劣势
优势:
1. 可扩展性: 相对于MCMC,VB通常具有更好的可扩展性,可以处理更大规模的数据集和更复杂的模型,因为它将推断问题转化为优化问题。
2. 速度快: 优化过程通常比MCMC采样收敛更快。
3. 提供渐近精确的近似: 在某些情况下,VB可以提供相当精确的近似。
4. 直接优化目标: ELBO是一个明确的目标函数,易于理解和优化。
劣势:
1. 近似的精度: 均值场近似忽略了变量之间的依赖关系,这可能导致后验分布的估计偏差较大,尤其是在变量之间存在强相关性时。
2. 需要选择近似分布族: 选择一个合适的近似分布族是关键,如果选择不当,可能无法捕捉到后验分布的真实结构。
3. 对模型结构敏感: VB的有效性很大程度上取决于模型的结构。对于某些模型,即使是均值场近似也可能难以计算。
4. 无法提供后验方差的精确度量: 由于均值场近似将后验因子分解,它会低估后验分布的方差(overconfidence)。
九、 变分贝叶斯的应用场景
变分贝叶斯方法在机器学习和人工智能的许多领域都有广泛应用,包括:
主题模型 (Topic Models): 如Latent Dirichlet Allocation (LDA),用于文本分析。
深度学习中的贝叶斯方法: 如贝叶斯神经网络 (Bayesian Neural Networks),用于量化不确定性。
图形模型 (Graphical Models): 用于处理复杂的概率关系。
推荐系统: 用于用户和物品的潜在特征建模。
信号处理和图像处理: 用于去噪、去模糊等。
总结一下理解 VB 的关键点:
1. 目标: 近似计算复杂的后验分布 $p( heta|D)$。
2. 方法: 将近似问题转化为优化问题,寻找一个简单分布 $q( heta)$ 来最小化 $KL(q( heta) || p( heta|D))$。
3. 核心工具: 变分下界 (ELBO),最大化ELBO等价于最小化KL散度。
4. 近似族: 通常选择因子分解的均值场近似 $q( heta) = prod q_i( heta_i)$。
5. 优化: 通过迭代更新每个 $q_i( heta_i)$ 来最大化ELBO,直到收敛。
6. 权衡: 在数据拟合(似然)和先验约束之间进行权衡。
希望这份详细的解释能够帮助你更好地理解变分贝叶斯方法!这是一个非常强大的工具,理解其背后的原理对于深入研究概率建模和机器学习至关重要。