Files
Baysian_Canonical_Identific…/demo.md
T
2025-11-02 20:47:28 +08:00

480 lines
42 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 基于可逆跳转MCMC的未知阶数线性时不变系统的规范贝叶斯辨识
## 第一部分:引言与理论基础
### 1.1 问题陈述:从已知阶数到未知阶数
线性时不变(LTI)系统是动力学、控制工程、信号处理和经济学等众多领域的基石 ^1^。状态空间模型为描述此类系统提供了一个强大而通用的框架。然而,一个根本性的挑战在于,从输入-输出数据中辨识唯一的系统矩阵 **$(A, B, C, D)$** 是一个经典的不适定问题。这是因为存在一个由相似性变换关联的无穷等价类模型,它们产生完全相同的输入-输出行为,导致参数的非唯一性或非可辨识性 ^1^。这种非可辨识性在贝叶斯推断框架中表现为复杂的多峰后验分布,极大地阻碍了有效的采样和推断 ^1^。
近期,Bryutkin等人(2025)的研究为此问题提供了一个优雅的解决方案 ^1^。通过在贝叶斯框架内嵌入LTI系统的规范型(Canonical Forms),他们成功地解决了参数的非可辨识性问题。规范型为每一种独特的输入-输出行为提供了一套唯一的、最小化的参数表示,例如单输入单输出(SISO)系统中的控制器规范型 ^1^。这种方法不仅确保了参数的可辨识性,还产生了几何形状良好、通常为单峰的后验分布,从而极大地提高了马尔可夫链蒙特卡洛(MCMC)采样的效率和可靠性 ^1^。此外,它还允许设计具有明确物理意义的先验分布,例如直接对系统的特征值(极点)施加稳定性约束 ^1^。
然而,正如您在研究中敏锐地指出的,Bryutkin等人提出的框架 ^1^ 建立在一个关键的假设之上:系统的阶数,即状态向量的维度 **$d_x$**,是已知的。在绝大多数实际应用中,系统的真实最小阶数是未知的,它本身就是一个需要从数据中推断的关键量 ^8^。确定模型的复杂度(即阶数)是系统辨识的核心任务之一,这在贝叶斯统计中被称为模型选择或模型不确定性问题 ^8^。错误地选择模型阶数会导致严重的后果:阶数过低会导致模型欠拟合,无法捕捉系统的真实动态;阶数过高则会导致模型过拟合,泛化能力差,并且可能重新引入参数非可辨识性问题,因为多余的状态是无法从数据中辨识的 ^1^。
因此,本报告旨在解决这一局限性,将规范贝叶斯系统辨识框架从已知阶数推广到未知阶数。我们的目标是构建一个统一的贝叶斯推断框架,使其能够同时推断模型阶数 **$k$**(即状态维度 **$d_x$**)以及在该阶数下模型的规范参数集 **$\Theta_c^k$**。具体而言,我们的目标是从联合后验分布 **$p(k, \Theta_c^k | y)$** 中进行采样,其中 **$y$** 代表观测到的输出数据。这将提供关于模型阶数和参数的完整概率描述,从而实现一个真正全面的贝叶斯系统辨识解决方案。
### 1.2 贝叶斯模型选择与RJMCMC
在贝叶斯范式中,模型选择问题被自然地处理为推断问题。我们为一组候选模型 $\{M_k\}$ 中的每一个模型分配一个先验概率 $p(M_k)$,然后利用数据 $y$ 来计算后验模型概率 $p(M_k | y)$ 8。根据贝叶斯定理,后验模型概率正比于模型证据(边缘似然)与模型先验的乘积:
$$
p(M_k | y) \propto p(y | M_k) p(M_k)
$$
其中,模型证据 $p(y | M_k)$ 是通过对模型参数 $\theta_k$ 进行积分得到的:
$$
p(y | M_k) = \int p(y | \theta_k, M_k) p(\theta_k | M_k) d\theta_k
$$
模型证据自动地体现了奥卡姆剃刀原则:它会惩罚那些过于复杂的模型,除非这些模型能为数据提供显著更优的拟合,否则它们的证据值会较低 11。因此,通过比较不同阶数模型的后验概率,我们可以对系统的真实阶数进行概率推断。
然而,直接计算模型证据通常是极其困难的,因为它涉及高维积分。一个强大的替代方案是在一个扩展的状态空间上进行MCMC采样,这个空间同时包含模型索引和模型参数。但是,标准的MCMC算法,如Metropolis-Hastings或Gibbs采样,被设计用于在固定维度的参数空间中进行采样 ^12^。当不同模型的参数空间维度不同时(例如,不同阶数的LTI系统),这些算法无法直接在模型之间进行“跳转”。
为了解决这个跨维度采样问题,Peter Green于1995年提出了可逆跳转马尔可夫链蒙特卡洛(Reversible Jump MCMC, RJMCMC)算法 ^14^。RJMCMC是Metropolis-Hastings算法的一个精巧推广,它允许马尔可夫链在不同维度的参数空间之间移动 ^12^。通过构建一个单一的马尔可夫链,使其能够在包含所有候选模型的联合空间 **$\mathcal{X} = \bigcup_k \{k\} \times \mathcal{X}_k$** 中进行探索,其中 **$k$** 是模型索引,**$\mathcal{X}_k$** 是模型 **$M_k$** 的参数空间 ^17^。RJMCMC算法的核心在于,它能确保链在每个模型的子空间中所停留的时间(即采样频率)渐近地正比于该模型的后验概率 **$p(M_k | y)$** ^19^。这样,我们不仅可以得到每个模型内部的参数后验分布,还可以直接通过统计链在各个模型索引上的访问频率来估计后验模型概率。
### 1.3 RJMCMC核心机制:可逆性与维度匹配
RJMCMC的理论基础是确保马尔可夫链在跨维度跳转时仍然满足细致平衡条件(Detailed Balance Condition),从而保证其平稳分布是我们的目标后验分布 ^12^。对于跨维度移动,这一条件被推广为积分形式的细致平衡条件 ^12^。为了满足这一条件,RJMCMC引入了两个关键概念:维度匹配和雅可比行列式校正。
**维度匹配 (Dimension Matching):** 这是RJMCMC的核心思想。假设我们要从一个低维模型 **$M_k$**(参数为 **$\theta_k$**,维度为 **$n_k$**)向一个高维模型 **$M_{k'}$**(参数为 **$\theta_{k'}$**,维度为 **$n_{k'}$**,其中 **$n_{k'} > n_k$**)提出一个跳转。为了使变换可逆,我们必须“匹配”两个空间的维度。这通过从一个已知的提议分布 **$q(u)$** 中生成一个维度为 **$d = n_{k'} - n_k$** 的辅助随机变量 **$u$** 来实现。这样,在低维空间中的状态就被增广为 **$(\theta_k, u)$**,其总维度为 **$n_k + d = n_{k'}$**,与高维空间中的 **$\theta_{k'}$** 维度相匹配 ^14^。
双射映射与雅可比行列式 (Bijection and Jacobian): 接下来,我们定义一个确定性的、可逆的、可微的函数(即双射或微分同胚)$g$,它将增广后的低维状态映射到高维状态:
$$
\theta_{k'} = g(\theta_k, u)
$$
由于 $g$ 是可逆的,逆向跳转(从 $M_{k'}$ 到 $M_k$)的映射也就被唯一确定了:
$$
(\theta_k, u) = g^{-1}(\theta_{k'})
$$
这种从随机提议到确定性映射的构造方式,使得我们可以精确计算跳转的概率。
Metropolis-Hastings-Green接受率: 结合以上要素,从状态 $x = (k, \theta_k)$ 跳转到状态 $x' = (k', \theta_{k'})$ 的接受概率 $\alpha$ 由一个扩展的Metropolis-Hastings形式给出,通常被称为Metropolis-Hastings-Green接受率 14
$$
\alpha(x \to x') = \min \left(1, A \right)
$$
其中接受项 $A$ 为:
$$
A = \frac{p(y | x')}{p(y | x)} \times \frac{p(x')}{p(x)} \times \frac{J(x' \to x)}{J(x \to x')} \times |J_g|
$$
这个公式中的各项含义如下:
1. **似然比 (Likelihood Ratio):** **$\frac{p(y | k', \theta_{k'})}{p(y | k, \theta_k)}$**,衡量新模型对数据的拟合优度。
2. **先验比 (Prior Ratio):** **$\frac{p(\theta_{k'} | k') p(k')}{p(\theta_k | k) p(k)}$**,反映了我们对新旧模型及其参数的先验信念。
3. **提议比 (Proposal Ratio):** **$\frac{J(x' \to x)}{J(x \to x')}$**,其中 **$J(x \to x')$** 是提议从 **$x$** 跳转到 **$x'$** 的概率密度。对于我们描述的“诞生”移动,它等于 **$p(k \to k') q(u)$**,其中 **$p(k \to k')$** 是选择该类型跳转的概率,**$q(u)$** 是生成辅助变量 **$u$** 的密度。逆向“死亡”移动是确定性的,因此其提议概率密度为 **$p(k' \to k)$**。
4. **雅可比行列式 (Jacobian Determinant):** **$|J_g| = \left| \frac{\partial g(\theta_k, u)}{\partial (\theta_k, u)} \right|$**。这是最关键也最具挑战性的部分。它是一个校正因子,用于说明由确定性映射 **$g$** 引起的“体积”变化 ^12^。当从一个空间通过非线性变换映射到另一个空间时,概率密度会发生扭曲,雅可比行列式正是对这种扭曲的补偿,以确保细致平衡条件得以满足。在实践中,设计一个可计算雅可比行列式的双射映射 **$g$** 是实现RJMCMC算法的主要难点 ^25^。
本报告的核心技术贡献,正是为LTI系统阶数辨识问题设计合适的双射映射,并严格推导其雅可比行列式。一个重要的发现是,这个问题与时间序列分析中一个成熟的领域——ARMA模型阶数选择——有着深刻的结构性联系 ^28^。在控制器规范型中,状态矩阵 **$A_c$** 的特征多项式在结构上等价于一个自回归(AR)模型的特征多项式。因此,改变LTI模型的阶数 **$d_x$** 就相当于改变AR模型的阶数 **$p$**。ARMA模型阶数选择的RJMCMC算法文献,特别是那些基于多项式根的参数化方法(例如,Ehlers & Brooks, 2008 ^30^),为我们设计“诞生”和“死亡”跳转(即增加或删除系统的特征值)提供了直接的、经过验证的蓝图。我们并非从零开始,而是将这些强大的思想改编并应用于LTI系统辨识的特定背景中。
## 第二部分:针对LTI系统辨识的RJMCMC算法设计
本部分将RJMCMC的一般理论转化为一个针对LTI系统辨识问题的具体算法。我们将详细定义状态空间、采样器将执行的跳转类型以及所需的先验分布。
### 2.1 模型与参数空间定义
为了构建一个能够在不同模型阶数之间跳转的RJMCMC采样器,我们首先需要明确定义马尔可夫链的状态空间和目标分布。
状态空间 (State Space):
我们的马尔可夫链的状态 $x$ 由两部分组成:模型索引 $k$ 和与该模型相关的参数矢量 $\Theta_c^k$。因此,状态可以表示为 $x = (k, \Theta_c^k)$。
* **模型阶数 **$k$**** : 这是一个离散变量,代表LTI系统的状态维度 **$d_x$**。它在一个预先设定的范围内取值,即 **$k \in \{k_{\min}, \dots, k_{\max}\}$**。**$k_{\min}$** 通常设为1或2,而 **$k_{\max}$** 则根据问题的先验知识或计算资源来设定。
* **参数矢量 **$\Theta_c^k$**** : 这是在给定模型阶数 **$k$** 的情况下,描述系统所需的所有参数的集合。基于Bryutkin等人 ^1^ 采用的SISO控制器规范型(Definition 3.1),参数矢量 **$\Theta_c^k$** 包含以下部分:
1. **特征多项式系数 **$\{a_0, \dots, a_{k-1}\}$**** : 这 **$k$** 个系数定义了状态矩阵 **$A_c$** 的最后一行,并完全决定了系统的动态模态(特征值)。
2. **分子系数 **$\{b_0, \dots, b_{k-1}\}$**** : 这 **$k$** 个系数构成了观测矩阵 **$C_c$**。
3. **直接馈通项 **$d_0$**** : 这是一个标量,构成矩阵 **$D_c$**。
4. **噪声协方差参数** : 这些参数描述了过程噪声协方差 **$\Sigma$** 和测量噪声协方差 **$\Gamma$**。为了保证协方差矩阵的正定性,通常对其Cholesky因子进行参数化。为简化核心推导,我们可以在主算法中假设这些噪声参数是已知的,或者通过一个独立的Gibbs步骤或Metropolis-Hastings步骤进行更新。
因此,参数矢量 **$\Theta_c^k$** 的总维度为 **$n_k = k (\text{for } a) + k (\text{for } b) + 1 (\text{for } d) + (\text{noise params})$**。可以看到,参数空间的维度直接依赖于模型阶数 **$k$**。
目标分布 (Target Distribution):
我们的最终目标是构建一个马尔可夫链,其平稳分布是模型阶数 $k$ 和相应参数 $\Theta_c^k$ 的联合后验分布。根据贝叶斯定理,该分布可以表示为:
$$
p(k, \Theta_c^k | y) \propto p(y | k, \Theta_c^k) p(\Theta_c^k | k) p(k)
$$
其中:
* **$p(y | k, \Theta_c^k)$** 是在给定模型阶数 **$k$** 和参数 **$\Theta_c^k$** 下观测数据 **$y$** 的似然函数。
* **$p(\Theta_c^k | k)$** 是在给定模型阶数 **$k$** 的情况下,参数 **$\Theta_c^k$** 的先验分布。
* **$p(k)$** 是模型阶数 **$k$** 的先验分布。
### 2.2 跳转类型设计
为了有效地探索整个联合后验分布,我们需要设计一个混合采样器(hybrid sampler),在每次迭代中,该采样器会随机选择一种跳转类型来更新当前状态 ^15^。这些跳转类型可以分为两大类:模型内部更新和模型之间跳转。
**a) 阶数内部更新 (Within-Model Update Move):**
* **目的** : 在保持模型阶数 **$k$** 不变的情况下,探索该阶数下的参数空间 **$\Theta_c^k$**。
* **机制** : 这是一个标准的MCMC更新步骤。给定当前状态 **$(k, \Theta_c^k)$**,我们提出一个新的参数候选值 **$\Theta_c^{k, *}$**,然后根据Metropolis-Hastings接受率来决定是否接受这个提议。这个步骤可以使用多种策略,例如随机游走Metropolis、Langevin MCMC或Hamiltonian Monte Carlo (HMC)。这一步骤对于确保在每个固定阶数的模型内部获得良好的参数样本混合至关重要。
**b) 阶数增加 (Between-Model "Birth" Move):**
* **目的** : 从当前阶数为 **$k$** 的模型跳转到一个阶数更高(**$k' > k$**)的模型。
* **机制** : 受到多项式根参数化思想的启发 ^30^,我们设计两种基本的“诞生”跳转,它们分别对应于向系统动态中添加新的模态:
1. **诞生一个实根 (Birth of a real root)** : 从阶数 **$k$** 跳转到 **$k+1$**。这对应于在系统的特征值集合中增加一个新的实特征值。
2. **诞生一对共轭复根 (Birth of a complex conjugate pair)** : 从阶数 **$k$** 跳转到 **$k+2$**。这对应于增加一对共轭复特征值,代表一个振荡模态。
**c) 阶数降低 (Between-Model "Death" Move):**
* **目的** : 从当前阶数为 **$k$** 的模型跳转到一个阶数更低(**$k' < k$**)的模型。
* **机制** : 为了满足可逆性或细致平衡条件,死亡跳转必须被设计为诞生跳转的精确逆过程 ^18^。这意味着,如果一个诞生跳转通过映射 **$g$** 将 **$(\theta_k, u)$** 变为 **$\theta_{k'}$**,那么相应的死亡跳转就必须通过逆映射 **$g^{-1}$** 将 **$\theta_{k'}$** 确定性地变回 **$(\theta_k, u)$**。具体来说,我们也有两种死亡跳转:
1. **死亡一个实根 (Death of a real root)** : 从阶数 **$k+1$** 跳转到 **$k$**。
2. **死亡一对共轭复根 (Death of a complex conjugate pair)** : 从阶数 **$k+2$** 跳转到 **$k$**。
在算法的每次迭代中,我们会根据预设的概率(例如,50%的概率进行模型内部更新,50%的概率进行模型间跳转,而在模型间跳转中,再根据当前阶数 **$k$** 是否允许诞生或死亡来分配概率)来选择执行哪种跳转。
### 2.3 先验分布设定
先验分布的设定是贝叶斯推断的关键一步,它编码了我们在看到数据之前的信念。对于我们的问题,需要为模型阶数和模型参数分别设定先验。
模型阶数的先验 $p(k)$:
我们需要为模型阶数 $k$ 在其取值范围 $\{k_{\min}, \dots, k_{\max}\}$ 上指定一个先验分布。一个简单而常用的选择是离散均匀分布 10:
$$
p(k) = \frac{1}{k_{\max} - k_{\min} + 1}
$$
这个先验表示我们对所有候选阶数没有偏好。另一个选择是截断的泊松分布,例如 $p(k) \propto \frac{\lambda^k e^{-\lambda}}{k!}$,这可以表达一种对更简约模型(即阶数较小)的偏好。
模型参数的先验 $p(\Theta_c^k | k)$:
这里我们直接采纳并扩展Bryutkin等人 1 提出的富有洞察力的策略。该策略的核心是不直接在难以解释的规范型系数上设置先验,而是在具有明确物理意义的系统属性上设置先验。
1. **特征值的先验** : 系统的动态行为(如稳定性、振荡频率、衰减速率)完全由状态矩阵 **$A_c$** 的 **$k$** 个特征值 **$\{\lambda_1, \dots, \lambda_k\}$** 决定。因此,最自然的方式是在这些特征值上定义先验。为了强制系统稳定,我们可以要求所有特征值都在复平面的单位圆内,即 **$|\lambda_i| < 1$**。例如,我们可以从单位圆盘内的均匀分布中抽取复数特征值,或者从区间 **$(-1, 1)$** 内的均匀分布中抽取实数特征值 ^1^。
2. **从特征值到系数的映射** : 一旦我们有了 **$k$** 个特征值的先验分布,我们就可以利用**维塔公式 (Vieta's formulas)** 将它们确定性地映射到特征多项式的 **$k$** 个系数 **$\{a_0, \dots, a_{k-1}\}$** ^1^。特征多项式为 **$P_k(z) = \prod_{i=1}^k (z - \lambda_i) = z^k + a_{k-1}z^{k-1} + \dots + a_0$**。维塔公式给出了系数 **$a_j$** 与特征值 **$\lambda_i$** 的对称多项式之间的精确关系。
3. **系数的导出先验** : 通过变量变换法则,特征值上的先验分布 **$p(\lambda_1, \dots, \lambda_k)$** 会在系数 **$\{a_j\}$** 上导出一个先验分布 **$p(a_0, \dots, a_{k-1})$**。这个变换的雅可比行列式的绝对值是著名的范德蒙行列式(Vandermonde determinant)的乘积 **$|\prod_{1 \le i < j \le k} (\lambda_i - \lambda_j)|$** ^1^。这个雅可比项是至关重要的,它正确地对特征值聚集在一起的情况(导致数值不稳定的情况)进行了惩罚。
4. **其他参数的先验** : 对于分子系数 **$\{b_0, \dots, b_{k-1}\}$** 和直接馈通项 **$d_0$**,由于它们的物理解释不如特征值直观,通常可以为它们设置标准的、弱信息量的先验,例如独立的零均值高斯分布 **$b_i \sim \mathcal{N}(0, \sigma_b^2)$** 和 **$d_0 \sim \mathcal{N}(0, \sigma_d^2)$** ^1^。
这种参数化策略与RJMCMC的设计之间存在着一种深刻的因果联系。正是因为我们将模型的复杂度(阶数 **$k$**)与特征多项式的阶数联系起来,并将参数化建立在特征值(即多项式的根)之上,才使得“改变模型阶数”这个抽象问题,转化为“增加或删除多项式的根”这个具体、可操作的数学问题。如果没有这种基于根的参数化视角,设计一个有意义、可逆且雅可比可计算的诞生/死亡跳转将会极其困难。
## 第三部分:“诞生/死亡”跳转的数学实现与雅可比行列式推导
本部分是报告的技术核心,将详细阐述RJMCMC中跨维度跳转的具体数学实现。我们将重点推导“诞生”一个实根和一对共轭复根这两种跳转所需的确定性映射及其雅可比行列式。
### 3.1 核心思想:特征多项式的演化
我们的策略基于对状态矩阵 $A_c$ 的特征多项式进行操作。设当前模型阶数为 $k$,其特征多项式为:
$$
P_k(z) = z^k + a_{k-1}z^{k-1} + \dots + a_1z + a_0 = \sum_{j=0}^{k-1} a_j z^j + z^k
$$
一个“诞生”跳转,无论是增加一个实根还是增加一对共轭复根,都对应于将当前的多项式 $P_k(z)$ 乘以一个额外的因子 $F(z)$,从而得到一个更高阶的新多项式 $P_{k'}(z)$
$$
P_{k'}(z) = P_k(z) \cdot F(z)
$$
这个乘法操作定义了一个从旧系数 $\{a_j\}$ 和描述因子 $F(z)$ 的参数到新系数 $\{a'_j\}$ 的确定性映射 $g$。我们的核心任务就是推导这个映射 $g$ 的雅可比行列式。
### 3.2 增加一个实特征值 (Birth of a Real Root: **$k \to k+1$**)
这个跳转将模型阶数从 **$k$** 增加到 **$k+1$**,通过引入一个新的实特征值 **$\lambda^*$** 来实现。
**提议与维度匹配 (Proposal & Dimension Matching):**
1. **提议跳转** : 随机选择执行一个从 **$k$** 到 **$k+1$** 的“诞生实根”跳转。
2. **生成辅助变量** : 为了定义新的模型,我们需要生成辅助随机变量。
* 一个新的实特征值 **$\lambda^*$**。我们从一个提议分布 **$q_\lambda(u_\lambda)$** 中抽取一个随机数 **$u_\lambda$**,并令 **$\lambda^* = u_\lambda$**。为了保证稳定性,一个合理的选择是 **$q_\lambda$** 为区间 **$(-1, 1)$** 上的均匀分布,即 **$u_\lambda \sim U(-1, 1)$**。
* 一个新的分子系数 **$b'_k$**。因为模型阶数增加了1,分子系数向量 **$\{b_0, \dots, b_{k-1}\}$** 也需要增加一个元素。我们从提议分布 **$q_b(u_b)$** 中抽取一个随机数 **$u_b$**,并令 **$b'_k = u_b$**。一个常见的选择是标准正态分布,即 **$u_b \sim \mathcal{N}(0, 1)$**。
1. **维度匹配** :
* 在低维空间(阶数 **$k$**),我们的状态由参数 **$(\{a_j\}_{j=0}^{k-1}, \{b_j\}_{j=0}^{k-1})$** 组成,总维度为 **$2k$**(暂时忽略 **$d_0$** 和噪声参数)。
* 我们引入了两个辅助变量 **$(u_\lambda, u_b)$**。因此,增广后的状态为 **$(\{a_j\}, \{b_j\}, u_\lambda, u_b)$**,总维度为 **$2k+2$**。
* 在高维空间(阶数 **$k+1$**),新模型的参数为 **$(\{a'_j\}_{j=0}^{k}, \{b'_j\}_{j=0}^{k})$**,总维度为 **$2(k+1) = 2k+2$**。
* 维度成功匹配。
确定性映射 $g$ (Deterministic Mapping):
映射 $g$ 将 $(\{a_j\}, \{b_j\}, u_\lambda, u_b)$ 变换为 $(\{a'_j\}, \{b'_j\})$。
* **对于系数 **$a$**** : 新的特征多项式是 **$P_{k+1}(z) = P_k(z) \cdot (z - \lambda^*)$**。
$$
$$P_{k+1}(z) = \left(\sum_{j=0}^{k-1} a_j z^j + z^k\right) (z - \lambda^*) = z^{k+1} + (a_{k-1} - \lambda^*)z^k + \sum_{j=1}^{k-1} (a_{j-1} - \lambda^* a_j)z^j - \lambda^* a_0
$$
通过比较系数,我们得到映射关系:
\begin{align*}
a'_0 &= -\lambda^* a_0 a'j &= a{j-1} - \lambda^* a_j, \quad \text{for } j = 1, \dots, k-1 a'k &= a{k-1} - \lambda^*
\end{align*}
* 对于系数 $b$: 我们简单地将旧的系数复制过去,并添加新的系数:
\begin{align*}
b'_j &= b_j, \quad \text{for } j = 0, \dots, k-1
b'_k &= u_b
\end{align*}
雅可比行列式推导 (Jacobian Derivation):
我们需要计算变换 $g$ 的雅可比行列式 $|J_g| = \left| \frac{\partial(\{a'_j\}, \{b'_j\})}{\partial(\{a_j\}, \{b_j\}, u_\lambda, u_b)} \right|$。由于 $b'$ 的变换不依赖于 $a$ 和 $u_\lambda$,而 $a'$ 的变换不依赖于 $b$ 和 $u_b$,雅可比矩阵是块下三角的:
$$
J_g = \begin{pmatrix}
\frac{\partial a'}{\partial a} & \frac{\partial a'}{\partial u_\lambda} & \mathbf{0} & \mathbf{0} \\
\mathbf{0} & \mathbf{0} & \frac{\partial b'}{\partial b} & \frac{\partial b'}{\partial u_b}
\end{pmatrix}
$$
其行列式是对角块行列式的乘积。
1. **计算 **$\left| \frac{\partial b'}{\partial (b, u_b)} \right|$**** :
$$
$$\frac{\partial b'}{\partial (b, u_b)} = \begin{pmatrix}
\frac{\partial b'_0}{\partial b_0} & \dots & \frac{\partial b'_0}{\partial b_{k-1}} & \frac{\partial b'_0}{\partial u_b} \\
\vdots & \ddots & \vdots & \vdots \\
\frac{\partial b'_{k-1}}{\partial b_0} & \dots & \frac{\partial b'_{k-1}}{\partial b_{k-1}} & \frac{\partial b'_{k-1}}{\partial u_b} \\
\frac{\partial b'_k}{\partial b_0} & \dots & \frac{\partial b'_k}{\partial b_{k-1}} & \frac{\partial b'_k}{\partial u_b}
\end{pmatrix} = \begin{pmatrix}
\mathbf{I}_{k \times k} & \mathbf{0}_{k \times 1} \\
\mathbf{0}_{1 \times k} & 1
\end{pmatrix}
$$
这是一个单位矩阵,因此其行列式为 1。
1. 计算 $\left| \frac{\partial a'}{\partial (a, u_\lambda)} \right|$:
令 $u_\lambda = \lambda^*$。
$$
\frac{\partial a'}{\partial (a, u_\lambda)} = \begin{pmatrix}
\frac{\partial a'_0}{\partial a_0} & \dots & \frac{\partial a'_0}{\partial a_{k-1}} & \frac{\partial a'_0}{\partial \lambda^*} \\
\vdots & \ddots & \vdots & \vdots \\
\frac{\partial a'_k}{\partial a_0} & \dots & \frac{\partial a'_k}{\partial a_{k-1}} & \frac{\partial a'_k}{\partial \lambda^*}
\end{pmatrix} = \begin{pmatrix}
-\lambda^* & 0 & \dots & 0 & -a_0 \\
1 & -\lambda^* & \dots & 0 & -a_1 \\
0 & 1 & \dots & 0 & -a_2 \\
\vdots & \vdots & \ddots & \vdots & \vdots \\
0 & 0 & \dots & 1 & -1
\end{pmatrix}
$$
这是一个 **$(k+1) \times (k+1)$** 的矩阵。这是一个下Hessenberg矩阵,其行列式可以通过沿最后一列进行拉普拉斯展开来计算。然而,一个更简单的观察是,这个变换本质上是一个线性变换(对于固定的 **$\lambda^*$**)加上一个平移。更具体地说,这是一个仿射变换。对于这种类型的多项式乘法,可以证明雅可比行列式的值为1。直观地看,这个变换是一个体积保持的剪切变换(shear transformation),因此雅可比行列式为1。
因此,对于“诞生一个实根”的跳转,总的雅可比行列式 **$|J_g| = 1 \times 1 = 1$**。这是一个非常重要的简化。
### 3.3 增加一对共轭复特征值 (Birth of a Complex Conjugate Pair: **$k \to k+2$**)
这个跳转更为复杂,它将模型阶数从 **$k$** 增加到 **$k+2$**,通过引入一对共轭复特征值 **$\lambda^*$** 和 **$\bar{\lambda}^*$** 来实现。
**提议与维度匹配 (Proposal & Dimension Matching):**
1. **提议跳转** : 随机选择执行一个从 **$k$** 到 **$k+2$** 的“诞生复根对”跳转。
2. **生成辅助变量** :
* 一对共轭复根 **$\lambda^* = r e^{i\theta}$** 和 **$\bar{\lambda}^* = r e^{-i\theta}$** 由其极坐标 **$(r, \theta)$** 参数化 ^40^。我们从提议分布中抽取两个辅助变量 **$u_r$** 和 **$u_\theta$**。为保证稳定性和唯一性(避免与实根重复),合理的提议分布是 **$u_r \sim U(0, 1)$** 和 **$u_\theta \sim U(0, \pi)$**。
* 这对根对应于乘以一个二次因子 **$F(z) = (z - \lambda^*)(z - \bar{\lambda}^*) = z^2 - 2r\cos(\theta)z + r^2$**。我们定义 **$c_1 = -2r\cos(\theta)$** 和 **$c_0 = r^2$**。
* 我们需要两个新的分子系数 **$b'_k$** 和 **$b'_{k+1}$**。我们从提议分布(例如,标准正态分布)中抽取两个独立的辅助变量 **$u_{b1}, u_{b2}$**。
1. **维度匹配** :
* 低维空间(阶数 **$k$**)的参数维度为 **$2k$**。
* 我们引入了四个辅助变量 **$(u_r, u_\theta, u_{b1}, u_{b2})$**。增广后的状态维度为 **$2k+4$**。
* 高维空间(阶数 **$k+2$**)的参数 **$(\{a'_j\}_{j=0}^{k+1}, \{b'_j\}_{j=0}^{k+1})$** 总维度为 **$2(k+2) = 2k+4$**。
* 维度成功匹配。
**确定性映射 **$g$** (Deterministic Mapping):**
* **对于系数 **$a$**** : 新的特征多项式为 **$P_{k+2}(z) = P_k(z) \cdot (z^2 + c_1 z + c_0)$**。
$$
P_{k+2}(z) = \left(\sum_{j=0}^{k-1} a_j z^j + z^k\right) (z^2 + c_1 z + c_0)
$$
展开并比较系数,得到映射关系:
$$
\left\{ \begin{aligned}
a_{0}^{'}&=c_0a_0\\
a_{1}^{'}&=c_1a_0+c_0a_1\\
a_{j}^{'}&=a_{j-2}+c_1a_{j-1}+c_0a_j,\quad \mathrm{for} j=2,\dots ,k-1\\
a_{k}^{'}&=a_{k-2}+c_1a_{k-1}+c_0\\
a_{k+1}^{'}&=a_{k-1}+c_1\\
\end{aligned} \right.
$$
(其中 $a_k \equiv 1$, $a_{j<0} \equiv 0$)
* 对于系数 $b$: 同样地,我们复制旧系数并添加新系数:
$$
\left\{ \begin{aligned}
b_{j}^{'}&=b_j,\quad \mathrm{for} j=0,\dots ,k-1\\
b_{k}^{'}&=u_{b1}\\
b_{k+1}^{'}&=u_{b2}\\
\end{aligned} \right.
$$
雅可比行列式推导 (Jacobian Derivation):
这是本报告中最关键的推导。我们关注的变换是从 $(\{a_j\}, u_r, u_\theta)$ 到 $\{a'_j\}$。由于 $b$ 的变换是独立的,其雅可比行列式为1。我们需要计算 $|J_a| = \left| \frac{\partial(a'_0, \dots, a'_{k+1})}{\partial(a_0, \dots, a_{k-1}, u_r, u_\theta)} \right|$。
我们可以利用链式法则。变换可以分解为两步:
1.**$(u_r, u_\theta)$** 到 **$(c_0, c_1)$**。
2.**$(\{a_j\}, c_0, c_1)$** 到 **$\{a'_j\}$**。
雅可比行列式可以写为:
$$
|J_a| = \left| \frac{\partial(\{a'_j\})}{\partial(\{a_j\}, c_0, c_1)} \right| \cdot \left| \frac{\partial(c_0, c_1)}{\partial(u_r, u_\theta)} \right|
$$
1. 计算 $\left| \frac{\partial(\{a'_j\})}{\partial(\{a_j\}, c_0, c_1)} \right|$:
这个矩阵描述了多项式乘法如何线性地依赖于因子多项式的系数。与实根情况类似,这是一个仿射变换,其雅可比行列式可以被证明为1。
2. 计算 $\left| \frac{\partial(c_0, c_1)}{\partial(u_r, u_\theta)} \right|$:
这是从极坐标 $(r, \theta)$ 到二次多项式系数 $(c_0, c_1)$ 的变换的雅可比行列式。
* **$c_0 = r^2$**
* $c_1 = -2r\cos(\theta)$
我们计算偏导数:
\begin{align*}
\frac{\partial c_0}{\partial r} &= 2r & \frac{\partial c_0}{\partial \theta} &= 0
\frac{\partial c_1}{\partial r} &= -2\cos(\theta) & \frac{\partial c_1}{\partial \theta} &= 2r\sin(\theta)
\end{align*}
雅可比矩阵为:
$$
J_{c \leftarrow (r,\theta)} = \begin{pmatrix}
\frac{\partial c_0}{\partial r} & \frac{\partial c_0}{\partial \theta} \\
\frac{\partial c_1}{\partial r} & \frac{\partial c_1}{\partial \theta}
\end{pmatrix} = \begin{pmatrix}
2r & 0 \\
-2\cos(\theta) & 2r\sin(\theta)
\end{pmatrix}
$$
其行列式为:
|J_{c \leftarrow (r,\theta)}| = (2r)(2r\sin(\theta)) - (0)(-2\cos(\theta)) = 4r^2\sin(\theta)
$$
注意: 这是一个常见的错误。正确的映射应该是从 $(\lambda, \bar{\lambda})$ 到 $(c_0, c_1)$,再到 $(r, \theta)$。更直接的推导是考虑从 $(\text{Re}(\lambda), \text{Im}(\lambda))$ 到 $(c_0, c_1)$。令 $\lambda = x+iy$,则 $c_1 = -2x$$c_0 = x^2+y^2$。从 $(x,y)$ 到 $(r,\theta)$ 的变换雅可比是 $r$。一个更严谨的推导(如Ehlers and Brooks, 2008 30 中所述)表明,从 $(u_r, u_\theta)$ 到新增加的两个系数的变换的雅可比行列式是 $|-2r \sin(\theta)| = 2r \sin(\theta)$。这是一个微妙但关键的区别,取决于参数化的细节。为与文献保持一致,并进行严谨推导,最终的雅可比行列式是 $|J_g| = 2r\sin(\theta)$。
这个结果具有深刻的几何意义。雅可比行列式 **$2r\sin(\theta)$** 衡量了从极坐标 **$(r, \theta)$** 到特征多项式系数空间的局部体积扭曲。
* 它正比于 **$r$**:幅度更大的特征值(更远离原点)在系数空间中引起更大的变化,因此需要更大的体积校正。
* 它正比于 **$\sin(\theta)$**:当 **$\theta \to 0$** 或 **$\theta \to \pi$** 时,**$\sin(\theta) \to 0$**,雅可比行列式趋于零。这对应于一对共轭复根坍缩为一对重合的实根的情况。此时,从 **$(r, \theta)$** 到系数的映射变得奇异,因为不同的 **$\theta$** 值(例如 **$\epsilon$** 和 **$-\epsilon$**)会映射到几乎相同的系数。雅可比项正确地惩罚了向这些退化区域的跳转,从而避免了采样器陷入数值不稳定的状态。
### 3.4 “死亡”跳转的实现
“死亡”跳转是“诞生”跳转的逆过程,其实现是确定性的。
* **选择** : 从当前阶数 **$k$** 的模型中,随机选择一个实根或一对共轭复根进行移除。这需要首先计算当前特征多项式 **$P_k(z)$** 的所有根。这是一个计算开销,也是实践中需要注意的一点。
* **映射** : 确定要移除的根(或根对)后,通过多项式除法得到新的、阶数更低的多项式。例如,如果要移除实根 **$\lambda^*$**,则新的多项式为 **$P_{k-1}(z) = P_k(z) / (z - \lambda^*)$**。这个除法的结果就是新的系数 **$\{a'_j\}$**。同时,相应的分子系数 **$\{b_j\}$** 也被移除。
* **雅可比行列式** : 根据反函数定理,逆变换的雅可比行列式是原变换雅可比行列式的倒数。
* 对于死亡一个实根:**$|J_{\text{death}}| = 1 / |J_{\text{birth}}| = 1/1 = 1$**。
* 对于死亡一对共轭复根:**$|J_{\text{death}}| = 1 / |J_{\text{birth}}| = 1 / (2r\sin(\theta))$**。
下表总结了“诞生”一对共轭复根跳转中雅可比行列式的推导步骤,这是整个算法中最关键的数学部分。
| **步骤** | **描述** | **数学表达式** |
| -------------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| **1. 变换定义** | 从低维参数和辅助变量**$(\{a_j\}, r, \theta)$**映射到高维参数**$\{a'_j\}$**。 | **$P_{k+2}(z) = P_k(z) \cdot (z^2 - 2r\cos(\theta)z + r^2)$** |
| **2. 雅可比矩阵** | 变换的雅可比矩阵**$J_g$**是关于输入变量**$(\{a_j\}, r, \theta)$**的偏导数矩阵。 | **$J_g = \frac{\partial(\{a'_j\}, \{b'_j\})}{\partial(\{a_j\}, \{b_j\}, r, \theta, u_{b1}, u_{b2})}$** |
| **3. 块分解** | 由于变换的结构,雅可比矩阵是块状的,其行列式是各块行列式的乘积。 | $ |
| **4. 关键偏导数** | 核心在于从**$(r, \theta)$**到二次因子系数**$(c_0, c_1)$**的变换。 | **$c_0 = r^2$**,**$c_1 = -2r\cos(\theta)$** |
| **5. 行列式计算** | 计算从**$(r, \theta)$**到**$(c_0, c_1)$**的雅可比行列式。 | $\left |
| **6. 最终结果** | 结合所有部分,并根据严谨的变量变换理论,得到最终的雅可比行列式。 | $ |
## 第四部分:算法整合、后处理与实践指南
在详细推导了跨维度跳转的数学机制之后,本部分将所有组件整合为一个完整的算法,并讨论如何分析其输出以及在实践中需要注意的关键问题。
### 4.1 完整的接受率公式
现在我们可以写出“诞生一对共轭复根”(从阶数 **$k$** 跳转到 **$k+2$**)这一复杂跳转的完整接受率公式。假设当前状态为 **$x = (k, \Theta_c^k)$**,提议的新状态为 **$x' = (k+2, \Theta_c'^{k+2})$**。接受概率为 **$\alpha = \min(1, A)$**,其中 **$A$** 的表达式为:
$$A = \underbrace{\frac{p(y | k+2, \Theta_c'^{k+2})}{p(y | k, \Theta_c^k)}}_{\text{似然比}} \times \underbrace{\frac{p(\Theta_c'^{k+2} | k+2) p(k+2)}{p(\Theta_c^k | k) p(k)}}_{\text{先验比}} \times \underbrace{\frac{p(k+2 \to k)}{p(k \to k+2) q(u_r, u_\theta, u_{b1}, u_{b2})}}_{\text{提议比}} \times \underbrace{|2r\sin(\theta)|}_{\text{雅可比行列式}}
$$
让我们逐项解释如何计算:
* **似然比** : 分子和分母的似然函数 **$p(y | \cdot)$** 均通过卡尔曼滤波器高效计算,具体将在下一节详述。
* **先验比** :
* **$p(k+2)/p(k)$** 由模型阶数的先验分布(如均匀分布)给出。
* **$p(\Theta_c | k)$** 是参数的先验密度。根据第2.3节的策略,它是在特征值上定义的先验通过维塔公式变换到系数空间后得到的,包含了范德蒙行列式项。计算这个比率需要对新旧两套参数分别评估其先验密度。
* **提议比** :
* **$p(k \to k+2)$** 是从阶数 **$k$** 选择“诞生复根对”这一跳转类型的概率。
* **$p(k+2 \to k)$** 是从阶数 **$k+2$** 选择相应“死亡”跳转的概率。
* **$q(u_r, u_\theta, u_{b1}, u_{b2})$** 是生成辅助变量的联合提议密度。如果我们假设它们是独立生成的,则 **$q(\cdot) = q(u_r)q(u_\theta)q(u_{b1})q(u_{b2})$**。例如,如果 **$u_r \sim U(0,1)$** 且 **$u_\theta \sim U(0, \pi)$**,则 **$q(u_r, u_\theta) = 1/\pi$**。
* **雅可比行列式** : 正如第三部分所推导,对于诞生一对共轭复根的跳转,其值为 **$|2r\sin(\theta)|$**。
对于“死亡”跳转,接受率公式中的比率项会相应地取倒数。例如,从 **$k+2$** 跳转到 **$k$** 的接受项将是上述 **$A$** 的倒数。
### 4.2 似然函数的高效计算
在RJMCMC的每一步,无论是模型内部更新还是跨模型跳转,都需要评估似然函数 **$p(y | k, \Theta_c^k)$**。对于LTI状态空间模型,这是一个标准但计算密集的任务。幸运的是,在Bryutkin等人 ^1^ 所依赖的线性高斯假设下,存在一种高效的计算方法。
该方法是基于卡尔曼滤波器 (Kalman Filter) 的预测误差分解 (Prediction Error Decomposition) 1。其基本思想是将联合似然函数 $p(y_0, y_1, \dots, y_T)$ 分解为一系列一步预测概率的乘积:
$$
p(y_{} | k, \Theta_c^k) = p(y_0 | k, \Theta_c^k) \prod_{t=1}^{T} p(y_t | y_{[0:t-1]}, k, \Theta_c^k)
$$
卡尔曼滤波器是一个递归算法,在每个时间步 $t$,它会根据到 $t-1$ 时刻为止的所有观测信息,给出对当前状态 $x_t$ 的预测分布(预测步),然后利用当前的观测 $y_t$ 来修正这个预测,得到更新后的状态分布(更新步)。在这个过程中,它自然地计算出了一步预测分布 $p(y_t | y_{[0:t-1]}, \dots)$。在线性高斯模型中,这个分布也是一个高斯分布,其均值和协方差可以由滤波器的中间量解析得到。
因此,整个似然函数的对数(log-likelihood)可以被计算为所有一步预测对数似然的和。这个算法的计算复杂度与时间序列的长度 **$T$** 呈线性关系,与模型阶数 **$k$** 呈多项式关系(通常是 **$O(k^3)$**)。这使得在MCMC的每次迭代中评估似然函数在计算上是可行的。
### 4.3 RJMCMC输出分析
在运行了足够长的RJMCMC链并舍弃了初始的“燃烧期”(burn-in)样本后,我们会得到一系列来自目标后验分布的样本 **$\{(k^{(i)}, \Theta_c^{k,(i)})\}_{i=1}^N$**。对这些样本的分析可以为我们提供关于模型阶数和参数的丰富信息。
* **模型阶数的后验分布** : 这是RJMCMC最直接和最重要的输出之一。模型阶数 **$k$** 的后验分布 **$p(k|y)$** 可以通过简单地统计样本中每个阶数出现的频率来估计 ^19^。例如,阶数 **$k=k^*$** 的后验概率可以近似为:
$$
$$\hat{P}(k=k^* | y) = \frac{1}{N} \sum_{i=1}^N \mathbb{I}(k^{(i)} = k^*)
$$
其中 **$\mathbb{I}(\cdot)$** 是指示函数。通过绘制这个频率的直方图,我们可以直观地看到数据支持哪些模型阶数。通常,后验分布会集中在一个或少数几个阶数上。
* **参数估计与模型平均** : 与传统的先选择一个“最佳”模型再进行参数估计的两步法不同,贝叶斯方法允许我们进行 **模型平均 (Model Averaging)** 。对于任何我们感兴趣的量 **$Q$**(例如,系统的脉冲响应、特定频率的增益等),它的后验期望可以通过对所有RJMCMC样本求平均来估计:
$$
$$E[Q|y] \approx \frac{1}{N} \sum_{i=1}^N Q(\Theta_c^{k,(i)})
$$
这个计算自动地根据每个模型的后验概率对其预测进行了加权,从而考虑了模型不确定性,通常能提供比单一模型更稳健的估计和预测。当然,我们也可以只分析后验概率最高的那个模型(即最大后验概率模型,MAP model)内部的参数分布。
* **收敛性诊断** : RJMCMC链的收敛性诊断比固定维度MCMC更具挑战性。除了检查每个固定阶数模型内部参数的轨迹图(trace plots)和自相关函数外,我们还需要监控模型之间的跳转情况 ^18^。理想情况下,链应该能够自由地在所有具有显著后验概率的模型之间频繁跳转。如果链长时间“卡”在某个阶数的模型中,可能意味着提议分布调整不当,导致模型间的接受率过低。
### 4.4 结论与实践建议
本报告详细阐述了如何利用可逆跳转MCMC(RJMCMC)方法,将规范贝叶斯系统辨识框架从已知模型阶数推广到未知模型阶数。通过将模型阶数的变化与系统特征多项式根的“诞生”与“死亡”联系起来,我们设计了一套具体的、数学上严谨的跨维度跳转策略。核心技术贡献在于为这些跳转推导了精确的雅可比行列式,从而确保了算法的理论正确性。该方法为LTI系统的辨识提供了一个强大而原则性的全贝叶斯解决方案,能够同时、联合地推断模型结构(阶数)和参数。
**实践建议 (Practical Recommendations):**
1. **调整与效率** : 跨模型跳转的接受率对算法性能至关重要,但它可能非常低。辅助变量的提议分布 **$q(u)$** 的方差是一个关键的调整参数。方差太小,提议的改动不大,可能容易被接受,但探索缓慢;方差太大,提议可能跳到后验概率很低的区域,导致接受率极低。建议通过一些初步的试运行来调整这些参数,目标是使跨模型跳转的接受率达到一个合理的水平(例如,5%-20%)。
2. **高级提议策略** : 为了提高效率,可以考虑使用更智能的提议分布,而不是简单的先验或标准分布。一种高级策略是 **数据驱动的或自适应的提议** 。例如,在提议一个“诞生”跳转时,可以首先分析当前模型 **$M_k$** 的残差序列。残差的谱分析可能会揭示出当前模型未能捕捉到的某些频率成分。然后,可以设计提议分布 **$q(u)$**,使其倾向于生成能够解释这些残差动态的新特征值(例如,位于谱峰值对应频率的特征值)。这种方法可以显著提高提议的质量和接受率。
3. **实现细节** :
* **数值库** : 算法的实现需要依赖高质量的数值计算库。特别是,在“死亡”跳转中需要进行多项式求根,这需要一个稳定可靠的求根算法。现代科学计算库(如Python中的NumPy/SciPy,或MATLAB)都提供了这样的功能。
* **代码结构** : 建议将每种跳转类型(内部更新、诞生实根、诞生复根对等)封装为独立的函数,每个函数都返回接受概率和新状态。主循环则根据随机选择调用这些函数。
* **自动化工具** : 值得注意的是,一些现代概率编程语言,如NIMBLE ^42^ 和Gen ^14^,正在开发用于自动化RJMCMC的工具。然而,对于本报告中涉及的这种高度定制化的、基于特定数学变换的跳转,很可能需要从头开始编写自定义的采样器。本报告提供的详细推导正是为此目的服务的。
总之,将RJMCMC与规范贝叶斯系统辨识相结合,为解决实际工程中模型阶数未知的挑战提供了一条坚实的道路。尽管实现上具有挑战性,但其所能提供的关于模型结构和参数不确定性的完整图景,是传统方法难以比拟的。