7 第七章
通常认为归一化流是一个去逼近目标分布的模型。但流匹配不是这样的,流匹配更像是一个动力学模型,考虑的是如何输出一个运动状态。
7.1 什么是动力学模型
关于什么是动力学模型,我认为动力学模型可以是一个数学公式、一组制定好的规则或者是一段文字…,重要的是它们都可以用来描述某个系统自身或内部状态如何随着某个东西(如时间)的变化而变化。
考虑物体在平地上滑动,其状态可以由位置\(x\)刻画,\(\dot x\)则表示的是速度。
假设\(\dot x\)满足\(\dot x = x^2 - 1\):
可以注意到它有两个特别的点,其中左侧黑色实心点(-1位置处)是个稳定吸引子,因为当\(x\)位置小于-1时,受到的速度方向往右,随着接近-1逐渐停止。当\(x\)的位置大于-1但小于1时,速度方向往左。
而白色空心点(1位置处)则是个排斥子,其周围两侧的速度方向都是远离它的速度方向。
一般而言一个多维的动力系统或模型可以表示为:
\[ \begin{aligned} \dot{x_1}&=f_1(x_1,\dots,x_n)\\ &\ \ \vdots \\ \dot{x_n}&=f_n(x_1,\dots,x_n) \end{aligned} \tag{7.1}\]
\(x_1 \sim x_n\)是系统状态,\(\dot{x_1} \sim \dot{x_n}\)通常是它们关于时间的一阶导数(或理解成速度)。它决定了系统状态下一瞬间要朝哪个方向、以多大的速度演化。
由\(x_1 \sim x_n\)张成的空间叫做相空间,相空间里每个点代表了一组系统状态,\(\dot{x_1} \sim \dot{x_n}\)速度向量和的积分构成了相空间的相流(或轨迹),相流决定了系统状态未来时刻的演化。
以二维为例,每个点的位置由 \((x_1, x_2)\) 刻画,而速度向量由 \((\dot{x_1}, \dot{x_2})\) 刻画。在给定了微分方程后,每个点的相流也就确定了,通过对它进行积分就可以预测未来任一时刻的状态。
如图所示,这个局部的二维相图中也存在一个排斥子和一个吸引子,系统状态会沿着箭头方向演化,最终都会“流动”到吸引子后保持不动。它是一个稳定系统,至少是局部稳定的。
与之相对的,有一类系统被称为混沌系统,它虽然受确定性的微分方程控制,但又表现出高度的随机性,如洛伦兹系统、三体系统等。
混沌系统的状态通常是无法稳定下来,但不能稳定下来的系统不一定是混沌系统,例如极限环系统:
它的中心点是一个排斥子,无论从环内向外发散、还是从环外向内汇聚,轨迹最终都会被吸引并永远循环在孤立的闭合轨道上,虽然系统状态永远不会稳定下来,但通常认为这是一个稳定的系统。
混沌系统一个很经典的例子是洛伦兹方程:
\[ \begin{aligned} \dot{x} &= \sigma (y - x) \\ \dot{y} &= x (\rho - z) - y \\ \dot{z} &= xy - \beta z \end{aligned} \tag{7.2}\]
当设定参数 \(\sigma = 10, \rho = 28, \beta = \frac{8}{3}\) 时,系统在三维相空间中随时间变化的轨迹如图所示:
它的吸引子是个蝴蝶状的吸引子,被称为奇异吸引子,系统状态永远在两翼上无限循环又永不重复,状态永远不会落在同一个点上,呈现出一种又确定又随机的感觉。
7.2 突变理论
另一个和动力学相关的,有趣又迷人的东西是突变理论。
突变理论揭示了这样一个事实:在某些非线性系统中,控制参数平滑、连续微小的变化,可能会导致系统状态发生突然的、不连续的跳跃。
其中最著名的是尖点突变模型。它起源于研究这样一个势函数: \[V(x, a, b) = \frac{1}{4}x^4 + \frac{1}{2}ax^2 + bx\]
其中\(x\)是系统状态,\(a\)和\(b\)是控制参数,考虑寻找势函数的稳态点,即: \[ \frac{\partial V}{\partial x}=x^3 + ax + b = 0 \]
根据代数基本定理,当给定\(a\)、\(b\)后,这个关于\(x\)的一元三次方程,在实数域要么有1个解,要么有3个解。而代表两个控制参数的因子,通常被称为“分裂因子”和“正规因子”。
当我们在三维空间 \((a, b, x)\) 中画出所有满足该方程的平衡点时,我们会得到一个折叠的曲面,它叫尖点突变流形。
想象有一根针,垂直于\(ab\)平面穿越下去,和流型曲面的交点就是计算得到的\(\frac{\partial V}{\partial x}=0\)的点。我们只会遇到穿越三次或穿越一次的情况,分别对应着三个解和只有一个解。
特别地,对于有三个解的情况,根据流型的形状,可以分为上层解、中层解和下层解。而中层解对应着的是势函数的极大值点,它这确实是一个平衡点,但就像一个在山顶的光滑小球,稍微一点干扰就滚落下去了,换句话说系统永远不会展示出中层解的系统状态。它只有可能表现出上层解或下层解对应的\(x\)中的其中一个。
然后有趣的事情发生了,当系统对外展示出某个\(ab\)下的两个稳定解的其中一个的状态时,若我们平滑缓慢地移动控制参数\(a\)和\(b\),我们可能会碰到流型的折叠边缘,一旦越过折叠边缘,系统当前的状态会瞬间消失,并“摔向”另一个稳定解的\(x\),如图所示:
图 7.6 中黄色路径的\(x\)是势函数系统\(V\)初始时对外展示出的内部状态,随着\(b\)的缓慢增大,上层解和中层解在数值上逐渐接近,然后在折叠边缘碰到一起,此时\(b\)再继续增加,势函数系统\(V\)对应着的上层稳态的状态突然消失,并迅速切换成下层稳态解的内部状态,对应的是绿色的\(x\)。
更有意思的是,此时系统对外显示的是绿色的\(x\),若缩小\(b\),系统不会沿着原路径回到黄色\(x\),而是会优先选择沿着下层解的曲面移动到折叠边缘,再跳回到上层解的曲面,这一现象被称为“回滞效应”。
其实这和上层解表现出来的行为模式是一样,根本原因在于物理世界中的势函数\(V\)自身倾向于保持稳定(最小作用量原理),这注定着\(x\)首先会往最节省能量的方向优化,直到一个解的消失,势函数当前状态已经无法再维持了,才会变到另一个稳态。
除了应用在数学或物理上,尖点突变在精神分析上也有应用,Robert M. Galatzer-Levy在他的《非线性精神分析:混沌理论与复杂性理论四十年研究手记》里面提到了尖点突变应用于分析人们行为关系:
包括亲密行为与敌对行为的突然转变与回滞效应。
7.3 群体行为
不知道你们有没有见过夏天晚上萤火虫闪耀着飞舞,在空间中穿梭时隐时现,给静谧的夜晚添加一点点生机的情景。反正我是没见过,但是它们有个特性,当一群萤火虫在闪光时它们的闪光频率会趋于同步,呈现同时亮同时灭的效果。这个现象被称为“自发同步”,关于“自发同步”,由物理学家藏本由纪提出的藏本模型可以给我们一些启示。
模型基本方程为:
\[ \frac{d \theta_i}{d t}=\omega_i + \frac{K}{N}\sum_{j=1}^N \sin(\theta_j - \theta_i) \tag{7.3}\]
\(\omega_i\)是自然振动频率,\(K\)是耦合强度,\(N\)是所有耦合振子的个数。\(\frac{d \theta_i}{d t}\)意指当前振动的瞬时角速度。\(\theta_j\)和\(\theta_i\)是第\(j\)个和第\(i\)个振子的相位。
单独考虑\(\frac{K}{N}\sum_{j=1}^N \sin(\theta_j - \theta_i)\)项,在\(K=0\)时,式 7.3 回归到自然频率,也就是各动各的互不干扰。而对于\(k>0\)的情况,\(\sin(\theta_j - \theta_i)\)是个修正项,如果\(\theta_j\)比\(\theta_i\)大,也就是它超前一点,\(\sin(\theta_j - \theta_i)\)也会变大,从而让第\(i\)个振子的瞬时角速度变大,尝试追上\(j\)的频率。\(\theta_j\)比\(\theta_i\)小时情况则反过来。
对于只有两个振子的情况,方程还是比较好分析的。一旦考虑多个振子,上述推论就过于简单了,这里面涉及到自然频率的分布情况、\(K\)的临界相变系数等等。虽然我们无法完全确定里面发生了什么事情,但基本上是让转的慢的快一点,快的慢一点。
当\(K\)大于临界相变系数\(K_c\)后,神奇的事情会发生:振子开始是混乱的,但是会在突然之间频率达到一致并锁定到一起。
下面是一个100个振子的交互组件。每个小圆代表一个独立的振子,它们各自拥有不同的自然频率 \(\omega_i\)。
当 \(K = 0\) 时,所有小圆的指针各转各的,快慢不一。
你可以试着拖动\(K\),看看变化起情况。
- 需要说明的是 \(K\) 旁边有个播放按钮,因为我在读什么文字的时候,如果知道有个一直在动的东西(即使看不到它),就会感到很焦虑。
然后你还可能会注意到一件事,就是在同步后暂停,会发现每个小圆的相位不会相同,这不是一个计算错误, 式 7.3 本身只是一个锁定频率的东西,每个圆的相位在\(\frac{K}{N}\sum_{j=1}^N \sin(\theta_j - \theta_i)\)加加减减后达到了某种平衡,然而我们并不清楚里面具体发生了什么。
关于非线性动力学,康奈尔大学Steven Strogatz的《Nonlinear Dynamics and Chaos》非常不错。