前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >概率建模和推理的标准化流 review2021

概率建模和推理的标准化流 review2021

作者头像
CreateAMind
发布2024-06-04 13:55:13
1000
发布2024-06-04 13:55:13
举报
文章被收录于专栏:CreateAMindCreateAMind

Normalizing Flows for Probabilistic Modeling and Inference 调查

用于概率建模和推理的标准化流

https://arxiv.org/abs/1912.02762 2021v2

摘要:

归一化流提供了一种通用机制,用于定义富有表现力的概率分布,它只要求指定一个(通常简单的)基础分布和一系列双射变换。近年来,关于归一化流的研究取得了许多进展,从提高其表现力到扩展其应用范围。我们认为这个领域现在已经成熟,需要一个统一的视角。在这篇综述中,我们试图通过概率建模和推断的视角来提供这样的视角。我们特别强调流设计的基础原理,并讨论了表现力和计算权衡等基础话题。我们通过将流与更一般的概率变换联系起来,拓宽了流的概念框架。最后,我们总结了流在诸如生成建模、近似推断和监督学习等任务中的使用。

关键词:归一化流、可逆神经网络、概率建模、概率推断、生成模型

导言:

寻找被良好指定的概率模型——正确描述产生数据过程的模型——是统计科学的持久理想之一。然而,只有在最简单的情况下,我们才能实现这一目标。在统计学和机器学习中的核心需求是开发工具和理论,允许我们进行更丰富的概率描述,从而使我们能够开发出被更好指定的模型。

本文综述了我们用来解决这一需求的工具之一:通过构建归一化流来构建概率分布。归一化流通过将一个简单密度通过一系列变换来产生一个更丰富、可能更具有多峰分布——就像流体流经一组管道一样。正如我们将看到的,即使是对一个单峰初始密度重复应用简单的变换,也会导致模型具有极其复杂的特性。

归一化流是机器学习研究中一个日益活跃的领域。然而,目前缺乏一个统一的视角来理解最新的进展及其与先前工作的关系。Papamakarios (2019)的论文和Kobyzev等人 (2020)的调查已经为建立这种更广泛理解迈出了步伐。我们的综述补充了这些现有论文。特别是,我们对流的处理比Papamakarios (2019)的更全面,但共享了一些组织原则。Kobyzev等人 (2020)的文章在其文献覆盖和综合方面值得称赞,讨论了有限和无限流(正如我们所做的),并整理了密度估计中的最新结果。我们的综述更具有教学性质,并深入讨论了Kobyzev等人 (2020)标记为开放问题的几个领域(例如,扩展到离散变量和黎曼流形)。

我们对归一化流的探索试图阐明指导它们构建和应用的持久原则,这些原则将在未来可预见的时间内发挥作用。具体来说,我们的综述从第2节开始,建立归一化流的形式和概念结构。然后在第3节和第4节详细讨论了有限(finite)和无限(infinitesimal)变体的流构建。接着在第5节中提出了一个更一般性的视角,进而允许扩展到结构化域和几何。最后,在第6节中讨论了常见的应用场景。

符号说明:我们使用粗体符号表示向量(小写)和矩阵(大写),否则变量是标量。我们用Pr(·)表示概率,用p(·)表示概率密度。我们也会使用p(·)来指代具有该密度函数的分布。我们经常给概率密度添加下标——例如 px(x)——以强调它们指的是哪个随机变量。符号p(x; θ)表示具有分布参数θ的随机变量x的分布。符号∇θ表示梯度算子,它收集了函数相对于参数集θ中的所有偏导数,即

对于K维参数。函数

的雅可比矩阵表示为

。最后,我们用符号x ∼ p(x)表示从分布p(x)中采样或模拟变量x。

2. 归一化流

我们首先概述归一化流的基本定义和属性。我们建立基于流的模型的表现力,解释如何在实践中使用流,并提供一些历史背景。本节不假定对归一化流有先前的了解,可以作为该领域的介绍。

2.1 定义和基础

归一化流提供了一种通用的方法来构建连续随机变量的灵活概率分布。设 x 为一个 D 维实向量,假设我们想要定义 x 上的联合分布。基于流的建模的主要思想是将 x 表达为从 pu(u) 中采样的实向量 u 的一个变换 T:

我们称

为流模型的基础分布。变换 T 和基础分布

可以有自己的参数(分别记为 φ 和 ψ);这引入了一个由参数集合 {φ, ψ} 参数化的 x 上的分布族。

基于流的模型的一个决定性特性是变换 T 必须是可逆的,并且

都必须是可微的。这样的变换被称为微分同胚,并且要求 u 也是 D 维的(Milnor 和 Weaver, 1997)。在这些条件下,x 的密度被很好地定义,并且可以通过变量变换获得(Rudin, 2006; Bogachev, 2007):

在实践中,我们通常通过实现

来构建基于流的模型,并采用一个简单的密度作为 pu(u),比如多元正态分布。在第3节和第4节中,我们将详细讨论如何实现

直观地说,我们可以将变换 T 视为扭曲空间 RD,以便将密度 pu(u) 塑造成 px(x)。绝对雅可比行列式

量化了由于 T 引起的 u 周围的小邻域体积的相对变化。粗略地说,取 du 为 u 周围的(无限小的)小邻域,dx 为 du 映射到的 x 周围的小邻域。然后我们有

,即 dx 的体积除以 du 的体积。dx 中的概率质量必须等于 du 中的概率质量。因此,如果 du 被扩展,那么 x 处的密度就小于 u 处的密度。如果 du 被收缩,那么 x 处的密度就更大。

可逆且可微变换的一个重要特性是它们是可组合的。给定两个这样的变换

,它们的组合

也是可逆和可微的。其逆和雅可比行列式由下式给出:

2.2 基于流的模型的表达能力

2.3 使用流模型进行建模和推断

2.3.1 正向 KL 散度与最大似然估计

最小化上述 KL 散度的蒙特卡洛近似相当于通过最大似然估计将基于流的模型拟合到样本

在实践中,我们经常使用基于随机梯度的方法迭代优化参数 θ。我们可以获得 KL 散度相对于参数的梯度的无偏估计,如下所示:

如果

的最大似然估计可以用闭式形式表示,那么相对于

的更新也可以用闭式形式完成,例如在高斯分布的情况下。

为了通过最大似然估计来拟合基于流的模型,我们需要计算

、它的雅可比行列式和密度

,并且在使用基于梯度的优化时,需要对这三者进行求导。这意味着即使我们不能计算 T 或从

中采样,我们仍然可以通过最大似然方法来训练流模型。然而,如果我们想在模型拟合完成后从模型中进行采样,这些操作仍然是必需的。

2.3.2 反向 KL 散度

或者,我们可以通过最小化反向 KL 散度来拟合基于流的模型,可以写如下:

反向 KL 散度通常用于变分推理(Wainwright 和 Jordan,2008;Blei 等人,2017),这是一种近似贝叶斯推理的形式。在这种情况下,目标是后验,使

成为似然函数和先验密度之间的乘积。

使用流进行变分推断的工作示例包括 Rezende 和 Mohamed (2015);van den Berg 等人 (2018);Kingma 等人 (2016);Tomczak 和 Welling (2016);Louizos 和 Welling (2017)。我们在第6.2.3节中更详细地讨论了这个主题。

反向KL散度的另一个应用是模型蒸馏:使用流模型来替代目标模型

,目标模型的密度可以评估,但在其他方面不方便。van den Oord 等人 (2018) 给出了使用流进行模型蒸馏的示例。在他们的情况下,无法有效地从目标模型中抽取样本,因此他们将其蒸馏成一个支持快速采样的流模型。

2.3.3 前向和反向KL散度之间的关系

上述等式意味着使用前向KL散度(最大似然)将模型拟合到目标,与在反向KL散度下将诱导分布

拟合到基本分布

是等价的。在附录A中,我们还展示了以下内容:

这意味着通过反向KL发散将模型拟合到目标是等价的拟合

通过前向KL发散(最大似然)到基底。

2.3.4 替代散度

学习流模型的参数不限于使用KL散度。有许多衡量分布之间差异的替代方法可供选择。这些替代方法通常分为两个一般家族,一是使用密度比较分布的f-散度,二是使用差异比较的积分概率度量(IPMs):

2.4 简要历史回顾

白化变换(Johnson,1966;Friedman,1987)——因将数据转换为白噪声而得名——是机器学习中使用归一化流的最清晰的知识前身。Chen 和 Gopinath(2000)可能是最早将白化作为密度估计技术而不是特征预处理的人,称这种方法为高斯化。Tabak 和 Vanden-Eijnden(2010)从扩散过程的角度接近了高斯化,建立了与统计力学的联系——具体来说,使用Liouville方程来表征流动。在随后的一篇论文中,Tabak 和 Turner(2013)介绍了可以被视为现代归一化流概念的内容:引入了归一化流这个术语,并将流动定义为K个简单映射的组合。正如我们将在第3节中讨论的那样,这种通过组合定义的方法对于使流具有表达能力同时保持计算和分析可行性至关重要。

组合的概念最近在机器学习中开始出现,最初是由Rippel和Adams(2013)提出的,他们可能是最早意识到使用深度神经网络参数化流可以得到相当一般和富有表达力的分布类。然后,Dinh等人(2015)引入了一种可扩展且计算效率高的架构,进一步改进了图像建模和推理。Rezende 和 Mohamed(2015)利用了Tabak 和 Turner(2013)的思想和语言,在变分推断的设置中应用了归一化流。随后,正如这里所审查的论文将展示的那样,归一化流现在构成了一个广泛的文献,大量工作扩展了这些最初努力的适用性和可扩展性。

由于与变量的变换的关系,我们还可以将目前在机器学习中使用的归一化流与其在许多其他设置中的前史联系起来。在统计力学的发展中,测度的变换已经被深入研究过,一个著名的例子就是前面提到的Liouville定理(1838年)。Copula(Sklar,1959年;Elidan,2013年)可以被视为原始的流,其中每个维度都是使用经验估计的边际累积分布函数独立转换的。

最优输运和Wasserstein度量(Villani,2008)也可以用测度的变换(“测度的输运”)来表达,也被称为Monge问题。特别地,三角形映射(与自回归流密切相关的概念)可以被证明是一类Monge-Kantorovich问题的极限解(Carlier等人,2010)。这类三角形映射本身有着悠久的历史,Rosenblatt(1952年)研究了它们用于均匀转换多元分布超立方体的性质。最优输运可能需要一个单独的教程来解释,因此我们大部分绕过了这个框架,选择用变量的变换来思考。

3. 构建流 第一部分:有限组合

在描述了流的一些高级属性和用途之后,我们转而描述、分类和统一各种构建流的方式。如第2.1节所讨论的,归一化流是可组合的;也就是说,我们可以通过将有限数量的简单变换 (Tk) 组合起来构建一个变换 (T) 的流,如下所示:

这个想法是使用简单的变换作为构建块——每个变换都有一个可处理的逆变换和雅可比行列式——来定义一个复杂的变换,其表达能力比其组成部分的任何一个都强。重要的是,流的正向和逆向评估以及雅可比行列式的计算可以局部化到子流中。如图2所示,假设

,正向评估为:

我们还应澄清我们所说的“可处理的雅可比行列式”是什么意思。我们始终可以使用D次前向模式或反向模式自动微分来计算具有D个输入和D个输出的可微函数的雅可比矩阵。然后,我们可以明确计算该雅可比行列式的行列式。然而,这种计算的时间成本为

,对于大的D来说可能是不可行的。对于大多数基于流的模型应用来说,雅可比行列式的计算应该最多为 O(D) 。因此,在接下来的章节中,我们将描述函数形式,使得雅可比行列式的计算时间与输入维度呈线性关系。

为了简化符号,从现在开始,我们将省略模型参数对k的依赖,并用

表示模型。此外,无论模型是否实现

,我们将用z表示模型的输入,用z‘表示模型的输出。

3.1 自回归流

自回归流是最早开发的流类之一,至今仍然是最受欢迎的之一。在第2.2节中,我们看到,在温和条件下,我们可以使用具有三角雅可比矩阵的映射将任何分布

转换为

中的均匀分布。自回归流是对这种构造的直接实现,指定

具有以下形式(如Huang等人,2018年;Jaini等人,2019年所述):

其中 τ 被称为变换器,

是第 i 个条件器。如图 3a 所示。变换器是

的严格单调函数(因此可逆),由

参数化,并指定流如何作用于

以输出

。条件器确定变换器的参数,反过来,可以修改变换器的行为。条件器不需要是双射。它的一个约束是第 i 个条件器只能接受维度索引小于 i 的变量作为输入。

的参数 φ 通常是条件器的参数(为了简单起见,上面没有显示),但有时变换器也有自己的参数(除了

外)。

很容易检查上述构造对于任何 τ 和 ci 的选择都是可逆的,只要变换器是可逆的。给定

,我们可以按如下方式迭代计算 z:

这在图3b中有所说明。在正向计算中,每个

和因此每个

可以独立地按任意顺序或并行计算。然而,在逆向计算中,所有 z<i 都需要在计算

之前计算好,以便 z<i 可用于条件器计算

还很容易证明上述变换的雅可比矩阵是三角形的,因此雅可比行列式是可处理的。由于每个

不依赖于 z>i,因此

的偏导数在 j > i 时为零。因此,

的雅可比矩阵可以用以下形式表示:

雅可比矩阵是一个下三角矩阵,其对角元素是 z 的每个 D 元素的变换器的导数。由于任何三角矩阵的行列式等于其对角元素的乘积,因此可以按照以下方式在 O(D) 的时间内计算

的对数绝对值行列式:

雅可比矩阵的下三角部分——这里用 L(z) 表示——是不相关的。变换器的导数可以通过解析计算或自动微分计算,具体取决于实现方式。

在条件充分的情况下,自回归流是通用逼近器(根据第2.2节讨论的条件),只要变换器和条件器足够灵活,可以任意精确地表示任何函数。这直接源自于第2.2节中的通用变换,该变换基于条件概率的累积分布函数,实际上是一个自回归流。然而,这只是一个表示能力的陈述,并不能保证流在实践中的行为。

自回归流的另一种数学等价形式是使条件器 ci 接受 z<sub>0<i 而不是 z<i。这相当于在上述给出的公式中交换 τ 和 τ<sup>-1 以及 z 和 z<sub>0。这两种表述在文献中都很常见;在这里,我们采用条件器 ci 接受 z<i 的约定,没有失去一般性。这两种替代方案之间的计算差异在文献中有更详细的讨论,例如Kingma等人(2016年);Papamakarios等人(2017年)。

实现自回归流归结为 (a) 实现变换器 τ 和 (b) 实现条件器 ci。这是独立的选择:任何类型的变换器都可以与任何类型的条件器配对,从而产生了文献中出现的各种组合。在接下来的段落中,我们将列举一些变换器的实现方法(第3.1.1节)和一些条件器的实现方法(第3.1.2节)。我们将讨论它们的优缺点,并指出文献中特定模型所使用的选择。

3.1.1 实现变换器

仿射变换器 变换器的最简单可能选择之一,也是最早使用的之一,是仿射函数类:

具有仿射变换器的自回归流具有简单性和解析可处理性,因此具有吸引力,但它们的表达能力有限。为了说明这一点,假设 z 遵循高斯分布;那么,每个在 z<sub>0<i 的条件下的 z<sub>0i 也会遵循高斯分布。换句话说,对多元高斯进行单个仿射自回归变换的结果是一个分布,其条件概率 pz<sub>0 (z<sub>0i | z<sub>0<i) 必然是高斯的。尽管如此,通过堆叠多个仿射自回归层仍然可以获得具有表达力的流,但尚不清楚具有多层仿射自回归的流是否是通用逼近器。在文献中,仿射变换器很受欢迎,已经在 NICE (Dinh et al., 2015)、Real NVP (Dinh et al., 2017)、IAF (Kingma et al., 2016)、MAF (Papamakarios et al., 2017) 和 Glow (Kingma 和 Dhariwal, 2018) 等模型中使用过。

基于组合的变换器 非仿射变换器 可以从简单的组件构造而来,根据观察到的锥形组合以及单调函数的组合也是单调的事实。给定实变量 z 的单调函数 τ1,. . .,τK,以下函数也是单调的:

例如,可以使用锥形组合来构造非仿射变换器,其中包括单调递增的激活函数 σ(·)(例如 logistic sigmoid、tanh、leaky ReLU(Maas等人,2013)等):

只要对于所有的 k ≥ 1,都有 αik > 0 和 wik > 0。显然,上述构造对应于一个单层的单调感知器。通过重复组合和合成单调激活函数,我们可以构造一个多层感知器,它是单调的,前提是它的所有权重都是严格正数。

像上面的变换器一样的变换器可以任意精确地表示任何单调函数,这直接源自于多层感知器的通用逼近能力(有关详细信息,请参见例如Huang等人,2018年)。用于计算雅可比行列式的变换器的导数原则上可以通过解析获得,但更常见的做法是通过反向传播进行计算。基于组合的变换器的一个缺点是,一般情况下它们无法通过解析方式反转,只能通过迭代方式反转,例如使用二分搜索(Burden 和 Faires,1989)。基于组合的变换器的变体已经在诸如NAF(Huang et al.,2018)、block-NAF(De Cao et al.,2019)和Flow++(Ho et al.,2019)等模型中使用过。

基于积分的变换器 定义非仿射变换器的另一种方法是认识到一些正函数的积分是一个单调递增函数。例如,Wehenkel 和 Louppe (2019) 将变换器定义为:

这里的 g(·; αi) 可以是任何由 αi 参数化的取正值的神经网络。通常 g(·; αi) 除了 αi 外还会有自己的参数。用于计算雅可比行列式的变换器的导数简单地等于 g(zi; αi)。

这种方法产生了任意灵活的变换器,但是积分缺乏解析可处理性。一种可能性是求助于数值近似。

可以通过将被积函数 g(·; αi) 取为一个二次多项式的形式来获得解析可处理的基于积分的变换器。积分将会是 zi 的一个 2L 阶多项式,因此可以通过解析方式计算。由于每个 2L 阶的正多项式都可以写成 2 个(或更多)L 阶多项式的平方和(Marshall,2008,命题 1.1.2),可以利用这一事实来定义一个平方和多项式变换器(Jaini等,2019年):

其中,

。可以证明,对于足够大的 L,平方和多项式变换器可以任意精确地逼近任何单调递增函数(Jaini等,2019,定理 3)。然而,由于只有高达 4 阶的多项式可以解析求解,因此对于 L ≥ 2,平方和多项式变换器在解析上不可逆,只能通过迭代方式反转,例如使用二分搜索(Burden 和 Faires,1989)。

基于样条的变换器 到目前为止,我们已经讨论了可以任意灵活地构建的非仿射变换器,但是没有解析的逆变换。克服这一限制的一种方法是将变换器实现为一个单调样条,即由 K 个段组成的分段函数,其中每个段是一个简单的函数,易于反转。具体而言,给定一组 K+1 的输入位置 zi0,...,ziK,变换器 τ (zi; hi) 被取为在每个区间 [zi(k−1), zik] 内的简单单调函数(例如,低次多项式),并且受到这样一个约束,即 K 个段在端点 zi1, ...,zi(K−1) 处相接。在区间 [zi0, ziK] 之外,变换器可以默认为一个简单函数,如恒等函数。通常,变换器的参数 hi 是输入位置 zi0, ...,ziK,相应的输出位置 z0i0,...,z0iK,以及(根据样条的类型而定)在 zi0, ...,ziK 处的导数(即斜率)。有关说明,请参见图 4。

基于样条的变换器通过它们使用的样条类型来区分,即通过分段函数的函数形式。迄今为止已经探索了以下选项,按灵活性递增排序:线性和二次样条(M¨uller等,2019)、三次样条(Durkan等,2019a)、线性-有理样条(Dolatabadi等,2020)和有理-二次样条(Durkan等,2019b)。基于样条的变换器在保持精确解析可逆性的同时,反转速度与评估速度相同。评估或反转基于样条的变换器的方法是首先定位正确的段——可以使用二分搜索在 O(log K) 的时间内完成——然后评估或反转该段,假设其具有解析求解的能力。通过增加段数 K,基于样条的变换器可以变得任意灵活。

3.1.2 实现条件器

条件器 ci(z<i) 可以是 z<i 的任何函数,这意味着每个条件器原则上都可以实现为具有输入 z<i 和输出 hi 的任意模型。然而,如果每个 ci(z<i) 都是一个单独的模型,那么它将随着维度 D 的增加而扩展,每个模型需要进行 D 次模型评估,每次评估的向量大小为 D/2。这还要加上存储和估计 D 个独立模型参数的成本。事实上,早期关于流前体的工作(Chen 和 Gopinath,2000)将自回归方法视为成本过高而将其搁置。

尽管如此,在实践中,可以通过在条件器 ci(z<i) 之间共享参数来有效解决这个问题,甚至可以将条件器合并为单个模型。在接下来的段落中,我们将讨论一些允许条件器在高维度下扩展的实际实现。

循环条件器 通过使用循环神经网络(RNN)将参数共享到条件器之间是一种方法。第 i 个条件器的实现方式如下:

RNN 处理 z<D = (z1, . . . , zD−1) 中的每个元素,每一步更新一个固定大小的内部状态 si,该状态总结了子序列 z<i = (z1, . . . , zi−1)。计算 hi 从 si 到网络 c 可以在每一步中保持不变。初始状态 s1 可以是固定的,也可以是 RNN 的一个学习参数。可以使用任何 RNN 架构,例如 LSTM(Hochreiter 和 Schmidhuber,1997)或 GRU(Cho 等人,2014)。

RNN 已被广泛用于在自回归模型的条件分布之间共享参数。基于 RNN 的自回归模型的示例包括分布估计器(Larochelle 和 Murray,2011;Uria 等人,2013, 2014)、序列模型(Mikolov 等人,2010;Graves,2013;Sutskever 等人,2014)以及图像/视频模型(Theis 和 Bethge,2015;van den Oord 等人,2016b;Kalchbrenner 等人,2017)。第 3.1.3 节详细讨论了自回归模型和自回归流之间的关系。

在自回归流的文献中,RNN-based 条件器已被提出,例如 Oliva 等人(2018)和 Kingma 等人(2016),但与其他选择相比相对较少见。RNN-based 条件器的主要缺点是它们将一个固有的并行计算转换为顺序计算:即使每个 hi 原则上可以独立并且并行地从 z<i 计算,但状态 s1, . . . , sD 必须按顺序计算。由于这种循环计算涉及 O(D) 个顺序步骤,因此对于诸如图像或视频等高维数据,它可能会变得很慢。

另一种在条件器之间共享参数但避免 RNN 顺序计算的方法是基于掩码。这种方法使用单个通常的前馈神经网络,它接收 z 并在一次传递中输出整个序列 (h1, . . . , hD)。唯一的要求是这个网络必须遵守条件器的自回归结构:输出 hi 不能依赖于输入 z≥i。

要构造这样一个网络,可以从任意的神经网络开始,然后删除连接,直到从输入 zi 到输出 (h1, . . . , hi) 没有路径。一种简单的删除连接的方法是将每个权重矩阵逐元素乘以一个相同大小的二进制矩阵。这样做的效果是删除与被乘以零的权重对应的连接,同时保留所有其他连接不变。这些二进制矩阵可以被视为“掩盖”连接,因此称为掩码。掩码网络将具有与原始网络相同的架构和大小。因此,它保留了原始网络的计算特性,如并行性或在 GPU 上高效评估的能力。

Germain 等人(2015)提出了一种构建具有任意多隐藏层或隐藏单元的多层感知器的掩码的一般过程。关键思想是为每个输入、隐藏和输出单元分配一个介于 1 和 D 之间的“度”,然后掩盖掉后续层之间的权重,以便不会有单元馈送到具有较低或相等度的单元。在卷积网络中,掩码可以通过将过滤器与相同大小的二进制矩阵相乘来实现,这导致一种通常称为自回归卷积或因果卷积的卷积类型(van den Oord 等人,2016c,a;Hoogeboom 等人,2019b)。在使用自注意力的架构中,可以通过将 softmax 概率清零来实现掩码(Vaswani 等人,2017)。

掩码自回归流有两个主要优点。首先,它们的评估效率高。给定 z,参数 (h1, . . . , hD) 可以在一次神经网络传递中获得,然后通过

并行计算 z0 的每个维度。其次,掩码自回归流是通用逼近器。在具有足够灵活的条件器和变换器的情况下,它们可以表示任何具有单调变换器的自回归变换,从而在任何两个分布之间进行转换(如第 2.2 节所讨论的)。

另一方面,掩码自回归流的主要缺点是反转效率不如评估效率高。这是因为需要参数 hi 来获得

,直到所有

都已获得。按照这种逻辑,我们必须先计算 h1,然后通过它获得 z1,然后计算 h2,依此类推,直到获得 zD。使用掩码条件器 c,上述过程的伪代码可以如下实现:

要理解为什么此过程是正确的,注意如果在第 i 次迭代之前 z≤i−1 是正确的,那么由于 c 的自回归结构,hi 将被正确计算,因此在第 (i + 1) 次迭代之前 z≤i 将是正确的。由于在第一次迭代之前 z≤0 = ∅ 是正确的(在退化意义上,但仍然如此),归纳起来,可以得出在循环结束时 z≤D = z 是正确的。尽管上述过程可以精确地反转流(只要变换器容易反转),但它需要调用条件器 D 次。这意味着使用上述方法反转掩码自回归流大约比评估正向变换贵 D 倍。对于像图像或视频这样的高维数据,这可能是极其昂贵的。

Song 等人(2019)提出的另一种反转流的替代方法是通过迭代以下类似牛顿的定点更新来近似地解方程

其中 α 是步长超参数,diag(·) 返回一个对角矩阵,其对角线与输入的对角线相同。一个方便的初始化是 z0 = z0 。Song 等人(2019)展示了上述过程在 0 < α < 2 时是局部收敛的,由于

是唯一的不动点,该过程必定会收敛到它或发散。使用掩码自回归流,通过调用条件器一次可以有效地同时计算

。因此,与精确反转流相比,实践中收敛到所需次数远小于 D 时,上述类似牛顿的过程可能更有效。另一方面,上述类似牛顿的过程是近似的,并且仅在局部收敛时保证收敛。

尽管与反演相关的计算困难,掩码仍然是实现自回归流最受欢迎的技术之一。它非常适用于不需要反演流或数据维度不太大的情况。使用掩码的流模型的示例包括 IAF(Kingma et al.,2016)、MAF(Papamakarios et al.,2017)、NAF(Huang et al.,2018)、block-NAF(De Cao et al.,2019)、MintNet(Song et al.,2019)和 MaCow(Ma et al.,2019)。掩码也可以被用于并且在实现非流自回归模型(如 MADE(Germain et al.,2015)、PixelCNN(van den Oord et al.,2016c;Salimans et al.,2017)和 WaveNet(van den Oord et al.,2016a, 2018))中也很受欢迎。

耦合层 正如我们所见,掩码自回归流具有影响其应用和可用性的计算不对称性。抽样或密度评估中的一个操作将比另一个操作慢 D 倍。如果这两种操作都需要快速执行,就需要一种不同的条件器实现。一种计算对称的实现是耦合层(Dinh et al.,2015, 2017)。其思想是选择一个索引 d(一个常见的选择是 D/2 四舍五入到整数),并设计条件器,使得:

这可以使用任意函数逼近器F(例如a)轻松实现神经网络)如下:

换句话说,耦合层将 z 分为两部分,即

。第一部分独立地按元素进行变换,与其他维度无关。第二部分以一种取决于第一部分的方式逐元素进行变换。我们也可以将耦合层视为实现了一种激进的掩码策略,只允许

依赖于

耦合层的常见实现将变换器

固定为恒等函数。在这种情况下,变换可以写成如下形式:

耦合层和完全自回归流是可能实现的两种极端,介于两者之间的是一系列可能的实现。耦合层将 z 分成两部分,并将第二部分作为第一部分的函数逐元素进行转换,而完全自回归流将输入分成了 D 部分(每个部分只有一个元素),并将每个部分作为所有先前部分的函数进行转换。显然,还存在中间选择:可以将输入分成 K 部分,并将第 k 部分逐元素地作为第 1 到 k-1 部分的函数进行转换,其中 K = 2 对应于一个耦合层,K = D 对应于一个完全自回归流。使用掩码,反转变换的计算代价将是评估它的 O(K) 倍,因此 K 可以根据任务的计算需求进行选择。

耦合层的效率是以降低表达能力为代价的。与递归或掩码自回归流不同,单个耦合层不再能表示任何自回归变换,无论函数 F 的表达能力如何。因此,具有单个耦合层的自回归流不再是一个通用逼近器。尽管如此,通过组合多个耦合层可以增加流的表达能力。在组合耦合层时,需要在层之间对 z 的元素进行排列,以便所有维度都有机会进行变换并相互交互。先前在各个领域的工作(参见 Kingma 和 Dhariwal,2018;Prenger 等人,2019;Durkan 等人,2019b)表明,组合耦合层确实可以创建灵活的流。

从理论上讲,很容易证明 D 个耦合层的组合确实是一个通用逼近器,只要第 i 个耦合层的索引 d 等于 i-1。注意,第 i 个耦合层可以表达任何形式的变换,形式为 z0i = τ (zi ; ci(z<i)),因此 D 个这样的层的组合将完全自回归地转换每个维度。然而,这种构造涉及 D 个顺序计算(每个层都要进行一次),无论是正向还是反向计算,因此它不比递归或掩码自回归流提供改进。是否可能通过组合严格少于 O(D) 个耦合层来获得一个通用逼近器,这是一个未解决的问题。

耦合层是实现基于流的模型的最流行方法之一,因为它们可以使密度评估和采样都很快。基于耦合层的流可以通过最大似然进行可行拟合,然后可以有效地进行采样。因此,耦合层经常出现在高维数据的生成模型中,例如图像、音频和视频。使用耦合层的流模型的示例包括 NICE(Dinh 等人,2015),Real NVP(Dinh 等人,2017),Glow(Kingma 和 Dhariwal,2018),WaveGlow(Prenger 等人,2019),FloWaveNet(Kim 等人,2019)和 Flow++(Ho 等人,2019)。

3.1.3 自回归模型的关系

除了标准化流之外,另一个用于高维分布的流行模型类别是自回归模型类。自回归模型有着悠久的历史,从贝叶斯网络的一般框架(Pearl,1988;Frey,1998)到更近期的基于神经网络的实现(Bengio 和 Bengio,2000;Uria 等人,2016)。

要构建

的自回归模型,我们首先使用概率的链式法则将

分解为一维条件的乘积:

例如,

可以是由其均值和方差参数化的高斯分布,或者是由每个组分的均值、方差和混合系数参数化的高斯混合分布。函数 ci 类似于自回归流的条件器,并且通常使用神经网络来实现,可以使用先前讨论过的 RNN 或掩码技术。除了连续数据之外,自回归模型还可以轻松用于离散或混合数据。如果某些 i 对应的 xi 是离散的,那么

可以是参数化的概率质量函数,例如分类或泊松混合模型。

现在我们证明,所有关于连续变量的自回归模型实际上都是具有单个自回归层的自回归流。令

的累积分布函数,定义如下:

始终均匀分布在

中。上述表达式与公式 29 中自回归流的定义具有完全相同的形式,其中

。因此,自回归模型实际上是具有单个自回归层的自回归流。此外,该层的变换器是自回归模型的条件的累积分布函数,并且该层的基础分布是

中的均匀分布。我们可以通过写出变量变化下的密度来使联系变得明确:

涉及均匀基本密度的项从表达式中消失,只留下雅可比行列式。根据方程30,将 u 映射到 x 的逆自回归流通过对以下方程进行迭代而获得,其中 i ∈ {1, . . . , D}:

以上完全对应于一次从自回归模型中抽取一个元素,其中在每个步骤中,对应的条件被使用反转变换抽取。

然而,变换器不一定局限于是反向累积分布函数。我们可以在特定类型的自回归模型和第3.1.1节讨论的变换器之间建立进一步的联系。例如,考虑具有以下形式的高斯条件的自回归模型:

因此,整个自回归模型可以重新参数化为如方程33所示的仿射自回归流,其中

,基本分布是标准高斯(Kingma等,2016年; Papamakarios等,2017年)。同样,我们可以将其他类型的自回归模型与非仿射变换器联系起来。例如,条件为高斯混合的自回归模型可以重新参数化为具有基于组合的变换器的自回归流,例如方程35中的那些。类似地,条件为直方图的自回归模型可以重新参数化为由线性样条给出的自回归流。

因此,我们可以将自回归流视为包含和进一步扩展连续变量的自回归模型。将自回归模型视为流的好处有几个。首先,这种观点将模型架构与随机性源分开,这使我们可以自由地指定基本分布。因此,我们可以通过选择更灵活的基本分布来增强自回归模型的灵活性;例如,基本分布可以是另一个具有其自身可学习参数的自回归模型。这提供了一个将自回归模型组合的框架,就像流中的层一样(Papamakarios等,2017年)。此外,它还允许我们将自回归模型与其他类型的流组合,可能是非自回归类型的流。

3.2 线性流

正如上一节所讨论的,自回归流限制输出变量

仅依赖于输入 z≤i,从而使流依赖于输入变量的顺序。正如我们所展示的,在无限容量的限制下,此限制不会 限制了基于流的模型的灵活性。然而,实际上我们并不是以无限容量运行。输入变量的顺序将决定模型可以表示的分布集。此外,目标转换对于某些输入顺序可能很容易学习,而对于其他输入顺序则很难学习。当使用耦合层时,这个问题会进一步恶化,因为只有部分输入变量被转换。

为了应对实际中的这些限制,通常有助于在连续的自回归层之间对输入变量进行置换。对于耦合层来说,这实际上是必要的:如果我们不在连续的层之间对输入变量进行置换,那么部分输入将永远不会被转换。对输入变量的置换本身是一种易于反转的转换,其绝对雅可比行列式始终为1(即保持体积不变)。因此,可以像通常一样将置换与其他可逆且可微分的变换组合在一起。

一种推广输入变量置换思想的方法是线性流。线性流本质上是一种可逆线性变换,形式如下:

在这里,W是一个D×D的可逆矩阵,它参数化了这个变换。上述变换的雅可比矩阵简单地是W,使得雅可比行列式等于detW。排列是线性流的特殊情况,其中W是一个排列矩阵(即每行和每列都恰好有一个元素为1,其余元素均为0的二进制矩阵)。在实践中,交替使用可逆线性变换和自回归/耦合层是很常见的(例如,见Kingma和Dhariwal,2018;Durkan等,2019b)。

线性流的一个直接实现方法是直接参数化并学习矩阵W。然而,这种方法可能存在问题。首先,W不能保证是可逆的。其次,反转流,也就是解线性方程组Wz = z0以解出z,通常需要

的时间,在处理高维数据时代价太高了。第三,计算det W在一般情况下也需要

的时间。

为了解决上述挑战,许多方法将W限制为结构化矩阵,或者结构化矩阵的乘积。例如,如果将W限制为三角矩阵,我们可以通过使对角元素为正来保证其可逆性。此外,反转的成本是

(即大约与矩阵乘法相同),计算行列式的成本是O(D)。在附录B中,我们将更详细地讨论几种将W的形式限制在不同方面的参数化方法。

无论如何,重要的是要注意,不可能以连续方式参数化所有大小为D×D的可逆矩阵,因此,任何保证其可逆性的W的连续参数化都将不可避免地排除一些可逆矩阵。这是因为从R^D2到D×D可逆矩阵集合的连续满射函数是不存在的。

为了理解这一点,考虑两个可逆矩阵WA和WB,使得

。如果存在一个连续的参数化方法可以覆盖所有可逆矩阵,那么就存在一条连接WA和WB的连续路径。然而,由于行列式是矩阵元素的连续函数,任何这样的路径都必须包含一个行列式为零的矩阵,即一个非可逆矩阵,这是一个矛盾。这个论证表明,D×D可逆矩阵的集合包含两个不连通的“岛屿”——一个包含行列式为正的矩阵,另一个包含行列式为负的矩阵——它们被非可逆矩阵的集合完全分隔开来。在实践中,这意味着我们只能希望连续地参数化这两个岛屿中的一个,从一开始就固定行列式的符号。

3.3 剩余流量

在本节中,我们考虑一类一般形式的可逆变换:

3.3.1 收缩残差流

其中 v 可以是任意的零均值和单位协方差的 D 维随机向量。然后,可以通过 k 次反向传播来计算雅可比向量积

。最后,可以使用俄罗斯轮盘估计器(Chen 等人,2019)对一系列适当重新加权的项的有限和来估计无穷和。

与基于自回归流的约束雅可比矩阵稀疏的情况不同,压缩残差流通常具有稠密的雅可比矩阵,这允许所有输入变量影响所有输出变量。因此,压缩残差流可以非常灵活,并且在实践中表现出良好的结果。另一方面,与基于耦合层的流提供的一次通过的密度评估和采样不同,精确密度评估计算代价昂贵,采样是迭代进行的,这限制了压缩残差流在某些任务中的适用性。

3.3.2 基于矩阵行列式引理的剩余流

假设 A 是大小为 D × D 的可逆矩阵,V、W 是大小为 D × M 的矩阵。

矩阵行列式引理指出:

如果矩阵 A 的行列式和逆可计算,并且 M 小于 D,那么矩阵行列式引理可以提供一种计算 A+VW> 的行列式的计算效率高的方式。例如,如果 A 是对角矩阵,则计算左边的成本为

),而计算右边的成本为

,如果 M < D,则右边的成本更可取。在流的上下文中,矩阵行列式引理可以用于有效计算雅可比行列式。在本节中,我们将讨论一些特别设计的残差流的例子,应用矩阵行列式引理可以导致有效的雅可比行列式计算。

平面流:一个早期的例子是平面流(Rezende 和 Mohamed,2015),其中函数 gφ 是一个具有单个隐藏单元的一层神经网络:

这个平面流的参数是

,σ 是一个可微的激活函数,比如双曲正切函数。这个流可以被解释为在与超平面

垂直的方向上扩张/收缩空间。变换的雅可比矩阵如下:

其中 σ₀ 是激活函数的导数。Jacobian 矩阵的形式是一个对角矩阵加上一个秩为 1 的更新项。利用矩阵行列式引理,Jacobian 矩阵的行列式可以按如下方法在 O(D) 时间内计算出来:

一般来说,平面流并不是对于所有的 v 和 w 值都可逆的。然而,假设 σ₀ 在任何地方都是正的并且有上界(例如,如果 σ 是双曲正切函数的情况),一个足够的可逆条件是

Sylvester 流:平面流可以扩展到 M 个隐藏单元,在这种情况下,它们被称为 Sylvester 流(van den Berg 等,2018),其形式可以表示为:

流的参数现在是

,激活函数 σ 被理解为逐元素运算。Jacobian 矩阵可以表示为:

其中, S(z) 是一个 M x M 的对角矩阵,其对角线元素等于

。应用矩阵行列式引理,我们得到:

该行列式可以在

时间复杂度内计算。为了进一步降低计算成本,van den Berg 等(2018)提出了参数化方法 V = QU 和 W = QL,其中 Q是一个D xM矩阵,其列是一个正交集向量(这要求 M x D , U 是 Mx M 的上三角矩阵,L 是 Mx M 的下三角矩阵。由于

,并且上三角矩阵的乘积也是上三角矩阵,因此 Jacobian 行列式变为:

类似于平面流,Sylvester 流在其所有参数值下并不是都可逆的。假设

) 在任何地方都是正的并且有上界,则可逆的一个充分条件是

对所有

成立。

径向流:径向流(Tabak 和 Turner,2013;Rezende 和 Mohamed,2015)具有以下形式:

流的参数是

,且

是欧几里得范数。上述变换可以被视为以

为中心的径向收缩/扩展。Jacobian 矩阵可以如下表示:

z0z为中心的径向收缩/扩展。Jacobian 矩阵可以如下表示:

这是一个对角矩阵加上一个秩为 1 的更新项。应用矩阵行列式引理并重新排列,我们得到以下 Jacobian 行列式的表达式,该行列式可以在

时间复杂度内计算出来:

径向流并不对所有的 β 值都是可逆的。一个足够的可逆条件是 β > -α。

总之,平面流、Sylvester 流和径向流的 Jacobian 行列式的计算成本为 O(D),并且可以通过适当限制它们的参数使其可逆。然而,没有解析方法来计算它们的逆,这就是为什么这些流主要被用来近似变分自编码器的后验分布。此外,每个单独的变换都相当简单,不清楚如何增加流的灵活性,除了增加变换的数量。

3.4 当组合变换时的实际考虑

实现一个流通常就是将尽可能多的变换组合起来,以满足计算和内存的限制。例如,Kingma 和 Dhariwal (2018) 的 Glow 架构使用了多达 320 个子变换,分布在 40 个 GPU 上,以实现最先进的图像生成。使用这样深的流引入了额外的实际挑战。在本节中,我们总结了两种技术,分别用于稳定优化和减轻深流的计算需求。

归一化 就像使用基于梯度的方法训练的深度神经网络一样,对中间表示

进行归一化对于在整个流中保持稳定的梯度是至关重要的。批归一化或批量归一化(Ioffe 和 Szegedy,2015)已经被广泛证明在稳定和改善神经网络训练方面是有效的,因此在深流中使用它也是很有吸引力的。将批次统计视为固定的时,批归一化本质上是两个仿射变换的组合。第一个变换的缩放和平移参数由批次统计设置,第二个变换具有自由参数α(缩放)和β (平移):

此外,批量范数具有易于计算的雅可比行列式,因为它按元素起作用(因此具有对角雅可比行列式):

因此,批量归一化可以插入在连续的子转换之间,并且被简单地视为组合中的另一个成员:

上述公式假定批量统计数据是固定的,对于一个经过训练的模型来说是正确的。然而,在训练过程中,批量统计数据并不是固定的,而是所有批次中所有样本的函数。这使得批量归一化不可逆,除非批量统计数据在前向传播期间被缓存。另外,上面所写的雅可比行列式在数学上没有多大意义,因为批量归一化现在是整个批次的函数。然而,将这个雅可比行列式公式用作近似通常足以用于训练,至少如果批量足够大的话(Dinh等人,2017年;Papamakarios等人,2017年)。

Glow使用了一种称为激活归一化或act norm(Kingma和Dhariwal,2018年)的变体,它不使用批量统计数据

。相反,在训练开始之前,一个批量通过流程,α和β被设置为使得转换后的批量具有零均值和单位方差。在这种数据相关的初始化之后,α和β被优化为模型参数。当使用小批量进行训练时,act norm比批量归一化更可取,因为批量归一化的统计数据会变得嘈杂并可能使训练不稳定。

多尺度架构 正如第2.1节所述,x和u必须具有相同的维度,并且每个子转换Tk必须保持维度。这意味着评估T会随着维度增长而产生越来越高的计算成本。这一约束与我们尽可能使用尽可能多的步骤的愿望直接相悖。Dinh等人(2017年)通过多尺度架构的方式绕过了这个问题。在从x到u的流程步骤中的定期间隔时,一些zk的子维度被固定,不会应用额外的转换。你可以把这看作是实现了一个跳跃连接,将这些维度直接映射到最终表示u中的相应维度:

,其中k是应用固定的步骤。所有K步骤仅应用于一个小的子维度集,这比对所有维度应用所有步骤更节省成本。Dinh等人(2017年)还认为这些跳跃连接有助于优化,将目标分布到流程的整个深度。

除了具有这种实际好处外,多尺度架构也是对于像素(Dinh等人,2017年;Kingma和Dhariwal,2018年)和波形(Prenger等人,2019年;Kim等人,2019年)等粒度数据类型的自然建模选择。我们通常关心的宏观结构—例如,图像中的形状和纹理—通常不需要描述所有的D维度。Dinh等人(2017年)表明,多尺度架构确实在经历所有转换的维度中编码了更多的全局、语义信息。另一方面,在流程中较早因子化的维度表示更低级的信息;请参见Dinh等人(2017年)的附录D进行演示。

4. 构建流的第二部分:连续时间变换

在前面的部分中,我们考虑通过参数化一步转换zk = Tk(zk−1)来构建流,然后将其中几个组合起来创建一个K个离散步骤的流。另一种策略是通过参数化流的微分动力学来连续时间构建流,然后进行积分以找到相应的变换。换句话说,我们通过定义一个描述流在时间上演化的常微分方程(ODE)来构建流。我们将这些称为“连续时间”流,因为它们的演化类似于步数的实值标量变量。我们称这个标量为“时间”,因为它确定了动力学运行的时间长度。在本节中,我们将描述这类连续时间流,并总结其实现所需的数值工具。

4.1 定义

让zt表示时间t时流的状态(或在离散设置中称为“步”t)。假定时间t从t0连续运行到t1,使得

通过使用带有参数φ的函数gφ参数化zt的时间导数来构建连续时间流,得到以下常微分方程(ODE):

函数gφ将时间t和流的状态zt作为输入,并在时间t处输出zt的时间导数。对于gφ的唯一要求是它在zt上是一致Lipschitz连续的(这意味着存在一个适用于所有t的单一Lipschitz常数),并且在t上是连续的(Chen等人,2018年)。根据皮卡存在定理,满足这些要求确保了上述ODE具有唯一解(Coddington和Levinson,1955年)。许多神经网络层满足这些要求(Gouk等人,2018年),并且与第3节中描述的需要仔细的结构假设来确保雅可比行列式的可逆性和可处理性的架构不同,gφ没有这样的要求。

为了计算变换x = T(u),我们需要通过积分将动力学向前推进一段时间:

在最右边的表达式中,我们利用了积分限的交换等价于对积分取负的事实。我们将逆变换写成这种形式是为了显示,与由离散组合构成的许多流(第3节)不同,连续时间流在每个方向上具有相同的计算复杂度。因此,选择哪个方向是正向,哪个是逆向并不是一个关键的实现选择,就像对于例如自回归流一样。

连续时间流的对数密度变化可以直接描述为(Chen等人,2018年):

其中,Tr{·}表示迹算子,而

表示在zt处评估的gφ(t,·)的雅可比矩阵。上述方程可以作为福克-普朗克方程零扩散(Risken, 1996年)的特殊情况得到。虽然迹算子乍一看似乎比行列式更容易计算,但在实践中,仍然需要O(D)次反向传播来获得

的对角元素。与收缩残差流(第3.3.1节)类似,可以使用Hutchinson的迹估计器(Hutchinson, 1990年)在高维设置中获得近似(Grathwohl等人,2019年):

其中,v可以是任意具有零均值和单位协方差的D维随机向量。雅可比-向量乘积

可以在单次反向传播中计算,这使得Hutchinson迹估计器比精确计算迹效率高约D倍。Chen和Duvenaud(2019年)提出了另一种解决方案,其中gφ的架构受到严格约束,以便可以在单次反向传播中计算精确的雅可比迹。

通过在时间上积分log p

的导数,我们得到了在连续时间流下x的对数密度的表达式:

通过计算以下组合积分,可以同时评估前向变换和对数密度:

对于一般的gφ,解析计算是不可行的。在实践中,通常使用数值积分器,接下来我们将讨论这一点。

4.2 解决和优化连续时间流

由于连续时间流是由ODE定义的,因此可以利用大量关于数值ODE求解器和相应软件的文献来实现这些流。关于ODE的数值方法,可以参考S¨uli (2010)。虽然有许多可以使用的数值方法,下面我们简要描述欧拉方法和伴随方法。

4.2.1 欧拉方法和与残差流的等价性

也许可以应用的最简单的数值技术是欧拉方法。其思想是首先使用小的步长

对ODE进行离散化,如下所示:

完整内容参考原文

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CreateAMind 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.3.1 收缩残差流
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档