趋近智
正规化流在数学公式上是针对连续概率分布设计的。然而,生成建模中使用的许多标准数据集都由离散值组成。例如,数字图像使用 0 到 255 之间的整数表示颜色,音频波形通常被量化 (quantization)为离散分箱。当我们尝试在严格的离散数据上训练连续流模型时,会遇到严重的优化问题。
如果连续模型将概率密度分配给一组离散点,它可以通过将密度塌缩到这些特定点上的狄拉克 delta 函数(Dirac delta functions)来获得任意高的似然值。数据所在位置的密度趋于无穷大,导致模型完全过拟合 (overfitting)。网络学不到任何关于数据实际分布的信息,而只是记住了离散输入。在将离散数据传入流模型之前,我们必须将其转换为连续格式。这个过程被称为数据去量化(Data Dequantization)。
将离散输入映射为连续信号以进行生成建模的数据转换流水线。
最简单且最常用的方法是均匀去量化(Uniform Dequantization)。我们将离散数据点视为单位区间的左边界。对于离散数据点 ,我们加上一个从 0 到 1 之间的均匀分布中采样的连续噪声 。
通过添加这种噪声,我们将离散点的概率质量均匀地扩展到区间 上。新变量 是严格连续的。为了使神经网络 (neural network)训练更稳定,通常还会除以 256,使连续值完全落在 范围内。
在评估模型时,最大化连续变量 的对数似然相当于最大化离散数据 对数似然的一个下界。由于噪声是均匀的,离散数据点的概率完全等于连续密度在噪声的 1 维体积上的积分。
在 PyTorch 中实现均匀去量化只需要几行代码。我们采样一个与输入张量形状相同的均匀分布噪声,并应用变换即可。
import torch
def uniform_dequantize(x, num_bins=256):
"""
对离散数据 x 应用均匀去量化。
x: 离散值的张量(例如图像像素)。
num_bins: 离散分箱的数量。
"""
# 采样与 x 形状相同的均匀噪声
noise = torch.rand_like(x)
# 添加噪声并归一化到 [0, 1] 连续范围
y = (x + noise) / num_bins
return y
# 使用虚拟的 8 位图像张量进行示例
discrete_image = torch.randint(0, 256, (1, 3, 32, 32), dtype=torch.float32)
continuous_image = uniform_dequantize(discrete_image)
虽然均匀去量化防止了无限密度的峰值,但它也带来了挑战。均匀噪声分布在区间边界处具有锐利的边缘。正规化流通常从各向同性高斯等平滑的基础分布进行映射,很难高效地建模这些锐利的、不可微的边界。流网络可能会浪费大量能力去建模均匀噪声的人工边缘,而不是专注于底层的数据特征。
为了提高训练稳定性和模型性能,研究人员提出了变分去量化(Variational Dequantization)。这种方法不再添加固定的均匀噪声,而是引入一个条件学习分布 来建模噪声。这个噪声分布本身通常由一个小型辅助正规化流来参数 (parameter)化。
其目标是学习一个噪声分布,使连续数据 对主正规化流来说尽可能平滑且易于建模。我们优化对数似然的变分下界。训练目标变为:
在这个公式中, 是主正规化流分配的似然值,而 是由辅助去量化流给出的噪声似然。网络会联合训练去量化流和主生成流。去量化流会主动学习添加那种让主流模型容易分配高概率的噪声。这抹平了均匀区间的锐利边界,并显著提升了在复杂数据集上的密度估计性能。
使用均匀去量化或变分去量化可以确保数据严格符合变量替换定理的连续性要求。当离散结构转换为平滑信号后,网络就可以在不向特定坐标过拟合 (overfitting)的情况下,安全地优化最大似然目标。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•