变分推断中的归一化流(Normalizing Flows for Variational Inference)的原理与表达能力增强机制
字数 3792 2025-12-08 10:54:01

变分推断中的归一化流(Normalizing Flows for Variational Inference)的原理与表达能力增强机制

题目描述

在经典的变分推断(VI)中,我们通常假设后验分布 \(q(z|x)\) 是一个简单的分布(如高斯分布),然后通过优化证据下界(ELBO)来逼近真实后验 \(p(z|x)\)。然而,简单分布(如单峰高斯)的表达能力有限,难以拟合复杂的真实后验(如多峰、非线性依赖)。

归一化流 通过应用一系列可逆变换,将一个简单的基础分布(如标准高斯)逐步转换为一个复杂、灵活的目标分布,从而极大地增强了变分分布的表达能力,使VI能够更精确地逼近复杂的真实后验。

我们的任务是:理解如何将归一化流整合到变分推断框架中,并掌握其核心原理与实现机制。

解题过程

步骤1:回顾经典变分推断的局限性

  1. 目标:在概率模型中,我们常有隐变量 \(z\) 和观测数据 \(x\)。贝叶斯推断需要计算后验 \(p(z|x) = \frac{p(x|z)p(z)}{p(x)}\),但证据 \(p(x)\) 通常难解。
  2. 变分逼近:引入一个由参数 \(\phi\) 定义的变分分布 \(q_{\phi}(z|x)\) 来近似后验 \(p(z|x)\)
  3. 优化目标:最大化证据下界(ELBO):

\[ \mathcal{L}(\phi) = \mathbb{E}_{q_{\phi}(z|x)}[\log p(x|z)] - D_{KL}(q_{\phi}(z|x) \parallel p(z)) \]

  1. 经典假设:通常设 \(q_{\phi}(z|x)\) 为高斯分布 \(\mathcal{N}(z; \mu_{\phi}(x), \sigma_{\phi}^2(x))\)。其表达能力弱,只能拟合单峰、简单的后验分布。如果真实后验是多峰的或具有复杂依赖关系,这种逼近会很不准确。

步骤2:引入归一化流的基本思想

  1. 核心洞察:与其直接用一个简单分布去逼近复杂后验,不如从一个简单的基础分布(如标准高斯)出发,通过一系列可逆、可微的变换,将它“流动”成一个复杂分布。
  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) $ 就是我们需要的复杂变分分布。
  1. 概率密度变换:根据变量变换公式,变换后的概率密度为:

\[ 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:将归一化流嵌入变分推断框架

  1. 变分参数:变分参数 \(\phi\) 现在包括了基础分布的参数(如高斯均值和方差)以及所有流变换 \(\{f_k\}\) 的参数。
  2. 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| \]

  1. 采样与梯度估计:为了计算 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) 雅可比行列式易算。常见的设计有:

  1. 仿射耦合层(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是维度)。
  1. 可逆1x1卷积(Invertible 1x1 Convolution)

    • 主要用于图像数据,对通道维度进行线性变换:\(z' = W z\)
    • 其中 \(W\) 是一个可逆的 \(C \times C\) 矩阵(C是通道数)。
    • 雅可比行列式:就是 \(\det(W)\),可以预先计算或高效计算。
  2. 自回归流(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:整合与训练流程

  1. 初始化:定义基础分布 \(q_0\)(如高斯),以及一个由 \(K\) 个可逆变换层组成的流模型。
  2. 前向过程(从噪声到样本)
    • 采样噪声:\(z_0 \sim \mathcal{N}(0, I)\)
    • 通过流模型:\(z_K = f_{\phi}(z_0)\)
    • 此时 \(z_K\) 服从复杂分布 \(q_K\)
  3. 计算损失
    • 计算重构项:\(\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损失是这三项的期望,我们取蒙特卡洛估计(通常一个样本即可)。
  4. 反向传播与优化:通过梯度下降(如Adam)优化所有参数(包括流参数和生成模型参数 \(\theta\)),最大化 ELBO。

步骤6:优势与总结

  1. 强大表达能力:通过叠加多个简单的可逆变换,可以生成任意复杂的分布,突破了传统VI的表示瓶颈。
  2. 精确密度计算:得益于可逆变换和易算的雅可比行列式,我们可以精确计算变换后的概率密度 \(\log q_K(z_K)\),这是优化ELBO所必需的。
  3. 通用框架:归一化流可以与其他VI扩展(如重要性加权、摊销推断)结合,进一步提升性能。
  4. 应用:不仅用于变分推断,还可用于生成建模(如Glow)、密度估计、强化学习等。

核心精髓:归一化流为变分推断提供了一套系统化增强表达能力的工具。它将推断问题从一个静态的分布逼近,转化为一个动态的分布变换过程,通过可逆的“流”将简单噪声“塑造”成复杂分布,从而实现了对复杂后验更精确、更灵活的逼近。

变分推断中的归一化流(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)、密度估计、强化学习等。 核心精髓 :归一化流为变分推断提供了一套 系统化增强表达能力 的工具。它将推断问题从一个静态的分布逼近,转化为一个动态的分布变换过程,通过可逆的“流”将简单噪声“塑造”成复杂分布,从而实现了对复杂后验更精确、更灵活的逼近。