趋近智
每个标准化流都需要一个起点。在生成式建模的数学框架中,这个起点被称为基础分布,通常表示为 。当从该分布中采样随机变量 并通过一系列可逆变换时,目标是将其转变为与训练数据匹配的高复杂目标分布。选择合适的基础分布是模型设计中一个必要的步骤,因为它决定了整个训练过程的初始拓扑形状和计算效率。
前向传播通过一系列中间变换将基础分布映射到复杂的目标分布。
一个良好的基础分布必须满足几个数学和实践要求,才能在标准化流框架内正常运行。
首先,我们必须能够精确且高效地评估其概率密度函数。在训练期间,精确的最大似然目标依赖于计算基础分布的对数概率。如果评估该密度的计算开销过大,整个训练周期就会变慢。
其次,它必须易于采样。生成式建模最终需要抽取新的样本 ,并将其通过逆向流来生成合成数据。基础层级的快速采样直接对应于快速的生成时间。
最后,对数密度必须对其输入是可微的。训练过程依靠反向传播 (backpropagation)来优化流变换的参数 (parameter)。我们需要平滑的梯度能够一路回溯到基础分布的对数概率计算中。
大多数流架构中基础分布的首选是标准多元正态分布,也称为各向同性高斯分布。它满足所有计算属性的要求,并为变换提供了易于理解的数学支撑。
对于 维空间,各向同性高斯分布定义为:
其对数密度可以简化为一种计算高效的形式,我们可以直接在损失函数 (loss function)中进行评估:
由于协方差矩阵是单位矩阵,采样向量 (vector)的各个维度是相互独立的。这种独立性非常有益。我们从完全不相关的噪声开始,并将构建目标数据集中观察到的复杂相关性和依赖关系的任务完全交给流模型中可训练的变换来完成。
以原点为中心的二维各向同性高斯基础分布的密度等高线图。
虽然各向同性高斯分布占据主导地位,但有时也会根据数据的特征使用其他连续分布。如果目标数据表现出重尾特性(即极端值出现的频率高于正态分布的预测),则可能会选择逻辑分布(Logistic distribution)或学生 t 分布(Student's t-distribution)。逻辑分布具有更厚的尾部,并且具有解析可解的累积分布函数。
均匀分布几乎从不用于主要的基础分布,因为它的有界支撑会带来问题。连续标准化流代表了一个将连续、无约束空间映射到另一个空间的微分同胚。如果基础分布严格限制在 0 到 1 之间,那么在将变换映射到延伸至无穷大的目标空间时,变换会变得困难,并导致雅可比行列式出现严重的数值不稳定性。
使用 PyTorch 中内置的分布类可以很直观地将这些数学要求转化为代码。我们通常使用 torch.distributions.MultivariateNormal 或独立的 torch.distributions.Normal 对象。
以下是如何为二维流模型定义标准各向同性高斯基础分布,并计算训练所需的对数概率:
import torch
from torch.distributions import MultivariateNormal
# 定义数据空间的维度
D = 2
# 均值向量(全零)和协方差矩阵(单位矩阵)
loc = torch.zeros(D)
covariance_matrix = torch.eye(D)
# 初始化基础分布
base_distribution = MultivariateNormal(loc, covariance_matrix)
# 从基础分布中采样(例如,一批 5 个样本)
z_0 = base_distribution.sample((5,))
print("样本 z_0:\n", z_0)
# 计算样本的精确对数概率
log_prob = base_distribution.log_prob(z_0)
print("对数概率:\n", log_prob)
通过将基础分布保持为简单的独立高斯分布,我们可以将计算开销隔离在变换本身之内。这种关注点分离使我们能够编写清晰的代码,其中流序列直接作用于 base_distribution.sample() 的标准化输出,而我们的精确似然训练循环则根据 base_distribution.log_prob() 评估目标。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•