在系统辨识、 自适应控制、 自适应信号处理和机器学习中往往会用到一些算法, 这些算法都有一定的相似性和差异性。 然而, 上述算法都需要处理某种类型的实验数据。 如何采集和处理数据决定了采用哪种最合适的算法。 在自适应控制中, 具有一个称为自校正调节器的装置。 在此情况下, 算法主要是用于测量状态以作为输出, 估计模型参数, 并输出控制信号。 在强化学习中, 算法的作用是处理奖励、 估计值函数并输出相应操作。 尽管递归最小二乘 (RLS) 算法在自校正调节器中称为监督式学习算法, 而在强化学习中看作一种非监督式学习算法, 但实际上两者十分相似。
一、最小二乘算法LS
最小二乘 (LS) 算法是一种将实验数据拟合为模型的著名的鲁棒算法。 首先是为用户定义一个适合于拟合数据的数学结构或模型; 其次是要设计一个在适用条件下采集数据的实验, “适用条件” 通常是指在系统典型运行的操作条件;接下来是运行可能具有多种形式的估计算法; 最后验证所辨识的或 “学习” 的模型。 LS 算法通常用于拟合数据。 在此,以大多非常熟悉的经典二维线性回归拟合为例:
y(n)
= ax(n)
+ b
在上述简单线性回归模型中, 输入为采样信号 x(n)
, 输出为 y(n)
。 所定义的模型结构是一条直线。 因此, 假设所采集的数据将会拟合成一条直线。 由此可表示为
y(n)
= ϕ \phi ϕT θ \theta θ
式中, ϕ \phi ϕT = [x(n)
1]; θ \theta θT = [a b]。
如何选择 ϕ 决定了模型结构, 这也反映了认为数据所应表现的形式。 这就是机器学习的本质, 而且也是几乎所有的大学生在某种程度上学习线性回归的基本情况。 线性回归算法的计算可以表示为标量成本函数, 由下式给出:
V = ∑ n = 1 N ( y ( n ) − ϕ T ( n ) θ ^ ) 2 \begin{aligned} V =\sum_{n=1}^N\left(y(n)-\phi^{\mathrm{T}}(n) \hat{\theta}\right) ^2 \end{aligned} V=n=1∑N(y(n)−ϕT(n)θ^)2
式中, θ ^ \hat{\theta} θ^ 是 LS 算法中参数 θ \theta θ 的估计值, 目的是在估计值 θ ^ \hat{\theta} θ^ 下使得成本函数 V V V 最小。
为得到参数估计 θ ^ \hat{\theta} θ^ 的 “最优” 值, 应计算成本函数 V 对于 θ ^ \hat{\theta} θ^ 的偏导并设其为零。
由此可得
∂ V ∂ θ ^ = ∑ n = 1 N ( y ( n ) − ϕ T ( n ) θ ^ ) ϕ ( n ) = ∑ n = 1 N ϕ ( n ) y ( n ) − ∑ n = 1 N ϕ ( n ) ϕ T ( n ) θ ^ \begin{aligned} \frac{\partial V}{\partial \hat{\theta}} & =\sum_{n=1}^N\left(y(n)-\phi^{\mathrm{T}}(n) \hat{\theta}\right) \phi(n) \\ & =\sum_{n=1}^N \phi(n) y(n)-\sum_{n=1}^N \phi(n) \phi^{\mathrm{T}}(n) \hat{\theta} \end{aligned} ∂θ^∂V=n=1∑N(y(n)−ϕT(n)θ^)ϕ(n)=n=1∑Nϕ(n)y(n)−n=1∑Nϕ(n)ϕT(n)θ^
∂ V ∂ θ ^ = 0 \frac{\partial V}{\partial \hat{\theta}}=0 ∂θ^∂V=0, 可得
∑ n = 1 N ϕ ( n ) ϕ T ( n ) θ ^ = ∑ n = 1 N ϕ ( n ) y ( n ) \sum_{n=1}^N \phi(n) \phi^{\mathrm{T}}(n) \hat{\theta}=\sum_{n=1}^N \phi(n) y(n) n=1∑Nϕ(n)ϕT(n)θ^=n=1∑Nϕ(n)y(n)
求解 θ ^ \hat{\theta} θ^, 可得 LS 的解:
θ ^ = [ ∑ n = 1 N ϕ ( n ) ϕ T ( n ) ] − 1 [ ∑ n = 1 N ϕ ( n ) y ( n ) ] \hat{\theta}=\left[\sum_{n=1}^N \phi(n) \phi^{\mathrm{T}}(n)\right]^{-1}\left[\sum_{n=1}^N \phi(n) y(n)\right] θ^=[n=1∑Nϕ(n)ϕT(n)]−1[n=1∑Nϕ(n)y(n)]
其中, 逆矩阵 [ ∑ n = 1 N ϕ ( n ) ϕ T ( n ) ] − 1 \left[\sum_{n=1}^N \phi(n) \phi^{\mathrm{T}}(n)\right]^{-1} [∑n=1Nϕ(n)ϕT(n)]−1 存在。 如果逆矩阵不存在, 则该系统是不可辨识的。 例如, 如果在直线情况下只有一个单点, 则逆矩阵不会扩展到二维空间, 因此不可能存在。 所以, 至少需要两个相互独立的点才能绘制一条直线。 或者如果具有一个不断重复的同一点, 逆矩阵也不可能存在。
矩阵 ∑ n = 1 N ϕ ( n ) ϕ T ( n ) \sum_{n=1}^N \phi(n) \phi^{\mathrm{T}}(n) ∑n=1Nϕ(n)ϕT(n) 称为信息矩阵, 这关系到参数估计的程度。 信息矩阵的逆矩阵是协方差矩阵, 与参数估计的方差成正比。 上述两个矩阵都是正定对称矩阵。 这些特性广泛用于算 法 性 能 的 分 析。
在 一 些 文 献 中, 通 常 将 协 方 差 矩 阵 表 示 为 P = [ ∑ n = 1 N ϕ ( n ) ϕ T ( n ) ] − 1 P = \left[\sum_{n=1}^N \phi(n) \phi^{\mathrm{T}}(n)\right]^{-1} P=[∑n=1Nϕ(n)ϕT(n)]−1 。
在此
∂ V ∂ θ ^ = 0 = ∑ n = 1 N ( y ( n ) − ϕ T ( n ) θ ^ ) ϕ ( n ) \begin{aligned} \frac{\partial V}{\partial \hat{\theta}} = 0 =\sum_{n=1}^N\left(y(n)-\phi^{\mathrm{T}}(n) \hat{\theta}\right) \phi(n) \end{aligned} ∂θ^∂V=0=n=1∑N(y(n)−ϕT(n)θ^)ϕ(n)
括号内的项称为预测误差,或也可称为“新项”。
由此可定义预测误差为
ε ( n ) = ( y ( n ) − ϕ T ( n ) θ ^ ) ε(n) = (y(n) - ϕ^T(n)\hat{\theta}) ε(n)=(y(n)−ϕT(n)θ^)
ε(n) 表示系统输出的预测误差。 在此情况下, 输出项 y(n)为所需估计的正确值。 由于已知正确值,因此称为监督式学习。 值得注意的是, 预测误差与数据矢量的乘积等于零。 因此,可认为预测误差与数据正交, 或者说, 数据不在预测误差的空间中。 简单来说, 这意味着如果已经选择了一个良好的模型结构 ϕ ( n ) ϕ(n) ϕ(n), 则预测误差应表现为白噪声。通常通过绘制预测误差可快速检查所设计的预测器性能。 如果误差是相关的 (即不是白噪声), 那么就应该继续优化模型以获得更好的预测结果。
一般而言, 并不常用线性回归形式, 而通常会增加白噪声项, 由此, 线性回归可表示为
y ( n ) = ϕ T ( n ) θ ^ + v ( n ) y(n)=\phi^{\mathrm{T}}(n) \hat{\theta}+v(n) y(n)=ϕT(n)θ^+v(n)
式中, v ( n ) v(n) v(n) 为白噪声项。可表示无限个可能的模型结构。例如, 假设要学习一个二阶线性系统的动态性能或一个二阶无限冲激响应(IIR)滤波器的参数。可以选择下式给出的二阶模型结构:
y ( n ) = − a 1 y ( n − 1 ) − a 2 y ( n − 2 ) + b 1 u ( n − 1 ) + b 2 u ( n − 2 ) + v ( n ) y(n)=-a_1 y(n-1)-a_2 y(n-2)+b_1 u(n-1)+b_2 u(n-2)+v(n) y(n)=−a1y(n−1)−a2y(n−2)+b1u(n−1)+b2u(n−2)+v(n)
那么, 模型结构可由 ϕ ( n ) \phi(n) ϕ(n) 定义为
ϕ T ( n ) = [ y ( n − 1 ) y ( n − 2 ) u ( n − 1 ) u ( n − 2 ) ] \phi^{\mathrm{T}}(n)=\left[\begin{array}{llll} y(n-1) & y(n-2) & u(n-1) & u(n-2) \end{array}\right] ϕT(n)=[y(n−1)y(n−2)u(n−1)u(n−2)]
一般情况下, 可将任意一个 k k k 阶自回归外生 (ARX) 模型结构表示为
y ( n ) = − a 1 y ( n − 1 ) − a 2 y ( n − 2 ) − ⋯ − a m y ( n − k ) + b 1 u ( n − 1 ) + b 2 u ( n − 2 ) + ⋯ + b n − k u ( n − k ) + v ( n ) \begin{array}{l} y(n)=-a_1 y(n-1)-a_2 y(n-2)-\cdots-a_m y(n-k) \\ +b_1 u(n-1)+b_2 u(n-2)+\cdots+b_{n-k} u(n-k)+v(n) \end{array} y(n)=−a1y(n−1)−a2y(n−2)−⋯−amy(n−k)+b1u(n−1)+b2u(n−2)+⋯+bn−ku(n−k)+v(n)
则 ϕ ( n ) \phi(n) ϕ(n) 表示为
ϕ T ( n ) = [ y ( n − 1 ) ⋯ y ( n − m ) u ( n − 1 ) ⋯ u ( n − m ) ] \phi^{\mathrm{T}}(n)=[y(n-1) \cdots y(n-m) \quad u(n-1) \cdots u(n-m)] ϕT(n)=[y(n−1)⋯y(n−m)u(n−1)⋯u(n−m)]
然后, 需选择一个适当的实验进行数据采集(这并不容易!), 并根据式 (1.6)计算参数。矢量 ϕ ( n ) \phi(n) ϕ(n) 可具有多种不同形式, 实际上还可包含数据的非线性函数, 如对数项或二次方项, 以及具有不同的延迟项。在很大程度上, 可根据专业经验来确定 ϕ ( n ) \phi(n) ϕ(n) 的形式。通常数据以矩阵形式表示, 此时, 矩阵可定义为
Φ = [ ϕ ( 1 ) ϕ ( 2 ) ⋯ ϕ ( N ) ] \Phi=[\phi(1) \phi(2) \cdots \phi(N)] Φ=[ϕ(1)ϕ(2)⋯ϕ(N)]
而输出矩阵为
Y = [ y ( 1 ) y ( 2 ) ⋯ y ( N ) ] Y=[y(1) y(2) \cdots y(N)] Y=[y(1)y(2)⋯y(N)]
由此, LS 估计可写为
Θ ^ = ( Φ Φ T ) − 1 Φ Y \hat{\Theta}=\left(\Phi \Phi^{\mathrm{T}}\right)^{-1} \Phi Y Θ^=(ΦΦT)−1ΦY
此外, 还可将预测误差表示为
E = Y − Φ T Θ ^ E=Y-\Phi^{\mathrm{T}} \hat{\Theta} E=Y−ΦTΘ^
同时, 正交条件也可表示为 Φ E = 0 \Phi E=0 ΦE=0 。
二、RLS 算法
LS 算法现已扩展到 RLS 算法。 在此, 参数估计发展为利用机器来实时采集数据。 在上节中, 都是首先采集所有数据, 然后计算参数估计值。 RLS 算法是在假设已知 LS 算法的一个解并增加单个数据点的基础上推导而得的。 在 RLS 算法的实现过程中, 成本函数稍有不同。 此时的成本函数为
V = ∑ n = 1 N λ ( N − t ) ( y ( n ) − ϕ T ( n ) θ ^ ) 2 V=\sum_{n=1}^N \lambda^{(N-t)}\left(y(n)-\phi^{\mathrm{T}}(n) \hat{\theta}\right)^2 V=n=1∑Nλ(N−t)(y(n)−ϕT(n)θ^)2
式中, λ ⩽ 1 , λ \lambda \leqslant 1, \lambda λ⩽1,λ 项称为遗忘因子。
数据点越早, 则遗忘因子权重越小。这样, 所得到的 RLS 算法就能够跟踪参数的变化。同样, 取 V V V 相对于 θ ^ \hat{\theta} θ^ 的偏导并设为零, 可得
θ ^ = [ ∑ n = 1 N λ ( N − t ) ϕ ( n ) ϕ T ( n ) ] − 1 [ ∑ n = 1 N λ ( N − t ) ϕ ( n ) y ( n ) ] \hat{\theta}=\left[\sum_{n=1}^N \lambda^{(N-t)} \phi(n) \phi^{\mathrm{T}}(n)\right]^{-1}\left[\sum_{n=1}^N \lambda^{(N-t)} \phi(n) y(n)\right] θ^=[n=1∑Nλ(N−t)ϕ(n)ϕT(n)]−1[n=1∑Nλ(N−t)ϕ(n)y(n)]
其中, 遗怠因子应设为 0.95 ⩽ λ ⩽ 1.0 0.95 \leqslant \lambda \leqslant 1.0 0.95⩽λ⩽1.0 。若遗忘因子设为 0.95 左右, 则之前的数据会很快遗忘。经验法则表明, 参数 θ ^ \hat{\theta} θ^ 的估计主要是根据 1 / ( 1 − λ ) 1 /(1-\lambda) 1/(1−λ) 个数据点。 RLS 算法如下:
θ ^ ( n + 1 ) = θ ^ ( n ) + L ( n + 1 ) ( y ( n + 1 ) − ϕ T ( n + 1 ) θ ^ ( n ) ) L ( n + 1 ) = P ( n ) ϕ ( n + 1 ) λ + ϕ T ( n + 1 ) P ( n ) ϕ ( n + 1 ) P ( n + 1 ) = 1 λ ( P ( n ) − P ( n ) ϕ ( n + 1 ) ϕ T ( n + 1 ) P ( n ) λ + ϕ T ( n + 1 ) P ( n ) ϕ ( n + 1 ) ) \begin{array}{c} \hat{\theta}(n+1)=\hat{\theta}(n)+L(n+1)\left(y(n+1)-\phi^{\mathrm{T}}(n+1) \hat{\theta}(n)\right) \\ L(n+1)=\frac{P(n) \phi(n+1)}{\lambda+\phi^{\mathrm{T}}(n+1) P(n) \phi(n+1)} \\ P(n+1)=\frac{1}{\lambda}\left(P(n)-\frac{P(n) \phi(n+1) \phi^{\mathrm{T}}(n+1) P(n)}{\lambda+\phi^{\mathrm{T}}(n+1) P(n) \phi(n+1)}\right) \end{array} θ^(n+1)=θ^(n)+L(n+1)(y(n+1)−ϕT(n+1)θ^(n))L(n+1)=λ+ϕT(n+1)P(n)ϕ(n+1)P(n)ϕ(n+1)P(n+1)=λ1(P(n)−λ+ϕT(n+1)P(n)ϕ(n+1)P(n)ϕ(n+1)ϕT(n+1)P(n))
通过将参数估计矢量 θ ^ \hat{\theta} θ^初始化为用户所需参数的最佳估计来实现,为简单起见 通常设为零。 协方差矩阵 P 通常初始化为一个相对较大的对角矩阵来表征参数估计过程中的不确定性。
应注意到协方差矩阵 P 总是正定对称的。如果由于重复计算 RLS 而产生的数值误差,导致 P 矩阵不再正定对称,则算法将发散。现已有一些改进算法能够确保 P 矩阵保持正定。通常是采用 P 矩阵可进行 Cholesky 分解或 UDU 分解的二次方根法。
观察可知,通过将之前的估计值与矩阵 L(n)和当前预测误差的乘积相加来实现参数估计的更新。 在机器学习的几乎所有算法中将会发现全部采用这种结构。在此情况下,已具有一个实际的正确值,即量测值 y(n),因此该算法称为监督式学习。
☕物有本末,事有终始,知所先后。🍭
🍎☝☝☝☝☝我的CSDN☝☝☝☝☝☝🍓