变分推断方法在推导证据下界 (ELBO) 梯度的模型特定解析表达式时,经常面临困难甚至不可能的情况。例如,坐标上升变分推断 (CAVI) 在使用共轭模型和平均场近似时,能为变分参数 λ 提供解析更新。随机变分推断 (SVI) 则通过随机梯度实现可伸缩性。然而,这两种方法都通常依赖于此类解析梯度推导。这种情形经常出现在以下情况:
- 非共轭模型: 当先验和似然不构成共轭对时,CAVI 中变分参数的更新可能没有闭式解。
- 复杂的模型结构: 涉及复杂依赖关系、模拟器或生成过程中函数的模型,常常使得联合概率 p(x,z) 难以对变分参数 λ 进行解析求导。
黑箱变分推断 (BBVI) 提供了一种通用的变分推断方法,可以克服这一局限。它使得我们即使无法解析计算 ELBO 的梯度 ∇λL(λ),也能进行变分推断。主要思想是使用蒙特卡洛估计来近似此梯度。BBVI 将模型本身视为一个“黑箱”,仅要求能够评估对数联合概率 logp(x,z) 和对数变分密度 logq(z∣λ),以及在特定条件下的它们的梯度。
估计 ELBO 梯度
回顾 ELBO:
L(λ)=Eq(z∣λ)[logp(x,z)−logq(z∣λ)]
我们需要计算 ∇λL(λ)。难题在于期望是针对 q(z∣λ) 计算的,而 q(z∣λ) 本身依赖于 λ。
评分函数梯度估计器
一种可行的方法是使用对数导数技巧,也称为评分函数恒等式:∇λq(z∣λ)=q(z∣λ)∇λlogq(z∣λ)。将此应用于 ELBO 梯度,得到:
∇λL(λ)=∇λ∫q(z∣λ)[logp(x,z)−logq(z∣λ)]dz
=∫∇λq(z∣λ)[logp(x,z)−logq(z∣λ)]dz+∫q(z∣λ)∇λ[logp(x,z)−logq(z∣λ)]dz
假设模型的联合概率 p(x,z) 不依赖于变分参数 λ,则 logp(x,z) 关于 λ 的梯度为零。在应用对数导数技巧和进一步的推导后,表达式简化为:
∇λL(λ)=Eq(z∣λ)[(∇λlogq(z∣λ))(logp(x,z)−logq(z∣λ))]
这个期望可以使用蒙特卡洛样本近似:抽取 S 个样本 z(s)∼q(z∣λ) 并计算:
∇λL(λ)≈S1∑s=1S(∇λlogq(z(s)∣λ))(logp(x,z(s))−logq(z(s)∣λ))
这是评分函数梯度估计器,有时在强化学习背景下被称为 REINFORCE 估计器。要使用它,我们只需能够从 q(z∣λ) 采样,评估 logp(x,z)、logq(z∣λ),并计算 logq(z∣λ) 关于 λ 的梯度。
评分函数估计器的一个主要缺点是它常表现出高方差,需要大量样本 S 才能获得稳定估计,这会减慢收敛速度。
重参数化技巧 (路径导数估计器)
当变分分布 q(z∣λ) 适用于重参数化技巧时,可以使用另一种通常方差更小的梯度估计器。这涉及将随机变量 z 表示为辅助随机变量 ϵ 的一个确定性且可微分的变换 g(⋅,λ),其中 ϵ 具有一个不依赖于 λ 的固定分布 p(ϵ)。
z=g(ϵ,λ),其中 ϵ∼p(ϵ)
例如,如果 q(z∣λ) 是高斯分布 N(μ,σ2),其中 λ={μ,σ},我们可以将 z 重参数化为 z=μ+σϵ,其中 ϵ∼N(0,1)。
通过这种重参数化,我们可以重写 ELBO 期望:
L(λ)=Ep(ϵ)[logp(x,g(ϵ,λ))−logq(g(ϵ,λ)∣λ)]
现在,期望是关于 p(ϵ) 的,它独立于 λ。我们可以将梯度移到期望内部:
∇λL(λ)=Ep(ϵ)[∇λ(logp(x,g(ϵ,λ))−logq(g(ϵ,λ)∣λ))]
该梯度可以使用蒙特卡洛样本近似:抽取 S 个样本 ϵ(s)∼p(ϵ),计算 z(s)=g(ϵ(s),λ),并估计:
∇λL(λ)≈S1∑s=1S∇λ(logp(x,z(s))−logq(z(s)∣λ))
使用链式法则,∇λf(z(s)) 变为 (∇zf(z(s)))T(∇λg(ϵ(s),λ))。这需要对数联合概率和对数变分密度关于潜在变量 z 的梯度,以及变换 g 关于 λ 的梯度。现代自动微分库能够轻松处理这些计算。
与评分函数方法相比,重参数化技巧通常产生方差低得多的梯度估计,通常导致更快、更稳定的收敛。然而,它并非普遍适用;它需要找到一个合适的函数 g(ϵ,λ)。
这是一个基本流程图,展示了 BBVI 中的重参数化技巧。来自基础分布 ϵ 的样本通过使用变分参数 λ 进行变换,以获得样本 z。这些样本用于评估对数概率,它们的梯度关于 λ 构成 ELBO 梯度估计,然后将其输入优化器以更新 λ。
BBVI 算法
BBVI 在随机优化框架内使用这些梯度估计器,类似于 SVI。
- 初始化变分参数 λ。
- 重复直到收敛:
a. 采样: 抽取 S 个蒙特卡洛样本。
* 如果使用评分函数:对于 s=1,...,S,从 q(z∣λ) 采样 z(s)。
* 如果使用重参数化:对于 s=1,...,S,采样 ϵ(s)∼p(ϵ) 并计算 z(s)=g(ϵ(s),λ)。
b. 估计梯度: 使用评分函数或重参数化公式计算 ∇λL(λ) 的蒙特卡洛估计 g^。如果执行 SVI,则使用当前数据小批量的梯度估计。
c. 更新参数: 使用随机优化算法(例如,Adam、RMSprop)并结合估计梯度 g^ 更新 λ:
λt+1←OptimizerUpdate(λt,g^)
当与数据子采样(如 SVI 中所示)结合时,步骤 2.b 也包含了来自数据小批量的随机性。
优点与注意事项
- 通用性: BBVI 的主要优势在于它适用于广泛的模型,包括那些具有非共轭结构或难以处理的解析梯度的模型。您只需评估模型的对数概率(以及重参数化所需的梯度)。
- 使用自动微分: 现代概率编程语言 (PPL) 如 Pyro、NumPyro、TensorFlow Probability 和 Stan 高度依赖自动微分,使得 BBVI 的实现(尤其是在结合重参数化技巧时)对用户来说相对简单。PPL 处理梯度计算。
- 方差: 梯度估计器的选择很重要。评分函数估计器可能受到高方差的影响,可能阻碍收敛。重参数化技巧在适用时,通常因其较低的方差而受到青睐。高级方差削减技术(例如,控制变量)有时可以进一步提高这两种估计器的稳定性。
- 调优: 与其他随机优化方法类似,BBVI 可能需要仔细调整学习率和优化器参数。每次梯度步的蒙特卡洛样本数 S 也会影响梯度准确性与计算成本之间的权衡。
BBVI 大幅扩展了适用于变分推断的模型的范围。通过用蒙特卡洛估计替代解析梯度推导,它提供了一个强大且灵活的工具,用于近似贝叶斯推断,尤其是在结合随机优化的可伸缩性和自动微分的便利性时。