我们继续研究另一种基于似然的生成模型。与之前一样,我们假设我们可以访问一个由n维数据点 \(\mathbf{x}\) 组成的数据集 \(\mathcal{D}\)。到目前为止,我们已经学习了两种基于似然的生成模型:
解释:自回归模型是一种概率模型,它将多个变量的联合概率(即所有变量同时出现的概率)分解为一系列条件概率的乘积。条件概率是指在已知某些变量的情况下,另一个变量出现的概率。在自回归模型中,每个变量的概率都依赖于之前的所有变量,就像一个序列一样,一步步地生成数据。这就像是在写一个故事,每个新词的选择都依赖于之前已经写下的所有词。
解释:变分自编码器是一种引入"潜在变量"(也称为隐变量)的生成模型。潜在变量 \(\mathbf{z}\) 可以理解为数据的隐藏特征或抽象表示。"边缘化"是一个统计术语,指的是通过对所有可能的潜在变量值进行积分(连续情况)或求和(离散情况)来消除这些变量,从而得到观测数据的概率。这有点像在计算一个班级的平均成绩时,我们不关心每个学生的具体情况,而只关心最终的平均结果。
这两种方法各有优缺点。自回归模型提供可计算的似然,但没有直接的特征学习机制;而变分自编码器可以学习特征表示,但其边缘似然是不可直接计算的。
在本节中,我们介绍标准化流(normalizing flows),这是一种结合了两者优点的方法,既允许特征学习,又能进行可计算的边缘似然估计。
在标准化流中,我们希望将简单分布(易于采样和评估密度)映射到复杂分布(通过数据学习)。变量替换公式描述了如何评估一个随机变量的密度,该随机变量是从另一个变量确定性转换而来的。
变量替换:设 \(Z\) 和 \(X\) 是通过映射 \(f: \mathbb{R}^n \to \mathbb{R}^n\) 相关的随机变量,使得 \(X = f(Z)\) 且 \(Z = f^{-1}(X)\)。则:
这里有几点需要注意:
解释:这个条件要求变量 \(\mathbb{x}\) 和 \(\mathbb{z}\) 必须是连续的(不是离散的,如整数),并且它们必须具有相同的维度(即相同数量的元素)。这就像是在进行货币兑换,你必须确保兑换前后的总价值保持不变,只是表示方式不同。在数学上,这确保了变换是一对一的映射,每个输入值对应唯一的输出值,反之亦然,这样才能保证变换的可逆性。
解释:雅可比矩阵是多变量微积分中的一个重要概念。对于一个从 \(n\) 维空间映射到 \(n\) 维空间的函数,雅可比矩阵包含了所有可能的偏导数组合。偏导数描述了当一个变量略微变化时,函数值如何变化,而其他变量保持不变。
具体来说,雅可比矩阵的第 \((i,j)\) 个元素是函数的第 \(i\) 个输出分量相对于第 \(j\) 个输入变量的偏导数。这个矩阵提供了函数在某一点附近的最佳线性近似,就像是在复杂的山地地形中,在某一点绘制一个平面来近似表示该点附近的地形。
解释:行列式是线性代数中的一个概念,它为每个方阵分配一个数值。在几何上,行列式可以理解为矩阵所表示的线性变换对空间体积的影响。
想象一个单位正方体(每条边长度为1的立方体)。当我们对这个正方体应用一个线性变换(由矩阵 \(A\) 表示)时,它可能会变成一个平行六面体。这个平行六面体的体积就是矩阵 \(A\) 的行列式的绝对值。
如果行列式为0,则变换后的图形"塌陷"到一个低维空间(如一条线或一个平面)。如果行列式为1,则变换保持体积不变。如果行列式为负数,则变换会导致空间的"翻转"。
解释:这个等式是变量替换公式的另一种表达方式。它使用原始变换 \(f\) 的雅可比矩阵,而不是其逆变换 \(f^{-1}\) 的雅可比矩阵。
对于可逆矩阵 \(A\),其逆矩阵 \(A^{-1}\) 的行列式等于 \(A\) 的行列式的倒数,即 \(\text{det}(A^{-1}) = \frac{1}{\text{det}(A)}\)。这就是为什么在等式右侧,我们看到雅可比矩阵行列式的倒数(表示为 \(^{-1}\) 次方)。
这个等式在实践中很有用,因为有时计算原始变换的雅可比矩阵比计算逆变换的雅可比矩阵更容易。
解释:当变换的雅可比矩阵行列式的绝对值等于1时,我们称这种变换为"体积保持"的。在概率论中,这意味着变换前后的概率密度没有被"压缩"或"膨胀"。
想象一桶水:如果我们将水倒入不同形状的容器中,水的总量(概率的总质量)保持不变,但水在不同位置的深度(概率密度)可能会改变。体积保持变换就像是将水倒入一个形状不同但体积完全相同的容器中,使得水的分布方式改变,但每个局部区域的水量(概率密度)不变。
这种性质在某些应用中很重要,因为它简化了概率计算,并确保变换不会人为地增加或减少某些区域的概率密度。
现在我们准备介绍标准化流模型。让我们考虑一个有向的、基于潜变量的模型,包含观测变量 \(X\) 和潜变量 \(Z\)。在标准化流模型中,\(Z\) 和 \(X\) 之间的映射由 \(f_\theta: \mathbb{R}^n \to \mathbb{R}^n\) 给出,该映射是确定性且可逆的,使得 \(X = f_\theta(Z)\) 且 \(Z = f_\theta^{-1}(X)\)1。
使用变量替换公式,边缘似然 \(p(x)\) 由下式给出:
"标准化流"这个名称可以解释如下:
解释:"归一化"是概率论中的一个重要概念,它确保概率分布的总和(对于离散分布)或积分(对于连续分布)等于1。这是任何有效概率分布的基本要求。
在标准化流的上下文中,"归一化"意味着通过变量替换公式,我们可以从一个简单的基础分布(如标准正态分布)开始,应用一系列可逆变换,得到一个更复杂的分布,同时保证这个新分布仍然是一个有效的概率分布(总概率为1)。
这就像是将一块面团(基础分布)通过一系列的揉捏和塑形(可逆变换)变成一个复杂形状的面包(目标分布),但面团的总量始终保持不变。
解释:"流"这个术语形象地描述了数据通过一系列转换的过程。就像水流过一系列管道,每一段管道都对水流进行某种变形或重定向,但水的总量保持不变。
在标准化流中,每一步转换都是可逆的,这意味着我们可以正向应用变换(从简单分布到复杂分布),也可以反向应用变换(从复杂分布回到简单分布)。这种可逆性是标准化流的核心特性,它允许我们精确计算变换后分布的概率密度。
通过组合多个简单的可逆变换,我们可以构建非常复杂和灵活的分布,就像通过组合简单的乐高积木可以构建复杂的结构一样。
与自回归模型和变分自编码器不同,深度标准化流模型需要特定的架构结构:
接下来,我们介绍几种满足这些属性的流模型。
平面流引入了以下可逆变换:
其中 \(\mathbf{u}\), \(\mathbf{w}\), \(b\) 是参数。
解释:平面流是一种简单但强大的可逆变换。它的工作原理是在原始变量 \(\mathbf{z}\) 的基础上添加一个非线性项 \(\mathbf{u} h(\mathbf{w}^\top \mathbf{z} + b)\)。
这里,\(h\) 是一个非线性激活函数,如双曲正切函数(tanh),它引入了非线性变形。\(\mathbf{w}^\top \mathbf{z} + b\) 计算了原始变量在某个方向上的投影(加上一个偏置项 \(b\)),然后通过 \(h\) 进行非线性变换。最后,结果乘以向量 \(\mathbf{u}\) 并添加到原始变量上。
参数 \(\mathbf{u}\) 和 \(\mathbf{w}\) 控制变换的方向和强度:\(\mathbf{w}\) 决定了在哪个方向上应用变换,而 \(\mathbf{u}\) 决定了变换的强度和方向。
想象一张橡皮膜,平面流就像是在橡皮膜的某个方向上施加一个非线性的拉伸或压缩,从而改变原始分布的形状。
雅可比矩阵行列式的绝对值由下式给出:
然而,\(\mathbf{u}\), \(\mathbf{w}\), \(b\), \(h(\cdot)\) 需要受到限制才能保证可逆性。例如,\(h = \tanh\) 且 \(h'(\mathbf{w}^\top \mathbf{z} + b) \mathbf{u}^\top \mathbf{w} \geq -1\)。注意,虽然 \(f_\theta(\mathbf{z})\) 是可逆的,但计算 \(f_\theta^{-1}(\mathbf{z})\) 在解析上可能很困难。以下模型解决了这个问题,其中 \(f_\theta\) 和 \(f_\theta^{-1}\) 都有简单的解析形式。
非线性独立成分估计(Nonlinear Independent Components Estimation, NICE)模型和实非体积保持(Real Non-Volume Preserving, RealNVP)模型由两种可逆变换组成:加性耦合层(additive coupling layers)和重缩放层(rescaling layers)。NICE 中的耦合层将变量 \(\mathbf{z}\) 分成两个不相交的子集,比如 \(\mathbf{z}_1\) 和 \(\mathbf{z}_2\)。然后它应用以下变换:
前向映射 \(\mathbf{z} \to \mathbf{x}\):
解释:NICE模型中的前向映射采用了一种巧妙的设计,将输入变量 \(\mathbf{z}\) 分成两组:\(\mathbf{z}_1\) 和 \(\mathbf{z}_2\)。
第一组变量 \(\mathbf{z}_1\) 保持完全不变,直接复制到输出 \(\mathbf{x}_1\)。
第二组变量 \(\mathbf{z}_2\) 则通过添加一个依赖于 \(\mathbf{z}_1\) 的项来变换,这个项由神经网络 \(m_\theta\) 计算得出。
这种设计的巧妙之处在于,由于 \(\mathbf{z}_1\) 保持不变,我们可以在知道 \(\mathbf{x}_1\)(等于 \(\mathbf{z}_1\))的情况下,通过简单地减去 \(m_\theta(\mathbf{z}_1)\) 来恢复 \(\mathbf{z}_2\)。这确保了变换的可逆性,而不需要对神经网络 \(m_\theta\) 本身施加任何可逆性约束。
这就像是一个加密系统,其中一部分信息保持原样作为"密钥",而另一部分信息则使用这个"密钥"进行变换。知道"密钥"的人可以轻松地解密信息。
逆映射 \(\mathbf{x} \to \mathbf{z}\):
解释:NICE模型的逆映射非常简单直观,这也是它的主要优势之一。
首先,由于 \(\mathbf{x}_1 = \mathbf{z}_1\),我们可以直接将 \(\mathbf{x}_1\) 作为 \(\mathbf{z}_1\) 的值。
然后,知道了 \(\mathbf{z}_1\),我们可以计算神经网络 \(m_\theta(\mathbf{x}_1)\)(注意,因为 \(\mathbf{x}_1 = \mathbf{z}_1\),所以 \(m_\theta(\mathbf{x}_1) = m_\theta(\mathbf{z}_1)\))。
最后,我们通过简单地从 \(\mathbf{x}_2\) 中减去 \(m_\theta(\mathbf{x}_1)\) 来恢复 \(\mathbf{z}_2\):\(\mathbf{z}_2 = \mathbf{x}_2 - m_\theta(\mathbf{x}_1)\)。
这种设计使得逆映射计算非常高效,不需要求解复杂的方程或进行迭代近似,这在许多其他类型的可逆神经网络中是必需的。
因此,前向映射的雅可比矩阵是下三角的,其行列式仅仅是对角线上元素的乘积,即 1。因此,这定义了一个体积保持变换。RealNVP 在变换中添加了缩放因子:
其中 \(\odot\) 表示元素级乘积。这导致了一个非体积保持变换。
解释:RealNVP(Real-valued Non-Volume Preserving)模型是NICE模型的扩展,它引入了一个额外的缩放操作。
在NICE中,变换只包含加法操作:\(\mathbf{x}_2 = \mathbf{z}_2 + m_\theta(\mathbf{z}_1)\),这种变换是体积保持的(雅可比矩阵行列式为1)。
RealNVP添加了一个缩放因子:\(\mathbf{x}_2 = \exp(s_\theta(\mathbb{z}_1)) \odot \mathbf{z}_2 + m_\theta(\mathbf{z}_1)\),其中 \(\exp(s_\theta(\mathbb{z}_1))\) 是一个正的缩放因子,\(\odot\) 表示元素级乘法(每个元素分别相乘)。
这个缩放操作允许模型对不同区域的概率密度进行压缩或膨胀,而不仅仅是平移。想象一个橡皮图章:NICE只能移动图章的位置,而RealNVP还可以拉伸或压缩图章的不同部分,从而创造出更复杂的形状。
这种非体积保持的性质使得RealNVP能够表达更广泛的分布变换,特别是那些需要在不同区域有不同密度的分布。
一些自回归模型也可以被解释为流模型。对于高斯自回归模型,每个维度的 \(\mathbb{x}\) 都接收一些高斯噪声,这可以被视为潜变量 \(\mathbf{z}\)。这种变换也是可逆的,意味着给定 \(\mathbf{x}\) 和模型参数,我们可以精确地获得 \(\mathbf{z}\)。
掩码自回归流(Masked Autoregressive Flow, MAF)使用这种解释,其中前向映射是一个自回归模型。然而,采样是顺序的且缓慢的,时间复杂度为 \(O(n)\),其中 \(n\) 是样本的维度。
解释:掩码自回归流(MAF)是一种利用自回归结构的流模型。自回归结构意味着每个变量都依赖于之前的所有变量,形成一个链式的依赖关系。
在MAF中,变换是这样进行的:每个输出变量 \(x_i\) 都是基于所有之前的输入变量 \(z_1, z_2, ..., z_{i-1}\) 计算得出的。这种结构使得计算似然(即给定一个数据点,计算其概率密度)变得非常高效,因为我们可以直接计算雅可比矩阵的行列式(它是一个三角矩阵)。
然而,这种结构的缺点是生成样本的过程必须是顺序的:我们必须先生成 \(x_1\),然后基于 \(x_1\) 生成 \(x_2\),以此类推。这使得生成过程的时间复杂度为 \(O(n)\),其中 \(n\) 是维度,这在高维情况下可能会很慢。
想象一个装配线:每个工人(变量)的工作都依赖于前一个工人完成的工作。这种系统在检查已完成的产品(计算似然)时很高效,但在生产新产品(生成样本)时可能会很慢,因为每个步骤都必须等待前一个步骤完成。
为了解决采样问题,逆自回归流(Inverse Autoregressive Flow, IAF)简单地反转了生成过程。在这种情况下,从噪声生成 \(\mathbf{x}\) 可以并行化,但计算新数据点的似然是缓慢的。然而,对于已生成的点,似然可以高效计算(因为噪声已经获得)。
解释:逆自回归流(IAF)巧妙地反转了MAF中的自回归过程,从而解决了MAF在生成样本时速度慢的问题。
在IAF中,变换的方向与MAF相反:我们从噪声变量 \(\mathbf{z}\) 开始,通过一个自回归过程生成观测变量 \(\mathbf{x}\)。由于每个 \(x_i\) 只依赖于 \(z_i\) 和之前的 \(x_1, x_2, ..., x_{i-1}\)(而不依赖于其他的 \(z_j\)),我们可以并行计算所有的 \(z_i\) 到 \(x_i\) 的映射,从而实现快速采样。
然而,这种设计的代价是计算似然变得困难。给定一个观测点 \(\mathbf{x}\),我们需要求解一个复杂的方程组来找到对应的 \(\mathbf{z}\),这通常需要迭代求解,计算成本很高。
不过,对于模型自己生成的点,我们已经知道了对应的 \(\mathbf{z}\)(因为我们是从 \(\mathbf{z}\) 生成 \(\mathbf{x}\) 的),所以可以高效地计算这些点的似然。
这就像是一个复杂的迷宫:IAF可以快速地从入口(\(\mathbf{z}\))到达出口(\(\mathbf{x}\)),但给定一个出口位置,找到对应的入口则需要更多的努力。
并行 WaveNet(Parallel WaveNet)结合了 IAF 和 MAF 的优点,它使用 IAF 学生模型来获取样本,使用 MAF 教师模型来计算似然。教师模型可以通过最大似然有效训练,学生模型通过最小化自身与教师模型之间的 KL 散度来训练。由于计算 IAF 样本的 IAF 似然是高效的,这个过程是高效的。
解释:并行 WaveNet 是一种巧妙的方法,它结合了 MAF 和 IAF 的优势,同时避免了它们各自的缺点。
这种方法使用了"知识蒸馏"技术:首先,训练一个 MAF 模型(称为"教师"模型)来拟合数据分布。MAF 擅长计算似然,所以这一步可以通过最大似然估计高效地完成。
然后,训练一个 IAF 模型(称为"学生"模型)来模仿教师模型的行为。具体来说,学生模型通过最小化其生成的样本分布与教师模型分布之间的 KL 散度(一种衡量两个概率分布差异的度量)来学习。
由于学生模型是一个 IAF,它可以快速并行地生成样本。而且,对于这些生成的样本,我们可以高效地计算它们在学生模型下的似然(因为我们知道生成这些样本的潜变量)。
这就像是一个专家(教师)教导一个学生掌握一种技能,然后学生可以用自己的方式(可能更高效)来应用这种技能。通过这种方式,并行 WaveNet 实现了高效的采样和似然计算,这在音频生成等应用中特别有用。
1 回顾变量替换公式的条件。