变分推断中的归一化流(Normalizing Flows for Variational Inference)的原理与表达能力增强机制
题目描述
在经典的变分推断(VI)中,我们通常假设后验分布 \(q(z|x)\) 是一个简单的分布(如高斯分布),然后通过优化证据下界(ELBO)来逼近真实后验 \(p(z|x)\)。然而,简单分布(如单峰高斯)的表达能力有限,难以拟合复杂的真实后验(如多峰、非线性依赖)。
归一化流 通过应用一系列可逆变换,将一个简单的基础分布(如标准高斯)逐步转换为一个复杂、灵活的目标分布,从而极大地增强了变分分布的表达能力,使VI能够更精确地逼近复杂的真实后验。
我们的任务是:理解如何将归一化流整合到变分推断框架中,并掌握其核心原理与实现机制。
解题过程
步骤1:回顾经典变分推断的局限性
- 目标:在概率模型中,我们常有隐变量 \(z\) 和观测数据 \(x\)。贝叶斯推断需要计算后验 \(p(z|x) = \frac{p(x|z)p(z)}{p(x)}\),但证据 \(p(x)\) 通常难解。
- 变分逼近:引入一个由参数 \(\phi\) 定义的变分分布 \(q_{\phi}(z|x)\) 来近似后验 \(p(z|x)\)。
- 优化目标:最大化证据下界(ELBO):
\[ \mathcal{L}(\phi) = \mathbb{E}_{q_{\phi}(z|x)}[\log p(x|z)] - D_{KL}(q_{\phi}(z|x) \parallel p(z)) \]
- 经典假设:通常设 \(q_{\phi}(z|x)\) 为高斯分布 \(\mathcal{N}(z; \mu_{\phi}(x), \sigma_{\phi}^2(x))\)。其表达能力弱,只能拟合单峰、简单的后验分布。如果真实后验是多峰的或具有复杂依赖关系,这种逼近会很不准确。
步骤2:引入归一化流的基本思想
- 核心洞察:与其直接用一个简单分布去逼近复杂后验,不如从一个简单的基础分布(如标准高斯)出发,通过一系列可逆、可微的变换,将它“流动”成一个复杂分布。
- 流变换:设基础分布为 \(q_0(z_0)\)(例如 \(\mathcal{N}(0, I)\))。我们定义 \(K\) 个可逆变换 \(f_1, f_2, ..., f_K\)。依次应用:
\[ z_k = f_k(z_{k-1}), \quad \text{for } k=1,...,K \]
最终,$ z_K $ 的分布 $ q_K(z_K) $ 就是我们需要的复杂变分分布。
- 概率密度变换:根据变量变换公式,变换后的概率密度为:
\[ q_K(z_K) = q_0(z_0) \prod_{k=1}^{K} \left| \det \left( \frac{\partial f_k}{\partial z_{k-1}} \right) \right|^{-1} \]
这里,雅可比行列式的计算是关键。为了高效计算,我们需要设计**雅可比行列式易于计算**的可逆变换。
步骤3:将归一化流嵌入变分推断框架
- 变分参数:变分参数 \(\phi\) 现在包括了基础分布的参数(如高斯均值和方差)以及所有流变换 \(\{f_k\}\) 的参数。
- ELBO的重新表达:我们的目标是优化 \(q_K(z_K)\) 的参数。ELBO 可以写为:
\[ \mathcal{L}(\phi) = \mathbb{E}_{q_0(z_0)}[\log p(x|z_K) + \log p(z_K) - \log q_K(z_K)] \]
其中,$ z_K $ 是从 $ z_0 \sim q_0(\cdot) $ 出发,经过 $ K $ 次变换得到的。$ \log q_K(z_K) $ 可以通过链式法则和对数概率密度公式计算:
\[ \log q_K(z_K) = \log q_0(z_0) - \sum_{k=1}^{K} \log \left| \det \left( \frac{\partial f_k}{\partial z_{k-1}} \right) \right| \]
- 采样与梯度估计:为了计算 ELBO 关于 \(\phi\) 的梯度,我们可以使用重参数化技巧:
- 从基础分布采样:\(z_0 \sim q_0(\cdot)\)。
- 前向传播:计算 \(z_K = f_K \circ ... \circ f_1 (z_0)\)。
- 计算 ELBO:需要计算 \(\log p(x|z_K)\)、\(\log p(z_K)\) 和 \(\log q_K(z_K)\)。
- 反向传播:计算梯度并更新参数 \(\phi\)。
步骤4:理解流变换的设计与雅可比行列式的简化
为了高效训练,流变换 \(f\) 需要满足两个条件:1) 可逆;2) 雅可比行列式易算。常见的设计有:
- 仿射耦合层(Affine Coupling Layer):
- 将输入 \(z\) 拆分为两部分:\(z = [z_A, z_B]\)。
- 变换定义为:
\[ \begin{aligned} z'_A &= z_A \\ z'_B &= z_B \odot \exp(s(z_A)) + t(z_A) \end{aligned} \]
- 其中,$ s(\cdot) $ 和 $ t(\cdot) $ 是由神经网络定义的**缩放**和**平移**函数,其输出维度与 $ z_B $ 相同。$ \odot $ 是逐元素乘法。
- **可逆性**:逆变换很简单:$ z_B = (z'_B - t(z'_A)) \odot \exp(-s(z'_A)) $。
- **雅可比行列式**:变换的雅可比矩阵是三角矩阵,行列式就是对角线元素的乘积,即 $ \prod \exp(s(z_A)) $。计算复杂度仅为 $ O(D) $(D是维度)。
-
可逆1x1卷积(Invertible 1x1 Convolution):
- 主要用于图像数据,对通道维度进行线性变换:\(z' = W z\)。
- 其中 \(W\) 是一个可逆的 \(C \times C\) 矩阵(C是通道数)。
- 雅可比行列式:就是 \(\det(W)\),可以预先计算或高效计算。
-
自回归流(Autoregressive Flow):
- 每个维度的输出只依赖于之前的维度,保证了雅可比矩阵是三角矩阵。
- 例如,在 Masked Autoregressive Flow (MAF) 中,变换是:
\[ z'_i = z_i \odot \exp(\alpha_i(z_{1:i-1})) + \mu_i(z_{1:i-1}) \]
- 其雅可比行列式也是对角线元素的乘积。
步骤5:整合与训练流程
- 初始化:定义基础分布 \(q_0\)(如高斯),以及一个由 \(K\) 个可逆变换层组成的流模型。
- 前向过程(从噪声到样本):
- 采样噪声:\(z_0 \sim \mathcal{N}(0, I)\)。
- 通过流模型:\(z_K = f_{\phi}(z_0)\)。
- 此时 \(z_K\) 服从复杂分布 \(q_K\)。
- 计算损失:
- 计算重构项:\(\log p(x|z_K)\)。
- 计算先验匹配项:\(\log p(z_K)\)。
- 计算变分分布熵项:\(-\log q_K(z_K) = -\log q_0(z_0) + \sum_{k=1}^{K} \log \left| \det \left( \frac{\partial f_k}{\partial z_{k-1}} \right) \right|\)。
- ELBO损失是这三项的期望,我们取蒙特卡洛估计(通常一个样本即可)。
- 反向传播与优化:通过梯度下降(如Adam)优化所有参数(包括流参数和生成模型参数 \(\theta\)),最大化 ELBO。
步骤6:优势与总结
- 强大表达能力:通过叠加多个简单的可逆变换,可以生成任意复杂的分布,突破了传统VI的表示瓶颈。
- 精确密度计算:得益于可逆变换和易算的雅可比行列式,我们可以精确计算变换后的概率密度 \(\log q_K(z_K)\),这是优化ELBO所必需的。
- 通用框架:归一化流可以与其他VI扩展(如重要性加权、摊销推断)结合,进一步提升性能。
- 应用:不仅用于变分推断,还可用于生成建模(如Glow)、密度估计、强化学习等。
核心精髓:归一化流为变分推断提供了一套系统化增强表达能力的工具。它将推断问题从一个静态的分布逼近,转化为一个动态的分布变换过程,通过可逆的“流”将简单噪声“塑造”成复杂分布,从而实现了对复杂后验更精确、更灵活的逼近。