try ai
科普
编辑
分享
反馈
  • 归一化流

归一化流

SciencePedia玻尔百科
核心要点
  • 归一化流利用一系列遵循变量替换公式的可逆函数,将简单的已知概率分布转换为复杂的概率分布。
  • 计算雅可比行列式这一主要挑战,通过使用如耦合层等专门架构得以解决,这些架构能创建三角矩阵以实现高效计算。
  • 连续归一化流(CNFs)将变换构建为一个微分方程,为建模概率密度提供了一种替代性的连续方法。
  • 这些模型应用广泛,从对物理系统建模和重构分子,到实现因果推断和评估小概率事件。

引言

对真实世界数据中复杂的、高维的概率分布进行建模——从分子的构型到图像的像素——是现代科学和机器学习领域的一项基本挑战。虽然许多现象受制于错综复杂的概率景观,但用数学方法来描述它们通常是难以处理的。本文将介绍归一化流,这是一类优雅而强大的生成模型,它直面这一问题。通过从一个简单的、已知的概率分布开始,并应用一系列可逆变换,这些模型可以学会表示几乎任何复杂的目标分布。本文将引导您了解使这些模型得以工作的核心概念。第一章“原理与机制”将深入探讨其数学基础,解释变量替换公式以及像耦合层和连续流这样旨在使模型在计算上可行的巧妙架构解决方案。第二章“应用与跨学科联系”将展示归一化流非凡的多功能性,探索其在统计物理学、计算化学、因果推断和工程风险评估等领域中的应用。

原理与机制

想象一下您有一团黏土。您可以拉伸、扭曲、折叠它,并将其塑造成您喜欢的任何形状——一个杯子、一座雕塑、一根长线。归一化流就是一种数学上的方法,它所塑造的不是黏土,而是概率本身。我们从一团简单的、易于理解的概率体开始——就像一个完美的圆球,通常是标准高斯分布——然后我们应用一系列变换,将其塑造成我们想要建模的真实世界数据的复杂、精细的形状,无论它是分子结构的分布还是恒星照片中的图案。

这个过程的全部魔力都建立在一个基本原理之上,以及物理学家和计算机科学家为使其可行而发明的巧妙的机械解决方案。让我们一同探索这些思想,从核心原理到赋予其生命的复杂机制。

概率的守恒定律

我们旅程的指路明灯是微积分中的一条法则,即​​变量替换公式​​。其核心是一种守恒的表述。不要将概率看作一个数字,而要看作一种无质量的、连续的“物质”。如果您有一个空间区域,它包含了一定量的这种概率物质。现在,如果您变换这个空间——比如说,您将其拉伸到原始体积的两倍——那么该区域内概率物质的密度必须减少一半。物质的总量是守恒的,所以如果体积增加,密度就必须减少,反之亦然。

在数学上,空间的这种拉伸和挤压是由​​雅可比行列式​​来度量的。如果我们有一个变换 fff,它将我们简单的“基”空间中的一个点 z\mathbf{z}z 映射到我们复杂的“数据”空间中的一个点 x\mathbf{x}x,即 x=f(z)\mathbf{x} = f(\mathbf{z})x=f(z),那么雅可比矩阵 Jf(z)J_f(\mathbf{z})Jf​(z) 就是一个包含所有可能的偏导数 ∂xi∂zj\frac{\partial x_i}{\partial z_j}∂zj​∂xi​​ 的表格。它告诉我们输出 x\mathbf{x}x 的每个坐标如何响应输入 z\mathbf{z}z 每个坐标的微小变动。其行列式的绝对值 ∣det⁡(Jf)∣|\det(J_f)|∣det(Jf​)∣ 告诉我们局部的体积变化。如果 ∣det⁡(Jf)∣=2|\det(J_f)| = 2∣det(Jf​)∣=2,这意味着 z\mathbf{z}z 周围的一个微小立方体被拉伸成 x\mathbf{x}x 周围体积为其两倍的形状。

变量替换公式将数据空间中的概率密度 pX(x)p_X(\mathbf{x})pX​(x) 与我们简单的基空间中的密度 pZ(z)p_Z(\mathbf{z})pZ​(z) 联系起来:

pX(x)=pZ(z)∣det⁡(Jf(z))∣−1p_X(\mathbf{x}) = p_Z(\mathbf{z}) |\det(J_f(\mathbf{z}))|^{-1}pX​(x)=pZ​(z)∣det(Jf​(z))∣−1

这个方程非常优美。它告诉我们,观测到特定数据点 x\mathbf{x}x 的概率,就是它所来源的简单点 z\mathbf{z}z 的概率,再根据变换在此过程中对空间拉伸或压缩的程度进行调整。为了使用这个公式,我们的变换 fff 必须是​​可逆的​​——我们需要能够找到任意 x\mathbf{x}x 所对应的唯一 z\mathbf{z}z——并且我们必须能够计算那个雅可比行列式。

核心挑战:易于处理的行列式

至此,我们遇到了归一化流的核心工程问题。我们希望我们的变换 fff 具有极强的表达能力——为此我们通常使用深度神经网络——这样它才能学会将我们的概率黏土塑造成非常复杂的形状。然而,对于像深度神经网络这样的一般复杂函数,计算其雅可比矩阵及其行列式是一场噩梦。对于一个 DDD 维问题(比如一个有数千像素的图像,或一个有数百个原子的分子),雅可比矩阵是一个 D×DD \times DD×D 矩阵,简单地计算其行列式需要 O(D3)\mathcal{O}(D^3)O(D3) 次操作。这太慢了,不具备实用性。

于是,问题的关键就变成了一种巧妙的设计。我们能否构建出既高度灵活又具有极易计算的雅可比行列式的变换?事实证明,答案是肯定的,而且解决方案非常优雅。

耦合层:一个简单而强大的技巧

其中一个最基础、也最巧妙的解决方案是​​耦合层​​。其思想很简单:不要一次性变换整个向量,而是分而治之。

想象一下我们的输入向量 z\mathbf{z}z 被分成两部分,z1\mathbf{z}_1z1​ 和 z2\mathbf{z}_2z2​。一个耦合层采用了非常简单的规则:

  1. 第一部分保持不变:x1=z1\mathbf{x}_1 = \mathbf{z}_1x1​=z1​。
  2. 第二部分通过一个简单的函数(如缩放和平移)进行变换,但该变换的参数由一个复杂的神经网络决定,该网络只观察第一部分 z1\mathbf{z}_1z1​。

​​仿射耦合层​​通过线性变换来实现这一点:

x1=z1x2=z2⊙exp⁡(s(z1))+t(z1)\begin{align*} \mathbf{x}_1 &= \mathbf{z}_1 \\ \mathbf{x}_2 &= \mathbf{z}_2 \odot \exp(s(\mathbf{z}_1)) + t(\mathbf{z}_1) \end{align*}x1​x2​​=z1​=z2​⊙exp(s(z1​))+t(z1​)​

在这里,sss 和 ttt(分别代表缩放和平移)是输入为 z1\mathbf{z}_1z1​ 的神经网络的输出,而 ⊙\odot⊙ 表示逐元素相乘。

为什么这个设计如此巧妙?让我们思考一下雅可比矩阵,它描述了输出 x=(x1,x2)\mathbf{x} = (\mathbf{x}_1, \mathbf{x}_2)x=(x1​,x2​) 如何随输入 z=(z1,z2)\mathbf{z} = (\mathbf{z}_1, \mathbf{z}_2)z=(z1​,z2​) 变化。由于 x1\mathbf{x}_1x1​ 只依赖于 z1\mathbf{z}_1z1​,雅可比矩阵的右上角块为零。这使得整个矩阵成为​​分块下三角矩阵​​。三角矩阵有一个极好的性质:它们的行列式就是对角线元素的乘积!在这种情况下,行列式就是变换第二部分的缩放因子的乘积:∏iexp⁡(si(z1))\prod_i \exp(s_i(\mathbf{z}_1))∏i​exp(si​(z1​))。在我们用于训练的对数域中,这变成了一个简单的求和:∑isi(z1)\sum_i s_i(\mathbf{z}_1)∑i​si​(z1​)。这个计算效率极高。

我们两全其美:一个高表达能力的神经网络可以学习任意复杂的缩放和平移行为,而行列式的计算仍然微不足道。为了变换整个向量,我们只需堆叠这些层,并交替保留向量的其中一半不变。

这种基本的耦合思想可以变得更加强大。我们可以使用更灵活的非线性“扭曲”函数,而不是简单的仿射变换。一个流行的现代选择是​​有理二次样条(RQS)​​。它用一个由连接的曲线段构成的光滑、可逆的函数取代了简单的 scale * input + shift。这使得模型能为每个维度学习到更复杂、非线性的变换,但因为它仍然在耦合层内部,雅可比矩阵保持三角形式,其对数行列式仍然只是这些样条的对数导数的高效求和。

超越耦合:其他几何思想

耦合层并非唯一的技巧。其他设计通过不同的几何见解实现了易于处理的雅可比行列式。一个很好的例子是​​径向流​​。

径向流层不是沿坐标轴进行剪切和缩放,而是在一个中心点 z0\mathbf{z}_0z0​ 周围扩张或收缩空间。变换如下所示:

f(z)=z+βh(r)(z−z0)f(\mathbf{z}) = \mathbf{z} + \beta h(r)(\mathbf{z} - \mathbf{z}_0)f(z)=z+βh(r)(z−z0​)

其中 r=∥z−z0∥r = \|\mathbf{z} - \mathbf{z}_0\|r=∥z−z0​∥ 是到中心点的距离,而 h(r)h(r)h(r) 是一个类似 1α+r\frac{1}{\alpha + r}α+r1​ 的函数。这个变换根据参数的不同,有效地将点“推”离 z0\mathbf{z}_0z0​ 或“拉”近它。

这个变换的雅可比矩阵不是三角矩阵。但是,它有另一种特殊结构:它是一个缩放的单位矩阵加上一个秩为一的矩阵。具有这种结构的矩阵有非常特定的几何效应:它在向量 (z−z0)(\mathbf{z} - \mathbf{z}_0)(z−z0​) 方向上的空间缩放与所有与之正交的方向不同。由于其对空间的影响是如此结构化和可预测,它的行列式同样可以用一个简单的封闭形式表达式计算,避免了通用的 O(D3)\mathcal{O}(D^3)O(D3) 计算。这表明这些层的设计空间是丰富的,唯一的限制在于我们寻找具有可计算雅可比行列式的变换的创造力。

连续的技巧:作为微分方程的流

到目前为止,我们通过应用一系列离散的步骤或层来构建我们复杂的雕塑。但是,如果我们将这些步骤变得无穷小并应用无穷多个呢?这引出了一个优美而强大的思想:​​连续归一化流(CNF)​​。

在这种观点下,变换不是一堆层的叠加,而是随时间平滑的“流”。我们使用一个神经网络 g(z(t),t)g(\mathbf{z}(t), t)g(z(t),t) 来定义点 z(t)\mathbf{z}(t)z(t) 在任何时刻 ttt 的速度:

dz(t)dt=g(z(t),t)\frac{d\mathbf{z}(t)}{dt} = g(\mathbf{z}(t), t)dtdz(t)​=g(z(t),t)

为了变换我们简单基分布中的一个点 z0\mathbf{z}_0z0​,我们只需在时间 t0t_0t0​ 将其置于此向量场中,让它流动到时间 t1t_1t1​。它所遵循的路径是这个常微分方程(ODE)的解,其最终位置就是我们的数据点 x=z(t1)\mathbf{x} = \mathbf{z}(t_1)x=z(t1​)。

我们的守恒定律在这里如何应用?变量替换公式优雅地转变为其连续形式。对数概率密度的总变化是对数体积瞬时变化率的积分。这种瞬时膨胀或收缩率由雅可比矩阵的​​迹​​给出,即 Tr(∂g∂z)\text{Tr}(\frac{\partial g}{\partial \mathbf{z}})Tr(∂z∂g​)。迹是雅可比矩阵对角线元素的和。因此,对数概率变为:

log⁡pX(x)=log⁡pZ(z(t0))−∫t0t1Tr(∂g(z(t),t)∂z(t))dt\log p_X(\mathbf{x}) = \log p_Z(\mathbf{z}(t_0)) - \int_{t_0}^{t_1} \text{Tr}\left(\frac{\partial g(\mathbf{z}(t), t)}{\partial \mathbf{z}(t)}\right) dtlogpX​(x)=logpZ​(z(t0​))−∫t0​t1​​Tr(∂z(t)∂g(z(t),t)​)dt

这非常直观:最终的对数行列式就是粒子整个路径上所有无穷小的膨胀和收缩的累积。

但我们又遇到了另一个实际的障碍。在 ODE 求解器的每一步都计算雅可比矩阵的迹仍然成本太高。此时,另一项巧妙的数学工具前来救场:​​Hutchinson 迹估计器​​。它指出,对于任何矩阵 AAA,其迹可以通过计算 ϵTAϵ\boldsymbol{\epsilon}^T A \boldsymbol{\epsilon}ϵTAϵ 的期望值来估计,其中 ϵ\boldsymbol{\epsilon}ϵ 是一个均值为零、方差为一的随机噪声向量。这使我们能够在每一步都获得迹的廉价、无偏估计,而无需构建完整的雅可比矩阵。我们甚至可以通过扩充原始的 ODE 系统来求解累积的迹估计值,从而使整个过程端到端可训练。

从一个简单的守恒定律出发,我们穿越了一片充满巧妙设计的领域——三角矩阵、特殊的几何结构,以及连续流的优雅形式主义。每一步都揭示了运用数学原理解决复杂现实世界问题时所固有的美感和统一性的更深层次。这就是归一化流的精髓:用纯数学中经过精细调整的、易于处理的工具来塑造概率。

应用与跨学科联系

既然我们已经掌握了归一化流的数学核心——即从简单空间到复杂空间的可训练、可逆的旅程这一思想——很自然地会问:它有什么用?这种优雅的机制在纷繁复杂、多方面的科学与工程世界中何处安身?

答案既广泛又深刻。我们发现,这一个概念就像一根统一的线索,贯穿于现代科学的织锦中,从物理学家模型中原子的统计之舞,到评估数十亿美元工程项目风险的巨大挑战。让我们开始一次应用之旅,在旅途中发现这一思想真正的多功能性和美感。

作为物理雕塑家的流

也许归一化流最直接、最直观的应用就是作为一个物理系统的完美模型。想象一个简单的粒子系统,它们相互振动和作用,可能由无形的弹簧连接。在给定温度下,这些粒子并非随意静止;它们的集体位置遵循一个由统计力学定律——著名的玻尔兹曼分布——所支配的特定概率分布。对于简单的相互作用,比如谐振子,这个目标分布具有一个熟悉的形式:一个多维高斯分布,一种被拉伸和旋转的钟形曲线。

在这里,归一化流可以实现一些非凡的成就。如果我们选择一个简单的线性流——最基本的一种,它只对空间进行缩放、旋转和平移——我们可以训练它,将一个平淡无奇、完美圆形的标准高斯分布,精确地变换成物理玻尔兹曼分布的形状。流的变换矩阵学会了捕捉由连接它们的“弹簧”所引起的粒子间的精确相关性,而其缩放参数则学会了由温度决定的粒子振动幅度。当模型与物理现实完美匹配时,由 Kullback-Leibler 散度度量的模型分布与真实分布之间的“距离”变为零。这是一种优美的一一对应关系:数学模型的参数不再是抽象的数字;它们就是物理本身。流变成了一位雕塑家,将一块无形的概率块完美地雕琢成体现物理定律的形状。

逐个原子重构世界

这对于简单系统来说非常棒,但对于计算科学家们每天都在努力解决的真正复杂的系统又如何呢?想象一下蛋白质分子的壮丽之舞,一个由数千个原子组成的巨大链条在水浴中折叠和弯曲。模拟每一个原子的运动都极其昂贵。为了取得进展,科学家们通常会创建一个“粗粒度”模型,用单个代表性的珠子代替原子团。这就像画城市地图时用色块表示街区,而不是画出每一栋建筑。

这种简化是有代价的。我们失去了精细的细节。我们如何把它找回来?这就是“反向映射”(backmapping)问题:给定粗粒度珠子的位置,我们如何重构一个合理的、具有原子级细节的蛋白质结构?答案并非唯一;大量的原子排列都可能对应于同一个粗粒度状态。

这是一个为条件归一化流量身定做的挑战。我们可以训练流来学习条件分布 P(原子位置∣粗粒度位置)P(\text{原子位置} | \text{粗粒度位置})P(原子位置∣粗粒度位置)。它学会了将简化模型“重新膨胀”回其完整的原子级荣耀的复杂、隐含的规则。但故事在这里变得更加巧妙。我们不必仅仅依赖数据。正如在为这类模型设计损失函数的挑战中所展示的那样,我们可以将物理定律直接构建到训练过程中。

流以双重目标进行训练。一方面,它试图从数据库中复现真实的原子结构(通过实例学习)。另一方面,如果它生成了一个具有荒谬高势能、违反了已知的原子键和相互作用物理学的假设结构,它就会受到惩罚。因此,流被迫成为一个伪造大师,生成新的原子构型,这些构型不仅在几何上与粗粒度输入一致,而且在热力学上稳定且物理上真实。它弥合了不同现实尺度之间的差距,而这一切都由一个简单概率分布的变换所驱动。

从相关到因果:作为因果引擎的流

到目前为止,我们看到的流模型模拟的是现状——系统可能处于的状态。但科学最深远的目标不仅仅是描述,更是理解原因。它旨在理清相关性与因果关系之间错综复杂的纠结。看到两件事同时发生很容易;知道其中一件事是否导致另一件事则极其困难。归一化流能在这方面帮助我们吗?

答案出人意料,是肯定的。通过精心设计流的架构,我们可以将关于因果关系的假设融入其中。假设我们推断一种材料的基本描述符 XXX(比如,其平均键长)是可观察属性 YYY(比如,其硬度)的直接原因。我们可以构建一个反映这一因果链 X→YX \rightarrow YX→Y 的流。流首先从其自身的分布中生成一个 XXX 的值,然后,以该结果为条件,它生成一个 YYY 的值。通过以这种方式构建模型,我们不再仅仅是学习联合概率 P(X,Y)P(X,Y)P(X,Y)。我们正在分别对机制 P(Y∣X)P(Y|X)P(Y∣X) 和原因的分布 P(X)P(X)P(X) 进行建模。

这种分离是解锁一项新的、近乎神奇的能力的关键:我们现在可以进行计算实验。我们可以向模型提出一个仅从相关性无法回答的问题:“如果我们能够干预并设定键长 XXX 为某个特定值 x0x_0x0​,那么硬度 YYY 的分布会是怎样的?”

这就是因果推断科学中著名的 do 算子。一个结构合理的归一化流允许我们通过在生成过程中简单地固定 XXX 的值,并观察由此产生的 YYY 的分布,来计算干预分布 P(y∣do(X=x0))P(y|do(X=x_0))P(y∣do(X=x0​))。这将归一化流从一个纯粹的描述性工具提升为一个真正的因果发现引擎,使我们能够探索世界的运行机制并提出“如果……会怎样?”的问题。

灾难的放大镜

从基础科学的“如果……会怎样?”,我们可以转向实际工程的“如果……会怎样?”。一座桥梁坍塌、一座大坝失效或一个喷气发动机断裂的概率是多少?这些都是风险评估中的关键问题,但它们涉及“小概率事件”,根据定义,这些事件难以观察和模拟。

如果您试图用标准的蒙特卡洛模拟来估计这个微小的概率,就像试图在一片广阔的白色沙滩上随机捡起沙粒,以找到那一粒黑色的沙子。您可能需要永远采样,才能发现任何有价值的东西。这正是归一化流可以作为“重要性采样”的宝贵工具的地方。

其思想是首先训练一个流来学习“危险区域”的形状——即在不确定输入(材料缺陷、极端载荷等)的高维空间中,实际导致系统失效的有限区域。流学习将一个简单的分布直接映射到这个复杂如大海捞针的失效区域。

一旦训练完成,这个流就成了我们的向导。我们不再从整个沙滩上随机抽样输入,而是利用流专门从它已识别为危险的区域(即黑色的沙粒)中抽取样本。当然,这是一个有偏的样本,但我们可以通过适当地对每个样本加权来精确地纠正这种偏差。结果是对失效概率的计算效率大大提高。流就像一个放大镜,让我们能将计算预算集中在那些对安全性和可靠性至关重要的小概率但关键的场景上。

从塑造物理定律到重构分子,从揭示因果联系到预防灾难性故障,归一化流的历程证明了一个伟大思想的力量。这是一个关于转变的故事,不仅是变量和分布的转变,也是我们如何在整个科学领域解决问题的方式的转变。其底层是一个单一而优雅的原则:一条从简单到复杂的可学习、可逆的路径。