RLS带遗忘因子的递归最小二乘法
递归最小二乘(Recursive Least Squares, RLS)算法是一种自适应滤波算法,用于在线估计动态系统的参数。它是一种最小化误差平方和的算法,并且可以递归地更新估计值,而不需要存储历史数据。
1 系统模型
假设系统模型为线性回归模型:
z ( k ) = φ ( k ) T θ + v ( k ) z(k) = \varphi(k)^T \theta + v(k) z(k)=φ(k)Tθ+v(k)
其中:
- z ( k ) z(k) z(k) 是时刻 k k k 的输出。
- φ ( k ) \varphi(k) φ(k) 是时刻 k k k 的输入向量。
- θ \theta θ 是参数向量。
- v ( k ) v(k) v(k) 是噪声项,假设为高斯白噪声。
2 目标函数
递归最小二乘算法的目标是最小化预测误差的加权平方和:
J ( θ ) = ∑ i = 1 k λ k − i [ z ( i ) − φ ( i ) T θ ] 2 J(\theta) = \sum_{i=1}^k \lambda^{k-i} [z(i) - \varphi(i)^T \theta]^2 J(θ)=i=1∑kλk−i[z(i)−φ(i)Tθ]2
其中:
- λ \lambda λ 是遗忘因子,通常在 0 到 1 之间,用于控制历史数据的权重。
3 递归更新
为了递归更新参数估计 θ ^ ( k ) \hat{\theta}(k) θ^(k) 和误差协方差 P ( k ) P(k) P(k),我们首先对目标函数 J ( θ ) J(\theta) J(θ) 进行最优化。
3.1 参数更新
我们首先对代价函数 J ( θ ) J(\theta) J(θ) 关于参数向量 θ \theta θ 进行求导,并令导数为零,以找到最小化代价函数的参数估计。
对 J ( θ ) J(\theta) J(θ) 关于 θ \theta θ 的导数为:
∂ J ( θ ) ∂ θ = − 2 ∑ i = 1 k λ k − i φ ( i ) [ z ( i ) − φ ( i ) T θ ] \frac{\partial J(\theta)}{\partial \theta} = -2 \sum_{i=1}^k \lambda^{k-i} \varphi(i) [z(i) - \varphi(i)^T \theta] ∂θ∂J(θ)=−2i=1∑kλk−iφ(i)[z(i)−φ(i)Tθ]
令导数为零,得到:
∑ i = 1 k λ k − i φ ( i ) [ z ( i ) − φ ( i ) T θ ] = 0 \sum_{i=1}^k \lambda^{k-i} \varphi(i) [z(i) - \varphi(i)^T \theta] = 0 i=1∑kλk−iφ(i)[z(i)−φ(i)Tθ]=0
将上式重新组织,得到:
∑ i = 1 k λ k − i φ ( i ) z ( i ) = ∑ i = 1 k λ k − i φ ( i ) φ ( i ) T θ \sum_{i=1}^k \lambda^{k-i} \varphi(i) z(i) = \sum_{i=1}^k \lambda^{k-i} \varphi(i) \varphi(i)^T \theta i=1∑kλk−iφ(i)z(i)=i=1∑kλk−iφ(i)φ(i)Tθ
解得 θ \theta θ 为:
θ ( k ) = ( ∑ i = 1 k λ k − i φ ( i ) φ ( i ) T ) − 1 ∑ i = 1 k λ k − i φ ( i ) z ( i ) \theta(k) = \left( \sum_{i=1}^k \lambda^{k-i} \varphi(i) \varphi(i)^T \right)^{-1} \sum_{i=1}^k \lambda^{k-i} \varphi(i) z(i) θ(k)=(i=1∑kλk−iφ(i)φ(i)T)−1i=1∑kλk−iφ(i)z(i)
3.2 递归形式
为了简化计算,我们引入 P ( k ) P(k) P(k) 作为 θ ( k ) \theta(k) θ(k) 的估计误差协方差矩阵的逆。那么,我们有:
P ( k ) = ( ∑ i = 1 k λ k − i φ ( i ) φ ( i ) T ) − 1 P(k) = \left( \sum_{i=1}^k \lambda^{k-i} \varphi(i) \varphi(i)^T \right)^{-1} P(k)=(i=1∑kλk−iφ(i)φ(i)T)−1
参数更新可以表示为:
θ ^ ( k ) = θ ^ ( k − 1 ) + P ( k ) φ ( k ) [ z ( k ) − φ ( k ) T θ ^ ( k − 1 ) ] \hat{\theta}(k) = \hat{\theta}(k-1) + P(k) \varphi(k) [z(k) - \varphi(k)^T \hat{\theta}(k-1)] θ^(k)=θ^(k−1)+P(k)φ(k)[z(k)−φ(k)Tθ^(k−1)]
3.3 误差协方差更新
误差协方差的更新公式可以表示为:
P ( k ) = 1 λ ( k ) [ P ( k − 1 ) − P ( k − 1 ) φ ( k ) φ ( k ) T P ( k − 1 ) λ ( k ) ] P(k) = \frac{1}{\lambda(k)} \left[ P(k-1) - P(k-1) \varphi(k) \varphi(k)^T P(k-1) \lambda(k) \right] P(k)=λ(k)1[P(k−1)−P(k−1)φ(k)φ(k)TP(k−1)λ(k)]
为了简化,我们定义增益向量 y ( k ) y(k) y(k) 为:
y ( k ) = P ( k − 1 ) φ ( k ) [ φ ( k ) T P ( k − 1 ) φ ( k ) + λ ( k ) ] − 1 y(k) = P(k-1) \varphi(k) \left[ \varphi(k)^T P(k-1) \varphi(k) + \lambda(k) \right]^{-1} y(k)=P(k−1)φ(k)[φ(k)TP(k−1)φ(k)+λ(k)]−1
那么,误差协方差的更新公式可以简化为:
P ( k ) = 1 λ ( k ) [ I − y ( k ) φ ( k ) ] P ( k − 1 ) P(k) = \frac{1}{\lambda(k)} \left[ I - y(k) \varphi(k) \right] P(k-1) P(k)=λ(k)1[I−y(k)φ(k)]P(k−1)
- θ ^ ( k ) \hat{\theta}(k) θ^(k) 是时刻 k k k 的参数估计。
- P ( k ) P(k) P(k) 是时刻 k k k 的误差协方差矩阵的逆。
- y ( k ) y(k) y(k) 是增益向量,用于调整输入向量 $ \varphi(k) $ 对参数估计的影响。
这些递归公式允许算法在每个时间步更新参数估计,而不需要存储整个历史数据,从而实现高效的在线参数估计。
4 总结
RLS 最重要的:
θ ^ ( k ) = θ ^ ( k − 1 ) + y ( k ) [ z ( k ) − φ ( k ) T θ ^ ( k − 1 ) ] \hat{\theta}(k) = \hat{\theta}(k-1) + y(k) [z(k) - \varphi(k)^T \hat{\theta}(k-1)] θ^(k)=θ^(k−1)+y(k)[z(k)−φ(k)Tθ^(k−1)]
y ( k ) = P ( k − 1 ) φ ( k ) [ φ ( k ) T P ( k − 1 ) φ ( k ) + λ − 1 ] − 1 y(k) = P(k-1) \varphi(k) \left[ \varphi(k)^T P(k-1) \varphi(k) + \lambda^{-1} \right]^{-1} y(k)=P(k−1)φ(k)[φ(k)TP(k−1)φ(k)+λ−1]−1
P ( k ) = [ P ( k − 1 ) − 1 + λ − 1 φ ( k ) φ ( k ) T ] − 1 P(k) = \left[ P(k-1)^{-1} + \lambda^{-1} \varphi(k) \varphi(k)^T \right]^{-1} P(k)=[P(k−1)−1+λ−1φ(k)φ(k)T]−1
这些递归公式允许算法在每个时间步更新参数估计,而不需要存储整个历史数据,从而实现高效的在线参数估计。