【摘要】 归一化流是一种用于定义可表示性概率分布的通用机制,它只需要指定一个基分布和一系列双射变换,就能够得到更具有表达能力的概率分布。近年来,从提高表达能力到扩展其应用方案法,出现了大量关于归一化流的工作。我们认为该领域现在已经成熟了,需要一个公共的统一视角。本文试图通过概率建模和推断视角来描述流。本文特别强调流设计的基本原则,并将讨论模型表达能力与计算代价权衡等基本主题。本文还通过将流与更一般的概率转换相关联,来拓宽流的概念框架。最后,总结了流在生成模型、近似推断和监督学习等任务中的应用。

【原文】Papamakarios, G., Nalisnick, E., Rezende, D. J., Mohamed, S., & Lakshminarayanan, B. (2021). Normalizing Flows for Probabilistic Modeling and Inference (593 citation(s); arXiv:1912.02762). arXiv. http://arxiv.org/abs/1912.02762

【参考】

1 概述

寻找明确的概率模型(即正确描述产生数据过程的模型)是统计科学永恒的理想之一。然而,只有在最简单的环境中,我们才能实现这一目标。所有统计和机器学习的核心需求是开发工具和理论,以允许进行更丰富的概率描述,从而使开发更详细的模型成为可能。

本文回顾了解决此需求的一个工具:用 归一化流(Normalization Flows) 来构建复杂概率分布。 归一化流通过对简单密度函数的一系列转换,产生更丰富而且可能多峰的复杂分布。该过程就像流过一组管道的流体一样,因此被称为 流模型。正如我们将看到的,即便将简单变换多次级联地应用到初始的单峰密度函数上,也会产生一个足够复杂的模型。这种灵活性意味着流模型已经趋于成熟,可用于建模、推断和模拟等关键统计任务。

归一化流是机器学习研究中越来越活跃的领域。然而,缺乏一个统一的视角来了解最新进展及其与以前工作的关系。 Papamakarios (2019) 的论文和 Kobyzev 等(2020 年)的综述已采取步骤建立这种更广泛的理解。本文对这些论文做了补充。特别是,我们对流的处理比 Papamakarios (2019) 的更全面,但也有一些组织原则。Kobyzev 等(2020 年)的文章在文献报道和综合方面值得称道,讨论了有限和无穷小的流(就像我们所做的那样),并整理了密度估计的最新结果。我们的评论本质上是更多的教程,并对 Kobyzev 等的几个领域进行了深入讨论,将问题标记为开放问题(例如离散变量和黎曼流形的扩展)。

我们对归一化流的探索,试图阐明能够在未来指导其构建和应用的持久原则。具体来说,我们的回顾首先在 第 2 节 中建立归一化流的形式和概念结构。然后详细讨论流构造,包括有限流(第 3 节)和无穷小流(第 4 节)等变体。然后在 第 5 节 中提出了一个更广义的观点,这反过来又允许扩展到结构化域和几何图形。最后,我们将在 第 6 节 讨论常见的应用。

符号说明
  • 粗体符号表示向量(小写)和矩阵(大写),否则变量是标量。
  • Pr()Pr(·) 表示概率,用 p()p(·) 表示概率密度。我们还将使用 p()p(·) 来指代具有该密度函数的分布。我们经常为概率密度添加下标,例如 px(x)p_\mathbf{x}(\mathbf{x}),用于强调它们指的是哪个随机变量。
  • 符号 p(x;θ)p(\mathbf{x};\boldsymbol{\theta}) 表示具有分布参数 θ\boldsymbol{\theta} 的随机变量 x\mathbf{x} 的分布。
  • 符号 θ\nabla_{\boldsymbol{\theta}} 表示梯度算子,它收集函数关于集合 θ\boldsymbol{\theta} 中参数的所有偏导数,即对应于 KK 维参数的 θf=[fθ1,,fθK]\nabla_{\boldsymbol{\theta}} \boldsymbol{f} = [ \frac{\partial f}{\partial \theta_1}, \ldots, \frac{\partial f}{\partial \theta_K}]
  • 符号 Jf()J_f (·) 表示函数 f:RDRDf: \mathbb{R}^D \rightarrow \mathbb{R}^D 的雅可比矩阵。
  • 符号 xp(x)\mathbf{x} \sim p(\mathbf{x}) 表示分布 p(xp(\mathbf{x}) 中变量 x\mathbf{x} 的样本或模拟。

2 归一化流

本节首先概述归一化流的基本定义和性质,然后建立了流模型的表达能力,解释了如何在实践中使用流,最后提供了一些历史发展背景。本节不假定您事先熟悉归一化流,可以作为对该领域的一个基本介绍。

2.1 定义和基础

归一化流提供了一种在连续随机变量上构建灵活概率分布的通用方法。

x\mathbf{x}DD 维实向量,假设我们想获得一个在 x\mathbf{x} 上定义的分布 px(x)p_{\mathbf{x}}(\mathbf{x}) 。基于流的建模思想是:将 x\mathbf{x} 表示成另外一个采样自 pu(u)p_{\mathbf{u}}(\mathbf{u}) 的实向量 u\mathbf{u} 的某种变换 TT

x=T(u)whereupu(u)(1)\mathbf{x}=T(\mathbf{u}) \quad \text{where} \quad \mathbf{u} \sim p_{\mathbf{u}}(\mathbf{u}) \tag{1}

在这里,分布 pu(u)p_{\mathbf{u}}(\mathbf{u}) 被称为基分布,分布 px(x)p_{\mathbf{x}}(\mathbf{x}) 被称为目标分布。公式中的变换 TT 和基分布 pu(u)p_{\mathbf{u}}(\mathbf{u}) 可以有自己的参数,可以分别表示为 ϕ\boldsymbol{\phi}ψ\boldsymbol{\psi} 。上式会在 x\mathbf{x} 上引发一系列被 {ϕ,ψ}\{\boldsymbol{\phi}, \boldsymbol{\psi}\} 参数化的分布。

😕 思考:对一个随机变量做变换,与对一个确定值做变换有什么区别?一个确定值的变换还是一个简单的确切值,但一个简单分布的随机变量,经过变换后还会是一个简单的随机变量吗?如果对多峰的复杂随机变量做变换,又会产生什么样的结果呢?

流模型的基础性质是: 要求变换 TT 必须可逆,且 TT 及其逆 T1T^{-1} 都必须可微,即变换 TT 必须是一个可微同胚映射;同时要求 u\mathbf{u} 也必须是 DD 维的(Milnor 和 Weaver,1997)。已经被证明,满足上述条件时,x\mathbf{x} 对应的目标分布可以被基分布 u\mathbf{u} 明确定义,并且能够通过 变量变化(Change of Variable) 获得(Rudin,2006;Bogachev,2007),即:

px(x)=pu(u)detJT(u)1whereu=T1(x)(2)p_{\mathbf{x}}(\mathbf{x})=p_{\mathbf{u}}(\mathbf{u})\left|\operatorname{det} J_T(\mathbf{u})\right|^{-1} \quad \text{where} \quad \mathbf{u}=T^{-1}(\mathbf{x})\tag{2}

等效地,可以根据 T1T^{-1} 的雅可比改写 px(x)p_{\mathbf{x}}(\mathbf{x})

px(x)=pu(T1(x))detJT1(x)(3)p_{\mathbf{x}}(\mathbf{x})=p_{\mathbf{u}}\left(T^{-1}(\mathbf{x})\right)\left|\operatorname{det} J_{T^{-1}}(\mathbf{x})\right| \tag{3}

雅可比 JT(u)J_T(\mathbf{u}) 是变换 TT 的所有偏导数构成的 D×DD \times D 矩阵,由下式给出:

JT(u)=[T1u1T1uDTDu1TDuD](4)J_T(\mathbf{u})=\left[\begin{array}{ccc} \frac{\partial T_1}{\partial \mathbf{u}_1} & \cdots & \frac{\partial T_1}{\partial \mathbf{u}_D} \\ \vdots & \ddots & \vdots \\ \frac{\partial T_D}{\partial \mathbf{u}_1} & \cdots & \frac{\partial T_D}{\partial \mathbf{u}_D} \end{array}\right] \tag{4}

公式 2 表明,如果随机变量 x\mathbf{x} 可以由随机变量 u\mathbf{u} 经过可微同胚映射获得,则 x\mathbf{x} 的密度也可以由 u\mathbf{u} 的密度来定义,并且对 u\mathbf{u} 的密度形式没有要求。

公式 3 表明,通过对 x\mathbf{x} 执行一些列逆变换和正变换后,能够恢复 x\mathbf{x} 的原始分布,类似自编码器的架构,但输入输出的含义不同。

在实践中,可以使用神经网络来实现 TTT1T^{-1},并且采用某种简单密度 pu(u)p_{\mathbf{u}}(\mathbf{u}) 作为基分布(如多元正态分布)来构建流模型。在 第 3 节第 4 节 中,我们将详细讨论如何实现 TTT1T^{-1}

形象地说,我们可以将变换 TT 视为对 RD\mathbb{R}^D 空间的扭曲,以便将密度 pu(u)p_{\mathbf{u}}(\mathbf{u}) 塑造成 px(x)p_{\mathbf{x}}(\mathbf{x});而变换 TT 的雅可比行列式的绝对值 detJT(u)\left|\operatorname{det} J_T(\mathbf{u})\right| ,则量化了 u\mathbf{u} 周围的小邻域由于变换 TT 而引起的体积相对变化。

🔔 解释:

在矩阵变换前后空间维度不变的情况下,其行列式意味着变换前后单位空间体积的相对变化。du\mathbf{du}u\mathbf{u} 周边的无限小邻域, dx\mathbf{dx}x\mathbf{x} 周围的无限小邻域,代表了 du\mathbf{du} 的映射区域,则有 detJT(u)Vol(dx)/Vol(du)\left|\operatorname{det} J_T(\mathbf{u})\right| \approx \operatorname{Vol}(\mathbf{dx}) / \operatorname{Vol}(\mathbf{du}),即 dx\mathbf{dx} 的体积除以 du\mathbf{du} 的体积。鉴于转换过程中总体概率质量并没有发生变化,即 dx\mathbf{dx} 中的概率质量必须等于 du\mathbf{du} 中的概率质量。所以,如果 du\mathbf{du} 被扩展了,则其映射结果 x\mathbf{x} 处的概率密度会小于 u\mathbf{u} 处的密度;相反,如果 du\mathbf{du} 被收缩了,则 x\mathbf{x} 处的密度会变大。

可逆和可微变换的一个重要特性是: 多个可微同胚变换可以组合,并且组合后可微和可逆的性质不变。也就是说,如果给定两个可逆且可微的变换 T1T_1T2T_2,则两者的组合 T2T1T_2 \circ T_1 也是可逆和可微的。组合的逆及其雅可比行列式由下式给出:

(T2T1)1=T11T21(5)\left(T_2 \circ T_1\right)^{-1} =T_1^{-1} \circ T_2^{-1} \tag{5}

detJT2T1(u)=detJT2(T1(u))detJT1(u)(6)\operatorname{det} J_{T_2 \circ T_1}(\mathbf{u}) =\operatorname{det} J_{T_2}\left(T_1(\mathbf{u})\right) \cdot \operatorname{det} J_{T_1}(\mathbf{u}) \tag{6}

这意味着,我们可以通过组合很多简单的变换来构建复杂变换,而且不会影响变换的可逆和可微性质。同时也意味着,我们具备通过密度 pu(u)p_\mathbf{u}(\mathbf{u}) 计算密度 px(x)p_\mathbf{x}(\mathbf{x}) 的能力。

在实际工作中,将多个变换 T1,,TKT_1, \ldots,T_K 链接在一起的情况是比较多见的,可以得到组合变换 T=TKT1T = T_K \circ \ldots\circ T_1,其中每个变换 TkT_kzk1\mathbf{z}_{k-1} 转换为 zk\mathbf{z}_{k}。此时如果假设 z0=u\mathbf{z}_0 = \mathbf{u}zK=x\mathbf{z}_K = \mathbf{x}, 则上述组合链就被视为一个 流(Flow) ,因此有如下对术语的解释:

  • 术语 『流』: 指来自 pu(u)p_{\mathbf{u}}(\mathbf{u}) 的样本集随着序列 T1,,TKT_1,\ldots,T_K 逐渐变换而走过的轨迹,这个轨迹就像液体流过了多个管道。
  • 术语 『归一化』: 指来自 px(x)p_\mathbf{x}(\mathbf{x}) 的样本集,经过逆向变换 TK1,,T11T^{-1}_K , \ldots, T^{-1}_1 后,最终能够被转换成简单密度的样本集 pu(u)p_{\mathbf{u}}(\mathbf{u}),由于通常该简单密度被定义为多元正态分布,因此该过程也可以被视为一种归一化过程。

图 1 说明了将标准正态密度转换为十字形目标密度的流 (K=4K = 4)。

四步的转换流示例

图 1:将样本从标准正态的基础密度转换为十字形目标密度的一个四步流示例。

在功能方面,流模型提供两种基本运算:

  • 通过 公式 1 从模型中采样,对应于生成过程;
  • 通过 公式 3 估计模型的密度,对应于推断过程。

这两个运算具有不同的计算要求:

  • 生成:需要从 pu(u)p_{\mathbf{u}}(\mathbf{u}) 中采样,并计算其正向变换 TT 后生成模型的新样本。如果基分布是一个(多元)标准正态分布,则意味着只需从(多元)标准正态分布中抽取一个样本,在经过 TT 变换后,就可以生成一个符合模型的新样本。
  • 推断:估计模型的密度需要计算逆变换 T1T^{-1} 及其雅可比行列式,并计算密度 pu(u)p_{\mathbf{u}}(\mathbf{u})。如果基分布目标被设定为一个(多元)标准正态分布,则主要估计的是逆变换 T1T^{-1} 及其雅可比行列式。

当然,具体需要由应用来规定需要实施哪些操作以及所需的效率。我们将在 第 3 节第 4 节 讨论与各种实现选择相关的计算权衡。

2.2 流模型的表达能力

在讨论流模型的细节之前,最重要的一个问题是:如果基分布被限制为简单分布,那么经过变换 TT 后,能否表示任何分布 px(x)p_\mathbf{x}(\mathbf{x}) 吗? 换句话说,就是流模型的表达能力到底如何?

答案: px(x)p_\mathbf{x}(\mathbf{x}) 满足某些条件时,流模型这种通用表示形式是可行的

条件: 累积密度 Pr(xixix<i)\operatorname{Pr}\left(\mathbf{x}_i^{\prime} \leq \mathbf{x}_i \mid \mathbf{x}_{<i}\right) 关于 (xi,x<i)\left(\mathbf{x}_i, \mathbf{x}_{<i}\right) 可微

相关证明

我们将证明:对于任何表现良好的分布 px(x)p_\mathbf{x}(\mathbf{x})(目标分布)和 pu(u)p_{\mathbf{u}}(\mathbf{u})(基分布),都存在能够将 pu(u)p_{\mathbf{u}}(\mathbf{u}) 转换为 px(x)p_\mathbf{x}(\mathbf{x}) 的可微同胚映射。本文的证明仅仅是建设性的,主要基于 Hyv ̈arinen and Pajunen (1999) 对非线性独立组分分析的类似证明,感兴趣者可以关注Bogachev 等(2005 年)提供的正式证明。

假设对于所有 xRD\mathbf{x} \in \mathbb{R}^D,有 px(x)>0p_{\mathbf{x}}(\mathbf{x})>0,并假设所有条件概率 Pr(xixix<i)\operatorname{Pr}\left(\mathbf{x}_i^{\prime} \leq \mathbf{x}_i \mid \mathbf{x}_{<i}\right) 关于 (xi,x<i)\left(\mathbf{x}_i, \mathbf{x}_{<i}\right) 可微,其中 xi\mathbf{x}_i^ {\prime} 是此概率所指的随机变量。使用概率的链式法则,可以将 px(x)p_{\mathbf{x}}(\mathbf{x}) 分解为条件密度的乘积,如下所示:

px(x)=i=1Dpx(xix<i)(7)p_{\mathbf{x}}(\mathbf{x})=\prod_{i=1}^D p_{\mathbf{x}}\left(\mathbf{x}_i \mid \mathbf{x}_{<i}\right) \tag{7}

由于 px(x)p_{\mathbf{x}}(\mathbf{x}) 处处不为零,对于所有 iix\mathbf{x} 都有 px(xix<i)>0p_{\mathbf{x}}\left(\mathbf{x}_i \mid \mathbf{x}_ {<i}\right)>0

接下来,定义变换 F:xz(0,1)DF:\mathbf{x} \mapsto \mathbf{z}\in(0,1)^D,其第 ii 个元素由第 ii 个条件分布的累积分布函数给出:

zi=Fi(xi,x<i)=xipx(xix<i)dxi=Pr(xixix<i)(8)\mathbf{z}_i=F_i\left(\mathbf{x}_i, \mathbf{x}_{<i}\right)=\int_{-\infty}^{\mathbf{x}_i} p_{\mathbf{x}}\left(\mathbf{x}_i^{\prime} \mid \mathbf{x}_{<i}\right) d \mathbf{x}_i^{\prime}=\operatorname{Pr}\left(\mathbf{x}_i^{\prime} \leq \mathbf{x}_i \mid \mathbf{x}_{<i}\right) \tag{8}

由于每个 FiF_i 关于其输入可微,因此 FF 关于 x\mathbf{x} 可微。此外,每个 Fi(,x<i):R(0,1)F_i\left(\cdot, \mathbf{x}_{<i}\right): \mathbb{R} \rightarrow(0,1) 是可逆的,因为其导数 Fixi=px(xix<i)\frac{\partial F_i}{\partial \mathbf{x}_i}=p_{\mathbf{x}}\left(\mathbf{x}_i \mid \mathbf{x}_{<i}\right) 处处为正。由于对于 i<ji<jzi\mathbf{z}_i 不依赖于 xj\mathbf{x}_j,这意味着我们可以求逆 FF,并逐个元素给出逆 F1F^{-1} 如下:

xi=(Fi(,x<i))1(zi) for i=1,,D(9)\mathbf{x}_i=\left(F_i\left(\cdot, \mathbf{x}_{<i}\right)\right)^{-1}\left(\mathbf{z}_i\right) \text { for } i=1, \ldots, D \tag{9}

FF 的雅可比行列式是下三角的,因为对于 i<ji<jFixj=0\frac{\partial F_i}{\partial \mathbf{x}_j}=0。所以 FF 的雅可比行列式等于其对角元素的乘积:

detJF(x)=i=1DFixi=i=1Dpx(xix<i)=px(x)(10)\operatorname{det} J_F(\mathbf{x})=\prod_{i=1}^D \frac{\partial F_i}{\partial \mathbf{x}_i}=\prod_{i=1}^D p_{\mathbf{x}}\left(\mathbf{x}_i \mid \mathbf{x}_{<i}\right)=p_{\mathbf{x}}(\mathbf{x}) \tag{10}

由于 px(x)>0p_{\mathbf{x}}(\mathbf{x})>0,雅可比行列式处处非零。因此,JF(x)J_F(\mathbf{x}) 的逆存在,并且等于 F1F^{-1} 的雅可比,所以 FF 是可微同胚映射。使用 变量变化,我们可以计算 z\mathbf{z} 的密度如下:

pz(z)=px(x)detJF(x)1=px(x)px(x)1=1(11)p_z(\mathbf{z})=p_{\mathbf{x}}(\mathbf{x})\left|\operatorname{det} J_F(\mathbf{x})\right|^{-1}=p_{\mathbf{x}}(\mathbf{x})\left|p_{\mathbf{x}}(\mathbf{x})\right|^{-1}=1 \tag{11}

这意味着 z\mathbf{z} 均匀分布在开单位立方体 (0,1)D(0,1)^D 中。

上述论证表明,即便我们将基分布限制为在 (0,1)D(0,1)^D 上的均匀分布,流模型也可以表达任何满足条件的分布 px(x)p_{\mathbf{x}}(\mathbf{x})。我们可以将此陈述扩展到任何基分布 pu(u)p_{\mathbf{u}}(\mathbf{u}), 而只需 px(x)p_{\mathbf{x}}(\mathbf{x}) 满足同样的条件。在证明上,只需增加一个将 u\mathbf{u} 映射到均匀 z(0,1)D\mathbf{z} \in(0,1)^D 的转换作为中间步骤即可。也就是,给定任何满足上述条件的 pu(u)p_{\mathbf{u}}(\mathbf{u}),将 GG 定义为以下变换:

zi=Gi(ui,u<i)=uipu(uiu<i)dui=Pr(uiuiu<i)(12)\mathbf{z}_i=G_i\left(\mathbf{u}_i, \mathbf{u}_{<i}\right)=\int_{-\infty}^{\mathbf{u}_i} p_{\mathbf{u}}\left(\mathbf{u}_i^{\prime} \mid \mathbf{u}_{<i}\right) d \mathbf{u}_i^{\prime}=\operatorname{Pr}\left(\mathbf{u}_i^{\prime} \leq \mathbf{u}_i \mid \mathbf{u}_{<i}\right)\tag{12}

其中 GG 也是可微同胚映射,而 z\mathbf{z} 服从 (0,1)D(0,1)^D 上的均匀分布。因此,具有变换 T=F1GT=F^{-1} \circ G 的流,能够将任意分布 pu(u)p_{\mathbf{u}}(\mathbf{u}) 转换为 px(x)p_{\mathbf{x}}(\mathbf{x})

2.3 流模型的训练

归一化流有两种常见的应用:

  • 第一个是给出可观测数据的密度估计,该应用需要将 pθ(x)p_{\boldsymbol{\theta}}(\boldsymbol{x}) 拟合到数据。拟合后的结果可以用于对数据的密度估计,此外,我们还可以从 pθ(x)p_{\boldsymbol{\theta}}(\boldsymbol{x}) 中生成新的数据。
  • 第二个是给出隐变量的密度估计(即变分推断),它涉及对变分分布 qθ(zx)q_{\boldsymbol{\theta}}(\boldsymbol{z} \mid \boldsymbol{x}) 进行估计和采样。

两种应用针对不同的目标函数做优化,并对流模型施加不同的计算约束。

2.3.1 密度估计

密度估计需要最大化 公式(2) 中的似然函数。这就要求对于任何给定的 x\boldsymbol{x},我们能够有效地评估逆向流 u=f1(x)\boldsymbol{u}=\boldsymbol{f}^{-1}(\boldsymbol{x}) 及其雅可比行列式 det(f1)(x)\operatorname{det} \left(\boldsymbol{f}^{-1}\right)(\boldsymbol{x})

对该模型完成优化后,可以选择使用它来生成新数据。为了能够生成新样本,要求前向映射 ff 可处理。

2.3.2 变分推断

归一化流通常用于变分推断,以对隐变量模型中的近似后验分布进行参数化表示。

考虑一个具有连续隐变量 z\boldsymbol{z} 和可观测变量 x\boldsymbol{x} 的隐变量模型。为了简单起见,假设模型参数固定,只关心变分参数。我们可以利用一个归一化流 qθ(zx)q_{\boldsymbol{\theta}}(\boldsymbol{z} \mid \boldsymbol{x}) 来近似后验的真实分布 p(zx)p^*(\boldsymbol{z} \mid \boldsymbol{x})。根据变分推断原理,变分参数 θ\boldsymbol{\theta} 可以通过最大化证据下界 ( ELBO\mathbb{ELBO} ) 来训练,由下式给出

L(θ)=Eqθ(zx)[logp(xz)+logp(z)logqθ(zx)]L(\boldsymbol{\theta})=\mathbb{E}_{q_{\boldsymbol{\theta}}(\boldsymbol{z} \mid \boldsymbol{x})}\left[\log p(\boldsymbol{x} \mid \boldsymbol{z})+\log p(\boldsymbol{z})-\log q_{\boldsymbol{\theta}}(\boldsymbol{z} \mid \boldsymbol{x})\right]

当将 ELBO\mathbb{ELBO} 被视为 θ\boldsymbol{\theta} 的函数时,可以将其简化如下(注意,为表达简单舍弃了对 x\boldsymbol{x} 的条件依赖):

L(θ)=Eqθ(z)[θ(z)].L(\boldsymbol{\theta})=\mathbb{E}_{q_{\boldsymbol{\theta}}(\boldsymbol{z})}\left[\ell_{\boldsymbol{\theta}}(\boldsymbol{z})\right] .

现在,令变分分布 qθ(z)q_{\boldsymbol{\theta}}(\boldsymbol{z}) 可以由归一化流来表示,即具有基分布 q(u)q(\boldsymbol{u}) 和变换 z=fθ(u)\boldsymbol{z}=f_{\boldsymbol{ \theta}}(\boldsymbol{u})。利用重参数化技巧,我们可以对上式进行改写,将关于变分分布的期望,改写为关于基分布的期望:

L(θ)=Eqθ(z)[θ(z)]=Eq(u)[θ(fθ(u))].L(\boldsymbol{\theta})=\mathbb{E}_{q_{\boldsymbol{\theta}}(\boldsymbol{z})}\left[\ell_{\boldsymbol{\theta}}(\boldsymbol{z})\right]=\mathbb{E}_{q(\boldsymbol{u})}\left[\ell_{\boldsymbol{\theta}}\left(f_{\boldsymbol{\theta}}(\boldsymbol{u})\right)\right] .

注意:基分布可以拥有自己的参数,也可以是指定的分布,并不依赖于变分参数 θ\boldsymbol{\theta},因此可以得到如下随机梯度:

θL(θ)=Eq(u)[θθ(fθ(u))]1Nn=1Nθθ(fθ(un)),\nabla_{\boldsymbol{\theta}} L(\boldsymbol{\theta})=\mathbb{E}_{q(\boldsymbol{u})}\left[\nabla_{\boldsymbol{\theta}} \ell_{\boldsymbol{\theta}}\left(f_{\boldsymbol{\theta}}(\boldsymbol{u})\right)\right] \approx \frac{1}{N} \sum_{n=1}^N \nabla_{\boldsymbol{\theta}} \ell_{\boldsymbol{\theta}}\left(f_{\boldsymbol{\theta}}\left(\boldsymbol{u}_n\right)\right),

其中 {un}n=1N\left\{\boldsymbol{u}_n\right\}_{n=1}^N 是来自基分布 q(u)q(\boldsymbol{u}) 的样本。上式表明,通过对简单的基分布采样,我们就可以通过蒙特卡洛积分得到梯度,并支撑随机梯度等优化算法。

2.4 概率视角

本节与上节讨论的问题本质上是一致,只是更概念化。其中前向 KL 散度对应于密度估计,后向 KL 散度对应于变分推断。

流模型的基本原理解释清楚后,我们可以发现:流模型的关键点在于得到基分布 pu(u)p_{\mathbf{u}}(\mathbf{u})、变换 TT ( 或其逆变换 T1T^{-1} )及其雅可比矩阵行列式;特别是,当基分布被设定为某个确定的简单分布(如标准正态分布)后,只需得到合理的变换 TT ( 或其逆变换 T1T^{-1} )及其雅可比矩阵行列式即可。

与拟合任何概率模型类似,如果希望将流模型 px(x;θ)p_{\mathbf{x}}(\mathbf{x}; \boldsymbol{\theta}) 拟合至真实的目标分布 px(x)p_{\mathbf{x}}^*(\mathbf{x}),可以通过最小化两者之间的某种散度度量(或其他差异的度量)来完成。而且,这种最小化是关于流模型参数 θ={ϕ,ψ}\boldsymbol{\theta}=\{\boldsymbol{\phi}, \boldsymbol{\psi}\} 的,其中 ϕ\boldsymbol{\phi} 是变换 TT 的参数、ψ\boldsymbol{\psi} 是基分布 pu(u)p_{\mathbf{u}}(\mathbf{u}) 的参数。

下面我们首先讨论一些用于拟合流模型的散度,特别关注 KL\mathbb{KL} 散度;然后在 第 3 节 和第 4 节, 讨论如何构造可参数化的变换 TT。当两者都具备后,就可以通过最优化方法获得 θ={ϕ,ψ}\boldsymbol{\theta}=\{\boldsymbol{\phi}, \boldsymbol{\psi}\} 的最优解。

2.4.1 前向 KL 散度和最大似然估计

目标分布 px(x)p_{\mathbf{x}}^*(\mathbf{x}) 和流模型 px(x;θ)p_{\mathbf{x}}(\mathbf{x};\boldsymbol{\theta}) 之间的前向 KL\mathbb{KL} 散度可以写成如下:

L(θ)=DKL[px(x)px(x;θ)]=Epx(x)[logpx(x;θ)]+ const. =Epx(x)[logpu(T1(x;ϕ);ψ)+logdetJT1(x;ϕ)]+ const. (13)\begin{aligned} \mathcal{L}(\boldsymbol{\theta}) &=D_{\mathrm{KL}}\left[p_{\mathbf{x}}^*(\mathbf{x}) \| p_{\mathbf{x}}(\mathbf{x} ; \boldsymbol{\theta})\right] \\ &=-\mathbb{E}_{p_{\mathbf{x}}^*(\mathbf{x})}\left[\log p_{\mathbf{x}}(\mathbf{x} ; \boldsymbol{\theta})\right]+\text { const. } \\ &=-\mathbb{E}_{p_{\mathbf{x}}^*(\mathbf{x})}\left[\log p_{\mathbf{u}}\left(T^{-1}(\mathbf{x} ; \boldsymbol{\phi}) ; \boldsymbol{\psi}\right)+\log \left|\operatorname{det} J_{T^{-1}}(\mathbf{x} ; \boldsymbol{\phi})\right|\right]+\text { const. } \end{aligned} \tag{13}

前向 KL\mathbb{KL} 散度非常 适用于有(目标分布)样本,但不一定要估计出目标分布 px(x)p_{\mathbf{x}}^*(\mathbf {x}) 的情况

假设我们有一组来自 px(x)p_{\mathbf{x}}^*(\mathbf{x}) 的样本 {xn}n=1N\left\{\mathbf{x}_n\right\}_{n=1}^N,根据 公式 13,可以利用蒙特卡洛方法计算 KL\mathbb{KL} 散度关于 px(x)p_{\mathbf{x}}^*(\mathbf{x}) 的期望:

L(θ)1Nn=1Nlogpu(T1(xn;ϕ);ψ)+logdetJT1(xn;ϕ)+ const. (14)\mathcal{L}(\boldsymbol{\theta}) \approx-\frac{1}{N} \sum_{n=1}^N \log p_{\mathbf{u}}\left(T^{-1}\left(\mathbf{x}_n ; \boldsymbol{\phi}\right) ; \boldsymbol{\psi}\right)+\log \left|\operatorname{det} J_{T^{-1}}\left(\mathbf{x}_n ; \boldsymbol{\phi}\right)\right|+\text { const. } \tag{14}

仔细观测会发现,最小化 公式 14KL\mathbb{KL} 散度,等效于通过最大似然估计将流模型拟合到样本 {xn}n=1N\left\{\mathbf{x}_n\right\}_{n=1}^N .

在实际工作中,为了适应大样本量的情形,我们经常使用随机梯度方法来迭代优化参数 θ\boldsymbol{\theta}。因此,可以继续推导 KL\mathbb{KL} 散度关于参数的梯度(无偏)估计:

ϕL(θ)1Nn=1Nϕlogpu(T1(xn;ϕ);ψ)+ϕlogdetJT1(xn;ϕ)(15)\nabla_{\boldsymbol{\phi}} \mathcal{L}(\boldsymbol{\theta}) \approx -\frac{1}{N} \sum_{n=1}^N \nabla_{\boldsymbol{\phi}} \log p_{\mathbf{u}}\left(T^{-1} \left(\mathbf{x}_n; \boldsymbol{\phi}\right); \boldsymbol{\psi}\right) + \nabla_{\boldsymbol{\phi}} \log | \text{det} J_{T^{-1}} (\mathbf{x}_n;\boldsymbol{\phi})| \tag{15}

ψL(θ)1Nn=1Nψlogpu(T1(xn;ϕ);ψ)(16)\nabla_{\boldsymbol{\psi}} \mathcal{L}(\boldsymbol{\theta}) \approx-\frac{1}{N} \sum_{n=1}^N \nabla_{\boldsymbol{\psi}} \log p_{\mathbf{u}}\left(T^{-1}\left(\mathbf{x}_n ; \boldsymbol{\phi}\right) ; \boldsymbol{\psi}\right) \tag{16}

如果 pu(u;ψ)p_{\mathbf{u}}(\mathbf{u};\boldsymbol{\psi}) 能够满足闭式解的最大似然估计(如多元高斯分布),则关于 ψ\boldsymbol{\psi} 的更新也可以通过封式解实现。

通过 公式 16 可以知道,如果采用基于梯度的优化方法来进行最大似然拟合,需要计算 T1T^{-1}T1T^{-1} 的雅可比行列式、密度 pu(u;ψ)p_{\mathbf{u}}(\mathbf{u}; \boldsymbol {\boldsymbol{\psi}}) 以及三者的微分。这意味着即使我们无法直接计算 TT 或从 pu(u;ψ)p_{\mathbf{u}}(\mathbf{u}; \boldsymbol{\psi}) 中采样,我们也可以采用最大似然进行流模型的训练。不过,如果想在模型拟合完成后使用其生成新样本,还是需要做这两种运算的。

前向 KL\mathbb{KL} 散度常用于密度估计,即只需要计算密度值,而不需要估计出真实分布 px(x)p_{\mathbf{x}}^*(\mathbf{x}) 的场景。

2.4.2 反向 KL 散度

或者,我们也可以考虑通过最小化反向 KL\mathbb{KL} 散度来拟合流模型,即采用如下目标函数:

L(θ)=DKL[px(x;θ)px(x)]=Epx(x;θ)[logpx(x;θ)logpx(x)]=Epu(u;ψ)[logpu(u;ψ)logdetJT(u;ϕ)logpx(T(u;ϕ))].(17)\begin{aligned} \mathcal{L}(\boldsymbol{\theta}) &=D_{\mathrm{KL}}\left[p_{\mathbf{x}}(\mathbf{x} ; \boldsymbol{\theta}) \| p_{\mathbf{x}}^*(\mathbf{x})\right] \\ &=\mathbb{E}_{p_{\mathbf{x}}(\mathbf{x} ; \boldsymbol{\theta})}\left[\log p_{\mathbf{x}}(\mathbf{x} ; \boldsymbol{\theta})-\log p_{\mathbf{x}}^*(\mathbf{x})\right] \\ &=\mathbb{E}_{p_{\mathbf{u}}(\mathbf{u} ; \boldsymbol{\psi})}\left[\log p_{\mathbf{u}}(\mathbf{u} ; \boldsymbol{\psi})-\log \left|\operatorname{det} J_T(\mathbf{u} ; \boldsymbol{\phi})\right|-\log p_{\mathbf{x}}^*(T(\mathbf{u} ; \boldsymbol{\phi}))\right] . \end{aligned} \tag{17}

此处需要关于 pu(u;ψ)p_{\mathbf{u}}(\mathbf{u}; \boldsymbol{\psi}) 求期望,与正向 KL\mathbb{KL} 散度不同,我们没有现成的样本,需要利用 变量变化 来表达关于 u\mathbf{u} 的期望。

反向 KL\mathbb{KL} 散度比较适合于 能够估计目标密度 px(x)p_{\mathbf{x}}^*(\mathbf{x}) 但不一定从中采样的情况。事实上,即便 px(x)p_{\mathbf{x}}^*(\mathbf{x}) 中存在归一化常数 CC,我们依然可以最小化上述 L(θ)\mathcal{L}(\boldsymbol{\theta})。因为在这种情况下,logC\log C 将是上述 L(θ)\mathcal{L}(\boldsymbol{\theta}) 表达式中的加法常数。假设 px(x)=p~x(x)/Cp_{\mathbf{x}}^*(\mathbf{x})=\widetilde{p}_{\mathbf{x}}(\mathbf{x}) / C,其中 p~x(x)\widetilde{p}_{\mathbf{x}}(\mathbf{x}) 是未归一化的分子项, C=p~x(x)dxC=\int \widetilde{p}_{\mathbf{x}}(\mathbf{x}) d \mathbf{x} 是棘手的分母项,反向 KL\mathbb{KL} 散度可以被重写为:

L(θ)=Epu(u;ψ)[logpu(u;ψ)logdetJT(u;ϕ)logp~x(T(u;ϕ))]+ const. \mathcal{L}(\boldsymbol{\theta})=\mathbb{E}_{p_{\mathbf{u}}(\mathbf{u} ; \boldsymbol{\psi})}\left[\log p_{\mathbf{u}}(\mathbf{u} ; \boldsymbol{\psi})-\log \left|\operatorname{det} J_T(\mathbf{u} ; \boldsymbol{\phi})\right|-\log \widetilde{p}_{\mathbf{x}}(T(\mathbf{u} ; \boldsymbol{\phi}))\right]+\text { const. }

在实际工作中,可以使用随机梯度方法迭代地最小化 L(θ)\mathcal{L}(\boldsymbol{\theta})

上式已经将关于变分分布的期望重参数化成关于基分布 pu(u;ψ)p_{\mathbf{u}}(\mathbf{u} ; \boldsymbol{\psi}) 的期望,可以很容易地通过蒙特卡洛获得 L(θ)\mathcal{L}(\boldsymbol{\theta}) 关于变换参数 ϕ\boldsymbol{\phi} 的梯度估计。特别是,令 {un}n=1N\left\{\mathbf{u}_n\right\}_{n=1}^N 是一组来自 pu(u;ψ)p_{\mathbf{u}}(\mathbf{u};\boldsymbol{\psi}) 的样本(固定基分布参数 ψ\psi 即可获得样本),L(θ)\mathcal{L}(\boldsymbol{\theta}) 相对于 ϕ\boldsymbol{\phi} 的梯度可以估计如下:

ϕL(θ)1Nn=1NϕlogdetJT(un;ϕ)+ϕlogp~x(T(un;ϕ))(19)\nabla_{\boldsymbol{\phi}} \mathcal{L}(\boldsymbol{\theta}) \approx-\frac{1}{N} \sum_{n=1}^N \nabla_{\boldsymbol{\phi}} \log \left|\operatorname{det} J_T\left(\mathbf{u}_n ; \boldsymbol{\phi}\right)\right|+\nabla_{\boldsymbol{\phi}} \log \widetilde{p}_{\mathbf{x}}\left(T\left(\mathbf{u}_n ; \boldsymbol{\phi}\right)\right) \tag{19}

类似地,可以利用 u\mathbf{u} 的如下重参数化形式,得到关于 ψ\boldsymbol{\psi} 的梯度估计:

u=T(u;ψ) where upu(u)(20)\mathbf{u}=T^{\prime}\left(\mathbf{u}^{\prime} ; \boldsymbol{\psi}\right) \quad \text { where } \quad \mathbf{u}^{\prime} \sim p_{\mathbf{u}^{\prime}}\left(\mathbf{u}^{\prime}\right) \tag{20}

其中, pu(u)p_{\mathbf{u}^{\prime}}\left(\mathbf{u}^{\prime}\right) 表示上一次迭代得到的基分布参数。但由于可以等效地将重参数化形式 TT^{\prime} 合并到 TT 中,并将基分布替换为 pu(u)p_{\mathbf{u}^{\prime}}\left(\mathbf{u}^ {\prime}\right),因此不失一般性地,我们可以假设参数 ψ\boldsymbol{\psi} 是固定值,仅针对 ϕ\boldsymbol{\phi} 进行优化即可。

为了最小化如上反向 KL\mathbb{KL} 散度,需要能够从基分布 pu(u;ψ)p_{\mathbf{u}}(\mathbf{u}; \boldsymbol{\psi}) 中采样,并且计算变换 TT 、雅可比行列式,以及通过两者的微分。这意味着:即便无法计算基分布或计算逆变换 T1T^{-1},我们也可以通过最小化反向 KL\mathbb{KL} 散度来拟合一个流模型。但如果想估计已训练模型的密度,则还是需要这些运算的。

反向 KL\mathbb{KL} 散度通常用于变分推断(Wainwright 和 Jordan,2008;Blei 等,2017),以获得变分分布的具体形式。在场景中,目标分布通常是隐变量的贝叶斯后验,因此 p~x(x)\widetilde{p}_{\mathbf{x}}(\mathbf{x}) 代表了似然函数和先验密度之积。

2.4.3 前后向 KL 散度的关系

流模型的另一种观点是将目标 px(x)p_{\mathbf{x}}^*(\mathbf{x}) 视为基分布,将逆向流视为导出了一个分布 pu(u;ϕ)p_{\mathbf{u}}^*(\mathbf{u}; \boldsymbol{\phi})

直观来看,pu(u;ϕ)p_{\mathbf{u}}^*(\mathbf{u}; \boldsymbol{\phi}) 是训练数据通过变换 T1T^{-1} 后服从的分布。根据流模型的定义,在给定变换时,目标分布和基分布之间唯一地确定了彼此,因此有 pu(u;ϕ)=pu(u;ψ)p_{\mathbf{u}}^*(\mathbf{u};\boldsymbol{\phi}) = p_{\mathrm{u}}(\mathbf{u};\boldsymbol{\psi}) 当且仅当 px(x)=px(x;θ)p_{\mathbf{x}}^*(\mathbf{x})=p_{\mathbf{x}}( \mathbf {x} ; \boldsymbol{\theta})。也就是说,将模型 px(x;θ)p_{\mathbf{x}}(\mathbf{x}; \boldsymbol{\theta}) 拟合到目标 px(x)p_{\mathbf{x}}^*(\mathbf{x}) ,可以等效地认为是拟合导出的分布 pu(u;ϕ)p_{\mathbf{u}}^*(\mathbf{u};\boldsymbol{\phi}) 至基分布 pu(u;ψ)p_{\mathbf{u}} (\mathbf{u};\boldsymbol{\psi})

现在有人可能会问:将 px(x;θ)p_{\mathbf{x}}(\mathbf{x}; \boldsymbol{\theta}) 拟合到目标分布 px(x;θ)p_{\mathbf{x}}^*(\mathbf{x}; \boldsymbol{\theta}) ,与将 pu(u;ϕ)p_{\mathbf{u}}^*( \mathbf{u} ; \boldsymbol{\phi}) 拟合至基分布 pu(u;ϕ)p_{\mathbf{u}}( \mathbf{u} ; \boldsymbol{\phi}) 之间到底有何不同?

我们的结论是:通过反向 KL\mathrm{KL} 散度并采用最大似然法将模型拟合到目标分布,等效于通过前向 KL\mathbb{KL} 散度并采用最大似然法将 pu(u;ϕ)p_{\mathbf{u}}^*(\mathbf{u}; \boldsymbol{\phi}) 拟合到基分布。

相关证明

使用 变量变化(详见 A 节),我们可以证明以下等式(Papamakarios 等, 2017):

DKL[px(x)px(x;θ)]=DKL[pu(u;ϕ)pu(u;ψ)](21)D_{\mathrm{KL}}\left[p_{\mathbf{x}}^*(\mathbf{x}) \| p_{\mathbf{x}}(\mathbf{x} ; \boldsymbol{\theta})\right]=D_{\mathrm{KL}}\left[p_{\mathbf{u}}^*(\mathbf{u} ; \boldsymbol{\phi}) \| p_{\mathbf{u}}(\mathbf{u} ; \boldsymbol{\psi})\right] \tag{21}

上述等式意味着:使用前向 KL\mathbb{KL} 散度将模型拟合到目标分布,等价于在反向 KL\mathrm{KL} 散度下将引入的分布 pu(u;ϕ)p_{\mathbf{u}}^*(\mathbf{u} ; \boldsymbol{\boldsymbol{\phi} }) 拟合到基分布 pu(u;ψ)p_{\mathbf{u}}(\mathbf{u} ; \boldsymbol{\psi}) 。在 A 节中,我们还表明:

DKL[px(x;θ)px(x)]=DKL[pu(u;ψ)pu(u;ϕ)](22)D_{\mathrm{KL}}\left[p_{\mathbf{x}}(\mathbf{x} ; \boldsymbol{\theta}) \| p_{\mathbf{x}}^*(\mathbf{x})\right]=D_{\mathrm{KL}}\left[p_{\mathbf{u}}(\mathbf{u} ; \boldsymbol{\psi}) \| p_{\mathbf{u}}^*(\mathbf{u} ; \boldsymbol{\phi})\right]\tag{22}

这意味着通过反向 KL\mathrm{KL} 散度将模型拟合到目标分布,等效于通过前向 KL\mathbb{KL} 散度将 pu(u;ϕ)p_{\mathbf{u}}^*(\mathbf{u}; \boldsymbol{\phi}) 拟合到基分布。

2.3.4 其他散度

学习流模型的参数不限于使用 KL\mathbb{KL} 散度。很多能够测量分布之间差异的度量手段都是可用的。这些替代方案通常分为两个系列:使用密度比进行比较的 f-散度 和使用差异进行比较的 积分概率度量 (IPM)

f-divergence:Df[px(x)px(x;θ)]=Epx(x;θ)[f(px(x)px(x;θ))](23)\text{f-divergence}: \quad D_f\left[p_{\mathbf{x}}^*(\mathbf{x}) \| p_{\mathbf{x}}(\mathbf{x} ; \boldsymbol{\theta})\right]=\mathbb{E}_{p_{\mathbf{x}}(\mathbf{x} ; \boldsymbol{\theta})}\left[f\left(\frac{p_{\mathbf{x}}^*(\mathbf{x})}{p_{\mathbf{x}}(\mathbf{x} ; \boldsymbol{\theta})}\right)\right]\tag{23}

IPM:δs[px(x)px(x;θ)]=Epx(x)[s(x)]Epx(x;θ)[s(x)](24)\text{IPM}: \delta_s\left[p_{\mathbf{x}}^*(\mathbf{x}) \| p_{\mathbf{x}}(\mathbf{x} ; \boldsymbol{\theta})\right]=\mathbb{E}_{p_{\mathbf{x}}^*(\mathbf{x})}[s(\mathbf{x})]-\mathbb{E}_{p_{\mathbf{x}}(\mathbf{x} ; \boldsymbol{\theta})}[s(\mathbf{x})]\tag{24}

对于 f-散度,函数 ff 是凸的;当 f(z)=zlogzf(z) = z \log z 时,等效于 KL\mathbb{KL} 散度。

对于 IPM,函数 ss 可以从一组测试统计量中选择,或者是通过对抗性选择后的鉴别函数。

之前对于 KL\mathbb{KL} 散度的考虑也同样适用于此。在选择散度度量时需要考虑:

  • 能否从模型 px(x;θ)p_{\mathbf{x}}(\mathbf{x};\boldsymbol{\theta}) 进行模拟?
  • 我们是否知道最终达到乘法常数的真实分布?
  • 我们是否可以访问变换及其逆?

在考虑这些散度时,我们可以看到流模型(其设计原则是使用 变换组合变量变化)与更一般的隐式概率模型之间的联系(Diggle 和 Gratton,1984;Mohamed 和 Lakshminarayanan,2016)。如果选择生成对抗网络的生成器作为归一化流,则可以使用 Wasserstein 损失(Arjovsky 等,2017)来进行对抗训练(Grover 等,2018;Danihelka 等,2017)以获取流参数。

2.5 简要历史概述

白化变换(Johnson,1966;Friedman,1987)(即将数据转化为白噪声)是在机器学习中使用归一化流的最明显的智力前身。 Chen 和 Gopinath (2000) 可能是第一个使用白化作为密度估计技术而不是特征预处理技术的人,称为高斯化方法。 Tabak 和 Vanden-Eijnden (2010) 从扩散过程角度探讨了高斯化,将其与统计力学联系起来,特别是采用 Liouville 方程 来表征流。在后续论文中,Tabak 和 Turner (2013) 介绍了可以被认为是归一化流的现代概念:引入术语 归一化流 并将流定义为 KK 个简单映射的组合。正如我们将在 第 3 节 中讨论的那样,这个通过组合的定义对于使流具有表达性、同时保持计算分析易处理性是必不可少的。

从 Rippel 和 Adams (2013) 开始,组合想法出现在机器学习中,他们可能是第一个认识到使用深度神经网络对流进行参数化可以产生非常普遍和富有表现力的分布类型的人。Dinh 等(2015 年)随后引入了可扩展且计算效率高的架构,展示了在图像建模和推断方面的进步。 Rezende 和 Mohamed (2015) 使用 Tabak 和 Turner (2013) 的思想和语言,在变分推断设置中应用了归一化流。在此之后,归一化流本身就形成了广泛的文献资料,大量的工作扩大了其适用性和可扩展性。

由于与 变量变化 之间存在联系,我们还可以将机器学习中的归一化流应用与之前的相关历史研究结合起来。在统计力学的发展过程中,人们对测度的变化进行了深入研究,一个著名的例子是前面提到的 Liouville 定理(1838 年)。 Copulas (Sklar, 1959; Elidan, 2013) 可以被视为尚不太成熟的初步流,其中每个维度都使用经验估计的边缘累积分布函数做独立变换。

优化传输和 Wasserstein 度量 (Villani, 2008) 也可以依据测量的变换来表述,也被称为 Monge 问题。特别是,三角图(与自回归流密切相关的概念)可以被证明是一类 Monge-Kantorovich 问题 的受限解决方案(Carlier 等,2010 年)。此类三角映射本身具有悠久的历史,Rosenblatt (1952) 研究了它们在超立方体上均匀变换多元分布的性质。优化传输本身就可以构成一个教程,因此本文大多回避这个框架,而是选择根据 变量变化 来思考。

流过程

图 2:由 K 个变换组成的流。

3 构建流:有限组合

3.1 概述

在描述了流的一些高级性质和使用场景之后,我们回归到如何描述、分类和构建流。如 第 2.1 节 所述,归一化流是可组合的;也就是说,我们可以通过组合有限数量的简单变换 TkT_k 来构造全局变换 TT 的流,如下所示:

T=TKTK1T1(25)T = T_K \circ T_{K-1}\circ \dots T_1 \tag{25}

这个想法使用简单变换作为构建块( 每个块都有一个易于处理的逆和雅可比行列式) 来定义一个复杂的变换,实现比任何组分都强的表达能力。重要的是,流的正向和反向估值以及雅可比行列式计算可以局部化到子流中实现。如 图 2 所示,假设 z0=u\mathbf{z}_0 = \mathbf{u}zK=x\mathbf{z}_K = \mathbf{x},前向估值为:

zk=Tk(zk1) for k=1,,K(26)\mathbf{z}_k=T_k\left(\mathbf{z}_{k-1}\right) \text { for } k=1, \ldots, K \tag{26}

逆向估值为:

zk1=Tk1(zk) for k=K,(27)\mathbf{z}_{k-1}=T_k^{-1}\left(\mathbf{z}_k\right) \quad \text { for } k=K, \ldots \tag{27}

雅可比行列式绝对值的对数域计算公式为:

logdetJT(z0)=logk=1KdetJTk(zk1)=k=1KlogdetJTk(zk1)(28)\log \left|\operatorname{det} J_T\left(\mathbf{z}_0\right)\right|=\log \left|\prod_{k=1}^K \operatorname{det} J_{T_k}\left(\mathbf{z}_{k-1}\right)\right|=\sum_{k=1}^K \log \left|\operatorname{det} J_{T_k}\left(\mathbf{z}_{k-1}\right)\right| \tag{28}

增加转换的 “深度” KK(即子流的数量),会导致计算复杂度增加到 O(K)O(K),不过以此作为增强表达能力的代价还是可以接受的。

在实际工作中,我们使用具有参数 ϕk\boldsymbol{\phi}_k 的模型(如神经网络)来实现变换 TkT_kTk1T^{-1}_k,我们将该神经网络表示为 fϕkf_{\boldsymbol{\phi}_k}。也就是说,可以使用模型 fϕkf_{\boldsymbol{\phi}_k} 来实现转换 TkT_k。此时,它将输入 zk1z_{k-1} 并输出 zkz_k,或者逆向实现 Tk1T^{-1}_k,输入 zkz_k 输出 zk1z_{k-1}。在任何一种情况下,都必须确保模型可逆且具有易处理的雅可比行列式。

在本节剩余部分,我们将描述几种能够满足这些要求的变换 fϕkf_{\boldsymbol{\phi}_k} 的构造方法。本节讨论的所有方法概览见 表 1

流模型对转换算子的要求

构建有效的流,需要开发一些中间的转换层,而且需要满足以下特性:

  • 表达能力足够强
  • 可逆且可微
  • 雅可比行列式的计算代价低

例如

常见的转换

有限组合涉及的变换算子总揽

基于有限组合方法来构建流模型的主要方法

这里需要做几点解释:

(1)关于 “确保 fϕkf_{\boldsymbol{\phi}_k} 可逆”

确保 fϕkf_{\boldsymbol{\phi}_k} 可逆,与可显式计算其逆不是同义词。在许多实现中,即使 fϕkf_{\boldsymbol{\phi}_k} 的逆保证存在,但精确计算代价很大,甚至无法计算。如第 2 节 所述,在采样时使用正向变换 TT,在计算密度时使用逆变换 T1T^{-1}。如果 fϕkf_{\boldsymbol{\phi}_k} 的逆不是有效的,则密度估计或采样将非常低效,甚至难以处理,这取决于 fϕkf_{\boldsymbol{\phi}_k} 是实现 TkT_k 还是 Tk1T^{-1}_kfϕkf_{\boldsymbol{\phi}_k} 是否应该设计成具有有效逆,以及是否应该实现 TkT_k 还是 Tk1T^{-1}_k 应该基于预期用途做决定。

(2)关于 “易处理的雅可比行列式”

“易处理的雅可比行列式” 是什么意思?通过正向或反向的 DD 次自动微分,我们总是可以计算可微函数的雅可比矩阵(具有 DD 个输入和 DD 个输出),进而显式计算出雅可比行列式。但这种计算的时间成本为 O(D3)\mathcal{O}(D^3),当 DD 较大时,这难以处理。对于流模型的大多数应用,雅可比行列式计算最好为 O(D)\mathcal{O}(D)。因此,在接下来的部分中,我们会重点关注那些允许在线性时间内计算雅可比行列式的变换。

为了简化符号,我们在后面的符号中将省略 kk ,并用 fϕf_{\boldsymbol{\phi}} 表示模型。此外,我们将用 z\mathbf{z} 表示模型每一层的输入,用 z\mathbf{z}^\prime 表示其输出,无论模型是实现正向流 TkT_k 还是实现逆向流 Tk1T^{-1}_k

3.2 自回归流

自回归流是最早开发的流之一,并且也是最受欢迎的流之一。在 第 2.2 节 中,我们看到,在温和条件下,可以使用具有三角形状雅可比行列式的映射,将任何分布 px(x)p_{\mathrm{x}}(\mathbf{x}) 转换为 (0,1)D(0,1)^D 中的均匀分布。自回归流是这种构造的直接实现,变换 fϕf_\phi 具有以下形式(如 Huang 等, 2017; Jaini 等, 2019 所述):

zi=τ(zi;hi) where hi=ci(z<i)z_i^{\prime}=\tau\left(z_i ; \boldsymbol{h}_i\right) \quad \text { where } \quad \boldsymbol{h}_i=c_i\left(\mathbf{z}_{<i}\right)

其中, ii 为维度索引,τ\tau 被称为变换器( transformer ),cic_i 为第 ii 个调节器( conditioner ),见 图 3a

  • 变换器ziz_i 的严格单调函数(因此可逆),指定流如何作用于 ziz_i 以产出 ziz_i^{\prime},,并由 hi\boldsymbol{h}_i 参数化。
  • 调节器:用于确定变换器的参数 hi\boldsymbol{h}_i,进而改变变换器的行为。调节器不需要满足双射条件,但要求第 ii 个调节器的输入只能是维度索引小于 ii 的变量。

按着这种结构,映射 fϕf_\phi 的参数 ϕ\phi 其实转变成了调节器的参数(为了符号简单,上式并没有显示),但有些变换器自身也会有除了 hi\boldsymbol{h}_i 之外参数)。

图 4: 自回归流及其逆向流

图 3:一个自回归流的第 i 步(维)。

只要变换器可逆,很容易检查上述结构对于任何 τ\taucic_i 都可逆。给定 z\mathbf{z}^{\prime},我们也可以迭代计算 z\mathbf{z} 如下:

zi=τ1(zi;hi) where hi=ci(z<i)z_i=\tau^{-1}\left(z_i^{\prime} ; \boldsymbol{h}_i\right) \quad \text { where } \quad \boldsymbol{h}_i=c_i\left(\mathbf{z}_{<i}\right)

这在 图 3b 中进行了展示。在前向计算中,每个 hi\boldsymbol{h}_i 以及每个 ziz_i^{\prime} 都可以独立地顺序或并行计算。但在反向计算中,所有的 z<i\mathbf{z}_{<i} 都需要在 ziz_i 之前被计算出来,只有这样 z<i\mathbf{z}_{<i} 才能被用于计算 hi\boldsymbol{h}_i 的调节器,也就是说,反向计算只能顺序的进行。

很容易证明: 上述变换的雅可比行列式是三角形,因此雅可比行列式易处理。由于每个 ziz_i^{\prime} 并不依赖于 z>i\mathbf{z}_{>i},对于任意 j>ij>iziz_i^{\prime} 关于 zjz_j 的偏微分为零。因此,fϕf_\phi 的雅可比可以写为以下形式:

Jfϕ(z)=[τz1(z1;h1)0L(z)τzD(zD;hD)].J_{f_\phi}(\mathbf{z})=\left[\begin{array}{ccc} \frac{\partial \tau}{\partial z_1}\left(z_1 ; \boldsymbol{h}_1\right) & & \mathbf{0} \\ & \ddots & \\ \mathbf{L}(\mathbf{z}) & & \frac{\partial \tau}{\partial z_D}\left(z_D ; \boldsymbol{h}_D\right) \end{array}\right] .

该雅可比是一个下三角矩阵,其对角元素是变换器关于 z\mathbf{z}DD 个元素的导数。由于三角矩阵的行列式等于其对角元素的乘积,Jfϕ(z)J_{f_\phi}(\mathbf{z}) 的行列式的对数绝对值,可以用 O(D)\mathcal{O}( D) 时间得到:

logdetJfϕ(z)=logi=1Dτzi(zi;hi)=i=1Dlogτzi(zi;hi)\log \left|\operatorname{det} J_{f_\phi}(\mathbf{z})\right|=\log \left|\prod_{i=1}^D \frac{\partial \tau}{\partial z_i}\left(z_i ; \boldsymbol{h}_i\right)\right|=\sum_{i=1}^D \log \left|\frac{\partial \tau}{\partial z_i}\left(z_i ; \boldsymbol{h}_i\right)\right|

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

自回归流是一种万能近似器( 在第 2.2 节讨论的条件下),只要变换器和调节器足够灵活,就可以任意好地表示任何函数。这源于以下事实: 第 2.2 节 中基于累积分布函数的万能变换事实上就是一个自回归流。当然,这只是一个关于表征能力的陈述,并不能保证流的实际行为。

自回归流的另一种在数学上等效的公式,是让调节器 cic_i 采用 z<i\mathbf{z}_{<i}^{\prime} 而不是 z<i\mathbf{z}_{<i}。这等效于在上述公式中将 τ\tauτ1\tau^{-1}z\mathbf{z}z\mathbf{z}^{\prime} 进行互换。这两种方式在文献中很常见;为了不失一般性,这里我们使用 cic_i 来自 z<i\mathbf{z}_{<i} 的约定。两种不同方案之间的计算差异在 Kingma 等 (2016); Papamakarios 等 (2017) 中有更详细地讨论。

自回归流的实现最终归结为两步:(a)实现变换器 τ\tau (b)实现调节器 cic_i

变换器和调节器都是独立选择的:任何类型的变换器都可以与任何类型的调节器配对,从而产生文献中出现的各种组合。在接下来的段落中,我们将列出一些变换器实现(第 3.2.1 节)和一些调节器实现(第 3.2.2 节)。我们将讨论它们的优缺点,并指出文献中特定模型的选择。

3.2.1 变换器的实现

(1)仿射变换器

变换器最简单的选择之一是仿射函数类:

τ(zi;hi)=αizi+βi where hi={αi,βi}.\tau\left(\mathrm{z}_i ; \boldsymbol{h}_i\right)=\alpha_i \mathrm{z}_i+\beta_i \quad \text { where } \quad \boldsymbol{h}_i=\left\{\alpha_i, \beta_i\right\} .

以上可以认为是 位置-尺度 变换,其中 αi\alpha_i 控制尺度,βi\beta_i 控制位置。如果 αi0\alpha_i \neq 0 则保证可逆性,这可以通过(例如)取 αi=expα~i\alpha_i=\exp \tilde{\alpha}_i 来实现,其中 α~i\tilde{\alpha}_i 是一个不受约束的参数(在这种情况下 hi={α~i,βi}\boldsymbol{h}_i=\left \{ \tilde{\alpha}_i, \beta_i\right\} )。变换器对 zi\mathrm{z}_i 的导数等于 αi\alpha_i;因此雅可比行列式的对数绝对值是:

logdetJfϕ(z)=i=1Dlogαi=i=1Dα~i.\log \left|\operatorname{det} J_{f_\phi}(\mathbf{z})\right|=\sum_{i=1}^D \log \left|\alpha_i\right|=\sum_{i=1}^D \tilde{\alpha}_i .

具有仿射变换器的自回归流因其简单性和分析易处理性而具有吸引力,但其表达能力有限。为了说明原因,假设 z\mathbf{z} 服从高斯分布;那么,每个以 z<i\mathbf{z}_{<i}^{\prime} 为条件的 zi\mathrm{z}_i^{\prime} 也将遵循高斯分布。换句话说,多元高斯的单个仿射自回归变换产生的分布,其条件分布 pz(ziz<i)p_{z^{\prime}}\left(\mathrm{z}_i^{\prime} \mid \mathbf{z} _{<i}^{\prime}\right) 必然是高斯分布。尽管表达能力有限,但仍然可以通过堆叠多个仿射自回归层来获得具有表现力的流,但尚不知道多个仿射自回归流的堆叠是否是万能近似器。

仿射变换器在文献中很受欢迎,广泛应用于 NICE (Dinh 等, 2015)、RealNVP (Dinh 等, 2017)、IAF (Kingma 等, 2016)、MAF (Papamakarios 等, 2017) 和 Glow(Kingma 和 Dhariwal,2018)等模型中。

(2)组合变换器

非仿射变换器可以由简单的组件构成,根据观察,单调函数的锥形组合和函数合成也是单调的。即给定实变量 z\mathrm{z} 的单调函数 τ1τK\tau_1、\ldots、\tau_K,以下函数也是单调的:

  • 锥形组合:τ(z)=k=1Kwkτk(z)\tau(\mathrm{z})=\sum_{k=1}^K w_k \tau_k(\mathrm{z}),其中对于所有 kkwk>0w_k>0
  • 函数合成:τ(z)=τKτ1(z)\tau(\mathrm{z})=\tau_K \circ \cdots \circ \tau_1(\mathrm{z})。的:

例如,可以使用单调递增的激活函数 σ()\sigma(\cdot) (如 logistic sigmoidtanhleakyReLU 等 )构成非仿射变换器:

τ(zi;hi)=wi0+k=1Kwikσ(αikzi+βik) where hi={wi0,,wiK,αik,βik},\tau\left(\mathrm{z}_i ; \boldsymbol{h}_i\right)=w_{i 0}+\sum_{k=1}^K w_{i k} \sigma\left(\alpha_{i k} \mathrm{z}_i+\beta_{i k}\right) \quad \text { where } \quad \boldsymbol{h}_i=\left\{w_{i 0}, \ldots, w_{i K}, \alpha_{i k}, \beta_{i k}\right\},

其中为所有 k1k \geq 1 提供了 αik>0\alpha_{ik}>0wik>0w_{ik}>0。显然,上述结构对应于单调的单层感知器。通过反复组合和合成单调的激活函数,我们可以构造一个单调的多层感知器,前提是其所有权重都是严格为正。

像上面这样的变换器可以任意好地表示任何单调函数,这直接源于多层感知器的通用逼近能力(参见 Huang 等,2018 )。此类变换器的雅可比行列式,原则上可以通过解析方式获得,但在神经网络中更多通过反向传播计算。

基于组合的变换器存在一个缺点:其逆无法解析获得,且只能通过迭代法(如二分搜索)求逆(Burden 和 Faires,1989)。基于组合的变换器的变体已被用于 NAF(Huang 等,2018 年)、block-NAF(De Cao 等,2019 年)和 Flow++(Ho 等,2019 年)等模型中。

(3)积分变换器

定义非仿射变换器的另一种方法是利用基本原理:正函数的积分是单调递增函数。

例如,Wehenkel 和 Louppe (2019) 将变换器定义为:

τ(zi;hi)=0zig(z;αi)dz+βiwherehi={αi,βi},\tau\left(\mathrm{z}_i ; \boldsymbol{h}_i\right)=\int_0^{\mathrm{z}_i} g\left(\mathrm{z} ; \boldsymbol{\alpha}_i\right) d \mathrm{z}+\beta_i \quad \text{where} \quad \boldsymbol{h}_i=\left\{\boldsymbol{\alpha}_i, \beta_i\right\},

其中 g(;αi)g\left(\cdot ; \boldsymbol{\alpha}_i\right) 可以是任何由 αi\boldsymbol{\alpha}_i 参数化的正值神经网络。通常 g(;αi)g\left(\cdot ; \boldsymbol{\alpha}_i\right) 除了 αi\boldsymbol{\alpha}_i 之外还有它自己的参数。计算雅可比行列式所需的导数可以简单地等于 g(zi;αi)g\left(\mathrm{z}_i ; \boldsymbol{\alpha}_i\right)。此方法可以产生任意灵活的变换器,但积分计算缺乏解析的易处理性,可能只能求助于数值近似。

将被积函数 g(;αi)g\left(\cdot ; \boldsymbol{\alpha}_i\right) 取为度为 2L2L 的正多项式,可以得到一个解析易处理的基于积分的变换器。其积分为 zi\mathrm{z}_i 的度为 2L+12L+1 的多项式。由于每个度为 2L2L 的正多项式都可以写成度为 LL 的多项式的 22 个(或更多个)平方和(Marshall, 2008, Proposition 1.1.2),因此可以定义一个 平方和多项式变换器(Jaini 等,2019):

τ(zi;hi)=0zik=1K(=0Lαikz)2dz+βi,\tau\left(\mathrm{z}_i ; \boldsymbol{h}_i\right)=\int_0^{\mathrm{z}_i} \sum_{k=1}^K\left(\sum_{\ell=0}^L \alpha_{i k \ell} \mathrm{z}^{\ell}\right)^2 d \mathrm{z}+\beta_i,

其中 hi\boldsymbol{h}_i 包括 βi\beta_i 和所有多项式系数 αik\alpha_{i k \ell} ,并且 K2K \geq 2。平方和多项式变换器的一个很好的特性是:系数 αik\alpha_{ik \ell} 不受约束。此外,仿射变换器可以被视为 L=0L=0 时的特例:

0zik=1K(αik0z0)2dz+βi=(k=1Kαik02)z0zi+βi=αizi+βi,\int_0^{\mathrm{z}_i} \sum_{k=1}^K\left(\alpha_{i k 0} \mathrm{z}^0\right)^2 d \mathrm{z}+\beta_i=\left.\left(\sum_{k=1}^K \alpha_{i k 0}^2\right) \mathrm{z}\right|_0 ^{\mathrm{z}_i}+\beta_i=\alpha_i \mathrm{z}_i+\beta_i,

其中αi=k=1Kαik02\alpha_i=\sum_{k=1}^K\alpha_{i k 0}^2。可以证明,对于足够大的 LL,平方和多项式变换器可以任意逼近任何单调递增函数(Jaini 等,2019,定理 3)。尽管如此,由于只能解析求解最多度为 44 次的多项式,所以对于 L2L \geq 2,平方和多项式变换器在解析上不可逆,并且只能使用例如二分搜索的迭代求逆(Burden 和 Faires,1989 年)。

(4)样条变换器

到目前为止,我们已经讨论了若干非仿射变换器,它们具有任意的灵活性,但缺点也很明显,即没有解析的逆。

克服此限制的一种方法是将变换器实现为单调样条,即由 KK 段组成分段函数,其中每个段都是易于求逆的简单函数。具体来说,给定一组 K+1K+1 个输入位置 zi0,,ziK\mathrm{z}_{i 0}, \ldots, \mathrm{z}_{i K},在 KK 段的端点位于 zi1,,zi(K1)\mathrm{z}_{i 1}, \ldots, \mathbf{z}_{i(K-1)} 处的约束下,变换器 τ(zi;hi)\tau\left( \mathrm{z}_i;\boldsymbol{h}_i\right) 被认为是每个区间 [zi(k1),zik]\left[ \mathrm{z}_{i (k-1)}, \mathrm{z}_{i k} \right] 中的简单单调函数(如低次多项式)。在区间 [zi0,ziK]\left[\mathrm{z}_{i 0}, \mathrm{z}_{i K}\right] 之外,变换器可以默认为一个简单的函数,如恒等式。通常,变换器的参数 hi\boldsymbol{h}_i 是输入位置 zi0,,ziK\mathrm{z}_{i 0},\ldots,\mathrm{z}_{i K}、对应的输出位置 zi0,,ziK\mathrm{z}_{i 0}^{\prime}, \ldots,\mathrm{z}_{i K}^{\prime}、以及在 zi0,,ziK\mathrm{z}_{i 0}, \ldots, \mathrm{z}_{i K} 处的导数(即斜率)。参见 图 4 中的说明。

基于样条的变换器之间的区别在于:它们会使用不同的样条类型,即段的功能形式。到目前为止,为了提高灵活性,已经探索了以下选项:

  • 线性和二次样条(Müller 等,2019)
  • 三次样条(Durkan 等,2019a)
  • 线性有理样条(Dolatabadi 等,2020)
  • 有理二次样条 (Durkan 等, 2019b)。

基于样条的变换器的反演速度与估值速度一样快,同时能够保持精确的解析可逆性。基于样条线的变换器的估值或求逆是通过首先定位正确的段来完成的,这可以使用二进制搜索在 O(logK)\mathcal{O}(\log K) 时间内完成,然后再估值或求逆该段(通常假设在解析上易处理)。通过增加段数 KK,可以使基于样条的变换器任意灵活。

样条变换器

图 4:具有 55 段的样条变换器示例。每个段都是一个单调有理二次函数,可以很容易地求逆(Durkan 等,2019b)。端点(黑点)的位置参数化样条。

变换器在其他文献中被称为逐元素流

h:RRh: \mathbb{R} \rightarrow \mathbb{R} 是一个标量值双射,我们可以通过逐元素应用 hh 来创建向量值双射 f:RDRDf: \mathbb{R}^D \rightarrow \mathbb{R}^D,即 f(u)=(h(u1),,h(uD))f(\mathbf{u}) = (h(u_1), \ldots , h(u_D))。函数 ff 是可逆的,其雅可比行列式由 i=1Ddhdui\prod^{D}_{i=1} \frac{dh}{du_i} 给出。由这种双射组成的流称为元素流。

非线性平方流

图 1:非线性平方流。

左:由 44 个非线性平方层组成的可逆映射。中间:红色是基础分布(高斯),蓝色是左侧映射引入的分布。右图:使用非线性平方变换和高斯密度的 55 层自回归流的密度,在 44 个高斯的混合上进行训练。来自 [ZR19b] 的图 5。

就其本身而言,元素流的表达能力有限,因为它们不模拟元素之间的依赖关系。但它们对于更复杂的流是有用的构建块,例如 耦合流自回归流。下面讨论构建标量值双射 h:RRh:\mathbb{R} \rightarrow \mathbb{R} 以生成元素流的几种方法。

(1) 标量仿射变换 (对应于上述仿射变换器)

仿射标量双射的形式为 h(u;θ)=au+bh(u; \boldsymbol{\theta}) = au + b,其中 θ={a,b}R2\boldsymbol{\theta} = \{a, b\} \in \mathbb{R}^2。其导数 dhdu\frac{dh}{du} 等于 aa。当且仅当 aneq0a neq 0 时其可逆。在实践中,我们经常将 aa 参数化为正数,例如通过令其成为无约束参数的 指数softplus。当 a=1a = 1 时,h(u;θ)=u+bh(u; \boldsymbol{\theta}) = u + b 通常被称为加性标量双射变换。

(2) 高阶扰动变化 (非线性双射变换)

标量仿射变换使用简单,但表达能力非常有限。在保持可逆性的约束下,可以通过添加高阶扰动使其更灵活。例如,Ziegler and Rush(2019) 提出 非线性平方流

h(u;θ)=au+b+c1+(du+e)2h(u; \boldsymbol{\theta}) = au + b + \frac{c}{1 + (du + e)^2}

其中 θ={a,b,c,d,e}R5\boldsymbol{\theta} = \{ a, b, c, d, e\} \in \mathbb{R}^5。当 c=0c = 0 时,该变换会简化为仿射情况。当 c0c \neq 0 时,它会增加一个逆二次扰动导致多峰值,如 图 1 所示。在 a>983cda > \frac{9}{8 \sqrt{3}} cdd>0d > 0 的约束条件下,函数可逆,且其逆可以通过求解二次多项式来解析计算。

(3)严格单调函数的组合(对应于上述基于组合的变换器)

严格单调的标量函数是一个总是增加(处处有正导数)或总是减小(处处有负导数)的函数。这样的函数总是可逆。很多激活函数( 如逻辑斯谛激活函数 δ(u)=1/(1+exp(u))\delta(u) = 1/(1 + \exp(−u)) )都是严格单调的。

以这样的激活函数为基础,可以通过锥形组合(正系数的线性组合形式)和函数合成来构建更灵活的单调函数。假设 h1,,hKh_1, \ldots , h_K 严格增加;那么下列构造也是严格递增的:

  • a1h1++aKhK+ba_1h_1 +\ldots + a_K h_K + b, 其中 ak>0a_k > 0( 带偏置的锥形组合 )
  • h1hKh_1 \circ\ldots \circ h_K(函数合成)。

通过重复上述两个构造,我们可以构建任意复杂的递增函数。例如,逻辑斯谛函数的锥形组合的组合是一个多层感知机,只是其中所有权重都是正数。这种标量双射的导数可以通过重复应用链式法则来计算,实际上可以通过自动微分来完成,但通常不能以封闭形式计算。在实际工作中,可以使用二分搜索来计算逆,因为该函数是单调的。

(4)积分双射变换(对应于上述基于积分的变换器)

确保一个标量函数严格单调的简单方法,是将其导数约束为正。设 h=dhduh^\prime = \frac{dh}{du} 是这个导数。 Wehenkel 和 Louppe [WL19] 使用神经网络直接参数化 hh^\prime,其输出通过上移 11 的 ELU 激活函数变成正数。然后对导数进行数值积分以获得双射:

h(u)=0uh(t)dt+bh(u) = \int^u_0 h^\prime (t)dt + b

其中 bb 是一个偏差。他们称这种方法为无约束单调神经网络。

上述积分通常不能以封闭形式计算,但如果 hh^\prime 受到适当约束,还是可以的。例如,Jaini、Selby 和 Yu [JSY19] 将 hh^\prime 视为度为 LLKK 次多项式之和:

h(u)=k=1K(l=0Laklul)2h^\prime(u) = \sum\limits^K_{k=1} \left( \sum\limits^L_{l=0} a_{kl}u^l \right)^2

这使得 hh^\prime 成为度为 2L2L 的非负多项式。该积分在解析上可处理,并使 hh 成为一个度为 2L+12L + 1 的递增多项式。对于 L=0L = 0hh^\prime 是常数,因此 hh 简化为仿射标量双射。在这些方法中,双射的导数可以被直接读出。但逆通常不可解析计算。在实际工作中中,可以使用二分搜索来数值地计算逆。

(5) 样条转换(对应于上述样条变换器)

另一种构造单调标量函数的方法是使用样条。

样条是通过的 K+1K + 1 个结点 (uk,xk)(u_k, x_k) 参数化的分段多项式或分段有理函数。也就是说,我们设置 h(uk)=xkh(u_k) = x_k,并在从 xk1x_{k-1}xkx_k 的区间上,通过多项式或有理函数(两个多项式的比率)插值在区间 (uk1,uk)(u_{k−1}, u_k) 上定义 hh。通过增加结点的数量,可以创建任意灵活的单调函数。

不同的节点间插值方法,会给出了不同类型的样条。一个简单选择是线性插值 [Mül+19a],但这会使导数在节点处不连续。用二次多项式插值 [Mül+19a] 提供了足够的灵活性使导数连续。使用三次多项式 [Dur+19]、线性多项式的比率 [DEL20] 或二次多项式的比率 [DBP19] 进行插值,允许节点处的导数是任意参数。

如果我们取 uk1<uk,xk1<xku_{k−1} < u_k, x_{k−1} < x_k,则样条曲线是严格递增的,并确保节点之间的插值本身是递增的。根据插值函数的灵活性,可能存在多个插值;在实践中,我们选择一个保证总是增加的。

样条曲线的一个优点是,如果插值函数仅包含低次多项式,则它们可以解析地求逆。在这种情况下,我们计算 u=h1(x)u = h^{-1}(x) 如下:首先,使用二分查找来定位 xx 所在的区间 (xk1,xk)(x_{k-1}, x_k);然后,解析求解得到的 uu 的低次多项式。

3.2.2 调节器的实现

调节器 ci(z<i)c_i \left( \mathbf{z}_{<i} \right) 可以是 z<i\mathbf{z}_{<i} 的任何函数,这意味着每个调节器原则上都可以实现为具有输入 z<i\mathbf{z}_{<i} 和输出 hi\boldsymbol{h}_i 的任意模型。但每个 ci(z<i)c_i\left(\mathbf{z}_{<i}\right) 都是一个独立模型的简单实现方式,在维度 DD 上的扩展性会很差,需要 DD 次模型估值,每个模型都有一个平均大小为 D/2D/2 的向量,这是存储和估值 DD 个独立模型的参数的成本之外的。事实上,关于流前身的早期工作认为自回归方法过于昂贵(Chen 和 Gopinath,2000)。 尽管如此,该问题在实践中可以通过在调节器 ci(z<i)c_i\left(\mathbf{z}_{<i}\right) 之间共享参数,甚至通过将调节器组合成一个模型来有效地解决。

在接下来的段落中,我们将讨论调节器的一些实际实现,以使其能够扩展到高维度。

(1)循环调节器

跨调节器共享参数的一种方法是使用循环神经网络 (RNN) 联合实现它们。 ii-th 调节器实现为:

RNN\mathrm{RNN} 处理 z<D=(z1,,zD1)\mathbf{z}_{<D}=\left(\mathrm{z}_1, \ldots, \mathrm{z}_{D-1}\right) 一个一次元素,并且在每一步它更新一个固定大小的内部状态 si\boldsymbol{s}_i 总结子序列 z<i=(z1,,zi1)\mathrm{z}_{<i}=\left(\mathrm{z}_1 , \ldots, \mathrm{z}_{i-1}\right).从 si\boldsymbol{s}_i 计算 hi\boldsymbol{h}_i 的网络 cc 对于每一步都可以是相同的。初始状态 s1\boldsymbol{s}_1 可以是固定的,也可以是 RNN 的学习参数。可以使用任何 RNN 架构,例如 LSTM (Hochreiter and 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.2.3 节 详细讨论了自回归模型和自回归流之间的关系。

在自回归流文献中,基于 RNN 的调节器已由 Oliva 等 (2018) 和 Kingma 等 (2016) 提出,但与其他方法相比并不常见。基于 RNN 的调节器的主要缺点是:它们将固有的并行计算转变为顺序计算,状态 s1sD\boldsymbol{s}_1、\ldots、\boldsymbol{s}_D 必须按顺序计算,即使每个 hi\boldsymbol{h}_i 原则上可以从 z<i\mathbf{z}_{<i} 独立并行计算。由于这种循环计算涉及 O(D)\mathcal{O}(D) 顺序步骤,因此对于图像或视频等高维数据可能会很慢。

(2)掩膜调节器

另一种跨调节器共享参数但避免 RNN 顺序计算的方法是基于掩膜。

这种方法使用一个单一的、典型的前馈神经网络,它接收 z\mathbf{z} 并在 One pass 中输出整个序列 (h1,,hD)\left(\boldsymbol{h}_1, \ldots, \boldsymbol{h}_D\right) ,唯一要求是该网络必须服从调节器的自回归结构,即输出 hi\boldsymbol{h}_i 不能依赖于输入 zi\mathbf{z}_{\geq i}

要构建这样一个网络,需要从一个任意神经网络中删除连接,直到没有从输入 zi\mathrm{z}_i 到输出 (h1,,hi)\left(\boldsymbol{h}_1, \ldots, \boldsymbol{h }_i\right) 的路径。删除连接的一种简单方法是将每个权重矩阵元素与相同大小的二进制矩阵相乘。这具有删除与乘以零的权重相对应的连接的效果,同时保持所有其他连接不变。这些二进制矩阵可以被认为是 “屏蔽” 了连接,因此称为掩膜。掩膜网络将具有与原始网络相同的架构和大小。反过来,它保留了原始网络的计算属性,例如并行性或在 GPU 上有效评估的能力。

Germain 等(2015 年)提出了为具有任意多个隐藏层或隐藏单元的多层感知器构建掩膜的一般程序。关键思想是为每个输入单元、隐藏单元和输出单元分配 11DD 之间的 “度数”,并屏蔽掉后续层之间的权重,以使 “度数” 较低或相等的单元得不到馈入。在卷积网络中,可以通过将滤波器与相同大小的二进制矩阵相乘来完成这种屏蔽,这会产生了一种被称为 “自回归卷积” 或 “因果卷积”(van den Oord 等,2016c,a;Hoogeboom 等,2019b)的新卷积。在使用自注意力的架构中,可以通过将 softmax 概率归零来实现掩膜(Vaswani 等,2017)。

掩膜自回归流有两个主要优点。

  • 首先,它们的估值效率很高。给定 z\mathbf{z},参数 (h1,,hD)\left(\boldsymbol{h}_1, \ldots, \boldsymbol{h}_D\right) 可以在一次神经网络传递中获得,然后每个维度 z\mathbf{z}^{\prime} 可以通过 zi=τ(zi;hi)\mathrm{z}_i^{\prime}=\tau\left(\mathrm{z}_i; \boldsymbol{h}_i\right)
  • 其次,掩膜自回归流是万能近似器。给定一个足够大的调节器和一个足够灵活的变换器,它们可以用单调变换器表示任何自回归变换,进而实现在任何两个分布之间的变换(如第 2.2 节所述)

掩膜自回归流的主要缺点是:

  • 它们的求逆效率不如估值效率。这是因为用于计算 zi=τ1(zi;hi)\mathrm{z}_i=\tau^{-1} \left(\mathrm{z}_i^{\prime} ; \boldsymbol{h}_i \right) 所需的参数 hi{h}_i,在没有得到 (zi,,zi1)\left(\mathrm{z}_i, \ldots, \mathrm{z}_{i-1}\right) 之前是无法计算的。按照这个逻辑,我们必须首先计算 h1\boldsymbol{h}_1 得到 zz ,然后计算 h2\boldsymbol{h}_2 得到 z2\mathrm{z}_2 ,依此类推,直到 zD\mathrm{z}_D 已获得。使用掩膜调节器 cc,上述过程可以用伪代码实现,如下所示:

 Initialize z to an arbitrary value  for i=1,,D(h1,,hD)=c(z)zi=τ1(zi;hi)\begin{aligned} &\text { Initialize } \mathbf{z} \text { to an arbitrary value } \\ &\text { for } i=1, \ldots, D \\ &\quad\left(\boldsymbol{h}_1, \ldots, \boldsymbol{h}_D\right)=c(\mathbf{z}) \\ &\mathrm{z}_i=\tau^{-1}\left(\mathrm{z}_i^{\prime} ; \boldsymbol{h}_i\right) \end{aligned}

要了解为什么这个过程是正确的,请观测如果 zi1\mathbf{z}_{\leq i-1} 在第 ii 次迭代之前是正确的,那么 hi\boldsymbol{h}_i 将被正确计算(由于 cc 的自回归结构),因此 zi\mathbf{z}_{\leq i} 在第 (i+1)(i+1) 次迭代之前将是正确的。由于在第一次迭代之前的 z0=\mathbf{z}_{\leq 0}=\varnothing 是正确的(在退化的意义上,但仍然如此),通过归纳得出 zD=z\mathbf{z}_{\leq D} =\mathbf{z} 将在循环结束时正确。尽管上述过程可以精确地求逆(假设变换器很容易求逆),但它需要调用 DD 次调节器。这意味着使用上述方法对掩膜自回归流求逆的成本,大约是计算前向变换的 DD 倍。对于图像或视频等高维数据,这可能非常昂贵。

Song 等(2019)提出的另一种求逆流的方法,是通过迭代以下牛顿式定点更新来近似求解方程 z=fϕ(z)\mathbf{z}^{\prime}=f_\phi(\mathbf{z})

zk+1=zkαdiag(Jfϕ(zk))1(fϕ(zk)z),\mathbf{z}_{k+1}=\mathbf{z}_k-\alpha \operatorname{diag}\left(J_{f_\phi}\left(\mathbf{z}_k\right)\right)^{-1}\left(f_\phi\left(\mathbf{z}_k\right)-\mathbf{z}^{\prime}\right),

其中 α\alpha 是步长超参数,diag()\operatorname{diag}(\cdot) 返回一个对角矩阵,其对角线与其输入的对角线相同。一个方便的初始化是 z0=z\mathbf{z}_0=\mathbf{z}^{\prime}。Song 等 (2019) 表明上述过程对于 0<α<20<\alpha<2 是局部收敛的,并且由于 fϕ1(z)f_\phi^{-1}\left(\mathbf{z}^{\prime}\right) 是只有不动点,过程必须要么收敛到它,要么发散。使用掩膜自回归流,计算 fϕ(zk)f_\phi\left(\mathbf{z}_k\right)diag(Jfϕ(zk))\operatorname{diag}\left(J_{f_\phi}\left(\mathbf{z}_k \right)\right) 可以通过调用一次调节器来有效地完成。因此,当实际收敛的迭代次数明显小于 DD 时,上述类似牛顿的过程可能比精确地求逆流程更有效。另一方面,上面的类牛顿过程是近似的,保证只在局部收敛。

尽管与求逆相关的计算比较困难,掩膜仍然是实现自回归流的最流行的技术之一。它非常适合不需要求逆流或数据维数不太大的情况。使用掩膜的流模型的示例包括 IAF (Kingma 等, 2016)、MAF (Papamakarios 等, 2017)、NAF (Huang 等, 2018)、block-NAF (De Cao 等, 2019)、MintNet (Song 等, 2019) 和 MaCow (Ma 等, 2019)。

掩膜也可用于非流模型的自回归模型,例如 MADE (Germain 等, 2015)、PixelCNN (van den Oord 等, 2016c; Salimans 等, 2017) 和 WaveNet (van den Oord 等,2016a,2018)。

(3)耦合层

正如我们所见,掩膜自回归流具有计算不对称性的缺点。采样或密度估值之间会存在一个比另一个慢 DD 倍的情况。如果这两个操作都需要快速,则需要实现不同的调节器。一种能够够实现计算对称性的方法是 耦合层 (Dinh 等, 2015, 2017),它的估值或求逆速度同样快。

该想法选择一个索引值 dd(一个常见的选择是 D/2D / 2 后四舍五入取整),然后设计一个调节器,使得:

  • 参数 (h1,,hd)\left(\boldsymbol{h}_1, \ldots, \boldsymbol{h}_d\right) 是常数,即 h1:d\mathbf{h}_{1:d} 不是 z\mathbf{z} 的函数。
  • 只有参数 (hd+1,,hD)\left(\boldsymbol{h}_{d+1}, \ldots, \boldsymbol{h}_D\right) 才是 zd\mathbf{z}_{\leq d} 的函数,即他们不依赖于 z>d\mathbf{z}_{>d}

这可以使用某个函数逼近器 FF(如神经网络)来实现:

(h1,,hd)= constants, either fixed or estimated (hd+1,,hD)=F(zd).\begin{aligned} \left(\boldsymbol{h}_1, \ldots, \boldsymbol{h}_d\right) &=\text { constants, either fixed or estimated } \\ \left(\boldsymbol{h}_{d+1}, \ldots, \boldsymbol{h}_D\right) &=F\left(\mathbf{z}_{\leq d}\right) . \end{aligned}

换句话说,耦合层将 z\mathbf{z} 分成两部分,使得 z=[zd,z>d]\mathbf{z}=\left[\mathbf{z}_{\leq d}, \mathbf{z}_{> d} \right]

  • 第一部分独立于其他维度进行元素转换。
  • 第二部分以依赖于第一部分的方式进行元素转换。

我们也可以认为耦合层实现了一种激进的掩膜策略,仅限于 (hd+1,,hD)\left(\boldsymbol{h}_{d+1}, \ldots, \boldsymbol{h}_D\right) 依赖于wzd\mathbf{ wz}_{\leq d}.

常见的耦合层实现方式会将变换器 τ(;h1)τ(;hD)\tau\left(\cdot ; \boldsymbol{h}_1\right)、\ldots、\tau\left(\cdot ; \boldsymbol{h}_D\right) 固定为恒等函数。此时变换可以写成如下:

zd=zd(hd+1,,hD)=F(zd)zi=τ(zi;hi) for i>d.\begin{aligned} \mathbf{z}_{\leq d}^{\prime} &=\mathbf{z}_{\leq d} \\ \left(\boldsymbol{h}_{d+1}, \ldots, \boldsymbol{h}_D\right) &=F\left(\mathbf{z}_{\leq d}\right) \\ \mathbf{z}_i^{\prime} &=\tau\left(\mathbf{z}_i ; \boldsymbol{h}_i\right) \text { for } i>d . \end{aligned}

反过来,逆变换很简单,由下式给出:

zd=zd(hd+1,,hD)=F(zd)zi=τ1(zi;hi) for i>d.\begin{aligned} \mathbf{z}_{\leq d} &=\mathbf{z}_{\leq d}^{\prime} \\ \left(\boldsymbol{h}_{d+1}, \ldots, \boldsymbol{h}_D\right) &=F\left(\mathbf{z}_{\leq d}\right) \\ \mathbf{z}_i &=\tau^{-1}\left(\mathbf{z}_i^{\prime} ; \boldsymbol{h}_i\right) \text { for } i>d . \end{aligned}

耦合层示意图

图 5: 耦合层示意图

这些如 图 5 所示。与所有自回归流一样,变换的雅可比行列式是下三角的,但此外它还具有以下特殊结构:

Jfϕ=[I0AD],J_{f_\phi}=\left[\begin{array}{cc} \mathbf{I} & \mathbf{0} \\ \mathbf{A} & \mathbf{D} \end{array}\right],

其中 I\mathbf{I}d×dd \times d 单位矩阵,0\mathbf{0}d×(Dd)d \times (D-d) 的零矩阵,A\mathbf{A}(Dd)×d(D-d) \times d 的完全矩阵,D\mathbf{D}(Dd)×(Dd)(D-d) \times (D-d) 的对角矩阵。 Jacobian 行列式值简化为子矩阵 D\mathbf{D} 对角元素的乘积,其实就是 τ(;hd+1),,τ(;hD)\tau\left(\cdot ; \boldsymbol{h}_{d+1}\right), \ldots, \tau\left(\cdot ; \boldsymbol{h}_D\right) 部分变换器的导数。

耦合层和完全自回归流是一系列实现方式的两个极端。

耦合层将 z\mathbf{z} 分成两部分,并将后半部分作为前半部分的函数进行元素转换;而完全自回归流将输入分成 DD 部分(每个部分都有一个元素),将每个部分转换为所有先前部分的函数。显然存在中间选择:可以将输入拆分为 KK 部分,并将第 kk 部分作为第 11k1k-1 部分的函数逐元素转换,当 K=2K=2 时就对应于耦合层,而当 K=DK=D 时就对应完全自回归流。在使用掩膜的情况下,该方法的求逆运算将比估值运算代价高 O(K)\mathcal{O}(K) 倍,因此 KK 可以根据任务需求来选择。

总体来说,耦合层的效率是以降低表达能力为代价的。

与循环自回归流或掩膜自回归流不同,无论函数 FF 的表现力如何,单一的耦合层不再表示任何自回归变换,而相应的结果就是,具有单一耦合层的自回归流不再是万能近似器

尽管如此,可以通过组合多个耦合层来增加流的表现力。在组成耦合层时,z\mathbf{z} 的元素需要在层之间进行置换,以便所有维度都有机会进行参与转换和交互。先前多个领域的工作(参见例如 Kingma 和 Dhariwal,2018 年;Prenger 等,2019 年;Durkan 等,2019b)均表明,组合多个耦合层确实可以创建灵活的流。

理论上,很容易证明: 只要第 ii 个耦合层的耦合索引值 dd 等于 i1i-1,则 DD 个耦合层的组合确实是一个万能近似器。观测到第 ii 的耦合层可以表达为形式 zi=τ(zi;ci(z<i))\mathrm{z}_i^{\prime}=\tau\left(\mathrm{z}_i ; c_i\left(\mathbf{z }_{<i}\right)\right),因此 DD 个这样的层组合在一起,将完全自回归地转换每个维度。但该结构在正向和反向的计算都涉及 DD 个顺序计算(每层一个),因此无法提供对循环自回归流或掩膜自回归流的改进。是否有可能通过组合严格少于 O(D)\mathcal{O}(D) 个耦合层来获得万能近似,是一个悬而未决的开放问题。

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

3.2.3 流与自回归模型

除了归一化流外,另一种比较流行的高维分布模型是自回归模型。 自回归模型历史比较悠久,从贝叶斯网络的一般框架 (Pearl, 1988; Frey, 1998) 到最近基于神经网络的实现 (Bengio and Bengio, 2000; Uria 等, 2016)。

为了构建 px(x)p_{\mathrm{x}}(\mathbf{x}) 的自回归模型,首先使用链式法则将 px(x)p_{\mathrm{x}}(\mathbf{x}) 分解为一维条件分布的乘积:

px(x)=i=1Dpx(xix<i).p_{\mathrm{x}}(\mathbf{x})=\prod_{i=1}^D p_{\mathrm{x}}\left(\mathrm{x}_i \mid \mathbf{x}_{<i}\right) .

然后,通过被 hi\boldsymbol{h}_i 参数化的一些分布,可以对每个条件分布进行建模:

px(xix<i)=px(xi;hi), where hi=ci(x<i).p_{\mathrm{x}}\left(\mathrm{x}_i \mid \mathbf{x}_{<i}\right)=p_{\mathrm{x}}\left(\mathrm{x}_i ; \boldsymbol{h}_i\right), \quad \text { where } \quad \boldsymbol{h}_i=c_i\left(\mathbf{x}_{<i}\right) .

例如: px(xi;hi)p_{\mathrm{x}}\left(\mathrm{x}_i ; \boldsymbol{h}_i\right) 可以是由其均值和方差参数化的高斯,或是一个被多个分量的均值、方差和混合系数参数化的高斯混合分布。

函数 cic_i 类似于自回归流中的调节器,并且通常通过使用 RNN 或掩膜的神经网络实现,如前几节所述。除了连续数据之外,自回归模型可以很容易地用于离散甚至混合数据。如果 xi\mathrm{x}_i 对于某个 ii 是离散的,则 px(xi;hi)p_{\mathrm{x}}\left(\mathrm{x}_i ; \boldsymbol{h}_i\right) 可以是一个被参数化的概率质量函数,如类别分布或泊松混合分布。

我们表明,所有连续变量的自回归模型实际上都是具有单一自回归层的自回归流。令 τ(xi;hi)\tau\left(\mathrm{x}_i ; \boldsymbol{h}_i\right)px(xi;hi)p_{\mathrm{x}}\left(\mathrm{x}_i ; \boldsymbol{h}_i\right) 的累积分布函数,定义如下:

τ(xi;hi)=xipx(xi;hi)dxi.\tau\left(\mathrm{x}_i ; \boldsymbol{h}_i\right)=\int_{-\infty}^{\mathrm{x}_i} p_{\mathrm{x}}\left(\mathrm{x}_i^{\prime} ; \boldsymbol{h}_i\right) d \mathrm{x}_i^{\prime} .

如果 px(xi;hi)p_{\mathrm{x}}\left(\mathrm{x}_i ; \boldsymbol{ h}_i\right) 连续,且当 px(xi;hi)>0p_{\mathrm{x}}\left(\mathrm{x}_i ; \boldsymbol{h}_i\right)>0 时严格递增(自回归模型的标准实现方式),则该累积函数可微。如 第 2.2节 所示,向量 u=(u1,,uD)\mathbf{u}=\left(\mathrm{u}_1, \ldots, \mathrm{u}_D\right) 可以通过下式得到:

ui=τ(xi;hi) where hi=ci(x<i),\mathrm{u}_i=\tau\left(\mathrm{x}_i ; \boldsymbol{h}_i\right) \quad \text { where } \quad \boldsymbol{h}_i=c_i\left(\mathbf{x}_{<i}\right),

u\mathbf{u} 总是均匀分布在 (0,1)D(0,1)^D 中。如果令 z=x\mathbf{z}=\mathbf{x}z=u\mathbf{z}^{\prime}=\mathbf{u},则上述表达式的形式与 等式 29 中自回归流的定义完全相同。因此,自回归模型实际上是具有单个自回归层的自回归流。其中,层的变换器是自回归模型中条件分布函数的累积分布函数,而层的基分布是 (0,1)D(0,1)^D 的均匀分布。我们可以利用 变化变量定理 显式地建立两者之间的连接:

logpx(x)=logi=1DUniform(τ(xi;hi);0,1)+logi=1Dpx(xi;hi)=i=1Dlogpx(xix<i)\log p_{\mathrm{x}}(\mathbf{x})=\log \prod_{i=1}^D \operatorname{Uniform}\left(\tau\left(\mathrm{x}_i ; \boldsymbol{h}_i\right) ; 0,1\right)+\log \prod_{i=1}^D p_{\mathrm{x}}\left(\mathrm{x}_i ; \boldsymbol{h}_i\right)=\sum_{i=1}^D \log p_{\mathrm{x}}\left(\mathrm{x}_i \mid \mathbf{x}_{<i}\right)

涉及均匀基密度的项可以从表达式中删除,只留下雅可比行列式。根据 公式 30 ,将 u\mathbf{u} 映射到 x\mathbf{x} 的逆自回归流是通过对下式迭代获得的 :

zi=τ1(ui;hi) where hi=ci(x<i).\mathrm{z}_i=\tau^{-1}\left(\mathrm{u}_i ; \boldsymbol{h}_i\right) \quad \text { where } \boldsymbol{h}_i=c_i\left(\mathbf{x}_{<i}\right) .

其中 i{1,,D}i \in \{1, \ldots, D\}。 以上完全对应于一次从自回归模型中采样一个元素,其中在每个步骤中,相应的条件分布样本来自 逆变换采样

不过,变换器不一定仅限于逆累积密度函数。我们可以在特定类型的自回归模型和 第 3.1 节 中讨论的变换器之间建立进一步的联系。例如,考虑具有以下形式高斯条件的自回归模型:

px(xi;hi)=N(xi;μi,σi2) where hi={μi,σi}.p_{\mathrm{x}}\left(\mathrm{x}_i ; \boldsymbol{h}_i\right)=\mathcal{N}\left(\mathrm{x}_i ; \mu_i, \sigma_i^2\right) \quad \text { where } \quad \boldsymbol{h}_i=\left\{\mu_i, \sigma_i\right\} .

上述条件可以重参数化如下:

xi=σiui+μi where uiN(0,1).\mathrm{x}_i=\sigma_i \mathrm{u}_i+\mu_i \quad \text { where } \quad \mathrm{u}_i \sim \mathcal{N}(0,1) .

因此,整个自回归模型可以重参数化为仿射自回归流,如 公式 33 所示,其中 αi=σi,βi=μi\alpha_i = \sigma_i,\beta_i = \mu_i,并且基分布是标准高斯分布(Kingma 等,2016;Papamakarios 等, 2017)。同样,我们可以将其他类型的自回归模型与非仿射变换器联系起来。例如,条件是高斯混合的自回归模型,可以重参数化为包含组合型变换器的自回归流,例如 公式 35 中的变换器。类似地,条件是直方图的自回归模型,可以重参数化为具有线性样条变换器的自回归流。

因此,我们可以将自回归流视为包含并进一步扩展了连续变量的自回归模型。

将自回归模型视为流有几个好处:

  • 首先,该观点将模型架构与随机性来源分离,使我们可以自由地指定基分布。因此,可以通过选择更灵活的基分布来增强自回归模型的灵活性;例如,基分布可以是另一个具有可学习参数的自回归模型。这为组合自回归模型提供了一个框架,例如流中的层(Papamakarios 等,2017)。
  • 此外,该观点允许我们将自回归模型与其他类型的流(可能是非自回归流)组合起来。
耦合流资料

耦合流允许我们使用任意非线性函数(例如深度神经网络)对维度之间的依赖关系进行建模。

考虑将输入 uRD\boldsymbol{u} \in \mathbb{R}^D 划分为两个子空间 (uA,uB)Rd×RDd\left(\boldsymbol{u}^A, \boldsymbol{u}^B\right) \in \mathbb{R}^d \times \mathbb{R}^{D-d},其中 dd 是 1 到 D1D-1 之间的整数。假设一个双射 f^(;θ):RdRd\hat{\mathbf{f}}(\cdot ; \boldsymbol{\theta}): \mathbb{R}^d \rightarrow \mathbb{R}^d 参数化 θ\boldsymbol{\theta } 并作用于子空间 Rd\mathbb{R}^d。我们定义由 x=f(u)\boldsymbol{x}=\boldsymbol{f}(\boldsymbol{u}) 给出的函数 f:RDRDf: \mathbb{R}^D \rightarrow \mathbb{R}^D 如下:

xA=f^(uA;Θ(uB))xB=uB.\begin{aligned} \boldsymbol{x}^A &=\hat{\mathbf{f}}\left(\boldsymbol{u}^A ; \Theta\left(\boldsymbol{u}^B\right)\right) \\ \boldsymbol{x}^B &=\boldsymbol{u}^B . \end{aligned}

参见 图 2 的说明。函数 f\boldsymbol{f} 称为 耦合层 [DKB15; DSDB17],因为它通过 f^\hat{\mathbf{f}}Θ\ThetauA\boldsymbol{u}^AuB\boldsymbol{u}^B “耦合”在一起。我们将由耦合层组成的流称为 耦合流

耦合层

图 2:耦合层 x = f (u) 的图示。

上图将一个参数由 uB\mathbf{u}^B 确定的双射,应用于 uA\mathbf{u}^A 以生成 xA\mathbf{x}^A;同时 xB=uB\mathbf{x}^B = \mathbf{u}^B 保持不变地通过,所以映射可以求逆。来自[KPB19]的 图 3。

f^\hat{\mathbf{f}} 的参数由 θ=Θ(uB)\boldsymbol{\theta}=\Theta\left(\boldsymbol{u}^B\right) 计算,其中 Θ\Theta 是任意一个函数,被称为调节器。与 只线性混合各维度的仿射流 以及 根本不混合维度的逐元素流 不同,耦合流可以使用灵活的非线性调节器 Θ\Theta 混合维度。在实践中,经常将 Θ\Theta 实现为深度神经网络;可以使用任何架构,包括 MLP、CNN、ResNet 等。

耦合层 f\boldsymbol{f} 是可逆的,其逆由 u=f1(x)\boldsymbol{u}=\boldsymbol{f}^{-1}(\boldsymbol{x}) 给出,其中:

uA=f^1(xA;Θ(xB))uB=xB\begin{aligned} \boldsymbol{u}^A &=\hat{\mathbf{f}}^{-1}\left(\boldsymbol{x}^A ; \Theta\left(\boldsymbol{x} ^B\right)\right) \\ \boldsymbol{u}^B &=\boldsymbol{x}^B \end{aligned}

f1\boldsymbol{f}^{-1} 只需将 f^\hat{\mathbf{f}} 替换为 f^1\hat{\mathbf{f}}^ {-1}。因为 xB\boldsymbol{x}^B 不依赖于 uA\boldsymbol{u}^Af\boldsymbol{f} 的雅可比是 块三角矩阵

J(f)=(xA/uAxA/uBxB/uAxB/uB)=(J(f^)xA/uB0I)\mathbf{J}(\boldsymbol{f })= \left(\begin{array}{cc} \partial \boldsymbol{x}^A / \partial \boldsymbol{u}^A & \partial \boldsymbol{x}^A / \partial \boldsymbol{u }^B \\ \partial \boldsymbol{x}^B / \partial \boldsymbol{u}^A & \partial \boldsymbol{x}^B / \partial \boldsymbol{u}^B \end{array}\right) =\left(\begin{array}{cc} \mathbf{J}(\hat{\mathbf{f}}) & \partial \boldsymbol{x}^A / \partial \boldsymbol{u}^B \\ \mathbf{0} & \mathbf{I} \end{array}\right)

因此,detJ(f)\operatorname{det} \mathbf{J}(\boldsymbol{f}) 等于 detJ(f^)\operatorname{det} \mathbf{J}(\hat{\mathbf{f}})

我们经常将 f^\hat{\mathbf{f}} 定义为逐元素双射,因此 f^1\hat{\mathbf{f}}^{-1}detJ(f^)\operatorname{det}\mathbf{J} (\hat{\mathbf{f}}) 很容易计算。

也就是说,我们定义:

f^(uA;θ)=(h(u1A;θ1),,h(udA;θd))\hat{\mathbf{f}}\left(\boldsymbol{u}^A ; \boldsymbol{\theta}\right)=\left(h\left(u_1^A ; \boldsymbol{\theta}_1\right), \ldots, h\left(u_d^A ; \boldsymbol{\theta}_d\right)\right)

其中 h(;θi)h\left(\cdot ; \boldsymbol{\theta}_i\right) 是由 θi\boldsymbol{\theta}_i 参数化的标量双射。 第 3.2 节 中描述的任何标量双射都可以在这里使用。例如,h(;θi)h\left(\cdot ; \boldsymbol{\theta}_i\right) 可以是一个仿射双射,θi\boldsymbol{\theta}_i 是它的缩放和移位参数( 第 3.2.1 节);或者它可以权重和偏差参数为 θi\boldsymbol{\theta}_i 的单调 MLP(第 3.2.3 节);或者它可以是结点坐标为 θi\boldsymbol{\theta}_i 的单调样条曲线(第 3.2.5 节)。

有很多方法可以将 u\boldsymbol{u} 划分为 (uA,uB)\left(\boldsymbol{u}^A, \boldsymbol{u}^B\right)。一个简单的方法是将 uu 分成两半。我们还可以在分区中利用空间结构。例如,如果 u\boldsymbol{u} 是一个图像,我们可以使用 “棋盘” 模式划分其像素,其中 “黑色方块” 中的像素位于 uA\boldsymbol{u}^A 中,而 “白色方块” 中的像素位于 uB\boldsymbol{u}^B [DSDB17] 中。由于每个耦合层仅转换部分输入,因此在实践中,通常单独使用不同的分区,以确保所有变量都得到转换并有机会进行交互。

最后,如果 f^\hat{\mathbf{f}} 是元素双射,我们可以使用二进制掩膜 b\boldsymbol{b} 轻松实现任意分区,如下所示:

x=bu+(1b)f^(u;Θ(bu))(18)\boldsymbol{x}=\boldsymbol{b} \odot \boldsymbol{u}+(1-\boldsymbol{b}) \odot \hat{\mathbf{f}}(\boldsymbol{u} ; \Theta(\boldsymbol{b} \odot \boldsymbol{u})) \tag{18}

其中 \odot 表示元素乘法。 b\boldsymbol{b} 中的值为 00 表示 u\boldsymbol{u} 中的对应元素进行了变换(属于 uA\boldsymbol{u}^A );值为 11 表示它保持不变(属于 (uB)\left(\boldsymbol{u}^B\right)

例如,我们将由分段有理二次样条创建的掩膜耦合流拟合到 Two Moon 数据集。拟合后模型每一层的样本如 图 3 所示。

双月牙

图 3:(a) Two moons 数据集。 (b) 来自归一化流的样本适合该数据集。由两个卫星 nsf_normalizing_flow.ipynb 生成。

3.3 仿射(线性)流

如上一节所述,自回归流将输出变量 ziz^{\prime}_i 限制为仅依赖于输入 zi\mathbf{z}_{\leq i},从而使流依赖于输入变量的顺序。正如我们所展示的,在无限容量的条件下,这种约束不会限制流模型的灵活性。但在实践中,我们不会以无限容量运行。输入变量的顺序将决定模型可以表示的分布集。此外,目标变换对于某些输入顺序可能很容易学习,而对于其他输入顺序则很难学习。当使用耦合层时,该问题会进一步恶化,因为只有部分输入变量被转换。

为了在实践中应对这些问题,通常在连续的自回归层之间置换输入变量是有帮助的。而对于耦合层,这实际上是必须的:如果不在连续层之间置换输入变量,则部分输入将永远不会被转换。输入变量置换本身是一个可逆变换,且其雅可比行列式绝对值始终为 11(即它是保体积的)。因此,置换可以无缝地与其他可逆和可微的变换组合。

一种泛化输入变量置换概念的方法是 线性流。线性流本质上是如下形式的可逆线性变换:

z=Wz\mathbf{z}^{\prime} = \mathbf{Wz}

其中 W\mathbf{W} 是一个 D×DD ×D 的可逆矩阵,能够对变换实施参数化。上述变换的雅可比行列式就是 W\mathbf{W},因此,雅可比行列式等于 detW\operatorname{det} \mathbf{W}。置换其实是 W\mathbf{W} 等于置换矩阵时的一种特殊线性流。在实践中,经常使用 “自回归/耦合层” 替换可逆线性变换(参见例如 Kingma 和 Dhariwal,2018;Durkan 等,2019b)。

线性流的最直接实现就是对矩阵 W\mathbf{W} 进行参数化和学习,但此方法可能存在问题。

  • 首先,不能保证 W\mathbf{W} 可逆。
  • 其次,逆向流(相当于为 z\mathbf{z} 求解线性系统 Wz=z\mathbf{Wz} = \mathbf{z}^{\prime} )通常需要 O(D3)\mathcal{O}(D^3) 时间,这对于高维数据来说非常昂贵。
  • 第三,计算 detW\operatorname{det} \mathbf{W} 通常也需要时间 O(D3)\mathcal{O}(D^3)

为了应对上述挑战,许多方法将 W\mathbf{W} 限制为某种特殊的结构化矩阵,或者结构化矩阵的乘积。例如,将 W\mathbf{W} 限制为三角矩阵,则可以令其对角线元素为正来保证可逆。这样求逆的成本将降低为 O(D2)\mathcal{O}(D^2)(即与矩阵乘法大致相同),计算雅可比行列式的成本为 O(D)\mathcal{O}(D)

构造 W 的扩展阅读资料

在附录 B 中,我们更详细地讨论了这一点以及一些以各种方式限制 W\mathbf{W} 形式的参数化。

在任何情况下,都要注意不可能以连续方式参数化所有 D×DD × D 的可逆矩阵,因此任何保证 W\mathbf{W} 可逆性的连续参数化,都不可避免地会遗漏一些可逆矩阵。这是因为从 RD2R^{D^2}D×DD × D 可逆矩阵的集合不存在连续的满射函数。要了解原因,请考虑两个可逆矩阵 WA\mathbf{W}_AWB\mathbf{W}_B,使得 detWA>0\operatorname{det} \mathbf{W}_A > 0detWB<0\operatorname{det} \mathbf{W}_B < 0。如果存在所有可逆矩阵的连续参数化,则存在连接 WA\mathbf{W}_AWB\mathbf{W}_B 的连续路径。但是,由于行列式是矩阵项的连续函数,因此任何此类路径都必须包含行列式为零的矩阵,即不可逆矩阵,这是矛盾的。这个论点表明,D×DD × D 可逆矩阵的集合包含两个断开的 “岛”,一个包含具有正行列式的矩阵,另一个包含负行列式的矩阵,它们被不可逆矩阵的集合完全分隔。在实践中,这意味着我们只能期望不断地参数化其中一种情况,从一开始就锁定行列式的正负符号。

3.4 残差流

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

z=z+gϕ(z)(55)\mathbf{z}^\prime = \mathbf{z} + g_\phi(\mathbf{z}) \tag{55}

其中 gϕg_\phi 是一个输出 DD 维平移向量的函数,由 ϕ\phi 参数化(图 6)。这种结构与残差网络(He 等, 2016)有很强的相似性,因此使用术语 残差流 来指代由这种变换组成的归一化流。残差变换并不总是可逆,但如果 gϕg_\phi 受到适当约束,还是可以使其可逆。在下文中,我们讨论了设计可逆残差变换的两种通用方法:

  • 方法一: 基于收缩映射
  • 方法二: 基于矩阵行列式引理

残差流

图 6:残差流

3.4.1 收缩性残差流

如果 gϕg_\phi 可以相对于某个距离函数收缩(Behrmann 等, 2019; Chen 等, 2019),则可以保证残差变换可逆。一般而言,如果存在一个常数 L<1L<1 使得对于任何两个输入 zA\mathbf{z}_AzB\mathbf{z}_B 有:

δ(F(zA),F(zB))Lδ(zA,zB).\delta\left(F\left(\mathbf{z}_A\right), F\left(\mathbf{z}_B\right)\right) \leq L \delta\left(\mathbf{z}_A, \mathbf{z}_B\right) .

换句话说,收缩映射使任何两个输入更接近(由 δ\delta 衡量)至少一个因子 LL。直接得出 FF 是 Lipschitz 连续的,且 Lipschitz 常数等于 LL。 Banach 不动点定理 (Rudin, 1976, Theorem 9.23) 指出:任何这样的收缩映射都只有一个不动点 z=F(z)\mathbf{z}_*=F\left(\mathbf{z}_*\right)。此外,这个不动点是由任意起点 z0\mathbf{z}_0 形成的任意序列 (z0,z1,)\left(\mathbf{z}_0, \mathbf{z}_1, \ldots\right) 的极限和 FF 的重复应用,即 zk+1=F(zk)\mathbf{z}_{k+1}=F\left(\mathbf{z}_k\right) 对于所有 k0k \geq 0

残差变换的可逆性 z=fϕ(z)=z+gϕ(z)\mathbf{z}^{\prime}=f_\phi(\mathbf{z})=\mathbf{z}+g_\phi(\mathbf{z}) 直接从 gϕg_ {\boldsymbol{\phi}} 是收缩的导出。给定 z\mathbf{z}^{\prime},考虑映射:

F(z^)=zgϕ(z^).F(\hat{\mathbf{z}})=\mathbf{z}^{\prime}-g_{\boldsymbol{\phi}}(\hat{\mathbf{z}}) .

如果 gϕg_\phi 与 Lipschitz 常数 LL 是收缩的,那么 FF 也与相同的 Lipschitz 常数收缩。因此,根据 Banach 不动点定理,存在唯一的 z\mathbf{z}_* 使得 z=zgϕ(z)\mathbf{z}_*=\mathbf{z}^{\prime}-g_\phi\left (\mathbf{z}_*\right).通过重新排列,我们看到 z=fϕ(z)\mathbf{z}^{\prime}=f_\phi\left(\mathbf{z}_*\right),并且由于 z\mathbf{z}_* 是唯一的,因此 fϕf_\phi 是可逆的。

除了证明fϕf_\phi 的可逆性之外,上述论证还为我们提供了一种求逆算法。从任意输入 z0\mathbf{z}_0 开始(一个方便的选择是 z0=z\mathbf{z}_0=\mathbf{z}^{\prime} ),我们可以迭代地应用 FF 如下:

zk+1=zgϕ(zk) for k0\mathbf{z}_{k+1}=\mathbf{z}^{\prime}-g_{\boldsymbol{\phi}}\left(\mathbf{z}_k\right) \quad \text { for } k \geq 0

Banach 不动点定理保证上述过程收敛到 z=\mathbf{z}_*= fϕ1(z)f_\phi^{-1}\left(\mathbf{z}^{\prime}\right) for起点 z0\mathbf{z}_0 的任意选择。此外,可以证明收敛速度(相对于 δ\delta )在迭代次数 kk 中呈指数增长,并且可以量化如下:

δ(zk,z)Lk1Lδ(z0,z1).\delta\left(\mathbf{z}_k, \mathbf{z}_*\right) \leq \frac{L^k}{1-L} \delta\left(\mathbf{z}_0, \mathbf{z}_1\right) .

Lipschitz 常数越小,zk\mathbf{z}_k 收敛到 z\mathbf{z}_* 的速度越快。我们可以将 LL 视​​为以灵活性换取效率:随着 LL 变小,近似反转流所需的迭代次数越少,但残差变换变得更加受限,即灵活性降低。在 L=0L=0 的极端情况下,反演过程在一次迭代后收敛,但变换简化为添加一个常数。

构建收缩残差流的一个挑战是将函数 gϕg_\phi 设计为收缩而不影响其灵活性。很容易看出 KK Lipschitz-continuous 函数 F1,,FKF_1, \ldots, F_K 的组合也是 Lipschitz 连续的,其 Lipschitz 常数等于 k=1KLk\prod_{k=1}^K L_k,其中 $L_k $ 是 FkF_k 的 Lipschitz 常数。因此,如果 gϕg_{\boldsymbol{\phi}} 是神经网络层的组合(这在深度学习中很常见),则足以使每一层 Lipschitz 与 Lk1L_k \leq 1 连续,并且在至少一层具有Lk<1L_k<1,以使整个网络具有收缩性。深度学习中使用的许多元素非线性,包括逻辑 sigmoid、双曲正切 (tanh)\tanh) 和整流线性 (ReLU)——实际上已经是 Lipschitz 连续且常数不大于 1。此外,线性层(包括密集层和卷积层)可以通过将它们除以严格大于其诱导算子范数的常数来相对于范数收缩。 Behrmann 等提出了一种这样的实现。 (2019):光谱归一化 (Miyato 等, 2018) 用于使线性层相对于欧几里得范数收缩。

收缩残差流的一个缺点是没有已知的通用、有效的程序来计算它们的雅可比行列式。相反,人们必须恢复到自动微分来获得雅可比行列式和显式行列式计算来获得雅可比行列式,如前所述,这需要花费 O(D3)\mathcal{O}\left(D^3\right)。如果没有一种有效的方法来计算雅可比行列式,准确评估流模型的密度是昂贵的,并且对于图像等高维数据可能是不可行的。

尽管如此,有可能获得对数绝对雅可比行列式的无偏估计,从而获得对数密度的无偏估计,这足以训练流模型,例如使用随机梯度的最大似然。我们首先将对数绝对雅可比行列式写成幂级数:3{}^3

logdetJfϕ(z)=logdet(I+Jgϕ(z))=k=1(1)k+1kTr{Jgϕk(z)},\log \left|\operatorname{det} J_{f_\phi}(\mathbf{z})\right|=\log \left|\operatorname{det}\left(\mathbf{I}+J_{g_\phi}(\mathbf{z})\right)\right|=\sum_{k=1}^{\infty} \frac{(-1)^{k+1}}{k} \operatorname{Tr}\left\{J_{g_\phi}^k(\mathbf{z})\right\},

其中 Jgϕk(z)J_{g_\phi}^k(\mathbf{z}) 是在 z 处计算的 gϕg_\phi 的 Jacobian 的 kk 次方。如果 Jgϕ(z)<1\left\|J_{g_\phi}(\mathbf{z})\right\|<1 对于某些子乘法矩阵范数 \|\cdot\|,则上述级数收敛,在我们的例子中,由于到 gϕg_\phi 是收缩的。 Jgϕk(z)J_{g_\phi}^k(\mathbf{z}) 的轨迹可以使用 Hutchinson 轨迹估计器有效地估计 (Hutchinson, 1990):

Tr{Jgϕk(z)}vJgϕk(z)v,\operatorname{Tr}\left\{J_{g_\phi}^k(\mathbf{z})\right\} \approx \mathbf{v}^{\top} J_{g_\phi}^k(\mathbf{z}) \mathbf{v},

其中 v\mathbf{v} 可以是任何具有零均值和单位协方差的 DD 维随机向量。雅可比向量积 vJgϕk(z)\mathbf{v}^{\top} J_{g_\phi}^k(\mathbf{z}) 可以通过 kk 反向传播通道计算。最后,可以使用俄罗斯轮盘赌估计器(Chen 等, 2019)通过适当重新加权项的有限和来估计无限和。

与基于将雅可比行列式约束为稀疏的自回归流不同,收缩残差流通常具有密集雅可比行列式,它允许所有输入变量影响所有输出变量。因此,收缩残差流量可以非常灵活,并在实践中显示出良好的效果。另一方面,与基于耦合层的流提供的一次性密度估值和采样不同,精确的密度估值在计算上是昂贵的,并且采样是迭代完成的,这限制了收缩残余流在某些任务中的适用性。

3.4.2 基于行列式引理的残差流

假设 A\mathbf{A} 是一个大小为 D×DD\times D 的可逆矩阵,V\mathbf{V}, W\mathbf{W} 是大小为 D×MD\times M 的矩阵。矩阵行列式引理指出:

det(A+VW)=det(I+WA1V)detA.\operatorname{det}\left(\mathbf{A}+\mathbf{V} \mathbf{W}^{\top}\right)=\operatorname{det}\left(\mathbf{I}+\mathbf{W}^{\top} \mathbf{A}^{-1} \mathbf{V}\right) \operatorname{det} \mathbf{A} .

如果 A\mathbf{A} 的行列式和逆行列式易于处理且 MM 小于 DD,则矩阵行列式引理可以提供一种计算有效的方法来计算 A+行列式VW\mathbf{A}+\mathbf 的行列式{V} \mathbf{W}^{\top}。例如,如果 A\mathbf{A} 是对角线,则计算左侧 costsO(D3+D2M)\operatorname{costs} \mathcal{O}\left(D^3+D^2 M\right),而计算右侧成本 O(M3+DM2)\mathcal{O}\left(M^3+D M^2\right),如果 M<DM<D 则更可取。在流的上下文中,矩阵行列式引理可用于有效地计算雅可比行列式。在本节中,我们将讨论专门设计的残差流示例,以便矩阵行列式引理的应用导致有效的雅可比行列式计算。

3.4.2.1 平面流

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

z=z+vσ(wz+b).\mathbf{z}^{\prime}=\mathbf{z}+\mathbf{v} \sigma\left(\mathbf{w}^{\top} \mathbf{z}+b\right) .

平面流的参数是vRD,wRD\mathbf{v} \in \mathbb{R}^D, \mathbf{w} \in \mathbb{R}^DbRb \in \mathbb{R}σ\sigma 是一个可微的激活函数,例如双曲正切。这个流可以解释为在垂直于超平面 wz+b=0\mathbf{w}^{\top} \mathbf{z}+b=0 的方向上扩展/收缩空间。变换的雅可比由下式给出:

Jfϕ(z)=I+σ(wz+b)vw,J_{f_\phi}(\mathbf{z})=\mathbf{I}+\sigma^{\prime}\left(\mathbf{w}^{\top} \mathbf{z}+b\right) \mathbf{v} \mathbf{w}^{\top},

其中 σ\sigma^{\prime} 是激活函数的导数。雅可比矩阵具有对角矩阵加上秩 1 更新的形式。使用矩阵行列式引理,雅可比行列式可以在时间 O(D)\mathcal{O}(D) 中计算如下:

detJfϕ(z)=1+σ(wz+b)wv.\operatorname{det} J_{f_\phi}(\mathbf{z})=1+\sigma^{\prime}\left(\mathbf{w}^{\top} \mathbf{z}+b\right) \mathbf{w}^{\top} \mathbf{v} .

一般来说,平面流对于 v\mathbf{v}w\mathbf{w} 的所有值都是不可逆的。然而,假设 σ\sigma^{\prime} 处处为正且从上方有界(例如,如果 σ\sigma 是双曲正切),可逆性的充分条件是 wv>1supxσ(x)\mathbf{w }^{\top} \mathbf{v}>-\frac{1}{\sup _x \sigma^{\prime}(x)}

3.4.2.2 西尔维斯特流

平面流可以扩展到 MM 隐藏单元,在这种情况下,它们被称为 Sylvester 流(van den Berg 等, 2018)并且可以写成:

z=z+Vσ(Wz+b)\mathbf{z}^{\prime}=\mathbf{z}+\mathbf{V} \sigma\left(\mathbf{W}^{\top} \mathbf{z}+\mathbf{b}\right)

流的参数现在是 VRD×M\mathbf{V} \in \mathbb{R}^{D \times M}, W RD×M\in \mathbb{R}^{D \times M}bRM\mathbf {b} \in \mathbb{R}^M,激活函数 σ\sigma 是按元素理解的。雅可比可以写成:

Jfϕ(z)=I+VS(z)W,J_{f_\phi}(\mathbf{z})=\mathbf{I}+\mathbf{V S}(\mathbf{z}) \mathbf{W}^{\top},

其中 S(z)\mathbf{S}(\mathbf{z}) 是一个 M×MM \times M 对角矩阵,其对角线等于 σ(Wz+b)\sigma^{\prime}\left(\mathbf{W}^{\top } \mathbf{z}+\mathbf{b}\right)。应用矩阵行列式引理,我们得到:

detJfϕ(z)=det(I+S(z)WV),\operatorname{det} J_{f_\phi}(\mathbf{z})=\operatorname{det}\left(\mathbf{I}+\mathbf{S}(\mathbf{z}) \mathbf{W}^{\top} \mathbf{V}\right),

可以在 O(M3+DM2)\mathcal{O}\left(M^3+D M^2\right) 中计算。为了进一步降低计算成本,van den Berg 等(2018) 提出了参数化 V=QU\mathbf{V}=\mathbf{Q U}W=QL\mathbf{W}=\mathbf{Q L},其中 Q\mathbf{Q}D×MD \times M矩阵,其列是一组正交向量(这需要 MDM \leq D ),U\mathbf{U}M×MM \times M 上三角,L\mathbf{L}M×MM \times M 下三角。由于 QQ=I\mathbf{Q}^{\top}\mathbf{Q}=\mathbf{I} 且上三角矩阵的乘积也是上三角矩阵,雅可比行列式变为:

detJfϕ(z)=det(I+S(z)LU)=i=1D(1+Sii(z)LiiUii).\operatorname{det} J_{f_\phi}(\mathbf{z})=\operatorname{det}\left(\mathbf{I}+\mathbf{S}(\mathbf{z}) \mathbf{L}^{\top} \mathbf{U}\right)=\prod_{i=1}^D\left(1+S_{i i}(\mathbf{z}) L_{i i} U_{i i}\right) .

与平面流类似,Sylvester 流对于它们的所有参数值都不是可逆的。假设 σ\sigma^{\prime} 处处为正且从上方有界,可逆性的充分条件是 LiiUii>1supxσ(x)L_{i i} U_{i i}>-\frac{1}{\sup _x \sigma^{\prime }(x)} 代表所有 i{1,,D}i \in\{1, \ldots, D\}

3.4.2.3 径向流

径向流 (Tabak 和 Turner,2013 年;Rezende 和 Mohamed,2015 年)采用以下形式:

z=z+βα+r(z)(zz0) where r(z)=zz0.\mathbf{z}^{\prime}=\mathbf{z}+\frac{\beta}{\alpha+r(\mathbf{z})}\left(\mathbf{z}-\mathbf{z}_0\right) \quad \text { where } \quad r(\mathbf{z})=\left\|\mathbf{z}-\mathbf{z}_0\right\| .

流的参数是α(0,+),βR\alpha \in(0,+\infty), \beta \in \mathbb{R}z0RD\mathbf{z}_0 \in \mathbb{R}^D,和$ |\cdot|$ 是欧几里得范数。上述变换可以被认为是中心为 z0\mathbf{z}_0 的径向收缩/膨胀。雅可比行列式可以写成:

Jfϕ(z)=(1+βα+r(z))Iβr(z)(α+r(z))2(zz0)(zz0),J_{f_\phi}(\mathbf{z})=\left(1+\frac{\beta}{\alpha+r(\mathbf{z})}\right) \mathbf{I}-\frac{\beta}{r(\mathbf{z})(\alpha+r(\mathbf{z}))^2}\left(\mathbf{z}-\mathbf{z}_0\right)\left(\mathbf{z}-\mathbf{z}_0\right)^{\top},

这是一个对角矩阵加上 rank-1 更新。应用矩阵行列式引理并重新排列,我们得到雅可比行列式的以下表达式,可以在 O(D)\mathcal{O}(D) 中计算

detJfϕ(z)=(1+αβ(α+r(z))2)(1+βα+r(z))D1.\operatorname{det} J_{f_\phi}(\mathbf{z})=\left(1+\frac{\alpha \beta}{(\alpha+r(\mathbf{z}))^2}\right)\left(1+\frac{\beta}{\alpha+r(\mathbf{z})}\right)^{D-1} .

对于 β\beta 的所有值,径向流不可逆。可逆性的充分条件是β>α\beta>-\alpha

总之,平面流、西尔维斯特流和径向流具有 costO(D)\operatorname{cost} \mathcal{O}(D) 来计算的雅可比行列式,并且可以通过适当地限制它们的参数使其可逆。然而,没有分析方法来计算它们的逆,这就是为什么这些流主要用于近似变分自动编码器的后验。此外,每个单独的转换都相当简单,除了增加转换的数量之外,还不清楚如何增加流的灵活性。

其他文献中关于残差流的资料

3.4.1 收缩残差块

确保残差变换可逆的一种方法是:令 gϕg_\phi 相对于某种距离函数是收缩的。收缩是一个函数 F\mathbf{F},其 Lipschitz 常数小于 1 ;也就是说,存在 0L<10 \leq L<1 使得对于所有 u1\boldsymbol{u}_1u2\boldsymbol{u}_2 我们有:

σ(F(u1)F(u2)Lu1u2)\sigma \left(\mathbf{F}\left(\boldsymbol{u}_1\right)-\mathbf{F}\left(\boldsymbol{u}_2\right)\right\| \leq L\left\|\boldsymbol{u}_1-\boldsymbol{u}_2 \right)

f(u)=u+F(u)\boldsymbol{f}(\boldsymbol{u})=\boldsymbol{u}+\mathbf{F}(\boldsymbol{u}) 的可逆性可以表示如下。考虑映射 g(u)=\boldsymbol{g}(\boldsymbol{u})=xF(u)\boldsymbol{x}-\mathbf{F}(\boldsymbol{u})。因为 F\mathbf{F} 是一个收缩,所以 g\boldsymbol{g} 也是一个收缩。因此,根据 Banach 不动点定理,g\boldsymbol{g} 有一个唯一的不动点 u\boldsymbol{u}_*。因此我们有

u=xF(u)u+F(u)=xf(u)=x.\begin{aligned} &\boldsymbol{u}_*=\boldsymbol{x}-\mathbf{F}\left(\boldsymbol{u}_*\right) \\ &\Rightarrow \quad \boldsymbol{u}_*+\mathbf{F}\left(\boldsymbol{u}_*\right)=\boldsymbol{x} \\ &\Rightarrow \quad \boldsymbol{f}\left(\boldsymbol{u}_*\right)=\boldsymbol{x} . \end{aligned}

因为 u\boldsymbol{u}_* 是唯一的,所以 u=f1(x)\boldsymbol{u}_*=\boldsymbol{f}^{-1}(\boldsymbol{x})

具有收缩残差块的残差流的一个示例是 [Beh +19]+19] 的 iResNet 模型。 iResNet 的残差块是卷积神经网络,即具有非线性激活函数的卷积层的组合。由于组合的 Lipschitz 常数小于或等于各个函数的 Lipschitz 常数的乘积,因此足以确保卷积是收缩的,并使用斜率小于或等于 1 的递增激活函数。 iResNet 模型通过对它们的权重应用谱归一化来确保卷积是收缩的 [Miy +18a]+18 \mathrm{a}]

一般来说,逆 f1\boldsymbol{f}^{-1} 没有解析表达式。但是,我们可以使用以下迭代过程来近似 f1(x)\boldsymbol{f}^{-1}(\boldsymbol{x})

un=g(un1)=xF(un1)\boldsymbol{u}_n=\boldsymbol{g}\left(\boldsymbol{u}_{n-1}\right)=\boldsymbol{x}-\mathbf{F}\left(\boldsymbol{u}_{n-1}\right)

Banach 不动点定理保证序列 u0,u1,u2,\boldsymbol{u}_0, \boldsymbol{u}_1, \boldsymbol{u}_2, \ldots 将收敛到 u=f1(x)\boldsymbol{u}_*=\boldsymbol{f }^{-1}(\boldsymbol{x}) 用于 u0\boldsymbol{u}_0 的任何选择,它会以 O(Ln)O\left(L^n\right) 的速率这样做,其中LLg\boldsymbol{g} 的 Lipschitz 常数(与 F\mathbf{F} 的 Lipschitz 常数相同)。在实践中,选择 u0=x\boldsymbol{u}_0=\boldsymbol{x} 比较方便。

此外,雅可比行列式没有解析表达式,其精确计算成本为O(D3)O\left(D^3\right)。然而,对数雅可比行列式有一个计算效率高的随机估计量。这个想法是将 log Jacobian 行列式表示为幂级数。利用 f(x)=x+F(x)\boldsymbol{f}(\boldsymbol{x})=\boldsymbol{x}+\mathbf{F}(\boldsymbol{x}) 这个事实,我们有

logdetJ(f)=logdet(I+J(F))=k=1(1)k+1ktr[J(F)k]\log |\operatorname{det} \mathbf{J}(\boldsymbol{f})|=\log |\operatorname{det}(\mathbf{I}+\mathbf{J}(\mathbf{F}))|=\sum_{k=1}^{\infty} \frac{(-1)^{k+1}}{k} \operatorname{tr}\left[\mathbf{J}(\mathbf{F})^k\right]

J(F)\mathbf{J}(\mathbf{F}) 的矩阵范数小于 1 时,这个幂级数收敛,这在这里得到保证,因为 F\mathbf{F} 是一个收缩。 J(F)k\mathbf{J}(\mathbf{F})^k 的轨迹可以通过 Hutchinson 轨迹估计器 [Ski89;小屋89;梅 +21]+21] :

tr[J(F)k]vJ(F)kv\operatorname{tr}\left[\mathbf{J}(\mathbf{F})^k\right] \approx \boldsymbol{v}^{\top} \mathbf{J}(\mathbf{F})^k \boldsymbol{v}

其中 v\boldsymbol{v} 是来自具有零均值和单位协方差的分布的样本,例如 N(0,I)\mathcal{N}(\mathbf{0}, \mathbf{I})。最后,无限级数可以通过截断 [Beh +19]+19] 来近似,这很遗憾会产生一个有偏的估计量,或者通过使用无偏的俄罗斯轮盘赌估计量 [Che +19]+19]

3.4.2 具有低秩雅可比行列式的残差块

有一种计算矩阵行列式的有效方法,它是单位矩阵的低秩扰动。假设 A\mathbf{A}B\mathbf{B} 是矩阵,其中 A\mathbf{A}D×MD\times MB\mathbf{B}M×DM\times D。以下公式称为 Weinstein-Aronszajn 恒等式 2{ }^2,是更一般的矩阵行列式引理的特例:

det(ID+AB)=det(IM+BA).\operatorname{det}\left(\mathbf{I}_D+\mathbf{A B}\right)=\operatorname{det}\left(\mathbf{I}_M+\mathbf{B} \mathbf{A}\right) .

我们分别为 D×DD \times DM×MM \times M 恒等矩阵写 ID\mathbf{I}_DIM\mathbf{I}_M。这个公式的意义在于它将花费O(D3)O\left(D^3\right)D×DD\times D 行列式变成花费 O(M3)O\left(M^3\right)M×MM\times M 行列式。如果 MM 小于 DD,则可以节省计算量。

由于对残差块 F:RDRD\mathbf{F}: \mathbb{R}^D \rightarrow \mathbb{R}^D 的一些限制,我们可以应用这个公式来有效地计算残差连接的行列式。诀窍是在 F\mathbf{F} 内部创建一个瓶颈。我们通过定义 F=F2F1\mathbf{F}=\mathbf{F}_2 \circ \mathbf{F}_1 来做到这一点,其中 F1:RDRM,F2:RMRD\mathbf{F}_1: \mathbb{R}^D \rightarrow \mathbb{R }^M, \mathbf{F}_2: \mathbb{R}^M \rightarrow \mathbb{R}^DMDM \ll D。链式法则给出 \mathbf{J}(\mathbf{F})=\mathbf{J}\left(\mathbf{F}_2\right) \mathbf{J}\left(\mathbf{F}_1\ right),其中 J(F2)\mathbf{J}\left(\mathbf{F}_2\right)D×MD \times M 和 $\mathbf{J}\left(\mathbf{F}_1\right) $ 是 M×DM \times D。现在我们可以应用我们的行列式公式如下:

detJ(f)=det(ID+J(F))=det(ID+J(F2)J(F1))=det(IM+J(F1)J(F2))\operatorname{det} \mathbf{J}(\boldsymbol{f})=\operatorname{det}\left(\mathbf{I}_D+\mathbf{J}(\mathbf{F})\right)=\operatorname{det}\left(\mathbf{I}_D+\mathbf{J}\left(\mathbf{F}_2\right) \mathbf{J}\left(\mathbf{F}_1\right)\right)=\operatorname{det}\left(\mathbf{I}_M+\mathbf{J}\left(\mathbf{F}_1\right) \mathbf{J}\left(\mathbf{F}_2\right)\right)

由于最终的行列式花费O(M3)O\left(M^3\right),我们可以通过减少MM,即通过缩小瓶颈来使雅可比行列式有效。

上面的一个例子是[RM15]的平面流。在这个模型中,每个残差块是一个具有一个隐藏层和一个隐藏单元的 MLP。那是,

f(u)=u+vσ(wu+b),\boldsymbol{f}(\boldsymbol{u})=\boldsymbol{u}+\boldsymbol{v} \sigma\left(\boldsymbol{w}^{\top} \boldsymbol{u}+b\right),

其中 vRD,wRD\boldsymbol{v} \in \mathbb{R}^D, \boldsymbol{w} \in \mathbb{R}^DbRb \in \mathbb{R} 是参数, sigma\ sigma 是激活函数。残差块是 F1(u)=wu+b\mathbf{F}_1(\boldsymbol{u})=\boldsymbol{w}^{\top} \boldsymbol{u}+bF2(z)=vσ(z)\mathbf{F}_2(z )=\boldsymbol{v} \sigma(z),所以 M=1M=1。他们的雅可比矩阵是 J(F1)(u)=w\mathbf{J}\left(\mathbf{F}_1\right)(\boldsymbol{u})=\boldsymbol{w}^{\top}J(F2)(z)=vσ(z)\mathbf{J}\left( \mathbf{F}_2\right)(z)=\boldsymbol{v} \sigma^{\prime}(z)。将这些代入雅可比行列式的公式中,我们得到:

detJ(f)(u)=1+wvσ(wu+b)\operatorname{det} \mathbf{J}(\boldsymbol{f})(\boldsymbol{u})=1+\boldsymbol{w}^{\top} \boldsymbol{v} \sigma^{\prime}\left(\boldsymbol{w}^{\top} \boldsymbol{u}+b\right)

可以在 O(D)\mathcal{O}(D) 中有效地计算。其他示例包括 [RM15] 的循环流和 [Ber +18]+18] 的 Sylvester 流。

这种技术提供了一种计算具有瓶颈的残差连接的行列式的有效方法,但通常不能保证这些函数是可逆的。这意味着必须根据具体情况满足可逆性。例如,当 σ\sigma 是双曲正切且 wv>1\boldsymbol{w}^{\top} \boldsymbol{v}>-1 时,平面流是可逆的,否则可能不是。

3.4.2.1 平面流

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

3.4.2.2 西尔维斯特流
3.4.2.3 径向流

3.5 组合变换时的实际考虑

实现一个流往往相当于在计算和内存允许的范围内组成尽可能多的转换。例如,Kingma 和 Dhariwal(2018)的 Glow 架构采用了分布在 4040 个 GPU上 的多达 320320 个子变换来实现最先进的图像生成。与这样的深层流合作,会带来更多实际性挑战。在本节中,我们总结了两种技术,它们分别稳定了优化和缓解了深度流的计算需求。

3.5.1 归一化

就像用基于梯度的方法训练的深度神经网络一样,将中间表征 zk\mathbf{z}_k 归一化对于在整个流中保持稳定的梯度至关重要。批量归一化或批量规范(Ioffe和Szegedy,2015)已被广泛证明在稳定和改善神经网络训练方面是有效的,从而使其在深度流中也有吸引力。将批次统计看作是固定的,批次规范本质上是两个仿生变换的组成。前者的尺度和平移参数由批次统计设定,后者有自由参数 α\boldsymbol{\alpha} (尺度)和 β\boldsymbol{\beta} (平移)。

BN(z)=αzμ^σ^2+ϵ+β,BN1(z)=μ^+zβασ^2+ϵ.\mathrm{BN}(\mathbf{z})=\boldsymbol{\alpha} \odot \frac{\mathbf{z}-\hat{\boldsymbol{\mu}}}{\sqrt{\hat{\boldsymbol{\sigma}}^2+\boldsymbol{\epsilon}}}+\boldsymbol{\beta}, \quad \mathrm{BN}^{-1}\left(\mathbf{z}^{\prime}\right)=\hat{\boldsymbol{\mu}}+\frac{\mathbf{z}^{\prime}-\boldsymbol{\beta}}{\boldsymbol{\alpha}} \odot \sqrt{\hat{\boldsymbol{\sigma}}^2+\boldsymbol{\epsilon}} .

此外,由于批量归一化的作用是元素性的(因此有一个对角线的雅各布决定式),所以它有一个容易计算的雅各布行列式。

detJBN(z)=i=1Dαiσ^i2+ϵi.\operatorname{det} J_{\mathrm{BN}}(\mathbf{z})=\prod_{i=1}^D \frac{\alpha_i}{\sqrt{\hat{\sigma}_i^2+\epsilon_i}} .

因此,批量归一化可以插入到连续的子变换之间,并简单地作为组成的另一个成员来处理:TkBNTk1T_k\circ \mathrm{BN} \circ T_{k-1}

上述公式假设批量统计信息是固定的,这对于经过训练的模型是正确的。然而,在训练过程中,批统计数据不是固定的,而是批中所有示例的函数。这使得批处理归一化不可逆,除非批处理统计信息在前向传递期间已被缓存。此外,上面写的雅可比行列式在数学上几乎没有意义,因为批范数现在是整个批的函数。然而,使用这个雅可比行列式公式作为近似值通常足以进行训练,至少在批次足够大的情况下(Dinh 等, 2017; Papamakarios 等, 2017)。 Glow 采用了一种称为 激活归一化行为规范 的变体(Kingma 和 Dhariwal,2018 年),它不使用批统计量 μ^\hat{\mu}σ^\hat{\sigma}。相反,在训练开始之前,批次通过流,并设置 ααββ 以使转换后的批次具有零均值和单位方差。在这种数据相关的初始化之后,ααββ 被优化为模型参数。当使用小批量进行训练时,行为规范更可取,因为批量规范的统计数据会变得嘈杂并且会破坏训练的稳定性。

3.5.2 多尺度架构

2.1 节 所述,x\mathbf{x}u\mathbf{u} 必须具有相同的维度,并且每个子变换 TkT_k 必须保持维度。这意味着估值 TT 会随着维度增长而增加计算成本。这种限制与我们希望在流中使用尽可能多的步骤的愿望直接不一致。Dinh 等 (2017)提出通过多尺度架构回避这个问题。在从 x\mathbf{x}u\mathbf{u} 的流步骤中,每隔一定时间,zk\mathbf{z}_k 的一些子维度会被限制,并且不会应用额外的变换。可以将其视为实现跳过连接,将这些维度直接映射到最终表示 u\mathbf{u} 中的相应维度: (uj,,ui)=(zk,j,,zk,i)(u_j, \ldots , u_i) = (z_{k,j}, \ldots , z_{k,i}) 其中 kk 是施加夹紧的步骤。所有 KK 个步骤仅应用于一小部分维度,这比将所有步骤应用于所有维度的成本更低。Dinh 等 (2017) 还认为,这些跳跃连接有助于优化,将目标分布在整个流深度。除了具有这种实际优势外,多尺度架构是 PixelCNN(Dinh 等,2017 年;Kingma 和 Dhariwal,2018 年)和 Wavenet(Prenger 等,2019 年;Kim 等, 2019)等粒度数据类型的自然建模选择。我们经常关心的宏观结构——例如图像的形状和纹理——通常不需要描述所有的 DD 维度。Dinh等(2017)表明,多尺度架构确实在经历所有转换的维度中编码了更多的全局语义信息。另一方面,在流中较早分解的维度代表较低级别的信息;见 Dinh 等 (2017) 的附录 D 进行演示。

4 构建流:连续时间

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

4.1 定义

zt\mathbf{z}_t 表示在时间 tt 的流状态(或“步骤”tt,考虑离散设置)。假设时间 ttt0t_0t1t_1 连续运行,使得 zt0=u\mathbf{z}_{t_0}=\mathbf{u}zt1=x\mathbf{z}_{t_1}=\mathbf{x}。通过使用带有参数 ϕ\phi 的函数 gϕg_\phi 参数化 zt\mathbf{z}_t 的时间导数来构造连续时间流,产生以下常微分方程 (ODE):

dztdt=gϕ(t,zt).\frac{d \mathbf{z}_t}{d t}=g_\phi\left(t, \mathbf{z}_t\right) .

函数 gϕg_\phi 将时间 tt 和流状态 zt\mathbf{z}_t 作为输入,并输出 zt\mathbf{z}_t 在时间 tt 的时间导数。对 gϕg_\phi 的唯一要求是它在 zt\mathbf{z}_t 中是一致的 Lipschitz 连续的(意味着有一个对所有 tt 都有效的 Lipschitz 常数)并且在 tt 中是连续的(Chen等,2018)。根据 Picard 存在定理,满足这些要求可确保上述 ODE 具有唯一解(Coddington 和 Levinson,1955 年)。许多神经网络层满足这些要求(Gouk 等,2018 年),并且与第 3 节中描述的架构不同,这些架构需要仔细的结构假设以确保其雅可比行列式的可逆性和易处理性,gϕg_\phi 没有这样的要求。

为了计算变换 x=T(u)\mathbf{x}=T(\mathbf{u}),我们需要通过积分来及时运行动力学:

x=zt1=u+t=t0t1gϕ(t,zt)dt.\mathbf{x}=\mathbf{z}_{t_1}=\mathbf{u}+\int_{t=t_0}^{t_1} g_{\boldsymbol{\phi}}\left(t, \mathbf{z}_t\right) d t .

那么逆变换 T1T^{-1} 是:

u=zt0=x+t=t1t0gϕ(t,zt)dt=xt=t0t1gϕ(t,zt)dt,\mathbf{u}=\mathbf{z}_{t_0}=\mathbf{x}+\int_{t=t_1}^{t_0} g_\phi\left(t, \mathbf{z}_t\right) d t=\mathbf{x}-\int_{t=t_0}^{t_1} g_\phi\left(t, \mathbf{z}_t\right) d t,

在最右边的表达式中,我们使用了转换积分限制等效于否定积分的事实。我们以最后一种形式写出逆来表明,与许多由离散组合组成的流不同(第 3 节),连续时间流在每个方向上具有相同的计算复杂度。因此,选择哪个方向是正向和哪个方向是反向并不是关键的实现选择,因为它对于例如自回归流。

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

dlogp(zt)dt=Tr{Jgϕ(t,)(zt)}\frac{d \log p\left(\mathbf{z}_t\right)}{d t}=-\operatorname{Tr}\left\{J_{g_\phi(t, \cdot)}\left(\mathbf{z}_t\right)\right\}

其中 Tr{}\operatorname{Tr}\{\cdot\} 表示迹运算符,Jgϕ(t,)(zt)J_{g_\phi(t, \cdot)} \left(\mathbf{z}_t \right)gϕ(t,)g_\phi(t, \cdot)zt\mathbf{z}_t 处的雅可比行列式。上述方程可以作为零扩散的 Fokker-Planck 方程的特例获得(Risken,1996)。虽然迹算子乍一看似乎比行列式在计算上更容易处理,但实际上它仍然需要 O(D)\mathcal{O}(D) 反向传播传递来获得 Jgϕ(t,)(zt)J_{g_\phi(t,)}\left(\mathbf{z}_t\right) 的对角线元素。与收缩残差流(第 3.3.1 节)类似,Hutchinson 的迹估计器(Hutchinson,1990)可用于在高维设置中获得近似值(Grathwohl 等,2019):

Tr{Jgϕ(t,)(zt)}vJgϕ(t,)(zt)v,\operatorname{Tr}\left\{J_{g_\phi(t, \cdot)}\left(\mathbf{z}_t\right)\right\} \approx \mathbf{v}^{\top} J_{g_\phi(t, \cdot)}\left(\mathbf{z}_t\right) \mathbf{v},

其中 v\mathbf{v} 可以是任何具有零均值和单位协方差的 DD 维随机向量。雅可比向量积 vJgϕ(t,)(zt)\mathbf{v}^{\top} J_{g_\phi(t, \cdot)}\left(\mathbf{z}_t\right) 可以在单个反向传播过程中计算,这使得 Hutchinson 轨迹估计器比精确计算轨迹的效率高出大约 DD 倍。 Chen 和 Duvenaud (2019) 提出了一种替代解决方案,其中 gϕg_\phi 的体系结构受到仔细约束,以便可以在单个反向传播过程中计算精确的雅可比迹线。

通过对 logp(zt)\log p\left(\mathbf{z}_t\right) 随时间的导数积分,我们得到了连续时间流下 x\mathbf{x} 的对数密度表达式:

logpx(x)=logpu(u)t=t0t1Tr{Jgϕ(t,)(zt)}dt.\log p_{\mathbf{x}}(\mathbf{x})=\log p_{\mathrm{u}}(\mathbf{u})-\int_{t=t_0}^{t_1} \operatorname{Tr}\left\{J_{g_\phi(t,)}\left(\mathbf{z}_t\right)\right\} d t .

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

[xlogpx(x)]=[ulogpu(u)]+t=t0t1[gϕ(t,zt)Tr{Jgϕ(t,)(zt)}]dt.\left[\begin{array}{c} \mathbf{x} \\ \log p_{\mathbf{x}}(\mathbf{x}) \end{array}\right]=\left[\begin{array}{c} \mathbf{u} \\ \log p_{\mathrm{u}}(\mathbf{u}) \end{array}\right]+\int_{t=t_0}^{t_1}\left[\begin{array}{c} g_\phi\left(t, \mathbf{z}_t\right) \\ -\operatorname{Tr}\left\{J_{g_\phi(t, \cdot)}\left(\mathbf{z}_t\right)\right\} \end{array}\right] d t .

对于一般 gϕg_\phi,计算在解析上是不可行的。在实践中,使用了数值积分器,我们将在下面讨论。

4.2 连续时间流的解及优化

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

4.2.1 Euler 方法和残差流的等价性

也许可以应用的最简单的数值技术是欧拉方法。这个想法是首先使用小步长 ϵ>0\epsilon>0 离散化 ODE,如下所示:

zt+ϵfϕ(zt)=zt+ϵgϕ(t,zt)\mathbf{z}_{t+\epsilon} \approx f_\phi\left(\mathbf{z}_t\right)=\mathbf{z}_t+\epsilon g_\phi\left(t, \mathbf{z}_t\right)

近似值精确为 ϵ0\epsilon \rightarrow 0。然后可以(近似)通过从 zt0=u\mathbf{z}_{t_0}=\mathbf{u} 开始迭代上述计算直到获得 zt1=x\mathbf{z}_{t_1}=\mathbf{x }

这样,参数 ϕ\phi 可以通过 ODE 求解器通过反向传播计算的梯度进行优化。使用其他离散求解器(例如 Runge-Kutta 系列中的任何一种)相对简单。与欧拉方法一样,离散化的前向解决方案将被反向传播。

有趣的是,欧拉近似将连续时间流实现为 方程 55 中描述的类的离散时间残差流。假设 gϕ(t,)g_\phi(t, \cdot) 是一致 Lipschitz 连续的,且与 Lipschitz 常数 LL 无关对于 tt,紧接着 ϵgϕ(t,)\epsilon g_\phi(t, \cdot) 对任何 ϵ<1/L\epsilon<1 / L 都是收缩的。因此,对于足够小的 ϵ\epsilon,我们可以将上述欧拉离散化视为收缩残差流的一个特定实例(第 3.3.1 节)。

使用离散时间残差流近似连续时间流使我们能够深入了解 方程 78logp(zt)\log p\left(\mathbf{z}_t\right) 的时间演化的描述。使用方程 60 的泰勒级数展开,我们可以写出 fϕf_\phi 的对数绝对雅可比行列式如下:

logdetJfϕ(zt)=k=1(1)k+1ϵkkTr{Jgϕ(t,)k(zt)}=ϵTr{Jgϕ(t,)(zt)}+O(ϵ2)\log \left|\operatorname{det} J_{f_\phi}\left(\mathbf{z}_t\right)\right|=\sum_{k=1}^{\infty} \frac{(-1)^{k+1} \epsilon^k}{k} \operatorname{Tr}\left\{J_{g_\phi(t, \cdot)}^k\left(\mathbf{z}_t\right)\right\}=\epsilon \operatorname{Tr}\left\{J_{g_\phi(t, \cdot)}\left(\mathbf{z}_t\right)\right\}+\mathcal{O}\left(\epsilon^2\right)

将上述代入变量变化公式并重新排列,我们得到:

logp(zt+ϵ)=logp(zt)ϵTr{Jgϕ(t,)(zt)}+O(ϵ2)logp(zt+ϵ)logp(zt)ϵ=Tr{Jgϕ(t,)(zt)}+O(ϵ),\begin{aligned} &\log p\left(\mathbf{z}_{t+\epsilon}\right)=\log p\left(\mathbf{z}_t\right)-\epsilon \operatorname{Tr}\left\{J_{g_\phi(t, \cdot)}\left(\mathbf{z}_t\right)\right\}+\mathcal{O}\left(\epsilon^2\right) \Rightarrow \\ &\frac{\log p\left(\mathbf{z}_{t+\epsilon}\right)-\log p\left(\mathbf{z}_t\right)}{\epsilon}=-\operatorname{Tr}\left\{J_{g_\phi(t, \cdot)}\left(\mathbf{z}_t\right)\right\}+\mathcal{O}(\epsilon), \end{aligned}

我们通过令 ϵ0\epsilon \rightarrow 0 直接得到 方程 78

4.2.2 伴随方法

陈等(2018 年)提出了一种优雅的方法,来替代上述离散的固定步长。对于一般优化目标 L(x;ϕ)\mathcal{L}(\mathbf{x} ; \boldsymbol{\phi})(例如对数似然),他们表明梯度 L/zt\partial \mathcal{L} / \partial \mathbf{z}_t 相对于流的中间状态 zt\mathbf{z}_t 可以用以下 ODE 来表征:

ddt(Lzt)=(Lzt)gϕ(t,zt)zt,\frac{d}{d t}\left(\frac{\partial \mathcal{L}}{\partial \mathbf{z}_t}\right)=-\left(\frac{\partial \mathcal{L}}{\partial \mathbf{z}_t}\right)^{\top} \frac{\partial g_\phi\left(t, \mathbf{z}_t\right)}{\partial \mathbf{z}_t},

这种结果被广泛称为伴随敏感性方法(Pontryagin,1962)。在神经网络术语中,伴随方法可以被认为是反向传播的连续时间模拟。相对于 ϕ\phi 的梯度可以通过以下方式计算:

L(x;ϕ)ϕ=t=t1t0Lztgϕ(t,zt)ϕdt.\frac{\partial \mathcal{L}(\mathbf{x} ; \boldsymbol{\phi})}{\partial \boldsymbol{\phi}}=\int_{t=t_1}^{t_0} \frac{\partial \mathcal{L}}{\partial \mathbf{z}_t} \frac{\partial g_{\boldsymbol{\phi}}\left(t, \mathbf{z}_t\right)}{\partial \boldsymbol{\phi}} d t .

然后可以使用随机梯度对 ϕ\phi 进行优化。

将梯度计算公式化为单独的 ODE 意味着前向评估和梯度计算都可以由黑盒 ODE 求解器处理,而无需通过求解器的计算图进行反向传播。这带来了显着的实际好处,因为通过求解器进行反向传播在计算和内存需求方面都是昂贵的。另一个好处是,更复杂的求解器可以根据用户指定的容差分配依赖于实例的计算,这是大多数现成求解器中的常见超参数。在测试时,可以根据运行时间或其他计算限制来调整此容差级别。

概率转换公式

图 7:一般概率转换公式的说明。概率 Pr(u ∈ ω) 必须等于任何 ω ⊆ U 的概率 Pr(x ∈ γ),即使 ω 通过 T 的图像具有断开的分量,这种关系仍然成立。

5 泛化

到目前为止,我们已经讨论了将流归一化为欧几里得空间中的可逆变换。在本节中,我们将超越标准定义,探索更一般的概率转换类别。我们展示了如何从一个统一的框架中衍生出更通用的流类型,指出扩展标准定义的具体实现,并探索归一化流研究的前沿。

5.1 通用概率-变换公式

5.2 流的分段可逆变换和混合

5.3 离散随机变量的流

5.4 黎曼流形上的流

5.5 绕过拓扑约束

5.6 对称密度和等变流

6 应用

归一化流支持两个最基础的运算: 密度估计样本生成。 也就是说,在任何需要这两个功能的概率模型应用中,流模型都是有效的。本节总结了其中在概率建模、推断、监督学习和强化学习等方面的应用。

6.1 数据分布的应用

由于具有较强表达能力,同时允许精确的似然计算,归一化流常用于数据的概率建模。而数据分布的常见应用的密度估计与数据生成。

对于此类应用,我们假设能够访问从未知生成过程 px(x)p_{\mathrm{x}}^*(\mathbf{x}) 中抽取的有限数量的样本 x\mathbf{x}。这些抽取构成了一个大小为 NN 的数据集 X={xn}n=1N\mathbf{X}=\left\{\mathbf{x}_n\right\}_{n=1}^N。然后,我们的目标是:将流模型 px(x;θ)p_{\mathrm{x}}(\mathbf{x} ; \boldsymbol{\theta}) 拟合到 X\mathbf{X},使其能够充当 px(x)p_{\mathrm{x}}^*(\mathbf{x}) 的良好近似。

通常,数据 {xn}n=1N\left\{\mathbf{x}_n\right\}_{n=1}^N 是离散的;例如,它们可能是像素值为 {0,1,,255}\{0,1, \ldots, 255\} 的图像。流模型是在连续随机变量上定义的(第 5.3 节的离散流除外),因此它们不能直接应用于离散数据。为了对离散数据使用流模型,我们经常通过添加连续噪声来去量化 {xn}n=1N\left\{\mathbf{x}_n\right\}_{n=1}^N。噪声分布可以是固定的(例如,对于上面的图像示例,在 [0,1][0,1] 中均匀分布),也可可以是学得的( 例如在变分去量化中,Ho 等, 2019 )。

拟合 px(x;θ)p_{\mathrm{x}}(\mathbf{x}; \boldsymbol{\theta}) 最流行的方法之一是最大似然估计,此时会用到 第 2.4.1 节 介绍的前向 KL\mathbb{KL} 散度:

DKL[px(x)px(x;θ)]=Epx(x)[logpx(x;θ)]+ const 1Nn=1Nlogpx(xn;θ)+const=1Nn=1Nlogpu(T1(xn;ϕ);ψ)+logJT1(xn;ϕ)+ const. \begin{aligned} D_{\mathrm{KL}}\left[p_{\mathrm{x}}^*(\mathbf{x}) \| p_{\mathrm{x}}(\mathbf{x} ; \boldsymbol{\theta})\right] &=-\mathbb{E}_{p_{\mathrm{x}}^*(\mathbf{x})}\left[\log p_{\mathrm{x}}(\mathbf{x} ; \boldsymbol{\theta})\right]+\text { const } \\ & \approx-\frac{1}{N} \sum_{n=1}^N \log p_{\mathrm{x}}\left(\mathbf{x}_n ; \boldsymbol{\theta}\right)+\mathrm{const} \\ &=-\frac{1}{N} \sum_{n=1}^N \log p_{\mathrm{u}}\left(T^{-1}\left(\mathbf{x}_n ; \boldsymbol{\phi}\right) ; \boldsymbol{\psi}\right)+\log \left|J_{T^{-1}}\left(\mathbf{x}_n ; \boldsymbol{\phi}\right)\right|+\text { const. } \end{aligned}

不过,原则上任何有效的散度或积分概率度量都可以用作优化目标,如 第 2.4.4 节 所述。通常,生成的模型 px(x;θ)p_{\mathrm{x}}(\mathbf{x} ; \boldsymbol{\theta}) 有两个下游用途:密度估计和生成。

6.1.1 密度估计

第一项任务主要是定量的计算:使用流模型来计算密度、期望、边缘或其他对未见过的数据感兴趣的量。

早期的工作(Chen 和 Gopinath,2000;Tabak 和 Turner,2013)只考虑了合成低维的情况,表明归一化流确实可以像核密度估计器一样,表示偏斜的多模态密度。Laparra 等(2011)首次将高斯化应用于真实数据,他们使用密度函数执行了一种类别的分类,以检测卫星图像中的城市区域。 Rippel 和 Adams(2013)接下来表明,深度流模型的密度可以检测图像的旋转和损坏。Papamakarios(2017 年)在无条件和有条件密度估计任务上,系统比较了掩膜自回归流,表明他们提出的组合方法比其他流模型变体(即 MADEReal NVP)具有更好的密度估计。Grathwohl 等(2019)进行了类似的实验,来验证连续时间流的有效性。

6.1.2 生成模型

第二个任务是生成数据:从模型中采样获得新的实例,使其就像从真实分布 px(x)p^∗_{\mathbf{x}}(\mathbf{x}) 中采样一样。

在这种情况下,准确的似然值并不是人们想要的最终目标,而只是一个原则性的训练目标,人们最终只是期望它能产生良好的生成性能。生成一直是机器学习中流模型的流行应用,下面我们总结了其在各种数据类别中的应用。

(1)图像和视频

自从最早的流工作以来,图像生成就得到了认真的努力。Laparra 等(2011),在上述相同的工作中,使用高斯化来生成人脸的灰度图像。 Rippel 和 Adams (2013) 也证明了在生成性能方面的早期成功,因为他们模型中的 MNIST 样本看起来相当引人注目。Dinh 等(2015 年)通过使用耦合参数化,显示出进一步的改进,包括与其他高容量模型(例如因子分析器的深度混合)竞争的密度估计和可观的 SVHN 数字生成。在后续工作中,Dinh 等(2017 年)通过包括比例变换(而不仅仅是平移)来增加模型的容量,这是第一个证明流模型可以产生清晰、视觉上引人注目的全彩色图像的人。具体来说,Dinh 等 (2017) 展示了来自在 CelebA、ImageNet (64×64)、CIFAR-10 和 LSUN 上训练的模型的引人注目的样本。 Kingma 和 Dhariwal (2018) 使用类似模型但添加了额外的卷积层,在 Dinh 等基础上进一步改进了在密度估计和高维图像生成方面的结果。连续流(Grathwohl 等,2019 年)和残差流(Behrmann 等,2019 年;Chen 等,2019 年)已被证明可以产生清晰的高维图像。最后,Kumar 等 (2019) 提出归一化流对视频数据进行建模,采用 Glow 架构(Kingma 和 Dhariwal,2018 年)来合成原始 RGB 帧。

(2)音频

自回归模型 WaveNet(van den Oord 等,2016a)在音频合成方面表现出令人印象深刻的性能。虽然 WaveNet 不是归一化流,但在后续工作中 van den Oord 等(2018 年)通过将 WaveNet 蒸馏为逆自回归流,来定义音频合成流,提高了测试时的采样效率。 Prenger 等(2019) 和 Kim 等(2019) 制定了从耦合层构建的 WaveNet 变体,以实现快速似然计算和采样,从而消除了对 van den Oord 等 (2018)训练后蒸馏的要求。

(3)文本

将归一化流应用于文本数据的最直接方法,是在字符或词汇表上定义离散流。Tran 等(2019) 采用这种方法,在字符级语言建模方面表现出与 RNN 相媲美的性能,同时具有出色的生成运行时间。一种被广泛使用的替代方法是定义一个具有离散似然但具有连续隐空间的隐变量模型,然后可以像往常一样在隐空间上定义归一化流。 Ziegler 和 Rush (2019) 使用这种方法进行字符级语言建模。Zhou 等(2019),He 等(2018)和Jin 等(2019)将单词嵌入连续空间上的归一化流定义为分别用于翻译、句法结构和解析模型的子组件。

(4)其他结构化对象

扩展流模型以对其他结构化对象进行操作是一个新兴工作领域。到目前为止,流模型已应用于图(Deng 等,2019)、分子(Madhawa 等,2019;Honda 等,2019)、点云(Yang 等,2019)和零件模型运动合成(Henter 等,2019 年)。

6.2 后验分布的推断

上一节的重点是建模数据和恢复其基础分布。我们现在转向推断任务:估计模型中的未知量。最常见的设置是计算以下形式的高维、难解析的积分:

π(η)dη\int \pi(\boldsymbol{\eta}) d \boldsymbol{\eta}

贝叶斯推断在计算后验的归一化常数或计算后验支持下的期望时,通常会遇到上述障碍。下面我们总结了使用流进行采样、变分推断和无似然推断。

6.2.1 重要性与拒绝采样

重要性采样 (Importance Sampling) 难以处理的积分转换为关于辅助分布 q(η)q(\boldsymbol{\eta}) 的期望:

π(η)dη=q(η)π(η)q(η)dη=Eq(η)[π(η)q(η)]1Ss=1Sπ(η^s)q(η^s)\int \pi(\boldsymbol{\eta}) d \boldsymbol{\eta}=\int q(\boldsymbol{\eta}) \frac{\pi(\boldsymbol{\eta})}{q(\boldsymbol{\eta})} d \boldsymbol{\eta}=\mathbb{E}_{q(\boldsymbol{\eta})}\left[\frac{\pi(\boldsymbol{\eta})}{q(\boldsymbol{\eta})}\right] \approx \frac{1}{S} \sum_{s=1}^S \frac{\pi\left(\hat{\boldsymbol{\eta}}_s\right)}{q\left(\hat{\boldsymbol{\eta}}_s\right)}

其中 q(η)q(\boldsymbol{\eta}) 是用户指定的密度函数,η^s\hat{\boldsymbol{\eta}}_s 是来自 q(η)q(\boldsymbol{\eta}) 的样本。显然,重要性采样需要用到采样和密度估值。由于对于大多数流模型来说,这两种运算都易于处理,所以流模型为构建提议分布提供了一个有吸引力的模型。

Muller 等(2019) 就是这样做的:他们使用归一化流实现 q(η)q(\boldsymbol{\eta})。 重要性采样的实用性关键取决于提议分布的选择,因此必须优化流的参数。Muller 等(2019) 讨论了拟合 q(η)q(\boldsymbol{\eta}) 的两种策略。当 π(η)\pi(\boldsymbol{\eta}) 可以解释为非归一化密度时,首先是最小化归一化目标和流之间的 KL\mathbb{KL} 散度:DKL[p(η)q(η)]D_{\mathbb{KL}}[p(\boldsymbol{\eta}) \| q(\boldsymbol{\eta})] 其中 p(η)=π(η)/Zp(\boldsymbol{\eta})=\pi(\boldsymbol{\eta}) / ZZ=π(η)dηZ=\int \pi(\boldsymbol{\eta }) d \boldsymbol{\eta} 是一个难以处理的归一化常数(等于我们希望计算的量)。而 DKL[p(η)q(η)]D_{\mathrm{KL}}[p(\boldsymbol{\eta}) \| q(\boldsymbol{\eta})] 无法计算,重要性采样可用于计算散度相对于流参数的梯度。二是直接最小化重要性采样估计量的方差。当 π(η)\pi(\boldsymbol{\eta}) 再次是非归一化密度时,这相当于最小化提议分布和 p(η)=π(η)/Zp(\boldsymbol{\eta})=\pi (\boldsymbol{\eta}) / Z 之间的 χ2\chi^2-散度。

Noé 等 (2019) 和 Wirnsberger 等(2020 年)也以类似的方式将流用于提议分布。

拒绝抽样 (RS) 的相关技术旨在从 p(η)=π(η)/Zp(\boldsymbol{\eta})=\pi(\boldsymbol{\eta}) / Z 中抽取样本,其中 π(η)\pi(\boldsymbol{\eta} ) 又是一个未归一化的密度。 RS\mathrm{RS} 中的提议分布需要密度估计和采样,这再次使归一化流非常适合。 Bauer 和 Mnih (2019) 使用 Real NVP 架构 (Dinh 等, 2017) 参数化 RS\mathrm{RS} 的提议分布,因为耦合层允许快速密度估值和采样。

6.2.2 MCMC

流在流马尔可夫链蒙特卡罗 (MCMC) 中的应用比在深度学习中至少早了几十年。一个突出的例子是哈密顿蒙特卡罗(HMC),也称为混合蒙特卡罗(Duane 等,1987;Neal,2010)。

HMC 在 “相空间” (η,v)(\boldsymbol{\eta},\mathbf{v}) 上运行,其中 η\boldsymbol{\eta} 是感兴趣的变量,v\mathbf{v} 是附加的与 η\boldsymbol{\eta} 维数相同的动量变量。 HMC 从联合分布 p(η,v)p(\boldsymbol{\eta}, \mathbf{v}) 生成样本,这样其在 η\boldsymbol{\eta} 上的边缘就是感兴趣的分布。 HMC 的核心是由 H(η,v)=logp(η,v)H(\boldsymbol{\eta}, \mathbf{v})=-\log p(\boldsymbol{\eta}, \mathbf{v}) 定义的哈密顿量。给定一个状态 (η,v)(\boldsymbol{\eta}, \mathbf{v}),HMC 确定性地提出一个新状态 (η,v)=T(η,v)\left(\boldsymbol{\eta}^{\prime}, \mathbf{v}^{\prime }\right)=T(\boldsymbol{\eta}, \mathbf{v}) ,其中 TT 是哈密顿流,后跟负的动量变量。然后使用通常的 Metropolis-Hastings 步骤接受/拒绝建议的状态。哈密流是由以下 ODE 生成的连续时间流:

d(η,v)dt=(Hv,Hη)(115)\frac{d(\boldsymbol{\eta}, \mathbf{v})}{d t}=\left(\frac{\partial H}{\partial \mathbf{v}},-\frac{\partial H}{\partial \boldsymbol{\eta}}\right) \tag{115}

这个流是保体积的,这意味着它的绝对雅可比行列式在任何地方都是 11,这与负的动量变量相结合,确保了提议分布是对称的,因此在 Metropolis-Hastings 比率中被抵消。

也可以使用上述哈密顿流以外的流来构建 MCMC 算法。一个例子是 A-NICE-MC (Song 等, 2017),它类似于 HMC,但使用由 ϕ\boldsymbol{\phi} 参数化的任意保体积流 T(;ϕ)T(\cdot ; \boldsymbol{\phi}) 构建提议分布。Song 等(2017) 使用 Dinh 等 (2015) 的 NICE 模型,但新方法更普遍地适用于任何保体积流。给定一个状态 (η,v)(\boldsymbol{\eta}, \mathbf{v}),它以等概率提出一个等于 T(η,v; phi)T(\boldsymbol{\eta}, \mathbf{v} ; \boldsymbol{\ phi})T1(η,v;ϕ)T^{-1}(\boldsymbol{\eta}, \mathbf{v} ; \boldsymbol{\phi}) 的新状态。该提议是对称的,因此在 Metripolis-Hastings 比率中被消去。使用对抗训练将参数 ϕ\boldsymbol{\phi} 调整为兴趣分布。

将流应用于 MCMC 的另一种方法是:使用流模型重参数化目标分布。众所周知,MCMC 的效率很大程度上取决于易于探索的目标分布。如果目标高度偏斜和/或多峰值,MCMC 的性能就会受到影响,从而导致混合和收敛缓慢。通过允许 MCMC 在更简单和表现更好的基础密度上运行,归一化流可以有效地 “消除” 目标几何中的这些病状。给定未归一化的目标 π(η)\pi(\boldsymbol{\eta}),我们可以根据基密度 pu(u)p_{\mathrm{u}}(\mathbf{u}) 重参数化模型,使得 η=T(u;ϕ)\eta =T(\mathbf{u} ; \boldsymbol{\phi}) 。为简单起见,假设提议分布是对称分布,将 Metropolis-Hastings 比率应用于重参数化模型会产生:

r(u^;u^t)=pu(u^)pu(u^t)=π(T(u^;ϕ))detJT(u^;ϕ)π(T(u^t;ϕ))detJT(u^t;ϕ),r\left(\hat{\mathbf{u}}_* ; \hat{\mathbf{u}}_t\right)=\frac{p_{\mathrm{u}}\left(\hat{\mathbf{u}}_*\right)}{p_{\mathrm{u}}\left(\hat{\mathbf{u}}_t\right)}=\frac{\pi\left(T\left(\hat{\mathbf{u}}_* ; \boldsymbol{\phi}\right)\right)\left|\operatorname{det} J_T\left(\hat{\mathbf{u}}_* ; \boldsymbol{\phi}\right)\right|}{\pi\left(T\left(\hat{\mathbf{u}}_t ; \boldsymbol{\phi}\right)\right)\left|\operatorname{det} J_T\left(\hat{\mathbf{u}}_t ; \boldsymbol{\phi}\right)\right|},

其中 u^\hat{\mathbf{u}}_* 表示建议值,u^t\hat{\mathbf{u}}_t 表示当前值。假设 TT 足够强大,使得 T1(η;ϕ)T^{-1}(\boldsymbol{\eta} ; \boldsymbol{\phi}) 根据更简单的基础分布真正分布,探索目标应该变得相当容易。在实践中,即使 pu(u)p_{\mathrm{u}}(\mathbf{u}) 是各向同性的,通过哈密顿动力学而不是简单的各向同性提议分布生成提议分布仍然有用(Hoffman 等,2019) .

虽然上面的重参数化相对简单,但如何设置或优化 TT 的参数仍然是一个关键问题。 Titsias (2017) 将链的运行与流参数的更新交错,通过在给定运行的最后一个样本下最大化未归一化的重参数化目标来执行优化:

argmaxϕlogπ(T(u^tfinal ;ϕ))+logdetJT(u^tfinal ;ϕ).\underset{\phi}{\arg \max } \log \pi\left(T\left(\hat{\mathbf{u}}_{t_{\text {final }}} ; \phi\right)\right)+\log \left|\operatorname{det} J_T\left(\hat{\mathbf{u}}_{t_{\text {final }}} ; \phi\right)\right| .

然而,这个选择是一种启发式的,并不能保证鼓励链的混合。正如 Hoffman 等(2019) 指出,这样的选择可能会强调模式发现。作为替代方案, Hoffman 等(2019) 建议首先通过变分推断将流模型拟合到 p(η)=π(η)/Zp(\boldsymbol{\eta})=\pi(\boldsymbol{\eta}) / Z,然后在重参数化的模型上运行哈密顿蒙特卡罗,使用从流中采样以初始化链。

6.2.3 变分推断

我们还可以使用归一化流来拟合潜在变量或模型参数的分布。具体来说,流可以有效地用作局部(Rezende 和 Mohamed,2015;van den Berg 等,2018;Kingma 等,2016;Tomczak 和 Welling,2016)和全局(Louizos 和 Welling,2017)变量的后验近似值.

例如,假设我们希望在给定一些观测 x\mathrm{x} 的情况下推断变量 η\boldsymbol{\eta}。在归一化流的变分推断中,我们使用(训练的)流模型 q(η;ϕ)q(\boldsymbol{\eta} ; \boldsymbol{\phi}) 来近似后验如下:

p(ηx)q(η;ϕ)=qu(u)detJT(u;ϕ)1,p(\boldsymbol{\eta} \mid \mathbf{x}) \approx q(\boldsymbol{\eta} ; \boldsymbol{\phi})=q_{\mathrm{u}}(\mathbf{u})\left|\operatorname{det} J_T(\mathbf{u} ; \boldsymbol{\phi})\right|^{-1},

其中 qu(u)q_{\mathrm{u}}(\mathbf{u}) 是基分布(这里通常是固定的),T(;ϕ)T(\cdot ; \boldsymbol{\phi}) 是变换(参数化为ϕ\phi)。如果我们想要近似 x\mathbf{x} 的多个值的后验,我们可以使流模型以 x\mathbf{x} 为条件,并在 x\mathbf{x} 的值之间分摊推断成本,通过最大化证据下界( ELBO\mathbb{ELBO} )来训练流,可以写成:

logp(x)Eq(η;ϕ)[logp(x,η)]Eq(η;ϕ)[logq(η;ϕ)]=Equ(u)[logp(x,T(u;ϕ))]Equ(u)[logqu(u)]+Equ(u)[logdetJT(u;ϕ)]=Equ(u)[logp(x,T(u;ϕ))]+H[qu(u)]+Equ(u)[logdetJT(u;ϕ)],\begin{aligned} \log p(\mathbf{x}) & \geq \mathbb{E}_{q(\boldsymbol{\eta} ; \boldsymbol{\phi})}[\log p(\mathbf{x}, \boldsymbol{\eta})]-\mathbb{E}_{q(\boldsymbol{\eta} ; \boldsymbol{\phi})}[\log q(\boldsymbol{\eta} ; \boldsymbol{\phi})] \\ &=\mathbb{E}_{q_{\mathrm{u}}(\mathbf{u})}[\log p(\mathbf{x}, T(\mathbf{u} ; \boldsymbol{\phi}))]-\mathbb{E}_{q_{\mathrm{u}}(\mathbf{u})}\left[\log q_{\mathrm{u}}(\mathbf{u})\right]+\mathbb{E}_{q_{\mathrm{u}}(\mathbf{u})}\left[\log \left|\operatorname{det} J_T(\mathbf{u} ; \boldsymbol{\phi})\right|\right] \\ &=\mathbb{E}_{q_{\mathrm{u}}(\mathbf{u})}[\log p(\mathbf{x}, T(\mathbf{u} ; \boldsymbol{\phi}))]+\mathbb{H}\left[q_{\mathrm{u}}(\mathbf{u})\right]+\mathbb{E}_{q_{\mathrm{u}}(\mathbf{u})}\left[\log \left|\operatorname{det} J_T(\mathbf{u} ; \boldsymbol{\phi})\right|\right], \end{aligned}

其中 H[qu(u)]\mathbb{H}\left[q_{\mathrm{u}}(\mathbf{u})\right] 是基分布的微分熵,它是关于 ϕ\phi 的常数。期望项可以通过蒙特卡洛估计,使用来自基分布的样本,如下所示:

Equ(u)[logp(x,T(u;ϕ))]1Ss=1Slogp(x,T(u^s;ϕ)),Equ(u)[logdetJT(u;ϕ)]1Ss=1SlogdetJT(u^s;ϕ).\begin{aligned} &\mathbb{E}_{q_{\mathbf{u}}(\mathbf{u})}[\log p(\mathbf{x}, T(\mathbf{u} ; \boldsymbol{\phi}))] \approx \frac{1}{S} \sum_{s=1}^S \log p\left(\mathbf{x}, T\left(\hat{\boldsymbol{u}}_s ; \boldsymbol{\phi}\right)\right), \\ &\mathbb{E}_{q_{\mathrm{u}}(\mathbf{u})}\left[\log \left|\operatorname{det} J_T(\mathbf{u} ; \boldsymbol{\phi})\right|\right] \approx \frac{1}{S} \sum_{s=1}^S \log \left|\operatorname{det} J_T\left(\hat{\boldsymbol{u}}_s ; \boldsymbol{\phi}\right)\right| . \end{aligned}

归一化流可以被认为是实现了 “广义重参数化技巧”(Kingma 和 Welling,2014a;Rezende 等,2014;Kingma 和 Welling,2014b),因为它们利用固定分布的转换来从兴趣分布中抽取样本。因此,流可以定义了灵活的、便于重参数化设计的近似后验。

6.2.4 无似然推断

模型经常会是隐式的。这意味着它们并非是根据似然函数 p(xη)p(\mathbf{x} \mid \boldsymbol{\eta}) 定义的( 似然函数描述了可观测变量 x\mathbf{x} 如何依赖于模型参数 η\boldsymbol{\eta} )。相反,它们以模拟器的形式出现,接受参数 η\boldsymbol{\eta} 并模拟变量 x\mathbf{x}(Diggle 和 Gratton,1984)。

这种基于模拟器的模型在宇宙学(Alsing 等,2018 年)、高能物理学(Brehmer 等,2018 年)和计算神经科学(Gonçalves 等,2020 年)等科学领域很常见。在给定观测数据 x\mathrm{x} 的情况下,推断基于模拟器的模型参数 η\boldsymbol{\eta} 通常被称为 无似然推断 (Papamakarios, 2019)、基于模拟的推断 (Cranmer 等., 2020) 或 近似贝叶斯计算 (Beaumont 等, 2002; Beaumont, 2010)。无似然推断的典型假设是:我们可以很容易地从给定参数 η\boldsymbol{\eta} 时的模型中模拟出变量 x\mathrm{x},但估计似然值 p(xη)p(\mathbf{ x} \mid \boldsymbol{\eta}) 很难。

归一化流天然适合无似然推断,尤其是以辅助信息为条件的流(例如 Winkler 等,2019;Ardizzone 等,2019)。假设在感兴趣的参数上有易于处理的先验 p(η)p(\boldsymbol{\eta}),我们可以生成一个数据集 {(ηn,xn)}n=1N\left\{\left(\boldsymbol{\eta}_n, \mathbf{x}_n \right)\right\}_{n=1}^N,其中 ηnp(η)\boldsymbol{\eta}_n \sim p(\boldsymbol{\eta});而 xn\mathbf{x}_n 是从带有参数 ηn\boldsymbol{\eta}_n 的模型中模拟得到的。

换句话说,(ηn,xn)\left(\boldsymbol{\eta}_n, \mathbf{x}_n\right) 来自 p(η,x)=p(η)p(xη)p(\boldsymbol{\eta}, \mathbf{x})=p( \boldsymbol{\eta}) p(\mathbf{x} \mid \boldsymbol{\eta})。使用 第 6.1 节 中描述的方法,我们可以拟合一个以 x\mathbf{x} 为条件的流模型 q(ηx)q(\boldsymbol{\eta} \mid \mathbf{x}) 来生成数据集 {(ηn,xn)}n=1N\left\{\left(\boldsymbol{\eta}_n, \mathbf{x}_n\right)\right\}_{n=1}^N ,以便得到后验 p(ηx)p(\boldsymbol{ \eta} \mid \mathbf{x}) 的近似(Greenberg 等,2019;Gonçalves 等,2020)。或者,我们可以拟合一个以 η\boldsymbol{\eta} 为条件的流模型 q(xη)q(\mathbf{x} \mid \boldsymbol{\eta}),以得到难以处理的似然 p(xη)p(\mathbf {x} \mid \boldsymbol{\eta}) 的近似(Papamakarios 等,2019)。在任何一种情况下,经过训练的流模型对于任何需要密度估值或采样的下游任务,都非常有用。

6.3 表示学习

流也有作为下游任务构建块的应用。我们讨论了两个这样的案例,即 监督学习强化学习

6.3.1 分类任务与混合建模

可逆 ResNets(除了实现如 第 3.3 节 所述的残差流)已被探索用于分类任务(Jacobsen 等, 2018; Behrmann 等, 2019)。

这条工作线将可逆性用于密度计算以外的其他目的:

  • 第一个是工程改进:通过避免存储反向传播激活的需要来减少模型的内存占用(Gomez 等,2017 年)。
  • 第二个是提高模型的可解释性和对深度学习机制的理解。

Jacobsen 等(2018 年)表明,可逆 ResNet 可以训练到与不可逆 ResNet 几乎相同的 ImageNet 精度。这一成就可以帮助我们了解丢弃信息在多大程度上对深度学习的成功至关重要(Tishby 和 Zaslavsky,2015 年)。Jacobsen 等(2019)使用可逆架构来研究不变性与对抗性攻击的脆弱性之间的关系。

通过将流用作混合模型的核心组件,流可用于联合生成和预测建模(Nalisnick 等,2019 年)。像在可逆 ResNets 中一样,流被用作深度神经特征提取器,但与 ResNets 不同,选择架构使得雅可比行列式易于处理。利用生成模型 x=T(u)\mathbf{x}=T(\mathbf{u}) 重参数化关节密度,我们可以写成:

logp(y,x)=logp(yx)+logp(x)=logp(yT1(x))+logpu(T1(x))+logdetJT1(x).(121)\begin{aligned} \log p(\mathbf{y}, \mathbf{x}) &=\log p(\mathbf{y} \mid \mathbf{x})+\log p(\mathbf{x}) \\ &=\log p\left(\mathbf{y} \mid T^{-1}(\mathbf{x})\right)+\log p_{\mathrm{u}}\left(T^{-1}(\mathbf{x})\right)+\log \left|\operatorname{det} J_{T^{-1}}(\mathbf{x})\right| . \end{aligned} \tag{121}

我们可以将流视为定义架构的前 L1L-1 层,并将最后一层定义为对特征 u=T1(x)\mathbf{u}=T^{-1}( \mathbf{x})。然后第二项使这些特征根据 pu(u)p_{\mathrm{u}}(\mathbf{u}) 分布,这可以看作是特征空间上的正则化器。例如,如果 pu(u)p_{\mathrm{u}}(\mathbf{u}) 是标准正态分布,那么 logpu(T1(x))\log p_{\mathrm{u}}\left(T^{-1}(\mathbf{ x})\right) 有效地作为 2\ell_2 的惩罚。雅可比行列式在确保密度正确归一化方面发挥其通常的作用。因此,公式 121 形式的混合模型可以计算标签和特征的联合密度,而对标准前向传播几乎没有额外的成本。额外的计算由最右边的两项引入,并取决于它们的特定形式。如果 pu(u)p_{\mathrm{u}}(\mathbf{u}) 是标准正态分布并且 TT 通过耦合层定义,那么额外的计算是 O(DL)\mathcal{O}(DL) 其中 DD 是输入维数和 LL 层数。

6.3.2 强化学习

最后,在本节中,我们给出了两个示例,说明迄今为止如何将归一化流用于强化学习 (RL)。

(1)重参数化策略

强化学习中流最流行的用途是对(连续)策略进行建模。一个在状态 st\mathbf{s}_t 和时间 tt 条件下的动作 atRD\mathbf{a}_t \in \mathbb{R}^D ,采样自 a^t=T(u^t;st,ϕ),u^tpu(ut)\hat{\mathbf{a}}_t =T\left(\hat{\mathbf{u}}_t ; \mathbf{s}_t, \boldsymbol{\phi}\right), \hat{\mathbf{u}}_t \sim p_{\mathrm{ u}}\left(\mathbf{u}_t\right) ,其中 pup_{\mathrm{u}} 表示基密度。相应的条件密度写为:

pi(atst)=pu(ut)detJT(ut;st,ϕ)1(122)p i\left(\mathbf{a}_t \mid \mathbf{s}_t\right)=p_{\mathrm{u}}\left(\mathbf{u}_t\right)\left|\operatorname{det} J_T\left(\mathbf{u}_t ; \mathbf{s}_t, \boldsymbol{\phi}\right)\right|^{-1} \tag{122}

Haarnoja 等(2018)和 Ward 等(2019)分别在最大熵和软行为评价框架内使用了该策略。

(2)模仿学习

Schroecker 等(2019)在模仿学习范式中,使用归一化流来解决控制问题。给定观测到的专家(连续)状态-动作对 (s,a)(\overline{\mathbf{s}},\overline{\mathbf{a}}),模仿学习的核心挑战是考虑未观测到的中间状态。 Schroecher 等(2019) 使用条件流来模拟这些中间状态及其相应动作。

具体来说,对于状态 st+j(j1)\overline{\mathbf{s}}_{t+j}(j \geq 1),从模型中采样前驱状态动作对:

p(st,atst+j)=p(atst,st+j)p(stst+j)(123)p\left(\mathbf{s}_t, \mathbf{a}_t \mid \overline{\mathbf{s}}_{t+j}\right)=p\left(\mathbf{a}_t \mid \mathbf{s}_t, \overline{\mathbf{s}}_{t+j}\right) p\left(\mathbf{s}_t \mid \overline{\mathbf{s}}_{t+j}\right) \tag{123}

右侧的两个项均由 MAF 定义(Papamakarios 等,2017)。

7 结论

我们已经描述了归一化流及其在概率建模和推断中的用途。我们解决了关键问题,例如它们的表达能力(第 2.2 节)及其构造的基本原理(离散时间和连续时间)。我们还描述了概率变换的一般原理(第 5.1 节)及其对定义欧几里得空间之外的流的影响。特别是,我们展示了离散域、流混合和黎曼流形的扩展都遵循这个广义的观点。最后,总结了流的主要应用(第 6 节):从密度估计到无似然推断到分类任务。

虽然随着归一化流工作的继续,许多流设计和具体实现将不可避免地过时,但我们试图剥离出能够继续引导该领域走向未来的基本思想。这些基石原则之一是:概率的链式法则及其与三角雅可比变换的关系。自回归流站在这两个支柱上,前者支撑着其表达能力,后者提供了其有效实施。同样,Banach 不动点定理为收缩残差流提供了数学基础。虽然可以开发转换函数 gϕg_{\phi} 的替代参数化或归一化策略,但在不违反不动点定理的情况下,不能放弃隐的 Lipschitz 约束。

在整篇文章中,我们强调了指导成功应用流的关键实施说明。也许最重要的是确定评估正变换和逆变换的计算约束。正如在 第 2 节 中所展示的,采样和密度估计对转换提出了不同的要求。由于流对于 TT 是否应该实现 UXU \rightarrow X 或反之亦然没有内在要求,我们可以自由选择哪个方向更适合我们的应用。如果采样或密度估计是主要目标(但不是两者同时)则自回归流呈现出有吸引力的、灵活的模型类别。然而,如果采样和密度估值都必须经常或快速完成,那么使用基于耦合的调节器实现自回归流将使这两种操作都高效,但会牺牲表达能力。另一方面,非自回归流(例如线性流和残差流)允许流中每个步骤的所有维度之间的交互。虽然这些交互有时很有用(使线性流有利于在连续的自回归流和高度表达的残差流之间置换变量),但也会出现其他限制。例如,收缩残余流通常需要迭代算法进行采样和密度估值。由于所有流结构都存在某种形式的权衡,我们希望本文提供一个连贯且易于理解的总结,以指导从业者通过这些选择点。

展望未来,阻碍归一化流更广泛应用的障碍在本质上与任何概率模型所面临的障碍相似。然而,与其他在扩展时需要近似推断的概率模型不同,流通常允许分析计算和精确采样,即使是在高维时也是如此。相反,困难转移到了流变换的构建:我们如何定义更灵活的转换,同时保持精确的密度估值和采样计算上的可处理性?这是目前许多工作的重点,并且可能在一段时间内仍然是核心问题。还需要对流的理论特性进行更多研究。了解它们对有限样本和有限深度设置的近似能力将有助于从业者选择最适合给定应用的流类型。我们在 第 5 节 中对泛化的讨论,有望为归一化流的理论和应用的下一波发展提供基础和灵感。