递归最小二乘 Recursive Least Square(RLS)
文章目录
1. 问题引入
1.1 LMS自适应滤波回顾
首先我们来回顾一下自适应问题。
Z ( 1 ) , Z ( 2 ) , . . . , Z ( n ) d ( 1 ) , d ( 2 ) , . . . , d ( n ) Z(1),Z(2),...,Z(n) \\ d(1),d(2),...,d(n) Z(1),Z(2),...,Z(n)d(1),d(2),...,d(n)
我们在不同时刻有不同的数据,同时也有不同的目标,我们希望通过某种线性变换,使得我们的数据能够去逼近我们的目标。
g ( Z ( n ) ) → d ( n ) ⇒ g ( Z ( n ) ) = ω T Z ( n ) g(Z(n)) \rightarrow d(n) \Rightarrow g(Z(n)) = \omega^T Z(n) g(Z(n))→d(n)⇒g(Z(n))=ωTZ(n)
然后我们会去寻找一个损失函数,去评估我们的估计情况,我们用均方误差作为评价标准,这样得到的结果其实就是维纳滤波。因为我们的系统是时变的,所以估计的线性系数ω也应该是个与时间有关的数字。
L o s s : m i n E ∣ d ( n ) − ω T Z ( n ) ∣ 2 ⇒ m i n E ∣ d ( n ) − ω ( n ) T Z ( n ) ∣ 2 Adaptive Loss : minE|d(n) - \omega^T Z(n)|^2 \Rightarrow minE|d(n) - \omega(n)^T Z(n)|^2 \text{ Adaptive} Loss:minE∣d(n)−ωTZ(n)∣2⇒minE∣d(n)−ω(n)TZ(n)∣2 Adaptive
但是在实际求解的时候,我们会遇到一个问题,就是这个系统具有两种属性。首先,这个系统是时变的,每一时刻的估计都需要进行更改;同时这个系统的目标优化必须通过迭代的方法不断去寻找,这样就出现了迭代时间轴和采样时间轴的两套不同的下标体系。
基于这个问题,我们有了自适应的思想,我们把两种时间系统进行统一,我们每次采样一次,就进行一次迭代,这样看起来似乎是种四不像的信号处理方法,但是实际上却有着不错的性能。
自适应的继续发展就是神经网络。人们对神经网络为什么可以工作知之甚少。比人们对单层自适应算法了解的少很多,但是神经网络已经得到广泛应用了。
在这种自适应的指导思想下,我们就有了LMS。因为每次都只采样一次,所以这个式子是没有办法求期望的,因此首先就去掉了期望符号
m i n ω E ∣ d ( n ) − ω T Z ( n ) ∣ 2 ⇒ m i n ω ∣ d ( n ) − ω T Z ( n ) ∣ 2 min_\omega E|d(n) - \omega^T Z(n)|^2 \Rightarrow min_\omega|d(n) - \omega^T Z(n)|^2 minωE∣d(n)−ωTZ(n)∣2⇒minω∣d(n)−ωTZ(n)∣2
⇒ ω n + 1 = ω n + μ Z ( n ) ∗ e ( n ) \Rightarrow \omega_{n+1} = \omega_n + \mu Z(n)*e(n) ⇒ωn+1=ωn+μZ(n)∗e(n)
其中
e ( n ) = d ( n ) − ω n T Z ( n ) e(n) = d(n) - \omega_n^TZ(n) e(n)=d(n)−ωnTZ(n)
2. 递归最小二乘
2.1 LMS的缺陷与递归最小二乘模型建立
今天,我们来重新审视一下LMS,我们觉得LMS是有缺陷的。
LMS的缺陷在于,他只考虑了最新的数据点的信息,而没有考虑历史的信息。虽然马尔科夫性告诉我们,历史的可以遗忘的,但是马尔科夫性只是个假设。因此,如果我们想要利用历史的信息,我们应该怎么调整损失函数呢?
事实上,我们可以考虑利用加法的形式,把各个时刻的损失函数加在一起
∑ k = 1 n E ∣ d ( k ) − ω n T Z ( k ) ∣ 2 \sum_{k=1}^n E|d(k)-\omega_n^TZ(k)|^2 k=1∑nE∣d(k)−ωnTZ(k)∣2
但是这么做,其实也有些极端了,我们应该更加重视最近的数据的影响,历史固然应该得到尊重,但也更应该与时俱进,因此我们引入遗忘因子的方式,继续修正损失函数
∑ k = 1 n λ ( n , k ) ∗ E ∣ d ( k ) − ω n T Z ( k ) ∣ 2 \sum_{k=1}^n \lambda(n,k)*E|d(k)-\omega_n^TZ(k)|^2 k=1∑nλ(n,k)∗E∣d(k)−ωnTZ(k)∣2
λ ( n , k ) ⇒ Forgetting Factor \lambda(n,k) \Rightarrow \text{Forgetting Factor} λ(n,k)⇒Forgetting Factor
最常见的遗忘因子是指数遗忘
∑ k = 1 n λ n − k ∗ E ∣ d ( k ) − ω n T Z ( k ) ∣ 2 \sum_{k=1}^n \lambda^{n-k}*E|d(k)-\omega_n^TZ(k)|^2 k=1∑nλn−k∗E∣d(k)−ωnTZ(k)∣2
我们这里的期望仍然没法求,我们学习widrow的思想,去掉期望,得到了最终的损失函数
g ( ω n ) = ∑ k = 1 n λ n − k ∗ ∣ d ( k ) − ω n T Z ( k ) ∣ 2 ( 1 ) g(\omega_n)=\sum_{k=1}^n \lambda^{n-k}*|d(k)-\omega_n^TZ(k)|^2 \quad\quad(1) g(ωn)=k=1∑nλn−k∗∣d(k)−ωnTZ(k)∣2(1)
我们对损失函数进行变形
g ( ω n ) = ∑ k = 1 n λ n − k d 2 ( k ) − 2 ∑ k = 1 n d ( k ) ω n T Z ( k ) λ n − k + ∑ k = 1 n λ n − k ( ω n T Z ( k ) ) 2 = ∑ k = 1 n λ n − k d 2 ( k ) − 2 ω n T ( ∑ k = 1 n λ n − k Z ( k ) d ( k ) ) + ω n T ( ∑ k = 1 n λ n − k Z ( k ) ∗ Z T ( k ) ) ω n ( 2 ) g(\omega_n) = \sum_{k=1}^n \lambda^{n-k} d^2(k) - 2 \sum_{k=1}^n d(k)\omega_n^TZ(k) \lambda^{n-k} + \sum_{k=1}^n \lambda^{n-k} (\omega_n^T Z(k))^2 \\ = \sum_{k=1}^n \lambda^{n-k} d^2(k) - 2 \omega_n^T (\sum_{k=1}^n \lambda^{n-k}Z(k)d(k)) + \omega_n^T (\sum_{k=1}^n \lambda^{n-k} Z(k)*Z^T(k)) \omega_n \quad\quad(2) g(ωn)=k=1∑nλn−kd2(k)−2k=1∑nd(k)ωnTZ(k)λn−k+k=1∑nλn−k(ωnTZ(k))2=k=1∑nλn−kd2(k)−2ωnT(k=1∑nλn−kZ(k)d(k))+ωnT(k=1∑nλn−kZ(k)∗ZT(k))ωn(2)
这里注意一下,关于第一项,其实是个常数。
对于第二项,因为ωT是个行向量,Z是个列向量,二者相乘是个数字,所以可以提到前面去
而第三项其实是个二次型
( ω n T Z ( k ) ) 2 = ω n T Z ( k ) ∗ Z T ( k ) ω n (\omega_n^T Z(k))^2 = \omega_n^T Z(k) * Z^T(k) \omega_n (ωnTZ(k))2=ωnTZ(k)∗ZT(k)ωn
我们希望式子(2)能够更加简洁,因此我们令
Z ( n ) = ∑ k = 1 n λ n − k Z ( k ) d ( k ) ϕ ( n ) = ∑ k = 1 n λ n − k Z ( k ) ∗ Z T ( k ) Z(n) = \sum_{k=1}^n \lambda^{n-k}Z(k)d(k) \\ \phi(n) = \sum_{k=1}^n \lambda^{n-k} Z(k)*Z^T(k) Z(n)=k=1∑nλn−kZ(k)d(k)ϕ(n)=k=1∑nλn−kZ(k)∗ZT(k)
这里我们需要记得,φ是个对称矩阵,求梯度的时候有用。
ϕ T ( n ) = ϕ ( n ) \phi^T(n) = \phi(n) ϕT(n)=ϕ(n)
因此(2)式可以变为
g ( ω n ) = C − 2 ω n T Z ( n ) + ω n T ϕ ( n ) ω n ( 3 ) g(\omega_n) = C - 2\omega_n^T Z(n) + \omega_n^T \phi(n) \omega_n \quad\quad(3) g(ωn)=C−2ωnTZ(n)+ωnTϕ(n)ωn(3)
我们对我们的目标函数进行求梯度
∇ ω n g ( ω n ) = − 2 Z ( n ) + 2 ϕ ( n ) ω n = 0 \nabla_{\omega_n} g(\omega_n) = -2Z(n) + 2\phi(n)\omega_n = 0 ∇ωng(ωn)=−2Z(n)+2ϕ(n)ωn=0
ω n = ϕ − 1 ( n ) Z ( n ) \omega_n = \phi^{-1}(n)Z(n) ωn=ϕ−1(n)Z(n)
然后我们就得到了一个最小二乘的结果。
2.2 矩阵求逆公式
2.2.1 两个重要的中间式
其实,我们更想得到一个自适应形式的递归最小二乘,这样的话便于求解。因为对于计算机来说,求逆是一件非常繁琐的事情。但是,首先我们要介绍一点知识,就是矩阵求逆公式。
其实我们想推导一下这个矩阵求逆公式,我们目标是要求
( A + B C D ) − 1 = ? (A+BCD)^{-1} = ? (A+BCD)−1=?
这个矩阵求逆是个小技巧,但是这个小技巧对于递归最小二乘来说,具有本质性的作用。我们希望通过分块对角化的方法来进行求解。
首先我们要通过对下面的矩阵进行一些操作,得到一些东西。
( A B D − C − 1 ) \begin{pmatrix} A & B \\ D & -C^{-1} \end{pmatrix} (ADB−C−1)
我们有这样的想法,因为对角阵求逆比较简单,所以我们希望把这个矩阵化成对角阵的形式。
这个对角阵的转换思路有两种
- 一种是通过先消除B再消除D的方法得到对角阵
- 另一种是通过先消除D再消除B的手段得到对角阵。
我们先来尝试第一种,我们通过左乘做行变换消除B,然后通过右乘做列变换消除D
( A B D − C − 1 ) ⇒ ( I B C 0 I ) ∗ ( A B D − C − 1 ) ∗ ( I 0 C D I ) = ( A + B C D 0 D − C − 1 ) ∗ ( I 0 C D I ) = ( A + B C D 0 0 − C − 1 ) ( i ) \begin{pmatrix} A & B \\ D & -C^{-1} \end{pmatrix} \Rightarrow \begin{pmatrix} I & BC \\ 0 & I \end{pmatrix} *\begin{pmatrix} A & B \\ D & -C^{-1} \end{pmatrix} *\begin{pmatrix} I & 0 \\ CD & I \end{pmatrix} \\ = \begin{pmatrix} A+BCD & 0 \\ D & -C^{-1} \end{pmatrix} *\begin{pmatrix} I & 0 \\ CD & I \end{pmatrix} = \begin{pmatrix} A+BCD & 0 \\ 0 & -C^{-1} \end{pmatrix} \quad\quad(i) (ADB−C−1)⇒(I0BCI)∗(ADB−C−1)∗(ICD0I)=(A+BCDD0−C−1)∗(ICD0I)=(A+BCD00−C−1)(i)
我们发现,这么做完了以后,就有了A+BCD了,而且这个矩阵是个对角阵,求逆非常简单,但是前面的三个式子中,中间那一项不是对角阵,求逆还是很复杂,为了解决这个问题,我们就通过第二个处理思路,把中间矩阵通过第二种思路处理成对角阵,从而最终就能够得到A+BCD的逆了
我们用第二种思路,先对这个矩阵进行左乘消掉D,再通过右乘消掉B,得到一个对角阵
( A B D − C − 1 ) ⇒ ( I 0 − D A − 1 I ) ∗ ( A B D − C − 1 ) ∗ ( I − A − 1 B 0 I ) = ( A B 0 − D A − 1 B − C − 1 ) ∗ ( I − A − 1 B 0 I ) = ( A 0 0 − ( D A − 1 B + C − 1 ) ) ( i i ) \begin{pmatrix} A & B \\ D & -C^{-1} \end{pmatrix} \Rightarrow \begin{pmatrix} I & 0 \\ -DA^{-1} & I \end{pmatrix} *\begin{pmatrix} A & B \\ D & -C^{-1} \end{pmatrix} *\begin{pmatrix} I & -A^{-1}B \\ 0 & I \end{pmatrix} \\ = \begin{pmatrix} A & B \\ 0 & -DA^{-1}B-C^{-1} \end{pmatrix}*\begin{pmatrix} I & -A^{-1}B \\ 0 & I \end{pmatrix} = \begin{pmatrix} A & 0\\ 0 & -(DA^{-1}B+C^{-1}) \end{pmatrix} \quad\quad(ii) (ADB−C−1)⇒(I−DA−10I)∗(ADB−C−1)∗(I0−A−1BI)=(A0B−DA−1B−C−1)∗(I0−A−1BI)=(A00−(DA−1B+C−1))(ii)
于是我们得到了两个式子
( I B C 0 I ) ∗ ( A B D − C − 1 ) ∗ ( I 0 C D I ) = ( A + B C D 0 0 − C − 1 ) ( i ) ( I 0 − D A − 1 I ) ∗ ( A B D − C − 1 ) ∗ ( I − A − 1 B 0 I ) = ( A 0 0 − ( D A − 1 B + C − 1 ) ) ( i i ) \begin{pmatrix} I & BC \\ 0 & I \end{pmatrix} *\begin{pmatrix} A & B \\ D & -C^{-1} \end{pmatrix} *\begin{pmatrix} I & 0 \\ CD & I \end{pmatrix} =\begin{pmatrix} A+BCD & 0 \\ 0 & -C^{-1} \end{pmatrix} \quad\quad(i) \\ \begin{pmatrix} I & 0 \\ -DA^{-1} & I \end{pmatrix} *\begin{pmatrix} A & B \\ D & -C^{-1} \end{pmatrix} *\begin{pmatrix} I & -A^{-1}B \\ 0 & I \end{pmatrix} = \begin{pmatrix} A & 0\\ 0 & -(DA^{-1}B+C^{-1}) \end{pmatrix} \quad\quad(ii) (I0BCI)∗(ADB−C−1)∗(ICD0I)=(A+BCD00−C−1)(i)(I−DA−10I)∗(ADB−C−1)∗(I0−A−1BI)=(A00−(DA−1B+C−1))(ii)
2.2.2 求逆公式
我们对得到的两个重要的中间式继续进行变换,就可以得到A+BCD的逆矩阵公式了
我们对(1)取逆
( A + B C D 0 0 − C − 1 ) − 1 = ( I 0 C D I ) − 1 ∗ ( A B D − C − 1 ) − 1 ∗ ( I B C 0 I ) − 1 ( i i i ) \begin{pmatrix} A+BCD & 0 \\ 0 & -C^{-1} \end{pmatrix}^{-1} =\begin{pmatrix} I & 0 \\ CD & I \end{pmatrix}^{-1}*\begin{pmatrix} A & B \\ D & -C^{-1} \end{pmatrix} ^{-1} *\begin{pmatrix} I & BC \\ 0 & I \end{pmatrix}^{-1} \quad\quad(iii) (A+BCD00−C−1)−1=(ICD0I)−1∗(ADB−C−1)−1∗(I0BCI)−1(iii)
对上三角和下三角矩阵取逆,其实就是改变个符号
( I 0 C D I ) − 1 = ( I 0 − C D I ) ( I B C 0 I ) − 1 = ( I − B C 0 I ) \begin{pmatrix} I & 0 \\ CD & I \end{pmatrix}^{-1} =\begin{pmatrix} I & 0 \\ -CD & I \end{pmatrix} \begin{pmatrix} I & BC \\ 0 & I \end{pmatrix}^{-1} =\begin{pmatrix} I & -BC \\ 0 & I \end{pmatrix} (ICD0I)−1=(I−CD0I)(I0BCI)−1=(I0−BCI)
代入(iii)得
( A + B C D 0 0 − C − 1 ) − 1 = ( I 0 − C D I ) ∗ ( A B D − C − 1 ) − 1 ∗ ( I − B C 0 I ) ( i i i ) \begin{pmatrix} A+BCD & 0 \\ 0 & -C^{-1} \end{pmatrix}^{-1} =\begin{pmatrix} I & 0 \\ -CD & I \end{pmatrix} *\begin{pmatrix} A & B \\ D & -C^{-1} \end{pmatrix} ^{-1} *\begin{pmatrix} I & -BC \\ 0 & I \end{pmatrix}\quad\quad(iii) (A+BCD00−C−1)−1=(I−CD0I)∗(ADB−C−1)−1∗(I0−BCI)(iii)
最难求的还是中间的那个逆。但是我们可以用式(ii)变形来得到
( A B D − C − 1 ) = ( I 0 − D A − 1 I ) − 1 ∗ ( A 0 0 − ( D A − 1 B + C − 1 ) ) ∗ ( I − A − 1 B 0 I ) − 1 ( i v ) \begin{pmatrix} A & B \\ D & -C^{-1} \end{pmatrix} =\begin{pmatrix} I & 0 \\ -DA^{-1} & I \end{pmatrix}^{-1} *\begin{pmatrix} A & 0\\ 0 & -(DA^{-1}B+C^{-1}) \end{pmatrix} *\begin{pmatrix} I & -A^{-1}B \\ 0 & I \end{pmatrix}^{-1} \quad\quad(iv) (ADB−C−1)=(I−DA−10I)−1∗(A00−(DA−1B+C−1))∗(I0−A−1BI)−1(iv)
对(iv)取逆可得
( A B D − C − 1 ) − 1 = ( I − A − 1 B 0 I ) ∗ ( A − 1 0 0 − ( D A − 1 B + C − 1 ) − 1 ) ∗ ( I 0 − D A − 1 I ) ( v ) \begin{pmatrix} A & B \\ D & -C^{-1} \end{pmatrix}^{-1} =\begin{pmatrix} I & -A^{-1}B \\ 0 & I \end{pmatrix} *\begin{pmatrix} A^{-1} & 0\\ 0 & -(DA^{-1}B+C^{-1})^{-1} \end{pmatrix} *\begin{pmatrix} I & 0 \\ -DA^{-1} & I \end{pmatrix} \quad\quad(v) (ADB−C−1)−1=(I0−A−1BI)∗(A−100−(DA−1B+C−1)−1)∗(I−DA−10I)(v)
把(v)代入(iii)中,而且我们记住一点,我们只需要矩阵左上角的值,其他位置的值不重要
( A + B C D 0 0 − C − 1 ) − 1 = ( I 0 − C D I ) ∗ ( A B D − C − 1 ) − 1 ∗ ( I − B C 0 I ) = ( I 0 − C D I ) ∗ ( I − A − 1 B 0 I ) ∗ ( A − 1 0 0 − ( D A − 1 B + C − 1 ) − 1 ) ∗ ( I 0 − D A − 1 I ) ∗ ( I − B C 0 I ) = ( I − A − 1 B − C D ∗ ) ∗ ( A − 1 0 0 − ( D A − 1 B + C − 1 ) − 1 ) ∗ ( I − B C − D A − 1 ∗ ) = ( A − 1 A − 1 B ( D A − 1 B + C − 1 ) − 1 ∗ ∗ ) ∗ ( I − B C − D A − 1 ∗ ) = ( A − 1 − A − 1 B ( D A − 1 B + C − 1 ) − 1 D A − 1 ∗ ∗ ∗ ) \begin{pmatrix} A+BCD & 0 \\ 0 & -C^{-1} \end{pmatrix}^{-1}\\ =\begin{pmatrix} I & 0 \\ -CD & I \end{pmatrix} *\begin{pmatrix} A & B \\ D & -C^{-1} \end{pmatrix} ^{-1} *\begin{pmatrix} I & -BC \\ 0 & I \end{pmatrix}\\ =\begin{pmatrix} I & 0 \\ -CD & I \end{pmatrix} *\begin{pmatrix} I & -A^{-1}B \\ 0 & I \end{pmatrix} *\begin{pmatrix} A^{-1} & 0\\ 0 & -(DA^{-1}B+C^{-1})^{-1} \end{pmatrix} *\begin{pmatrix} I & 0 \\ -DA^{-1} & I \end{pmatrix} *\begin{pmatrix} I & -BC \\ 0 & I \end{pmatrix} \\ = \begin{pmatrix} I & -A^{-1}B \\ -CD & * \end{pmatrix} *\begin{pmatrix} A^{-1} & 0\\ 0 & -(DA^{-1}B+C^{-1})^{-1} \end{pmatrix} *\begin{pmatrix} I & -BC \\ -DA^{-1} & * \end{pmatrix} \\ =\begin{pmatrix} A^{-1} & A^{-1}B(DA^{-1}B+C^{-1})^{-1} \\ * & * \end{pmatrix} *\begin{pmatrix} I & -BC \\ -DA^{-1} & * \end{pmatrix} \\ =\begin{pmatrix} A^{-1}-A^{-1}B(DA^{-1}B+C^{-1})^{-1}DA^{-1} & * \\* & * \end{pmatrix} (A+BCD00−C−1)−1=(I−CD0I)∗(ADB−C−1)−1∗(I0−BCI)=(I−CD0I)∗(I0−A−1BI)∗(A−100−(DA−1B+C−1)−1)∗(I−DA−10I)∗(I0−BCI)=(I−CD−A−1B∗)∗(A−100−(DA−1B+C−1)−1)∗(I−DA−1−BC∗)=(A−1∗A−1B(DA−1B+C−1)−1∗)∗(I−DA−1−BC∗)=(A−1−A−1B(DA−1B+C−1)−1DA−1∗∗∗)
最终我们证明了矩阵求逆公式
Matrix Inversion ( A + B C D ) − 1 = A − 1 − A − 1 B ( D A − 1 B + C − 1 ) − 1 D A − 1 \text{Matrix Inversion} (A+BCD)^{-1} = A^{-1}-A^{-1}B(DA^{-1}B+C^{-1})^{-1}DA^{-1} \\ Matrix Inversion(A+BCD)−1=A−1−A−1B(DA−1B+C−1)−1DA−1
2.3 递归最小二乘的自适应形式
2.3.1 φ(n)的递推
得到了矩阵求逆公式以后,我们就可以进行递归最小二乘自适应形式的推导了。
我们希望能够基于n个数据得到估计的基础上,对这个估计稍作调整,就能得到n+1个数据产生的估计结果。其实这种做法,我们不论是在前后向滤波,还是卡尔曼滤波中,都是这么做的。因此,我们希望能够得到一个递推的形式,最终能简化运算。
ω
n
=
ϕ
−
1
(
n
)
Z
(
n
)
\omega_n = \phi^{-1}(n)Z(n)
ωn=ϕ−1(n)Z(n)
其中
Z ( n ) = ∑ k = 1 n λ n − k Z ( k ) d ( k ) ϕ ( n ) = ∑ k = 1 n λ n − k Z ( k ) ∗ Z T ( k ) Z(n) = \sum_{k=1}^n \lambda^{n-k}Z(k)d(k) \\ \phi(n) = \sum_{k=1}^n \lambda^{n-k} Z(k)*Z^T(k) Z(n)=k=1∑nλn−kZ(k)d(k)ϕ(n)=k=1∑nλn−kZ(k)∗ZT(k)
为了能够对ωn进行递推,我们首先要找到Z(n)和φ(n)的递推公式
ϕ ( n ) = ∑ k = 1 n − 1 λ n − k Z ( k ) ∗ Z T ( k ) + Z ( n ) Z T ( n ) = λ ∗ ∑ k = 1 n − 1 λ n − k − 1 Z ( k ) ∗ Z T ( k ) + Z ( n ) Z T ( n ) = λ ϕ ( n − 1 ) + Z ( n ) Z T ( n ) \phi(n) = \sum_{k=1}^{n-1} \lambda^{n-k} Z(k)*Z^T(k) + Z(n)Z^T(n) \\ = \lambda*\sum_{k=1}^{n-1} \lambda^{n-k-1} Z(k)*Z^T(k)+ Z(n)Z^T(n) \\ = \lambda \phi(n-1) + Z(n)Z^T(n) ϕ(n)=k=1∑n−1λn−kZ(k)∗ZT(k)+Z(n)ZT(n)=λ∗k=1∑n−1λn−k−1Z(k)∗ZT(k)+Z(n)ZT(n)=λϕ(n−1)+Z(n)ZT(n)
ϕ − 1 ( n ) = ( λ ϕ ( n − 1 ) + Z ( n ) Z T ( n ) ) − 1 \phi^{-1}(n) = (\lambda \phi(n-1) + Z(n)Z^T(n))^{-1} ϕ−1(n)=(λϕ(n−1)+Z(n)ZT(n))−1
这个时候就用到了我们的矩阵求逆公式。
(
A
+
B
C
D
)
−
1
=
A
−
1
−
A
−
1
B
(
D
A
−
1
B
+
C
−
1
)
−
1
D
A
−
1
(A+BCD)^{-1} = A^{-1}-A^{-1}B(DA^{-1}B+C^{-1})^{-1}DA^{-1}
(A+BCD)−1=A−1−A−1B(DA−1B+C−1)−1DA−1
把φ-1也表示成这个样子
ϕ − 1 ( n ) = ( λ ϕ ( n − 1 ) + Z ( n ) ∗ 1 ∗ Z T ( n ) ) − 1 \phi^{-1}(n) = (\lambda \phi(n-1) + Z(n)*1*Z^T(n))^{-1} ϕ−1(n)=(λϕ(n−1)+Z(n)∗1∗ZT(n))−1
{ A = λ ϕ ( n − 1 ) B = Z ( n ) C = 1 D = Z T ( n ) \begin{cases} A=\lambda \phi(n-1) \\ B = Z(n) \\ C = 1\\ D = Z^T(n) \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧A=λϕ(n−1)B=Z(n)C=1D=ZT(n)
因为DA-1B是一个二次型的形式,其实最终乘积的结果是一个数字,因此C应该表示为1,而不是I,这样的话,使用矩阵求逆公式可以得到
ϕ − 1 ( n ) = λ − 1 ϕ − 1 ( n − 1 ) − λ − 1 ϕ − 1 ( n − 1 ) Z ( n ) Z T ( n ) ϕ − 1 ( n − 1 ) λ − 1 1 + λ − 1 Z T ( n ) ϕ − 1 ( n − 1 ) Z ( n ) \phi^{-1}(n) = \lambda^{-1} \phi^{-1}(n-1) -\frac{\lambda^{-1}\phi^{-1}(n-1)Z(n)Z^T(n)\phi^{-1}(n-1)\lambda^{-1}}{1+\lambda^{-1}Z^T(n)\phi^{-1}(n-1)Z(n)} ϕ−1(n)=λ−1ϕ−1(n−1)−1+λ−1ZT(n)ϕ−1(n−1)Z(n)λ−1ϕ−1(n−1)Z(n)ZT(n)ϕ−1(n−1)λ−1
我们发现,得到的结果中,虽然有很多逆,但是全部都是标量的逆,或者φ(n-1)-1,而φ(n-1)-1是递推的前一项,我们默认就可以认为这个是个已知的东西了。
但是这个式子看起来还是非常的麻烦,我们希望能够让他更简洁,我们令
K ( n ) = λ − 1 ϕ − 1 ( n − 1 ) Z ( n ) 1 + λ − 1 Z T ( n ) ϕ − 1 ( n − 1 ) Z ( n ) K(n) = \frac{\lambda^{-1}\phi^{-1}(n-1)Z(n)}{1+\lambda^{-1}Z^T(n)\phi^{-1}(n-1)Z(n)} K(n)=1+λ−1ZT(n)ϕ−1(n−1)Z(n)λ−1ϕ−1(n−1)Z(n)
ϕ − 1 ( n ) = λ − 1 ϕ − 1 ( n − 1 ) − λ − 1 K ( n ) Z T ( n ) ϕ − 1 ( n − 1 ) [ 1 ] \phi^{-1}(n) = \lambda^{-1} \phi^{-1}(n-1)-\lambda^{-1}K(n)Z^T(n)\phi^{-1}(n-1) \quad\quad[1] ϕ−1(n)=λ−1ϕ−1(n−1)−λ−1K(n)ZT(n)ϕ−1(n−1)[1]
我们继续研究下K(n)
K
(
n
)
=
λ
−
1
ϕ
−
1
(
n
−
1
)
Z
(
n
)
1
+
λ
−
1
Z
T
(
n
)
ϕ
−
1
(
n
−
1
)
Z
(
n
)
K(n) = \frac{\lambda^{-1}\phi^{-1}(n-1)Z(n)}{1+\lambda^{-1}Z^T(n)\phi^{-1}(n-1)Z(n)}
K(n)=1+λ−1ZT(n)ϕ−1(n−1)Z(n)λ−1ϕ−1(n−1)Z(n)
把分母乘到左边
( 1 + λ − 1 Z T ( n ) ϕ − 1 ( n − 1 ) Z ( n ) ) ∗ K ( n ) = λ − 1 ϕ − 1 ( n − 1 ) Z ( n ) K ( n ) = λ − 1 ϕ − 1 ( n − 1 ) Z ( n ) − λ − 1 K ( n ) Z T ( n ) ϕ − 1 ( n − 1 ) Z ( n ) = ( λ − 1 ϕ − 1 ( n − 1 ) − λ − 1 K ( n ) Z T ( n ) ϕ − 1 ( n − 1 ) ) ∗ Z ( n ) (1+\lambda^{-1}Z^T(n)\phi^{-1}(n-1)Z(n))*K(n) = \lambda^{-1}\phi^{-1}(n-1)Z(n) \\ K(n) = \lambda^{-1}\phi^{-1}(n-1)Z(n) - \lambda^{-1}K(n)Z^T(n)\phi^{-1}(n-1)Z(n) \\ = (\lambda^{-1}\phi^{-1}(n-1) - \lambda^{-1}K(n)Z^T(n)\phi^{-1}(n-1))*Z(n) (1+λ−1ZT(n)ϕ−1(n−1)Z(n))∗K(n)=λ−1ϕ−1(n−1)Z(n)K(n)=λ−1ϕ−1(n−1)Z(n)−λ−1K(n)ZT(n)ϕ−1(n−1)Z(n)=(λ−1ϕ−1(n−1)−λ−1K(n)ZT(n)ϕ−1(n−1))∗Z(n)
我们发现前一项就是φ-1(n)
K ( n ) = ϕ − 1 ( n ) ∗ Z ( n ) [ 2 ] K(n) = \phi^{-1}(n)*Z(n) \quad\quad[2] K(n)=ϕ−1(n)∗Z(n)[2]
2.3.2 Z(n)的递推
我们再来找找Z(n)的递推公式
Z ( n ) = ∑ k = 1 n λ n − k Z ( k ) d ( k ) = ∑ k = 1 n − 1 λ n − k Z ( k ) d ( k ) + Z ( n ) d ( n ) = λ ∗ ∑ k = 1 n − 1 λ n − k − 1 Z ( k ) d ( k ) + Z ( n ) d ( n ) = λ Z ( n − 1 ) + Z ( n ) d ( n ) Z(n) = \sum_{k=1}^n \lambda^{n-k}Z(k)d(k) = \sum_{k=1}^{n-1} \lambda^{n-k}Z(k)d(k) +Z(n)d(n) \\ = \lambda* \sum_{k=1}^{n-1} \lambda^{n-k-1}Z(k)d(k) +Z(n)d(n) = \lambda Z(n-1) +Z(n)d(n) Z(n)=k=1∑nλn−kZ(k)d(k)=k=1∑n−1λn−kZ(k)d(k)+Z(n)d(n)=λ∗k=1∑n−1λn−k−1Z(k)d(k)+Z(n)d(n)=λZ(n−1)+Z(n)d(n)
2.3.3 ωn的递推公式与Kalman Filter
ω n = ϕ − 1 ( n ) Z ( n ) = ( λ − 1 ϕ − 1 ( n − 1 ) − λ − 1 K ( n ) Z T ( n ) ϕ − 1 ( n − 1 ) ) ∗ ( λ Z ( n − 1 ) + Z ( n ) d ( n ) ) = ϕ − 1 ( n − 1 ) ∗ Z ( n − 1 ) − K ( n ) Z T ( n ) ϕ − 1 ( n − 1 ) ∗ Z ( n − 1 ) + ϕ − 1 ( n ) ∗ Z ( n ) d ( n ) ) = ω n − 1 − K ( n ) Z T ( n ) ω ( n − 1 ) + K ( n ) d ( n ) = ω n − 1 + K ( n ) ( d ( n ) − ω T ( n − 1 ) Z ( n ) ) \omega_n = \phi^{-1}(n) Z(n) \\ = (\lambda^{-1} \phi^{-1}(n-1)-\lambda^{-1}K(n)Z^T(n)\phi^{-1}(n-1))*(\lambda Z(n-1) +Z(n)d(n)) \\ = \phi^{-1}(n-1)*Z(n-1) - K(n)Z^T(n)\phi^{-1}(n-1)*Z(n-1)+\phi^{-1}(n)*Z(n)d(n)) \\ = \omega_{n-1} - K(n)Z^T(n) \omega(n-1) + K(n) d(n) \\ = \omega_{n-1} +K(n)(d(n)-\omega^T(n-1)Z(n)) ωn=ϕ−1(n)Z(n)=(λ−1ϕ−1(n−1)−λ−1K(n)ZT(n)ϕ−1(n−1))∗(λZ(n−1)+Z(n)d(n))=ϕ−1(n−1)∗Z(n−1)−K(n)ZT(n)ϕ−1(n−1)∗Z(n−1)+ϕ−1(n)∗Z(n)d(n))=ωn−1−K(n)ZT(n)ω(n−1)+K(n)d(n)=ωn−1+K(n)(d(n)−ωT(n−1)Z(n))
我们发现得到的这个结果就是卡尔曼滤波。k就是卡尔曼增益
我们现在对卡尔曼滤波有了新认识,卡尔曼滤波就是在做优化。卡尔曼滤波其实就是把跟踪的历史,全部拿来做最小二乘优化。这就是递归最小二乘
3. SVD 奇异值分解
3.1 数学表示
下面,我们希望通过几何的方式来理解,什么是奇异值分解。
首先来给奇异值分解做个数学上的定义。
我们希望分解一个矩阵A,假设有n行m列,并且我们可以假设n>m(这里只是为证明而假设一个条件,其实n和m谁大谁小不影响,任何矩阵都可以做SVD)。
A = ( a 1 T . . . a n T ) ∈ R n ∗ m (n>m) A = \begin{pmatrix} a_1^T \\ ... \\ a_n^T \end{pmatrix} \in R^{n*m} \text{ (n>m)} A=⎝⎛a1T...anT⎠⎞∈Rn∗m (n>m)
我们知道A可以表示为这样的形式
A = U Σ V T A = U \Sigma V^T A=UΣVT
3.2 证明
我们从行空间的角度来分析,其实A就是m维空间的n个点。我们希望能够做一个优化,我们希望能够找到一个超平面,使得A中的点,到这个超平面的距离的平方和最小。
这听起来像是在做最小二乘,但是其实并不是,因为最小二乘是把点对应到回归方程上,然后计算平方和,计算的并不是点到直线的距离。
最小二乘的目标函数
m
i
n
∣
y
−
c
x
∣
2
min|y-cx|^2
min∣y−cx∣2
点到超平面的距离,我们在SVM中证明过
d ( a , v ) = a T v ∣ ∣ v ∣ ∣ d 2 ( a , v ) = ∣ a T v ∣ 2 ∣ ∣ v ∣ ∣ 2 d(a,v) = \frac{a^T v}{||v||} \\ d^2(a,v) = \frac{|a^T v|^2}{||v||^2} d(a,v)=∣∣v∣∣aTvd2(a,v)=∣∣v∣∣2∣aTv∣2
我们假设超平面的法向量v是个单位向量
∣ ∣ v ∣ ∣ = 1 ⇒ d 2 ( a , v ) = ∣ a T v ∣ 2 ||v|| = 1 \Rightarrow d^2(a,v) = |a^T v|^2 ∣∣v∣∣=1⇒d2(a,v)=∣aTv∣2
因此,我们的目标函数是这样的
∑ k = 1 n d 2 ( a k , v ) = ∑ k = 1 n ∣ a k T v ∣ 2 = ∣ A v ∣ 2 2 \sum_{k=1}^n d^2(a_k,v)=\sum_{k=1}^n |a_k^T v|^2 =|A v|_2^2 k=1∑nd2(ak,v)=k=1∑n∣akTv∣2=∣Av∣22
实际上结果就是Av的二范数的平方
A v = ( a 1 T ∗ v . . . a n T ∗ v ) Av = \begin{pmatrix} a_1^T*v \\ ... \\ a_n^T*v \end{pmatrix} Av=⎝⎛a1T∗v...anT∗v⎠⎞
∣ A v ∣ 2 = ( ∣ a 1 T v ∣ 2 + . . . + ∣ a n T v ∣ 2 ) 1 2 |Av|_2 = (|a_1^T v|^2+...+|a_n^T v|^2)^{\frac{1}{2}} ∣Av∣2=(∣a1Tv∣2+...+∣anTv∣2)21
然后要求这个超平面的法向量,就变成了一个条件极值问题
m i n ∣ A v ∣ 2 2 s.t. ||v||=1 min|A v|_2^2 \quad\quad \text{ s.t. ||v||=1} min∣Av∣22 s.t. ||v||=1
我们假设得到了法向量v1
v 1 = a r g m i n ∣ ∣ v ∣ ∣ = 1 ∣ ∣ A v ∣ ∣ 2 2 v_1 = argmin_{||v||=1} ||Av||_2^2 v1=argmin∣∣v∣∣=1∣∣Av∣∣22
这里,我们只往一个平面上进行投影,我们想继续找一个平面,让a到v1和v2构成的子空间的距离和最短
d 2 ( a , { v 1 , v 2 } ) d^2(a,\{v_1,v_2\}) d2(a,{v1,v2})
因为我们已经知道a到v1的平面的距离了,我们希望这个到子空间的距离能够有这样的表示
d ( a , { v 1 , v 2 } ) = d ( a , v 1 ) + d ( a , v 2 ) d(a,\{v_1,v_2\}) = d(a,v_1)+d(a,v_2) d(a,{v1,v2})=d(a,v1)+d(a,v2)
只要v1和v2是正交的,我们就能够得到这样的式子。因此,我们实际上就是要在v1超平面的正交补空间里面再找一个单位法向量。
v
2
=
a
r
g
m
i
n
v
⊥
v
1
,
∣
∣
V
∣
∣
=
1
∣
∣
A
v
∣
∣
2
2
v_2 = argmin_{v \perp v_1,||V||=1} ||Av||_2^2
v2=argminv⊥v1,∣∣V∣∣=1∣∣Av∣∣22
v
3
=
a
r
g
m
i
n
v
⊥
{
v
1
,
v
2
}
,
∣
∣
V
∣
∣
=
1
∣
∣
A
v
∣
∣
2
2
v_3 = argmin_{v \perp \{v_1,v_2\},||V||=1} ||Av||_2^2
v3=argminv⊥{v1,v2},∣∣V∣∣=1∣∣Av∣∣22
这样的向量我们一共能够找到r个,其中r是矩阵A的秩,因为A的空间维度就是r,不可能再找出更多维度的向量了
r
a
n
k
(
A
)
=
r
rank(A) = r
rank(A)=r
⇒
(
v
1
,
.
.
.
v
r
)
\Rightarrow(v_1,...v_r)
⇒(v1,...vr)
实际上,因为ak向量是m维度的,因此空间的单位正交基应该有m个,我们需要对前面的r个向量进行扩充。前面r个向量是正交向量,是对n个给定点进行最优逼近的子空间。而m个向量是A空间的正交基
( v 1 , . . . , v r ) ⇒ ( v 1 , v 2 , . . . , v r , . . . v m ) O r t h o g o n a l ⇒ Orthogonal basis (v_1,...,v_r) \Rightarrow (v_1,v_2,...,v_r,...v_m) \\ Orthogonal \Rightarrow \text{Orthogonal basis} (v1,...,vr)⇒(v1,v2,...,vr,...vm)Orthogonal⇒Orthogonal basis
我们假设有向量uk满足这样的关系,我们假设uk是经过了归一化的
u
k
=
A
v
k
∣
∣
A
v
k
∣
∣
,
k
=
1
,
2...
,
n
u_k = \frac{Av_k}{||Av_k||},k = 1,2...,n
uk=∣∣Avk∣∣Avk,k=1,2...,n
令
σ
k
=
∣
∣
A
v
k
∣
∣
\sigma_k = ||Av_k||
σk=∣∣Avk∣∣
则
A v k = σ k u k Av_k = \sigma_k u_k Avk=σkuk
A ( v 1 , . . . , v m ) = ( u 1 . . . u m ) ∗ ( σ 1 . . . σ m ) A(v_1,...,v_m) = \begin{pmatrix} u_1 & ...& u_m \end{pmatrix} * \begin{pmatrix} \sigma_1 & &\\ &...& \\ && \sigma_m \end{pmatrix} A(v1,...,vm)=(u1...um)∗⎝⎛σ1...σm⎠⎞
因为v矩阵是正交矩阵,引起求逆就是求转置
A = ( u 1 . . . u m ) ∗ ( σ 1 . . . σ m ) ∗ ( v 1 T . . . v m ) A = \begin{pmatrix} u_1 & ...& u_m \end{pmatrix} * \begin{pmatrix} \sigma_1 & &\\ &...& \\ && \sigma_m \end{pmatrix} * \begin{pmatrix} v_1^T \\ ...\\ v_m \end{pmatrix} A=(u1...um)∗⎝⎛σ1...σm⎠⎞∗⎝⎛v1T...vm⎠⎞
我们得到的这个式子其实就已经是奇异值分解了。
现在我们知道u是单位向量,但是还不确定是否是正交的。A*AT之后,得到了对角分解的形式,能够说明u是正交矩阵
A A T = ( u 1 . . . u m ) ∗ ( σ 1 2 . . . σ m 2 ) ∗ ( u 1 T . . . u m ) AA^T = \begin{pmatrix} u_1 & ...& u_m \end{pmatrix} * \begin{pmatrix} \sigma_1^2 & &\\ &...& \\ && \sigma_m^2 \end{pmatrix} * \begin{pmatrix} u_1^T \\ ...\\ u_m \end{pmatrix} AAT=(u1...um)∗⎝⎛σ12...σm2⎠⎞∗⎝⎛u1T...um⎠⎞
按理来说,AAT是个n*n的矩阵,但是他一定是个缺秩的,我们可以按照特征分解的方式进行,也就是对前面进行补项,通过在u的正交补空间(也就是零空间)中寻找向量,然后再做施密特正交化,就可以得到补满以后的u,相应位置的特征值是0
而u1到um是A*AT对应的非零特征值的特征向量
A A T = ( u 1 . . . u m . . . u n ) ∗ ( σ 1 2 . . . σ m 2 0 . . . 0 ) ∗ ( u 1 T . . . u m . . . u n ) AA^T = \begin{pmatrix} u_1 & ...& u_m &...& u_n \end{pmatrix} *\begin{pmatrix} \sigma_1^2 & &\\ &...& \\ && \sigma_m^2 \\ &&&&0\\ &&&&&...\\ &&&&&&0\\ \end{pmatrix} *\begin{pmatrix} u_1^T \\ ...\\ u_m \\...\\u_n \end{pmatrix} AAT=(u1...um...un)∗⎝⎜⎜⎜⎜⎜⎜⎛σ12...σm20...0⎠⎟⎟⎟⎟⎟⎟⎞∗⎝⎜⎜⎜⎜⎛u1T...um...un⎠⎟⎟⎟⎟⎞
实际上,我们可以看出,奇异值分解实际上的得到扩充的矩阵。
A = U Σ V T U ∈ R n ∗ n , U U T = I V ∈ R m ∗ m , V V T = I A = U \Sigma V^T \\ U \in R^{n*n},UU^T = I \\ V \in R^{m*m},VV^T = I A=UΣVTU∈Rn∗n,UUT=IV∈Rm∗m,VVT=I
4. 奇异值分解与最小二乘
4.1 公式推导
我们接下来要探究奇异值分解和最小二乘之间的关系。
约束方程
m i n ω ∣ ∣ ( d ( 1 ) . . . d ( n ) ) ( z T ( 1 ) . . . z T ( n ) ) ∗ ω ∣ ∣ 2 2 ⇒ m i n ω ∣ ∣ d − Z ω ∣ ∣ 2 2 = m i n ω ( d − Z ω ) T ( d − Z ω ) min_\omega||\begin{pmatrix} d(1) \\ ... \\ d(n) \end{pmatrix} \begin{pmatrix} z^T(1) \\ ... \\ z^T(n) \end{pmatrix}* \omega ||_2^2 \quad \Rightarrow min_\omega||d-Z\omega||_2^2 = min_\omega(d-Z\omega)^T(d-Z\omega) minω∣∣⎝⎛d(1)...d(n)⎠⎞⎝⎛zT(1)...zT(n)⎠⎞∗ω∣∣22⇒minω∣∣d−Zω∣∣22=minω(d−Zω)T(d−Zω)
如果我们要考虑遗忘因子的话,我们可以把约束方程写成这样的形式
m i n ω ( d − Z ω ) T Λ ( d − Z ω ) Λ = d i a g ( λ n − 1 , λ n − 2 , . . . , 1 ) min_\omega(d-Z\omega)^T \Lambda (d-Z\omega) \\ \Lambda = diag(\lambda^{n-1},\lambda^{n-2},...,1) minω(d−Zω)TΛ(d−Zω)Λ=diag(λn−1,λn−2,...,1)
最小二乘解
ω L S = ( Z T Z ) − 1 Z T d \omega_{LS} = (Z^TZ)^{-1}Z^Td ωLS=(ZTZ)−1ZTd
我们知道,最小二乘是一个方程数量比未知数个数要多的超定方程,因此最小二乘是没有办法求解的,只能进行拟合。并且做最小二乘的条件是Z*ZT必须是满秩的。如果想要做到满秩,Z本身必须是列满秩的。
如果Z是列满秩的,我们对Z做奇异值分解有这样的式子
Z = U Λ V T Z = U \Lambda V^T \\ Z=UΛVT
其中
Λ = ( σ 1 . . . σ n 0 ) = ( Λ ~ 0 ) \Lambda = \begin{pmatrix} \sigma_1 & \\ &...\\ &&\sigma_n\\ &0 \end{pmatrix} =\begin{pmatrix} \widetilde \Lambda \\ 0 \end{pmatrix} Λ=⎝⎜⎜⎛σ1...0σn⎠⎟⎟⎞=(Λ 0)
因此,最小二乘解可以做这样的变形
ω L S = [ ( V Λ T U T ) ( U Λ V T ) ] − 1 ( V Λ T U T ) d = ( V Λ T ∗ Λ V T ) − 1 ∗ ( V Λ T U T ) d ( a ) \omega_{LS} = [(V \Lambda^TU^T)(U \Lambda V^T)]^{-1} (V \Lambda^TU^T) d \\ =(V\Lambda^T*\Lambda V^T)^{-1}*(V \Lambda^TU^T) d \quad\quad(a) ωLS=[(VΛTUT)(UΛVT)]−1(VΛTUT)d=(VΛT∗ΛVT)−1∗(VΛTUT)d(a)
其中
Λ T Λ = ( Λ ~ 0 ) ∗ ( Λ ~ 0 ) = Λ ~ 2 ( b ) \Lambda^T \Lambda = \begin{pmatrix} \widetilde \Lambda & 0 \end{pmatrix} *\begin{pmatrix} \widetilde \Lambda \\ 0 \end{pmatrix} = \widetilde \Lambda^2 \quad\quad(b) ΛTΛ=(Λ 0)∗(Λ 0)=Λ 2(b)
(b)代入(a)中可得
ω L S = V ∗ ( σ 1 − 2 . . . σ n − 2 ) V T ∗ ( V ( σ 1 . . . 0 σ n ) U T ) d = V ( σ 1 − 1 . . . 0 σ n − 1 ) ∗ U T d = Z + d \omega_{LS} = V* \begin{pmatrix} \sigma_1^{-2} & \\ &...\\ &&\sigma_n^{-2}\\ \end{pmatrix} V^T *(V \begin{pmatrix} \sigma_1 & \\ &...&&0\\ &&\sigma_n\\ \end{pmatrix} U^T) d \\ = V\begin{pmatrix} \sigma_1^{-1} & \\ &...&&0\\ &&\sigma_n^{-1}\\ \end{pmatrix} *U^T d =Z^+d\\ ωLS=V∗⎝⎛σ1−2...σn−2⎠⎞VT∗(V⎝⎛σ1...σn0⎠⎞UT)d=V⎝⎛σ1−1...σn−10⎠⎞∗UTd=Z+d
前面一部分被称为伪逆,或者广义逆
Pesudo Inversion
Gerenalized
Z
+
=
V
(
σ
1
−
1
.
.
.
0
σ
n
−
1
)
∗
U
T
\text{Pesudo Inversion} \\ \text{Gerenalized} \\ Z^+ = V\begin{pmatrix} \sigma_1^{-1} & \\ &...&&0\\ &&\sigma_n^{-1}\\ \end{pmatrix} *U^T
Pesudo InversionGerenalizedZ+=V⎝⎛σ1−1...σn−10⎠⎞∗UT
前面一部分如果不可逆,用符号伪逆来表示,也叫广义逆
ω L S = Z + d \omega_{LS} = Z^+ d ωLS=Z+d
4.2 分析
现在我们对最小二乘有了新的认识,最小二乘本来是想要解方程,但是没有办法解,因为方程的数量比未知数要多。如果方程数量和未知数数量是一样的,我们就可以求解。当二者数量不一样的时候,就只能寻找二者最接近的ω
现在,我们有了伪逆,我们可以利用伪逆,直接求得最小二乘的解。
Z ω = d ⇒ ω = Z + d Z \omega = d \Rightarrow \omega = Z^+ d Zω=d⇒ω=Z+d
Z = U Λ V T ⇒ Z − 1 = V λ − 1 V Z = U \Lambda V^T \Rightarrow Z^{-1} = V \lambda^{-1}V Z=UΛVT⇒Z−1=Vλ−1V
我们看,对奇异值分解的直接求逆是不显示的,因为奇异值矩阵既不方,也可能不满秩。因此,我们处理的时候就先把他转置,然后能求逆的部分就求逆,不能求逆的部分就写0,得到的就是伪逆。伪逆的存在,让最小二乘本来是一个优化问题,现在变成了一个方程求解问题
4.3 伪逆的性质
矩阵的逆具有这样的性质
Z − 1 Z = Z Z − 1 = I Z^{-1} Z = Z Z^{-1} = I Z−1Z=ZZ−1=I
伪逆具有这样的性质
Z Z + Z = Z Z + Z Z + = Z + Z Z^+ Z = Z \\ Z^+ Z Z^+ = Z^+ ZZ+Z=ZZ+ZZ+=Z+
证明一下第一个式子
( U Σ V T ) ( V Σ + U T ) ( U Σ V T ) = U Σ Σ + Σ V T (U \Sigma V^T)(V \Sigma^+ U^T)(U \Sigma V^T) = U \Sigma \Sigma^+ \Sigma V^T (UΣVT)(VΣ+UT)(UΣVT)=UΣΣ+ΣVT
Σ = ( Σ ~ 0 0 0 ) Σ + = ( Σ ~ − 1 0 0 0 ) \Sigma = \begin{pmatrix} \widetilde \Sigma & 0 \\ 0 & 0 \end{pmatrix} \Sigma^+ = \begin{pmatrix} \widetilde \Sigma^{-1} & 0 \\ 0 & 0 \end{pmatrix} Σ=(Σ 000)Σ+=(Σ −1000)
⇒ Σ Σ + Σ = ( Σ ~ 0 0 0 ) = Σ \Rightarrow \Sigma \Sigma^+ \Sigma = \begin{pmatrix} \widetilde \Sigma & 0 \\ 0 & 0 \end{pmatrix} = \Sigma ⇒ΣΣ+Σ=(Σ 000)=Σ
4.4 奇异值分解、伪逆与数值计算
在计算机数值计算中,是不会采用求逆的方式计算最小二乘的,一般都是用奇异值分解,用伪逆,因为他的稳定性最好,性能最好。
奇异值分解稳定性好的原因是,ATA的条件数比A大很多,条件数多了,数值计算稳定性就比较差
C o n d ( A T A ) ≥ C o n d ( A ) Cond(A^TA) \geq Cond(A) Cond(ATA)≥Cond(A)
矩阵求逆很怕矩阵的刚性大,就是大的特征值特别大,小的特征值特别小。但凡有点截断误差,逆就不容易求对,平方以后就更加脆弱了。
( 1 0 0 0.001 ) ⇒ ( 1 0 0 0.001 ) 2 = ( 1 0 0 1 0 − 6 ) \begin{pmatrix} 1& 0 \\ 0 & 0.001 \end{pmatrix} \Rightarrow \begin{pmatrix} 1& 0 \\ 0 & 0.001 \end{pmatrix}^2 =\begin{pmatrix} 1& 0 \\ 0 & 10^{-6} \end{pmatrix} (1000.001)⇒(1000.001)2=(10010−6)