这篇文章讲关于自适应算法的又一个认识:递归最小二乘(Recursive Least Square)
关于自适应算法的认识(LMS)
假设有一组数据(在不同时刻):x(1),x(2),...,x(n)x(1),x(2),...,x(n)x(1),x(2),...,x(n)
在每一时刻有不同的目标:d(1),d(2),...,d(n)d(1),d(2),...,d(n)d(1),d(2),...,d(n)
我们打算用数据对目标进行估计/预测/逼近。也就是找到一种变换,使得数据经过变换之后能够逼近目标:g(x(n))→d(n)g(x(n))\to d(n)g(x(n))→d(n)
我们对这个变换要求很简单,线性: g(x(n))=ωTx(n)g(x(n))=\omega^Tx(n)g(x(n))=ωTx(n)
我们只需把精力放在如何寻找这个系数 ω\omegaω上
接下来我们假定一个损失,均方误差:minωE∣d(n)−ωTx(n)∣2\min\limits_{\omega}E|d(n)-\omega^Tx(n)|^2ωminE∣d(n)−ωTx(n)∣2
我们知道这样做出来的线性变换,是维纳滤波。
维纳滤波可以在每一个时间点上做:E∣d(n)−ωT(n)x(n)∣2E|d(n)-\omega^T(n)x(n)|^2E∣d(n)−ωT(n)x(n)∣2
问题本身有一个时间轴,也就是数据发生变化的时间轴。而在每一个时间点上,求解系数也需要时间,这也对应一个时间轴。这两个时间轴很难统一起来,因为你在求解上一时刻数据的系数过程当中,数据本身已经发生了变化。因此我们才考虑到自适应(Adaptive)。
自适应的一种理解是把两个时间轴耦合在一起。通常的做法是:在每一个时间点上,无需完全求解系数,只需做出一步调整,随着时间的发展,数据所对应的问题实质地不断变化,系数也在相应地不断做调整,大量的实验表明,这样的做法最后能够得到一个有效的结果。
LMS算法的损失函数把前面的期望去掉了: minω∣d(n)−ωTx(n)∣2\min\limits_{\omega}|d(n)-\omega^Tx(n)|^2ωmin∣d(n)−ωTx(n)∣2,这样做的考虑是基于每一时刻只能取一个样本,用这一个样本代表期望。
LMS的这个操作所导致的就是参数的如下迭代:ω^n+1=ω^n+μx(n)e(n)\hat \omega_{n+1} =\hat\omega_n+\mu x(n)e(n)ω^n+1=ω^n+μx(n)e(n),其中e(n)=d(n)−ω^nTx(n)e(n)=d(n)-\hat \omega^T_nx(n)e(n)=d(n)−ω^nTx(n)是误差项。
典型的最小二乘解(LS)
现在我们要重新考量Loss的定义:
minωE∣d(n)−ωTx(n)∣2
\min\limits_{\omega}E|d(n)-\omega^Tx(n)|^2
ωminE∣d(n)−ωTx(n)∣2上述损失函数有什么问题?——只考虑了一个时刻。包括LMS也是,调整所用的数据信息都只用了一个时刻。如果我们对一段历史已经有完全把握,当我们试图做n+1时刻的某些事情,该如何把整段历史利用起来?我们可以这么调整损失函数:
minω∑k=1nE∣d(k)−ωTx(k)∣2
\min\limits_{\omega}\sum_{k=1}^nE|d(k)-\omega^Tx(k)|^2
ωmink=1∑nE∣d(k)−ωTx(k)∣2这么做虽然可行,但是有点违背马尔可夫假设,因为马尔可夫性质告诉我们,历史上的东西重要性没那么大。如果我既想利用历史信息,又不想太过“负重前行”,那么我可以添加遗忘因子:
minω∑k=1nλ(n,k)⏟Forgetting FactorE∣d(k)−ωTx(k)∣2
\min\limits_{\omega}\sum_{k=1}^n \underbrace{\lambda(n,k)}_{\begin{aligned}&\text{Forgetting}\\&\ \ \ \text{Factor}\end{aligned}}E|d(k)-\omega^Tx(k)|^2
ωmink=1∑nForgetting Factorλ(n,k)E∣d(k)−ωTx(k)∣2最常见的遗忘因子是指数遗忘:
minω∑k=1nλn−kE∣d(k)−ωTx(k)∣2
\min\limits_{\omega}\sum_{k=1}^n\lambda^{n-k}E|d(k)-\omega^Tx(k)|^2
ωmink=1∑nλn−kE∣d(k)−ωTx(k)∣2由于我们已经是在多个样本数据上做某种意义上的期望了,现在完全可以抛开期望符号,就得到了最终的目标函数:
minωg(ω)=minω∑k=1nλn−k∣d(k)−ωTx(k)∣2
\min\limits_{\omega}g(\omega)=\min\limits_{\omega}\sum_{k=1}^n\lambda^{n-k}|d(k)-\omega^Tx(k)|^2
ωming(ω)=ωmink=1∑nλn−k∣d(k)−ωTx(k)∣2下面我们来做这个优化:
g(ω)=∑k=1nλn−kd2(k)−2∑k=1nd(k)ωTx(k)λn−k+∑k=1nλn−k(ωTx(k))2=∑k=1nλn−kd2(k)−2ωT(∑k=1nλn−kx(k)d(k))+ωT(∑k=1nλn−kx(k)xT(k))ω
\begin{aligned}
g(\omega)&=\sum_{k=1}^n\lambda^{n-k}d^2(k)-2\sum_{k=1}^nd(k)\omega^Tx(k)\lambda^{n-k}+\sum_{k=1}^n\lambda^{n-k}(\omega^Tx(k))^2\\
&=\sum_{k=1}^n\lambda^{n-k} d^2(k)-2\omega^T(\sum_{k=1}^n\lambda^{n-k}x(k)d(k))+\omega^T(\sum_{k=1}^n\lambda^{n-k}x(k)x^T(k))\omega
\end{aligned}
g(ω)=k=1∑nλn−kd2(k)−2k=1∑nd(k)ωTx(k)λn−k+k=1∑nλn−k(ωTx(k))2=k=1∑nλn−kd2(k)−2ωT(k=1∑nλn−kx(k)d(k))+ωT(k=1∑nλn−kx(k)xT(k))ω我们用 Z(n)=∑k=1nλn−kx(k)d(k)Z(n)=\sum_{k=1}^n\lambda^{n-k}x(k)d(k)Z(n)=∑k=1nλn−kx(k)d(k) 和 Φ(n)=∑k=1nλn−kx(k)xT(k)\Phi(n)=\sum_{k=1}^n\lambda^{n-k}x(k)x^T(k)Φ(n)=∑k=1nλn−kx(k)xT(k) 来简化符号:
g(ω)=C−2ωTZ(n)+ωTΦ(n)ω
g(\omega)=C-2\omega^TZ(n)+\omega^T\Phi(n)\omega
g(ω)=C−2ωTZ(n)+ωTΦ(n)ω这样的优化目标我们很熟悉,是关于这个线性系数ω\omegaω的二次型,我们只需对它求梯度:
∇ωg(ω)=−2Z(n)+2Φ(n)ω=0⇒ωn=Φ−1(n)Z(n)
\nabla_{\omega}g(\omega)=-2Z(n)+2\Phi(n)\omega=0\Rightarrow\omega_n=\Phi^{-1}(n)Z(n)
∇ωg(ω)=−2Z(n)+2Φ(n)ω=0⇒ωn=Φ−1(n)Z(n)这是典型的最小二乘解,反应了线性估计的精神实质:分母是自相关,分子是互相关。
递归最小二乘(RLS)
现在我们想要让最小二乘解也递推自适应起来:
ωn+1←ωn
\omega_{n+1}\leftarrow\omega_n
ωn+1←ωn最小二乘求解和计算的关键在于这个逆Φ−1(n)\Phi^{-1}(n)Φ−1(n),那么自然要从它入手寻求递推关系:
Φ(n)=∑k=1nλn−kx(k)xT(k)=∑k=1n−1λn−kx(k)xT(k)+x(n)xT(n)=λ∑k=1n−1λn−1−kx(k)xT(k)+x(n)xT(n)=λΦ(n−1)+x(n)xT(n)
\begin{aligned}\Phi(n)&=\sum_{k=1}^n\lambda^{n-k}x(k)x^T(k)=\sum_{k=1}^{n-1}\lambda^{n-k}x(k)x^T(k)+x(n)x^T(n)\\
&=\lambda \sum_{k=1}^{n-1}\lambda^{n-1-k}x(k)x^T(k)+x(n)x^T(n)\\
&=\lambda\Phi(n-1)+x(n)x^T(n)\\
\end{aligned}
Φ(n)=k=1∑nλn−kx(k)xT(k)=k=1∑n−1λn−kx(k)xT(k)+x(n)xT(n)=λk=1∑n−1λn−1−kx(k)xT(k)+x(n)xT(n)=λΦ(n−1)+x(n)xT(n)下面考察它的逆:
Φ−1(n)=(λΦ(n−1)+x(n)xT(n))−1
\Phi^{-1}(n)=(\lambda\Phi(n-1)+x(n)x^T(n))^{-1}
Φ−1(n)=(λΦ(n−1)+x(n)xT(n))−1
矩阵求逆公式(Matrix Inversion)
往往一些大的突破,都是在一些小技巧上硬核展开的结果。勿以善小而不为
(A+BCD)−1=?
(A+BCD)^{-1}=?
(A+BCD)−1=?我们想对分块矩阵[ABD−C−1]\begin{bmatrix}A&B\\D&-C^{-1}\end{bmatrix}[ADB−C−1]做一个对角化:
[IBC0I][ABD−C−1][I0CDI]=[A+BCD00−C−1]
\begin{bmatrix}I&BC\\0&I\end{bmatrix}\begin{bmatrix}A&B\\D&-C^{-1}\end{bmatrix}\begin{bmatrix}I&0\\CD&I\end{bmatrix}
=\begin{bmatrix}A+BCD&0\\0&-C^{-1}\end{bmatrix}
[I0BCI][ADB−C−1][ICD0I]=[A+BCD00−C−1][I0−DA−1I][ABD−C−1][I−A−1B0I]=[A00−(DA−1B+C−1)]
\begin{bmatrix}I&0\\-DA^{-1}&I\end{bmatrix}\begin{bmatrix}A&B\\D&-C^{-1}\end{bmatrix}\begin{bmatrix}I&-A^{-1}B\\0&I\end{bmatrix}
=\begin{bmatrix}A&0\\0&-(DA^{-1}B+C^{-1})\end{bmatrix}
[I−DA−10I][ADB−C−1][I0−A−1BI]=[A00−(DA−1B+C−1)][A+BCD00−C−1]−1=[I0−CDI][I−A−1B0I][A−100−(DA−1B+C−1)−1][I0−DA−1I][I−BC0I]=[I−A−1B−CD∗][A−100−(DA−1B+C−1)−1][I−BC−DA−1∗]=[A−1A−1B(DA−1B+C−1)−1∗∗][I−BC−DA−1∗]
\begin{aligned}
\begin{bmatrix}A+BCD&0\\0&-C^{-1}\end{bmatrix}^{-1}&=
\begin{bmatrix}I&0\\-CD&I\end{bmatrix}
\begin{bmatrix}I&-A^{-1}B\\0&I\end{bmatrix}
\begin{bmatrix}A^{-1}&0\\0&-(DA^{-1}B+C^{-1})^{-1}\end{bmatrix}
\begin{bmatrix}I&0\\-DA^{-1}&I\end{bmatrix}
\begin{bmatrix}I&-BC\\0&I\end{bmatrix}\\
&=\begin{bmatrix}I&-A^{-1}B\\-CD&*\end{bmatrix}
\begin{bmatrix}A^{-1}&0\\0&-(DA^{-1}B+C^{-1})^{-1}\end{bmatrix}
\begin{bmatrix}I&-BC\\-DA^{-1}&*\end{bmatrix}\\
&=\begin{bmatrix}A^{-1}&A^{-1}B(DA^{-1}B+C^{-1})^{-1}\\ *&*\end{bmatrix}
\begin{bmatrix}I&-BC\\-DA^{-1}&*\end{bmatrix}\\
\end{aligned}
[A+BCD00−C−1]−1=[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+BCD)−1=A−1−A−1B(DA−1B+C−1)−1DA−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(n)=(λΦ(n−1)+x(n)xT(n))−1\Phi^{-1}(n)=(\lambda\Phi(n-1)+x(n)x^T(n))^{-1}Φ−1(n)=(λΦ(n−1)+x(n)xT(n))−1 求逆,那么用矩阵求逆公式,我们给定 A=λΦ(n−1)A=\lambda\Phi(n-1)A=λΦ(n−1)、B=x(n)B=x(n)B=x(n)、C=1C=1C=1、D=xT(n)D=x^T(n)D=xT(n):
Φ−1(n)=λ−1Φ−1(n−1)−λ−1Φ−1(n−1)x(n)xT(n)Φ−1(n−1)λ−11+λ−1xT(n)Φ−1(n−1)x(n)
\Phi^{-1}(n)=\lambda^{-1}\Phi^{-1}(n-1)-\frac{\lambda^{-1}\Phi^{-1}(n-1)x(n)x^T(n)\Phi^{-1}(n-1)\lambda^{-1}}{1+\lambda^{-1}x^T(n)\Phi^{-1}(n-1)x(n)}
Φ−1(n)=λ−1Φ−1(n−1)−1+λ−1xT(n)Φ−1(n−1)x(n)λ−1Φ−1(n−1)x(n)xT(n)Φ−1(n−1)λ−1从而,我们从本质上通过递推的方式绕过了矩阵求逆。
下一步,我们用 K(n)=λ−1Φ−1(n−1)x(n)1+λ−1xT(n)Φ−1(n−1)x(n)K(n)=\frac{\lambda^{-1}\Phi^{-1}(n-1)x(n)}{1+\lambda^{-1}x^T(n)\Phi^{-1}(n-1)x(n)}K(n)=1+λ−1xT(n)Φ−1(n−1)x(n)λ−1Φ−1(n−1)x(n) 简化递推公式:
Φ−1(n)=λ−1Φ−1(n−1)−λ−1K(n)xT(n)Φ−1(n−1)
\Phi^{-1}(n)=\lambda^{-1}\Phi^{-1}(n-1)-\lambda^{-1}K(n)x^T(n)\Phi^{-1}(n-1)
Φ−1(n)=λ−1Φ−1(n−1)−λ−1K(n)xT(n)Φ−1(n−1)我们稍微研究一下这个K(n)K(n)K(n):
K(n)+λ−1K(n)xT(n)Φ−1(n−1)x(n)=λ−1Φ−1(n−1)x(n)
K(n)+\lambda^{-1}K(n)x^T(n)\Phi^{-1}(n-1)x(n)=\lambda^{-1}\Phi^{-1}(n-1)x(n)
K(n)+λ−1K(n)xT(n)Φ−1(n−1)x(n)=λ−1Φ−1(n−1)x(n)K(n)=(λ−1Φ−1(n−1)−λ−1K(n)xT(n)Φ−1(n−1))x(n)=Φ−1(n)x(n)
K(n)=(\lambda^{-1}\Phi^{-1}(n-1)-\lambda^{-1}K(n)x^T(n)\Phi^{-1}(n-1))x(n)=\Phi^{-1}(n)x(n)
K(n)=(λ−1Φ−1(n−1)−λ−1K(n)xT(n)Φ−1(n−1))x(n)=Φ−1(n)x(n)好了,我们再对 Z(n)=∑k=1nλn−kx(k)d(k)Z(n)=\sum_{k=1}^n\lambda^{n-k}x(k)d(k)Z(n)=∑k=1nλn−kx(k)d(k) 进行递推的转换:
Z(n)=∑k=1nλn−kx(k)d(k)=λ∑k=1n−1λn−1−kx(k)d(k)+x(n)d(n)=λZ(n−1)+x(n)d(n)
\begin{aligned}
Z(n)&=\sum_{k=1}^n\lambda^{n-k}x(k)d(k)=\lambda\sum_{k=1}^{n-1}\lambda^{n-1-k}x(k)d(k)+x(n)d(n)\\
&=\lambda Z(n-1)+x(n)d(n)
\end{aligned}
Z(n)=k=1∑nλn−kx(k)d(k)=λk=1∑n−1λn−1−kx(k)d(k)+x(n)d(n)=λZ(n−1)+x(n)d(n)从而我们就可以改写最小二乘解为递推的形式:
ωn=Φ−1(n)Z(n)==(λ−1Φ−1(n−1)−λ−1K(n)xT(n)Φ−1(n−1))(λZ(n−1)+x(n)d(n))=Φ−1(n−1)Z(n−1)−K(n)xT(n)Φ−1(n−1)Z(n−1)+Φ−1(n)x(n)d(n)=ωn−1+K(n)(d(n)−ωn−1Tx(n))
\begin{aligned}
\omega_n&=\Phi^{-1}(n)Z(n)=\\
&=\bigg(\lambda^{-1}\Phi^{-1}(n-1)-\lambda^{-1}K(n)x^T(n)\Phi^{-1}(n-1)\bigg)\bigg(\lambda Z(n-1)+x(n)d(n)\bigg)\\
&=\Phi^{-1}(n-1)Z(n-1)-K(n)x^T(n)\Phi^{-1}(n-1)Z(n-1)+\Phi^{-1}(n)x(n)d(n)\\
&=\omega_{n-1}+K(n)(d(n)-\omega^T_{n-1}x(n))
\end{aligned}
ωn=Φ−1(n)Z(n)==(λ−1Φ−1(n−1)−λ−1K(n)xT(n)Φ−1(n−1))(λZ(n−1)+x(n)d(n))=Φ−1(n−1)Z(n−1)−K(n)xT(n)Φ−1(n−1)Z(n−1)+Φ−1(n)x(n)d(n)=ωn−1+K(n)(d(n)−ωn−1Tx(n))递归最小二乘的这个结果,从本质上来说,是一种预测矫正过程,换句话说,就是卡尔曼滤波。或者说,我们可以对卡尔曼滤波有一个新认识:卡尔曼滤波所做的优化是跟踪整个历史数据,拿到一起,来做最小二乘优化。
所谓预测矫正,通俗地说就是:先用老结果预测,老结果在新数据上的误差用一个增益加权,把它融汇到老结果里面来,对老结果形成矫正。
奇异值分解(Singular Value Decomposition, SVD)
假设我要分解一个长矩阵 A=(a1T⋮anT)∈Rn×m, (n>m)A=\left(\begin{matrix}a_1^T\\\vdots \\a_n^T\end{matrix}\right)\in \R^{n\times m,\ (n>m)}A=a1T⋮anT∈Rn×m, (n>m)
那么 aiTa_i^TaiT 全部是 mmm 维空间的点,我现在想要找一个超平面,使得这nnn个点到这个超平面的距离的平方和最小。这个问题跟最小二乘有微妙的差异,最小二乘是在做点与超平面垂直方向上的距离优化,而不是直接点与超平面的距离优化。所以,这本质上是对最小二乘理论的前进。
点 aaa 到超平面 v\mathbf vv的距离:
d(a,v)=∣aTv∣∥v∥
d(a,\mathbf v)=\frac{|a^T\mathbf v|}{\|\mathbf v\|}
d(a,v)=∥v∥∣aTv∣假定 ∥v∥=1\|\mathbf v\|=1∥v∥=1:
d2(a,v)=∣aTv∣2
d^2(a,\mathbf v)=|a^T\mathbf v|^2
d2(a,v)=∣aTv∣2优化目标:
∑k=1nd2(ak,v)=∑k=1n∣akTv∣2=∥Av∥22
\sum_{k=1}^nd^2(a_k,\mathbf v)=\sum_{k=1}^n|a_k^T\mathbf v|^2=\|A\mathbf v\|_2^2
k=1∑nd2(ak,v)=k=1∑n∣akTv∣2=∥Av∥22即,我们要做如下优化:
minv∥Av∥22s.t.∥v∥=1
\min\limits_{\mathbf v}\|A\mathbf v\|_2^2\\
s.t.\|\mathbf v\|=1
vmin∥Av∥22s.t.∥v∥=1这个解的形式:
v1=argmin∥v∥=1∥Av∥22
\mathbf v_1=\mathop{\arg\min}_{\|\mathbf v\|=1}\|A\mathbf v\|_2^2
v1=argmin∥v∥=1∥Av∥22我们得到了第一个矢量,下面我们要找第二个矢量,使得这 nnn个点到这两个矢量张成的子空间的距离最小。
d(a,{v1,v2})=d(a,v1)+d(a,v2)
d(a,\{\mathbf v_1,\mathbf v_2\})=d(a,\mathbf v_1)+d(a,\mathbf v_2)
d(a,{v1,v2})=d(a,v1)+d(a,v2)
我们自然希望上式能够成立,这就要求我们得在v1\mathbf v_1v1的正交补空间里找v2\mathbf v_2v2。
v2=argminv⊥v1,∥v∥=1∥Av∥22
\mathbf v_2=\mathop{\arg\min}_{\mathbf v\perp \mathbf v_1,\|\mathbf v\|=1}\|A\mathbf v\|_2^2
v2=argminv⊥v1,∥v∥=1∥Av∥22
类似的,剩余的矢量我们也是这么找下去:
v3=argminv⊥{v1,v2},∥v∥=1∥Av∥22
\mathbf v_3=\mathop{\arg\min}_{\mathbf v\perp \{\mathbf v_1,\mathbf v_2\},\|\mathbf v\|=1}\|A\mathbf v\|_2^2
v3=argminv⊥{v1,v2},∥v∥=1∥Av∥22
以此类推。假设 AAA 矩阵的秩为 rank(A)=r\text{rank}(A)=rrank(A)=r,那么找到的矢量就有 rrr 个 (v1,v2,...,vr)(\mathbf v_1,\mathbf v_2,...,\mathbf v_r)(v1,v2,...,vr) 标准正交。
我们可以进一步扩充为标准正交基 (v1,v2,...,vr,vr+1,...,vm)(\mathbf v_1,\mathbf v_2,...,\mathbf v_r,\mathbf v_{r+1},...,\mathbf v_m)(v1,v2,...,vr,vr+1,...,vm)
我们令 uk=Avk/∥Avk∥\mathbf u_k=A\mathbf v_k/\|A\mathbf v_k\|uk=Avk/∥Avk∥、σk=∥Avk∥2,(k=1,2,...,m)\sigma_k=\|A\mathbf v_k\|_2,(k=1,2,...,m)σk=∥Avk∥2,(k=1,2,...,m),于是有
A(v1,v2,...,vm)=(u1,u2,...,um)[σ1⋱σm]
A(\mathbf v_1,\mathbf v_2,...,\mathbf v_m)=(\mathbf u_1,\mathbf u_2,...,\mathbf u_m)
\begin{bmatrix}\sigma_1&&\\
&\ddots& \\&&\sigma_m\\
\end{bmatrix}
A(v1,v2,...,vm)=(u1,u2,...,um)σ1⋱σm
A=(u1,u2,...,um)[σ1⋱σm](v1T⋮vmT) A=(\mathbf u_1,\mathbf u_2,...,\mathbf u_m) \begin{bmatrix}\sigma_1&&\\ &\ddots& \\&&\sigma_m \end{bmatrix}\left(\begin{matrix}\mathbf v_1^T\\\vdots \\\mathbf v_m^T\end{matrix}\right) A=(u1,u2,...,um)σ1⋱σmv1T⋮vmT
其中 (u1,u2,...,um)(\mathbf u_1,\mathbf u_2,...,\mathbf u_m)(u1,u2,...,um) 彼此正交,因为有如下对称矩阵分解 AAT=UΛUTAA^T=U\Lambda U^TAAT=UΛUT成立:
AAT=(u1,u2,...,um)[σ12⋱σm2](u1T⋮umT)=(u1,u2,...,um,um+1,...,un)[σ12⋱σm20⋱0](u1T⋮unT)
\begin{aligned}AA^T&=(\mathbf u_1,\mathbf u_2,...,\mathbf u_m)
\begin{bmatrix}\sigma^2_1&&\\
&\ddots& \\&&\sigma^2_m
\end{bmatrix}\left(\begin{matrix}\mathbf u_1^T\\\vdots \\\mathbf u_m^T\end{matrix}\right)\\
&=(\mathbf u_1,\mathbf u_2,...,\mathbf u_m,\mathbf u_{m+1},...,\mathbf u_n)
\begin{bmatrix}
\sigma^2_1&&&&&\\
&\ddots& &&&\\
&&\sigma^2_m&&&\\
&&& 0&&\\
&&&& \ddots&\\
&&&&& 0\\
\end{bmatrix}
\left(\begin{matrix}\mathbf u_1^T\\\vdots \\\mathbf u_n^T\end{matrix}\right)\\
\end{aligned}
AAT=(u1,u2,...,um)σ12⋱σm2u1T⋮umT=(u1,u2,...,um,um+1,...,un)σ12⋱σm20⋱0u1T⋮unT
rank(AAT)=rank(A)=rank(AT)\text{rank}(AA^T)=\text{rank}(A)=\text{rank}(A^T)rank(AAT)=rank(A)=rank(AT)
于是我们便证明了奇异值分解:A=UΣVTA=U\Sigma V^TA=UΣVT
其中 U∈Rn×n,UUT=InU\in \R^{n\times n}, UU^T=I_nU∈Rn×n,UUT=In、V∈Rm×m,VVT=ImV\in \R^{m\times m}, VV^T=I_mV∈Rm×m,VVT=Im
奇异值分解下的最小二乘(伪逆)
下面我们打算用奇异值分解对最小二乘重新做一个透视,原问题:
minω∥(d(1)⋮d(n))−(xT(1)⋮xT(n))ω∥22
\min\limits_{\omega}\bigg \|
\left(\begin{matrix}d(1)\\\vdots \\d(n)\end{matrix}\right)-
\left(\begin{matrix}x^T(1)\\\vdots \\x^T(n)\end{matrix}\right)\omega
\bigg\|_2^2
ωmind(1)⋮d(n)−xT(1)⋮xT(n)ω22也可以写为:
minω∥d−xω∥22=(d−xω)T(d−xω)
\min\limits_{\omega}\|\mathbf d-\mathbf x\omega\|_2^2=(\mathbf d-\mathbf x\omega)^T(\mathbf d-\mathbf x\omega)
ωmin∥d−xω∥22=(d−xω)T(d−xω)加入指数遗忘因子 Λ=diag(λn−1,λn−2,...,1)\Lambda=\text{diag}(\lambda^{n-1},\lambda^{n-2},...,1)Λ=diag(λn−1,λn−2,...,1):
minω(d−xω)TΛ(d−xω)
\min\limits_{\omega}(\mathbf d-\mathbf x\omega)^T\Lambda(\mathbf d-\mathbf x\omega)
ωmin(d−xω)TΛ(d−xω)我们知道最小二乘解为 ωLS=(xTx)−1xTd\omega_{LS}=(\mathbf x^T\mathbf x)^{-1}\mathbf x^T\mathbf dωLS=(xTx)−1xTd
对x\mathbf xx做奇异值分解: x=UΛVT\mathbf x=U\Lambda V^Tx=UΛVT,Λ=[σ12⋱σm20]=[Λ~0]\Lambda=\begin{bmatrix}\sigma^2_1&&\\
&\ddots& \\&&\sigma^2_m\\&0&
\end{bmatrix}=\begin{bmatrix}\widetilde \Lambda\\0
\end{bmatrix}Λ=σ12⋱0σm2=[Λ0],就得到如下形式:
ωLS=(VΛTUTUΛVT)−1VΛTUTd=(VΛTΛVT)−1VΛTUTd=(VΛ~2VT)−1VΛTUTd=V[σ1−2⋱σm−2]VTV[σ1⋱σm0]UTd=V[σ1−1⋱σm−10]UTd=x+d
\begin{aligned}\omega_{LS}&=(V\Lambda^T U^TU\Lambda V^T)^{-1}V\Lambda^T U^T\mathbf d\\
&=(V\Lambda^T\Lambda V^T)^{-1}V\Lambda^T U^T\mathbf d\\
&=(V\widetilde\Lambda^2 V^T)^{-1}V\Lambda^T U^T\mathbf d\\
&=V\begin{bmatrix}\sigma^{-2}_1&&\\
&\ddots& \\&&\sigma^{-2}_m
\end{bmatrix}
V^TV
\begin{bmatrix}
\begin{matrix}
\sigma_1&&\\
&\ddots& \\&&\sigma_m
\end{matrix}0
\end{bmatrix}
U^T\mathbf d\\
&=V
\begin{bmatrix}
\begin{matrix}
\sigma^{-1}_1&&\\
&\ddots& \\&&\sigma^{-1}_m
\end{matrix}0
\end{bmatrix}
U^T\mathbf d\\
&=\mathbf x^{+}\mathbf d
\end{aligned}
ωLS=(VΛTUTUΛVT)−1VΛTUTd=(VΛTΛVT)−1VΛTUTd=(VΛ2VT)−1VΛTUTd=Vσ1−2⋱σm−2VTVσ1⋱σm0UTd=Vσ1−1⋱σm−10UTd=x+d其中,x+=V[σ1−1⋱σm−10]UT\mathbf x^{+}=V
\begin{bmatrix}
\begin{matrix}
\sigma^{-1}_1&&\\
&\ddots& \\&&\sigma^{-1}_m
\end{matrix}0
\end{bmatrix}
U^Tx+=Vσ1−1⋱σm−10UT 称为伪逆(Pseudo Inversion Generalized)
之所以称为伪逆,是因为原先按照线性方程组求解: xω=d⇒ω=x−1d\mathbf x\omega=\mathbf d\Rightarrow \omega=\mathbf x^{-1}\mathbf dxω=d⇒ω=x−1d
又因为 n>mn>mn>m 是一个超定方程,无法求精确解,所以最小二乘是在做 Fitting\text{Fitting}Fitting 。
而现在通过奇异值分解的角度进一步对最小二乘进行透视,我们发现实际上是在求伪逆:ω=x+d\omega=\mathbf x^{+}\mathbf dω=x+d
伪逆求法两部曲:
- 先把 Λ\LambdaΛ 转秩
- 能求逆的部分就求,求不了的那些个零就扔在那。
x+=VΛ+UT \mathbf x^+=V\Lambda^+U^T x+=VΛ+UT伪逆的性质:
- xx+x=x\mathbf x\mathbf x^+\mathbf x=\mathbf xxx+x=x
- x+xx+=x+\mathbf x^+\mathbf x\mathbf x^+=\mathbf x^+x+xx+=x+
矩阵求逆,用奇异值分解,它的数值稳定性和效率都是最好的。用奇异值分解伪逆的思想求最小二乘,是大部分软件的做法。原因是求逆这个操作本身,很怕矩阵的刚性比(=|最大特征值|/|最小特征值|)很大。从优化角度来说,这样会导致优化曲面很扁,从而梯度下降时Zigzag的现象会比较严重。