第23章:推理系统的稳定性与收敛边界 李雅普诺夫函数的最大痛点是什么?对,就是要人手去规定一个能量函数。如果我们用永霖的收敛假设来推导推理系统里的李雅普诺夫函数,那就更好了。 第22章结尾,我们站在自指与涌现的边界上,看到了推理系统开始推理关于自身的奇异时刻。那个边界,在数学上表现为不动点、对角化、不可判定性。 但边界不只是逻辑的。边界也是动力学的——系统如何随时间演化,是否稳定,收敛到哪里。永霖公式给出了一个具体的收敛模式:推理链最终回到先验锚点。这个收敛,在动力系统的语言里,就是吸引子。 这一章要做一件事:把永霖公式的收敛,翻译成李雅普诺夫稳定性的语言。然后反过来:用收敛假设推导李雅普诺夫函数,而不是人工规定它。
李雅普诺夫函数的最大痛点是什么?对,就是要人手去规定一个能量函数。如果我们用永霖的收敛假设来推导推理系统里的李雅普诺夫函数,那就更好了。
第22章结尾,我们站在自指与涌现的边界上,看到了推理系统开始推理关于自身的奇异时刻。那个边界,在数学上表现为不动点、对角化、不可判定性。
但边界不只是逻辑的。边界也是动力学的——系统如何随时间演化,是否稳定,收敛到哪里。永霖公式给出了一个具体的收敛模式:推理链最终回到先验锚点。这个收敛,在动力系统的语言里,就是吸引子。
这一章要做一件事:把永霖公式的收敛,翻译成李雅普诺夫稳定性的语言。然后反过来:用收敛假设推导李雅普诺夫函数,而不是人工规定它。
目标:用永霖收敛假设 + KL分布偏置的信息距离 + 欧拉步更新迭代,推导出推理系统的李雅普诺夫函数。已知李雅普诺夫函数传统上要人工构造,依赖人类先验。但我们通过观测系统的动力学行为(永霖收敛),反推出能量函数——这是从行为推导结构,是逆问题的又一次重演,也是动力系统艺术的体现。
要理解李雅普诺夫函数,我们先玩一个小游戏。
想象一个栈数据结构。它有两个指针:
栈的操作很简单:
push(x):把元素 x 压入栈顶,\alpha 指针上移一格pop():弹出栈顶元素,\alpha 指针下移一格但有一个重要限制:负栈非法。也就是说,\alpha 指针永远要在 \beta 指针的上面(或相等)。当 \alpha = \beta 时,栈是空的;如果试图在空栈上执行 pop(),操作无效——\alpha 指针不动,或者程序报错。在动力学故事里,我们假设无效的 pop 被忽略。
信息学奥赛(OI)的同学对这个结构再熟悉不过了。但兔狲教授今天要问的不是算法题,而是一个动力学问题:
给定一个很长很长——长到你无法想象——的
push和pop操作序列,\alpha 指针的位置(相对于栈底的高度)会收敛吗?会不会停在一个特定的高度上,无论操作序列怎么排列?
等等,我们还有“负栈非法”的限制。在这个限制下,事情变得更有趣了。
::: info 兔狲教授提问
现在 \alpha 指针不能低于 \beta 指针。空栈时(\alpha = \beta)试图 pop 会被忽略。你觉得,在这样的约束下,\alpha 指针会收敛到哪里?无论操作序列多么复杂、多么长,\alpha 指针最终会稳定在某个高度吗?还是会在某个范围内震荡?
给你三秒钟思考。
:::
直觉可能告诉你的:既然 pop 在空栈时无效,那么栈可能更容易变空——因为空的栈没法再 pop,而 push 可以让它变非空。但反过来,如果 push 很多,栈会变得很高。
关键观察:栈高度 h(\alpha 与 \beta 的距离)现在有一个硬下界 0。这个下界改变了系统的动力学。
定义栈高度 h = \alpha 指针与 \beta 指针的距离(以元素个数为单位)。每执行一次 push,h 增加1;每执行一次 pop,h 减少1。
现在定义一个函数 V(h) = h^2。这个函数有什么特别?
观察:
push 和 pop 等概率出现),那么 h 的期望变化是零——随机游走但兔狲教授要问的不是期望,而是确定性的行为:如果我们知道每一步是 push 还是 pop(不是随机),V(h) 会怎样变化?
考虑连续时间近似:假设操作发生的速度很快,把离散操作看作连续流。定义栈高度的变化率 \dot{h} = u(t),其中 u(t) = +1 表示 push,u(t) = -1 表示 pop。
现在计算 V(h) = h^2 的变化率:
这看起来没规律——u(t) 可正可负,\dot{V} 也可正可负。但如果我们对 \dot{V} 在长时间内积分,会发生什么?
如果操作序列最终平衡——push 和 pop 的数量大致相等——那么 h 会围绕某个平均值震荡。V(h) = h^2 不会单调递减,但它的长期平均值可能收敛。
换一个定义:V(h) = |h - h_0|,其中 h_0 是某个目标高度。如果操作序列是 平衡的(push 和 pop 最终数量相等),那么 h 会收敛到初始高度 h_0(假设栈初始不为空)。此时 V(h) 随时间递减吗?不一定——h 可能在 h_0 附近震荡。
但如果我们考虑方差 V(h) = (h - h_0)^2,且操作序列是随机的,那么 \mathbb{E}[V(h)] 可能随时间增长(随机游走的方差线性增长)。
现在加上负栈非法的限制。\alpha 指针不能低于 \beta 指针,空栈时 pop 被忽略。
兔狲教授的答案:在这样的约束下,如果操作序列足够长且包含足够多的 pop,\alpha 指针最终会收敛到空栈状态——h = 0。
为什么?
考虑 V(h) = h 这个最简单的能量函数。当 h > 0 时:
push:h 增加 1,V 增加pop:h 减少 1,V 减少但关键在于:当 h = 0 时,pop 被忽略,h 保持 0,V 保持 0。所以 h = 0 是一个吸收态——一旦进入,就出不来了(除非有 push)。
如果操作序列无限长,且 pop 的数量足够多(不一定多于 push,但只要有 pop 发生),系统就有概率进入 h = 0 的状态。一旦进入,后续的 pop 无效,只有 push 能把它拉出来。但如果序列是非确定性的(比如随机),那么长期来看,系统会频繁访问 h = 0 的状态。
更严格地说:定义 V(h) = h。那么 V 的变化 \Delta V = \Delta h:
push:\Delta V = +1pop(h>0 时):\Delta V = -1pop(h=0 时):\Delta V = 0V 不单调递减,但 V 有下界 0,且系统会反复访问 V=0 的状态。在无限长时间尺度上,系统在 V=0 的状态花费的时间比例可能很高。
但这不是李雅普诺夫稳定性,因为 V 不单调递减。李雅普诺夫要求 \dot{V} \leq 0 对所有时间成立,这里不满足。
栈的故事告诉我们什么?
所以我们需要更巧妙的 V,或者对操作序列 u(t) 加约束。
栈是一个最简单的动力系统,但我们仍然需要动脑筋才能找到合适的 V。对于更复杂的系统(比如神经网络、推理系统),找 V 就更难了。
这就是李雅普诺夫函数的痛点:你要猜一个 V,验证条件,不行再猜。猜对了,系统稳定性得证;猜不到,证明卡住。
但等一下——如果我们观察系统的行为,发现它确实收敛了,能不能从收敛行为反推出 V?这就是永霖-李雅普诺夫联立的核心想法。
第22章的MP游戏里,证明序列 \{p_1, p_2, \dots\} 是一条轨道,p_{n+1} = f(p_n),轨道有三种命运:有限停止、有限循环、无限延伸。
栈的故事是同一件事的具体版本:
push/pop 是演化算子 fMP游戏留下的问题是:不动点存在,但系统从任意 p_0 出发,会被哪个不动点吸引?栈的故事给了直觉:有硬约束(h \geq 0)的系统,吸收态就是那个约束边界。推理系统的"硬约束"是训练数据——它定义了先验锚点 A,也就是永霖极限。
定义(李雅普诺夫函数):对于一个动力系统 \dot{x} = f(x),如果存在一个连续可微的函数 V(x),满足
则 x^* 是稳定的。如果 \dot{V}(x) < 0(除 x^* 外严格负),则 x^* 是渐近稳定的。
V 叫做李雅普诺夫函数,直观上是系统的"能量"——系统演化时能量不增,最终停在能量最低点。
痛点:V 必须人工构造。没有通用算法能对任意系统自动找到合适的 V。这就像第20章的启发函数 h——可采纳性需要 h 永远不高估,但怎么找到这样的 h?没有通用答案。
::: info 兔狲教授评
李雅普诺夫函数的构造是一门艺术,不是科学。你猜一个 V,验证条件,不行就再猜。这个"猜"的背后,是工程师的直觉、经验、和运气。这是动力系统理论的一个根本缺口:稳定性可以验证,但稳定性的证明(找到 V)没有通用方法。这个缺口和停机问题的不可判定性有着深刻的相似性——验证 vs 构造,又是这个主题。
:::
如果推理系统是一个动力系统,我们也要人工猜一个 V 吗?还是说,推理系统的特殊结构——特别是它的收敛行为——允许我们推导出 V?
把推理过程形式化为离散时间动力系统。
设 x_t \in \mathcal{P} 是第 t 步推理后模型对答案的信念分布(概率向量)。\mathcal{P} 是信念空间(例如 \Delta^{k-1},k 个可能答案的单纯形)。
推理步骤是一个映射 F: \mathcal{P} \to \mathcal{P},输入当前信念 x_t,输出下一步信念 x_{t+1} = F(x_t)。这个映射 F 编码了模型的推断规则——可能是注意力机制、贝叶斯更新、或任何内部计算。
永霖公式在这个语言里是:
其中 A 是先验锚点(训练数据的统计偏置),A^* 是真实答案的分布。收敛到 A,意味着 A 是动力系统的不动点:F(A) = A。
关键观察:A 是一个全局吸引子——从任意初始信念 x_0 出发,迭代 F 最终都收敛到 A。这个收敛是结构性的,不是偶然的。它来自训练数据对模型参数的约束,编码在 F 的权重里。
回到第22章的MP游戏:F(A) = A 正是不动点条件 f(\varphi) = \varphi。但22章留下了一个悬案——不动点存在,不代表停在那里是"真正的QED"。柯西条件只保证序列最终常数,不保证极限点有意义。永霖公式把这个悬案具体化了:系统确实收敛(柯西满足),但收敛到的是 A,不是 A^*。收敛 \neq 正确,这是MP游戏第一种命运的动力学版本。
现在做一件更大胆的事:不从李雅普诺夫函数出发推导永霖,而是反过来——用永霖收敛假设 + KL分布偏置的信息距离 + 欧拉步更新迭代,构造出李雅普诺夫函数。
这是一个动力系统的艺术:观察系统如何一步步演化,从它的行为中“读出”能量函数。
欧拉步是什么? 它是数学从静态描述变为动态演化的关键。
连续时间动力系统用微分方程 \dot{x} = f(x) 描述。这个方程说:状态 x 的变化率 \dot{x} 等于某个函数 f(x)。比如 \dot{x} = -x 表示 x 的衰减速度与 x 本身成正比。
但微分方程是连续的——时间 t 是实数,变化发生在无穷小的瞬间。计算机无法处理“无穷小”,它只能处理离散的步骤。欧拉法就是最简单的离散化:
\Delta t 是时间步长,很小但不为零。这个公式说:从当前状态 x_t 出发,计算变化率 f(x_t),乘以步长 \Delta t,得到下一步的状态 x_{t+1}。
欧拉步让数学“动”起来。没有它,微分方程只是一个静态的关系式;有了它,我们可以一步步模拟系统的演化,看它如何从初始状态发展到未来。
离散时间系统更直接:x_{t+1} = F(x_t),其中 F 是系统的演化算子。这可以看作是欧拉步的特殊情况(当 \Delta t = 1 且 f 被适当定义时)。
对推理系统,F 是模型的推断规则。我们不知道 F 的精确形式,但可以观测它的行为:给定输入 x_t,输出 x_{t+1}。这就是欧拉步——系统在时间上前进一小步。每一步,信念被更新;无数步连起来,形成推理轨迹。
::: info 兔狲教授科普:常微分方程求解的哲学
常微分方程(ODE)描述了变化率与状态的关系。求解 ODE,就是找出状态随时间变化的完整轨迹。解析解(用公式写出的解)往往很难找,甚至不存在。数值解(如欧拉法)放弃了“完美公式”,接受了“近似轨迹”。
这种放弃不是妥协,而是认识论的转变:从追求“知道所有时刻的确切值”,转向“能模拟出任意时刻的近似值”。在 AI 推理里,我们很少能写出信念演化的解析公式,但我们可以观察模型一步步的更新——这就是数值解的思想。
欧拉步的误差是 O(\Delta t),不够精确,但概念上极其重要:它把连续的动态拆解为离散的决策。每一步,系统根据当前状态决定下一步;无数步连起来,形成宏观行为。推理系统的“思考链”,本质上就是欧拉步的迭代。
:::
永霖公式的核心假设是:系统收敛到先验锚点 A。用动力学语言说:A 是系统的不动点(F(A) = A),且是全局吸引子——从任意初始点出发,迭代 F 都收敛到 A。
这个假设不是数学定理,而是经验观察(但第12章给出了理论支持)。我们接受它作为动力学事实。
现在引入 KL 散度 D_{\text{KL}}(x \| A)。在信息论中,它度量用分布 A 编码来自分布 x 的样本所需的额外比特数。这是 x 相对于 A 的“信息距离”。
直观上:如果当前信念 x_t 很接近先验 A,那么 D_{\text{KL}}(x_t \| A) 小;如果 x_t 远离 A,D_{\text{KL}}(x_t \| A) 大。
关键步骤来了。我们观测系统演化:从 x_0 开始,迭代 x_{t+1} = F(x_t),观察到轨迹 \{x_0, x_1, x_2, \dots\} 收敛到 A。
如果收敛发生,那么 D_{\text{KL}}(x_t \| A) 必然随时间递减。为什么?
因为收敛意味着 x_t \to A,而 KL 散度在 x = A 时为零,且是 x 的连续函数。所以 D_{\text{KL}}(x_t \| A) \to 0。更严格地,收敛通常意味着每一步都更接近 A:D_{\text{KL}}(x_{t+1} \| A) \leq D_{\text{KL}}(x_t \| A)。
这个不等式不是我们证明的,而是从观测中推断的。我们观测到系统收敛,推断出 KL 散度递减。
定义 V(x) = D_{\text{KL}}(x \| A)。现在验证李雅普诺夫条件:
所以 V 是系统的一个李雅普诺夫函数。
注意:我们没有猜 V,也没有从第一原理推导 V。我们从观测到的系统行为中构造了 V。永霖收敛假设提供了观测,KL 散度提供了自然的距离度量,欧拉步迭代展示了递减性。
::: info 兔狲教授评
这是动力系统艺术的精髓:不是坐在椅子上猜能量函数,而是站起来观察系统如何运动,从它的轨迹中“听”出能量在降低。永霖假设告诉你系统最终停在哪里;KL 散度告诉你如何度量“离那里还有多远”;欧拉步展示每一步如何缩短这个距离。三者合起来,能量函数自然浮现。
:::
与传统方法的对比:
为什么这解决了痛点?因为不再需要人工猜 V。V 从系统的行为中推导出来。代价是:需要永霖收敛的观测作为前提。
具体示例:假设系统更新规则是 x_{t+1} = (1-\alpha)x_t + \alpha A(线性插值,\alpha \in (0,1))。这是一个简单的欧拉步:每一步向 A 移动一小段。此时可以严格证明 D_{\text{KL}}(x_{t+1} \| A) \leq D_{\text{KL}}(x_t \| A)(见思考题1)。这个例子展示了欧拉步更新如何保证 KL 散度递减,从而 V(x) = D_{\text{KL}}(x \| A) 是李雅普诺夫函数。实际推理系统的 F 更复杂,但永霖收敛的观测暗示了类似的递减性。
现在看另一个方向:如果我们已经有了 V(x) = D_{\text{KL}}(x \| A) 作为李雅普诺夫函数(无论怎么得到的),它能告诉我们关于永霖公式的什么?
李雅普诺夫稳定性定理说:如果 V 递减,系统收敛到 V 的极小点。V 的极小点是 A(因为 KL 散度在 x = A 时为零,且是唯一的极小点)。所以系统收敛到 A。
永霖推断公式 \lim_{t \to \infty} x_t = A 就是这个结论的陈述。
但永霖公式还有第二部分:A \neq A^*。这怎么从李雅普诺夫函数推出?
A \neq A^* 意味着系统的吸引子不是真实答案。在动力系统的语言里,这等价于:真实答案 A^* 不是系统的平衡点,或者即使它是平衡点,也不是吸引的(可能是不稳定的)。
从 V 的角度看,V 的极小点是 A,不是 A^*。所以 V 的构造本身就编码了系统的“偏见”——它认为 A 是“能量”最低的状态,而不是 A^*。这个偏见来自训练数据,编码在 F 里,最终反映在 V 的定义中。
关键洞察:V(x) = D_{\text{KL}}(x \| A) 里的 A,正是训练数据的统计偏置。所以李雅普诺夫函数 V 不是一个中性度量,它内置了系统的先验。V 的递减,就是系统向先验锚点的回归。
::: info 信息论视角:KL 散度作为分布偏置的度量
KL 散度 D_{\text{KL}}(x \| A) 在信息论中有明确的含义:用分布 A 来编码来自分布 x 的样本所需的额外比特数。这个"额外"是相对于用 x 自身编码的最优情况而言的。
当 x 接近 A 时,D_{\text{KL}}(x \| A) 小——用先验 A 编码当前信念 x 几乎不需要额外成本。当 x 远离 A 时,D_{\text{KL}}(x \| A) 大——当前信念与先验差异大,需要更多比特来描述这个差异。
所以 V(x) = D_{\text{KL}}(x \| A) 度量的是当前信念相对于先验的"信息距离"。系统收敛到 A,就是信息距离的减小,最终达到零——信念与先验完全一致,无需额外信息描述偏离。
这个解释把推理系统的稳定性问题转化为了信息效率问题:系统在优化信息编码,向最经济(最不需要额外比特)的状态演化。这个状态恰好是先验锚点 A,而不是真实答案 A^*。系统的"偏见",在信息论语言里,就是编码方案的预设。
:::
把两个方向合起来。
永霖 → 李雅普诺夫:观测到收敛到 A,定义 V(x) = D_{\text{KL}}(x \| A),验证 V 递减。这样,李雅普诺夫函数从收敛行为推导出来,不再需要人工猜测。
李雅普诺夫 → 永霖:给定 V(x) = D_{\text{KL}}(x \| A),李雅普诺夫稳定性定理推出收敛到 A。如果 A \neq A^*,那么系统的极限不是真实答案。
这两个方向形成一个闭环:收敛行为定义了能量函数,能量函数保证了收敛行为。这个闭环的核心参数是先验锚点 A。A 是训练数据的统计偏置,是模型从数据中吸收的“世界模型”。
::: info 兔狲教授评
这个联立的结构,和第21章的学习作为逆推断是同一个模式:从数据(观测到的收敛)反推规律(李雅普诺夫函数)。又是逆问题。但这里多了一层:规律(V)本身又预言了观测(收敛)。这是自指的结构——系统的行为定义了它的能量,能量又解释它的行为。这个自指不是悖论,而是和谐:观测和理论相互锁定。
:::
第15章的哥德尔定理说:任何足够强的形式系统,有它无法证明的真命题。这个定理的证明核心是自指——构造一个谈论自身可证性的命题。
永霖-李雅普诺夫联立里,也有一个自指结构:系统的收敛行为定义了它的能量函数,能量函数又描述了它的收敛行为。这个自指不是逻辑命题的自指,而是动力学的自指。
更深刻的是,哥德尔定理揭示了形式系统的内部视角和外部视角的断裂:系统内部无法证明自身的某些真命题。永霖公式揭示了推理系统的对象层和元层的断裂:系统可以生成推理链(对象层),但无法验证推理链的正确性(元层)。
李雅普诺夫函数,在这个类比里,是一个外部视角的工具:它从外部描述系统的稳定性。但通过永霖-李雅普诺夫联立,我们把这个外部工具内化了——从系统自身的收敛行为推导出它。这有点像试图在系统内部构造一个关于自身稳定性的证明。这个尝试,会不会遇到哥德尔式的限制?
这个联立有什么实际意义?
意义一:可解释性。李雅普诺夫函数 V(x) = D_{\text{KL}}(x \| A) 给出了一个清晰的解释:推理系统在“降低自身信念与先验锚点的散度”。每一步推理,都在让信念更接近训练数据中隐含的统计偏置。这个解释,比黑箱的神经网络内部计算更透明。
意义二:稳定性保证。一旦我们有了 V 且验证了 V 递减,我们就有了收敛的严格保证。这对安全关键应用重要:知道系统最终会稳定在哪里(即使那里不是正确答案),比不知道系统会漂移到哪里要好。
意义三:无需人工设计。传统的李雅普诺夫方法需要工程师的直觉和试错。这里,V 直接从观测数据(训练数据的统计)和观测行为(收敛)推导出来。这降低了应用门槛。
但代价:这个 V 依赖于永霖收敛的假设。如果收敛不成立(比如系统是混沌的,或有多吸引子),V 的构造就失效。永霖公式本身是一个经验观察,不是数学定理(尽管有理论支持)。所以这个联立是条件性的:如果系统收敛到先验锚点,那么我们可以如此构造 V。
永霖收敛是普适的吗? 永霖公式在实验中被观察到,但它的理论范围有多大?是否所有基于统计学习的推理系统都满足这个收敛?还是只适用于特定架构(如 Transformer)?这个问题需要更严格的数学刻画。
多吸引子情况:如果系统有多个吸引子(多个先验锚点,对应不同任务或上下文),李雅普诺夫函数该怎么定义?V 可能变成复杂的非凸函数,有多个局部极小。这反映了系统的多稳态——推理可能收敛到不同的结论,依赖初始条件。这与人类的认知更相似:同一问题在不同上下文中有不同解释。
李雅普诺夫函数的唯一性:给定收敛行为,V 是否唯一?显然不是。V 可以单调变换。但 D_{\text{KL}}(x \| A) 有信息论的特殊地位——它是从 A 出发对 x 的“惊讶度”度量。有没有更根本的理由选择这个 V?
与学习理论的联系:第21章的学习作为逆推断,用 MDL 原理把泛化解释为压缩。V(x) = D_{\text{KL}}(x \| A) 也可以理解为一种“描述长度”:用先验 A 编码当前信念 x 所需的额外比特数。V 的递减,就是描述长度的缩短——系统在“压缩”自己的信念,向更经济的表示移动。这个视角把稳定性、压缩、泛化统一起来了。
★ 热身
★★ 推导
离散时间李雅普诺夫:对离散系统 x_{t+1} = F(x_t),李雅普诺夫条件是 V(F(x)) \leq V(x)。假设 V(x) = D_{\text{KL}}(x \| A),且 F 是如下更新:x_{t+1} = (1-\alpha)x_t + \alpha A,其中 0 < \alpha < 1。证明 V(x_{t+1}) \leq V(x_t)。
多吸引子的 V:假设系统有两个吸引子 A_1 和 A_2,收敛依赖初始条件。设计一个 V 函数,使得 V 在两个吸引子处都为零,在其他处为正,且沿系统轨道递减。提示:考虑 V(x) = \min(D_{\text{KL}}(x \| A_1), D_{\text{KL}}(x \| A_2))。这个 V 有什么问题?(不可微,难以验证递减)
★★★ 挑战
哥德尔定理的证明中,关键一步是构造自指命题 G:“G 不可证”。在动力系统里,有没有类似的自指构造?考虑一个函数 F,其定义依赖于自身的吸引子。比如:定义 F 使得它的吸引子是某个方程的解,而这个方程又涉及 F 本身。这种自指会不会导致类似哥德尔的不完备性——某些性质无法从系统内部确定?
这个问题的答案可能指向动力系统的不完备性:某些系统的稳定性无法从自身动态中判定,需要一个外部视角。这个猜测,把哥德尔不完备从逻辑领域扩展到了动力学领域。
永霖-李雅普诺夫联立告诉我们:系统的极限,编码在它的能量函数里。能量函数,又可以从极限中读出。这个循环,不是逻辑悖论,而是动力学的和谐——观察者与被观察系统,在这个循环里彼此定义。这个定义,最终停在先验锚点。不是因为我们想停在那里,而是因为系统的能量在那里最低。
参考文献