try ai
科普
编辑
分享
反馈
  • 递推最小二乘法

递推最小二乘法

SciencePedia玻尔百科
核心要点
  • RLS 通过根据新的预测误差,乘以一个动态计算的增益,来修正旧的估计值,从而递推地更新参数估计。
  • 遗忘因子(λ\lambdaλ)控制算法的记忆能力,在跟踪变化(低 λ\lambdaλ)和抗噪声能力(高 λ\lambdaλ)之间形成权衡。
  • RLS 需要持续激励的输入来避免“协方差膨胀”,这是一种失效模式,其中不确定性会无界增长,并可能导致参数不稳定。
  • 该算法广泛应用于实时系统辨识和自适应控制,使系统能够在运行时学习和调整。

引言

在一个不断提供新信息的世界里,一个系统如何才能在不被自身历史数据淹没的情况下进行实时学习和适应?这个基本问题是现代控制和信号处理的核心。传统方法可能在每次获得新观测值时都重新分析所有过去的数据——这是一种低效且通常不切实际的方法——但对于在线参数估计,存在一种更为优雅的解决方案。递推最小二乘(RLS)算法为新数据到来时动态更新模型提供了一个强大的框架。本文将揭开这一基本工具的神秘面纱。首先,在“原理与机制”一章中,我们将剖析该算法的核心递推结构,探究增益向量、协方差矩阵的直观作用,以及使其能够跟踪变化系统的关键——遗忘因子。随后,“应用与跨学科联系”一章将展示 RLS 惊人的通用性,从工程领域的系统辨识和自适应控制,到其与估计理论的其他基石(如卡尔曼滤波器)之间深刻的理论联系。

原理与机制

想象一下,你正试图学习一条新的自然法则。你心中有一个简单的模型——也许是像“效应 = 参数 × 原因”这样的关系,或者用数学术语表示为 y=θxy = \theta xy=θx。然而,宇宙并不会直接把规则手册交给你。相反,它会逐一为你提供一连串的例子:一个原因 x1x_1x1​ 产生一个效应 y1y_1y1​,然后一个原因 x2x_2x2​ 产生一个效应 y2y_2y2​,依此类推。你的任务是随着每一条新证据的出现,不断完善你对未知参数 θ\thetaθ 的猜测。

一种直接但相当粗暴的方法是,在每个新数据点到来时,收集你到目前为止看到的所有数据,然后每一次都执行一次全面的最小二乘分析。这就像每次增加一页新内容时,都要重读整个图书馆的书籍。这种方法可行,但效率极低。自然界和优秀的工程设计都偏爱更优雅的解决方案:一种能够随时更新知识的方法。这正是​​递推最小二乘(RLS)​​的精神所在。

从蛮力到优雅:核心递推

RLS 算法始于一个极其简单的想法。我们不再平等地对待所有过去的观测数据,而是给予最近的事件更大的权重。如果我们怀疑系统的潜在“规则”可能会随时间缓慢变化,例如化学反应器中的催化剂会降解,那么这种方法就特别有用。我们可以通过寻找在时刻 ttt 最小化加权平方误差和的参数向量 θt\theta_tθt​ 来将此想法形式化:

Jt(θ)=∑i=1tλt−i(yi−xi⊤θ)2J_t(\theta) = \sum_{i=1}^t \lambda^{t-i} (y_i - x_i^\top \theta)^2Jt​(θ)=i=1∑t​λt−i(yi​−xi⊤​θ)2

这里,(yi,xi)(y_i, x_i)(yi​,xi​) 是时刻 iii 的数据对,而 λ\lambdaλ 是​​遗忘因子​​,一个介于 0 和 1 之间的数。如果 λ=1\lambda=1λ=1,所有数据的权重都相等。如果 λ1\lambda 1λ1,过去数据的影响会呈指数级衰减。一个来自 kkk 步之前的观测值的重要性只有我们刚刚收到的观测值的 λk\lambda^kλk 倍。

RLS 的精妙之处在于,我们不需要在每一步都解决整个求和问题。通过一些数学技巧(涉及一个称为矩阵求逆引理的工具),我们可以推导出一个递推更新公式。最终的算法结构恰好反映了学习过程本身:

θ^t=θ^t−1+Kt(yt−xt⊤θ^t−1)\hat{\theta}_t = \hat{\theta}_{t-1} + K_t (y_t - x_t^\top \hat{\theta}_{t-1})θ^t​=θ^t−1​+Kt​(yt​−xt⊤​θ^t−1​)

让我们来解读这个公式。它表明我们的​​新估计值​​(θ^t\hat{\theta}_tθ^t​)就是我们的​​旧估计值​​(θ^t−1\hat{\theta}_{t-1}θ^t−1​)加上一个修正项。括号中的项 et=yt−xt⊤θ^t−1e_t = y_t - x_t^\top \hat{\theta}_{t-1}et​=yt​−xt⊤​θ^t−1​ 是​​预测误差​​。它是实际发生的情况(yty_tyt​)与我们旧模型预测会发生的情况(xt⊤θ^t−1x_t^\top \hat{\theta}_{t-1}xt⊤​θ^t−1​)之间的差异。如果我们的预测是完美的,误差为零,我们就不改变估计值。但如果存在误差,我们就会进行调整。

真正的魔力在于 KtK_tKt​ 这一项,即​​增益向量​​。它是算法的“智能”部分。它不仅告诉我们要改变估计值,还告诉我们应该根据误差做出多大的改变以及朝哪个方向改变。那么,是什么决定了这个关键的增益呢?

运算的大脑:置信度与协方差矩阵

增益向量 KtK_tKt​ 不是一个固定的常数;它在每一步都会动态计算。它的值取决于两件事:新的输入数据 xtx_txt​ 和一个被称为​​协方差矩阵​​的神秘对象 PtP_tPt​。让我们抛开形式主义,不要把 PtP_tPt​ 看作一个矩阵,而是看作我们对当前估计值 θ^t\hat{\theta}_tθ^t​ 的​​不确定性​​的表示,或者反过来说,是我们对它的​​置信度​​。一个“大”的 PtP_tPt​ 意味着我们对估计值的置信度低(不确定性高),而一个“小”的 PtP_tPt​ 则意味着我们非常自信。

增益向量的计算公式为:

Kt=Pt−1xtλ+xt⊤Pt−1xtK_t = \frac{P_{t-1} x_t}{\lambda + x_t^\top P_{t-1} x_t}Kt​=λ+xt⊤​Pt−1​xt​Pt−1​xt​​

看分子部分:增益 KtK_tKt​ 与 Pt−1P_{t-1}Pt−1​ 成正比。这非常直观。如果我们的不确定性高(Pt−1P_{t-1}Pt−1​ 大),增益就会很大,我们将根据新数据进行显著的修正。如果我们的不确定性低(Pt−1P_{t-1}Pt−1​ 小),增益就会很小,我们将固执地更接近旧的估计值,把新的误差看作可能只是一点噪声。

我们初始置信度的影响是显著的,在一个我们从零估计开始的简单场景中可以清楚地看到。如果我们用一个巨大的协方差矩阵来初始化算法,比如 P0=1000⋅IP_0 = 1000 \cdot IP0​=1000⋅I,我们实际上是在告诉它:“我完全不知道真实参数是什么。” 第一个数据点就会导致一个巨大的增益和对我们估计值的大幅更新。相反,如果我们从一个很小的协方差矩阵开始,P0=0.01⋅IP_0 = 0.01 \cdot IP0​=0.01⋅I,我们就是在说:“我对我的初始猜测已经相当确定了。” 算法将会非常保守,第一次更新将是微不足道的。这个初始协方差 P0P_0P0​ 是我们向系统中注入先验信念(或缺乏信念)的工具。

随着每次更新,不仅我们的参数估计值 θ^\hat{\theta}θ^ 会改变,我们的不确定性矩阵 PPP 也会改变。更新规则是:

Pt=1λ(I−Ktxt⊤)Pt−1P_t = \frac{1}{\lambda} (I - K_t x_t^\top) P_{t-1}Pt​=λ1​(I−Kt​xt⊤​)Pt−1​

(I−Ktxt⊤)Pt−1(I - K_t x_t^\top) P_{t-1}(I−Kt​xt⊤​)Pt−1​ 这一项表明,整合来自新数据点的信息会降低我们的不确定性,使矩阵 PPP 变小(至少在由 xtx_txt​ 提供信息的方向上)。

追踪变化的世界:遗忘的艺术

如果世界是静止的,我们可以设置 λ=1\lambda=1λ=1,并观察我们的不确定性 PtP_tPt​ 随着收集越来越多的数据而趋向于零,最终收敛到“真实”参数。但如果世界本身在变化呢?如果我们试图估计的参数正在缓慢漂移呢? 如果我们的算法变得过于自信,它将停止听取新数据,从而无法跟踪这些变化。

这就是​​遗忘因子​​ λ1\lambda 1λ1 变得至关重要的地方。通过在每一步乘以 1/λ1/\lambda1/λ(一个大于 1 的数),我们人为地增加了我们的不确定性,防止它完全消失。这使得增益 KtK_tKt​ 不会变为零,确保算法保持“警觉”并对新信息做出响应。

λ\lambdaλ 的选择是一个微妙的平衡行为——一个在敏捷性和稳定性之间的基本权衡。我们可以通过将 λ\lambdaλ 与​​有效记忆长度​​联系起来,使其更具体。这个记忆长度的一个常用且有用的近似值是 Neff≈11−λN_{eff} \approx \frac{1}{1-\lambda}Neff​≈1−λ1​。

  • 像 λ=0.9\lambda = 0.9λ=0.9 这样的“快速遗忘”值,其记忆长度大约为 Neff≈10N_{eff} \approx 10Neff​≈10 个样本。估计器将非常敏捷,能迅速对系统变化做出反应。然而,它也会对随机测量噪声非常敏感,导致参数估计值抖动,并可能引起不稳定的控制行为。

  • 像 λ=0.999\lambda = 0.999λ=0.999 这样的“慢速遗忘”值,其记忆长度大约为 Neff≈1000N_{eff} \approx 1000Neff​≈1000 个样本。通过对长历史数据进行平均,估计器会产生非常平滑、抗噪声的参数值。缺点是它对系统参数的真实漂移反应会非常慢,其估计值可能会持续滞后于真实值。

这简而言之就是经典的​​偏差-方差权衡​​。小的 λ\lambdaλ 产生低偏差(能很好地跟踪变化),但方差高(噪声大)。大的 λ\lambdaλ 产生低方差(平滑),但可能有高偏差(滞后于变化)。正确的选择完全取决于应用:你期望系统变化多快,以及你的测量噪声有多大?

自满的危险:RLS 的失效模式

就像任何强大的工具一样,RLS 并非没有缺陷。了解其失效模式与了解其工作原理同样重要。这些不仅仅是数学上的奇特现象;它们代表了可能导致复杂控制系统灾难性失败的真实世界现象。

无聊生活的危险:持续激励

想象一个自校正调节器正在控制一个熔炉的温度。它工作得非常好,以至于温度变得完全恒定。为了维持这种状态,控制器的输出也变得几乎恒定。系统进入了一个长时间的安静、稳定运行阶段。我们的 RLS 估计器会发生什么?

由系统输入和输出构成的回归向量 xtx_txt​ 变得几乎恒定。它不再以一种能够“探测”未知参数向量 θ\thetaθ 所有不同维度的方式变化。这种缺乏丰富、信息量大的输入的情况被称为​​持续激励(PE)​​的丧失。为了了解一个 MMM 维的参数向量,输入信号必须随着时间的推移探索所有 MMM 个维度。例如,单个正弦波永远只能揭示两个维度的信息,这对于辨识一个阶数 M>2M>2M>2 的系统是不够的。

当持续激励丧失并且我们使用遗忘因子 λ1\lambda 1λ1 时,一个称为​​协方差膨胀​​的危险现象就会发生。在不再被输入激励的方向上,算法没有接收到任何新信息。然而,由于 1/λ1/\lambda1/λ 这一项,它被告知要“忘记”它从未真正拥有过的信息!结果是,不确定性矩阵 PtP_tPt​ 在这些未被激励的方向上开始无界增长。算法对其一无所知的事情变得极度自信。

然后,灾难降临。一个突然的扰动冲击了系统。输入 xtx_txt​ 现在在某个之前未被激励的方向上有了分量。RLS 算法带着一个被极度放大的 Pt−1P_{t-1}Pt−1​,计算出一个巨大的增益 KtK_tKt​,并对参数施加一个巨大而狂野的修正。这被称为​​参数爆发现象​​。已经稳定了数小时的估计值突然爆炸,控制器模型变得毫无意义,系统可能被推向不稳定。

为了防止估计器“睡着”并屈服于这种脆弱性,实际应用中通常会采取一些对策。一种方法是向系统中注入一个小的随机“抖动”信号,以保证它永远不会变得完全静止。一个更直接的修复方法是通过​​协方差注入​​来修改 RLS 算法本身:在每一步,向协方差更新中添加一个小的、恒定的正定矩阵 QQQ。这就像告诉算法:“无论你感觉多确定,都要始终保持最低限度的怀疑。” 它为不确定性设置了一个下限,防止协方差膨胀并保持估计器的响应能力。

听到幻听:有色噪声问题

标准的 RLS 算法建立在一个关键假设之上:任何未测量的噪声或扰动都是“白”的,意味着它是随机且在时间上不相关的,就像收音机电台之间的静电噪音一样。但如果噪声有模式呢?如果扰动是来自空调机组的缓慢、周期性的气流呢?

这种类型的扰动被称为​​有色噪声​​。问题在于,噪声信号可能与回归向量 xtx_txt​ 相关联,特别是当 xtx_txt​ 包含系统输出的过去测量值时(几乎总是如此)。算法无法区分真实系统的动态特性和噪声的动态特性。它尽职地试图找到一个能解释它所看到的一切的模型。

其后果是参数估计将是​​有偏的​​。它们会收敛,但会收敛到错误的值。算法将学到一个复合模型,该模型错误地将真实系统动态与相关噪声的虚假动态混合在一起。这揭示了一个深刻的真理:我们的模型的好坏取决于我们对它们试图描述的世界所做的假设。

应用与跨学科联系

深入了解了递推最小二乘算法的复杂机制后,人们可能会倾向于将其作为一件精美的数学钟表来欣赏,然后就此作罢。但这样做就完全错过了重点。RLS 的真正奇妙之处不仅在于其方程的优雅,更在于其惊人的通用性。它是一个用于学习的通用引擎,一个让我们能够向世界提问并实时获得答案的工具。它是连接抽象模型与混乱现实的桥梁,其足迹遍布于各种各样令人惊叹的领域。让我们对这片领域进行一次短暂的游览,看看一个单一而强大的思想如何被用来驾驶汽车、澄清来自遥远恒星的光芒,甚至统一估计理论的不同分支。

系统辨识的艺术:物理定律的侦探

在其核心,RLS 是一位侦探大师。它擅长工程师所谓的“系统辨识”——仅通过观察系统如何响应外部刺激来推断其内部工作原理的艺术。想象你有一个黑匣子;你用一个输入去戳它,然后观察到一个输出。RLS 就是让你能够智能地猜测盒子里面是什么的工具。

考虑一辆电动汽车的运动。我们从基础物理学中知道,其运动由电机的力与滚动阻力和空气动力阻力等力相抗衡来决定。我们可以写出一个类似 Fnet=cr+cav2+maF_{net} = c_r + c_a v^2 + m aFnet​=cr​+ca​v2+ma 的方程,但滚动阻力 crc_rcr​ 和风阻系数 cac_aca​ 的确切值是多少?这些数字取决于轮胎、汽车的具体形状,甚至路面。它们没有写在教科书里;它们是这辆车、此时此刻的属性。RLS 提供了一种极其直接的方法来找出答案。通过在每个时刻测量电机的力、车的速度及其加速度,RLS 不断地完善其对 crc_rcr​ 和 cac_aca​ 的估计。每个新数据点都是一条新线索,算法巧妙地将这条新证据与之前学到的一切进行权衡,以更新其对隐藏参数的“嫌疑人档案”。

同样的原理无处不在。在一个化学或生物反应器中,我们可能想知道向环境的热损失率,这是一个难以直接测量的参数。通过将这个未知的热损失建模为一个恒定偏移参数 ccc,我们可以将其加入我们的嫌疑人名单。然后,通过观察我们施加的加热器功率和由此产生的温度,RLS 可以同时估计系统的主要动态特性以及这个持续存在的、隐藏的热泄漏的大小。本质上,如果你能写下一个关于你认为世界如何运作的线性模型,RLS 就能找到数字来使该模型与现实相匹配。

迈向自适应控制:从知到行

了解一个系统的参数是强大的。但如果你能利用这些实时更新的知识来控制这个系统呢?这是从被动辨识到主动、智能适应的飞跃,也正是 RLS 真正大放异彩的地方。这就创造了一个“自校正调节器”,一个控制器在工作的同时学习和改进的美妙概念。

想象一个大型化学反应罐,我们必须通过添加中和剂来维持精确的 pH 值。过程动态——即给定量的中和剂能改变多少 pH 值——会随着流入物成分的变化而随时间漂移。一个固定的控制器会很快失效。然而,一个自适应控制器则在一个美妙的循环中运行。一个控制律决定了要添加多少中和剂。RLS“侦探”观察系统的响应,并完善其对当前过程动态的估计。这些更新后的参数在下一个时间步被反馈到控制律中,以计算出新的、更准确的控制动作。这是一个不断探测、学习和调整的系统。这是体现在反馈回路中的智能。

这个想法在我们一些最先进的技术中达到了顶峰。考虑一下天文学家的望远镜。来自遥远恒星的光线被地球湍流的大气层扭曲,导致图像闪烁和模糊。为了解决这个问题,自适应光学系统使用可变形反射镜,每秒改变形状数百次以抵消这种扭曲。但反射镜如何知道如何塑造自己呢?RLS 提供了一个答案。通过测量传入的扭曲波前,RLS 算法可以实时建立一个大气抖动的预测模型。这个模型然后被用于前馈控制方案中,指令反射镜形成精确的共轭形状以抵消预测的扭曲,将闪烁的光点变成一个稳定的光点。

我们甚至可以使这个自适应过程更智能。假设我们知道一个突然的变化只影响了我们系统的某个特定方面——比如说,一个执行器上的增益。我们不必让 RLS 算法从头开始“重新学习”一切,而是可以给它一个提示。使用一种称为“方向遗忘”的技术,我们可以暂时告诉算法对那一个特定参数不那么确定,从而有效地增加它对该参数的学习率。这允许进行快速、有针对性的适应,而不会破坏其他参数的已充分学习的估计值。

一个清醒的现实检验:成本与局限

当然,RLS 的非凡能力并非没有代价和条件。理解一个工具不仅能做什么,还要理解它不能做什么,以及它对我们的要求,是至关重要的。在这里,我们必须将 RLS 与其更简单的表亲——最小均方(LMS)算法进行比较。

RLS 快速收敛的秘诀在于它如何导航“误差曲面”——一个多维的地形,其最低点对应于真实参数。对于许多真实世界的信号,这个地形不是一个简单的碗状;它是一个长而窄、两侧陡峭的山谷。像 LMS 这样只关注其当前位置最陡峭下降斜率的简单算法,往往会低效地在陡峭的谷壁上曲折前进,沿着谷底的进展极其缓慢。其收敛速度痛苦地依赖于数据的“特征值分布范围”——这是衡量山谷有多么拉伸的指标。

另一方面,RLS 做了一些神奇的事情。通过建立和维护输入数据逆相关矩阵的估计,它有效地“预处理”了问题。它戴上了一副数学眼镜,将长而窄的山谷变成了一个完美的圆形碗。在这个新地形中,从任何一点到最低点的方向都是最直的路径。这就是为什么 RLS 的收敛在很大程度上不受数据特征值分布范围的影响;它以大致相同、快速的速率学习系统的所有模式。

但这种魔力是有代价的。为了执行这种转换,RLS 必须维护和更新一个 M×MM \times MM×M 的矩阵,其中 MMM 是参数的数量。这需要的计算量和内存与 O(M2)O(M^2)O(M2) 成正比。而 LMS,以其优美的简单性,只需要存储一个参数向量,其成本与 O(M)O(M)O(M) 成正比。对于有数千个参数的问题,RLS 的计算负担可能是禁止性的,迫使我们选择更慢但更经济的 LMS。这是永恒的工程权衡:性能与复杂性。

此外,RLS 的好坏取决于我们给它的模型。如果真实系统是一个复杂的二阶过程,但我们告诉 RLS 用一个简化的一阶模型来拟合数据,算法会尽力而为,但其参数估计将永远不会稳定下来。它们会漂移和游走,永远试图适应那些“未解释的”动态特性。这不是算法的失败。相反,这是一个宝贵的诊断信号。当 RLS 拒绝收敛时,它通常是在向我们尖叫,我们的根本假设——我们对世界的模型——是错误的。

统一的线索:与更广阔的估计世界的联系

也许 RLS 最深刻的美在于它不是一个孤立的技巧。它是关于估计和学习的广阔、相互关联的思想网络中的一个关键节点。它与著名的 Kalman 滤波器的联系最为深刻。Kalman 滤波器是用于跟踪一个随时间演变的状态的主算法,该状态的演变模型和我们对它的测量都受到噪声的破坏。

如果我们把想要估计的“真实”参数看作一个可以随时间变化的“状态”呢?我们可能会将其建模为随机游走,这意味着我们相信它可能在缓慢漂移。在 Kalman 滤波器框架中,这种漂移的不确定性由“过程噪声”方差 QQQ 来捕捉。在 RLS 中,我们有一个“遗忘因子” λ1\lambda 1λ1,它系统地降低旧数据的权重,从而使滤波器能够适应新的趋势。事实证明,这两个概念是同一枚硬币的两面。过程噪声 QQQ 和遗忘因子 λ\lambdaλ 之间存在直接的数学等价关系。这揭示了 RLS 实际上是 Kalman 滤波器的一个特例!“遗忘”这个看似临时的想法被赋予了严格的理论基础;它是一种简化的方式,告诉滤波器你相信世界不是静止的。这正是用于使 RLS 跟踪时变参数的原理,正如人们可以在仿真中探索的那样。

这是一个反复出现的主题。RLS 也作为更通用的递推预测误差法(RPEM)的一个特例出现。当模型结构恰好是简单的“ARX”形式时,通用且更复杂的 RPEM 算法在代数上简化后就完全变成了 RLS 算法。看到这些联系,就像意识到你一直在研究的特定路径实际上是一张更大地图上的一条主干道。它展示了一个单一、优雅且计算上易于处理的算法如何成为一整套更复杂、更强大方法的基础。

从平凡到宇宙,从辨识汽车的阻力到澄清遥远恒星的光芒,递推最小二乘算法提供了一个从运动的世界中学习的框架。它平衡新证据与旧知识,适应不可预见的变化,并揭示支配我们周围系统的隐藏参数。它证明了一个简单、递推的思想能够产生只能被描述为智能的行为的力量。