【统计学习】递归最小二乘算法与奇异值分解

这篇文章讲关于自适应算法的又一个认识:递归最小二乘(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ωminEd(n)ωTx(n)2

我们知道这样做出来的线性变换,是维纳滤波

维纳滤波可以在每一个时间点上做:E∣d(n)−ωT(n)x(n)∣2E|d(n)-\omega^T(n)x(n)|^2Ed(n)ωT(n)x(n)2

问题本身有一个时间轴,也就是数据发生变化的时间轴。而在每一个时间点上,求解系数也需要时间,这也对应一个时间轴。这两个时间轴很难统一起来,因为你在求解上一时刻数据的系数过程当中,数据本身已经发生了变化。因此我们才考虑到自适应(Adaptive)

自适应的一种理解是把两个时间轴耦合在一起。通常的做法是:在每一个时间点上,无需完全求解系数,只需做出一步调整,随着时间的发展,数据所对应的问题实质地不断变化,系数也在相应地不断做调整,大量的实验表明,这样的做法最后能够得到一个有效的结果。

LMS算法的损失函数把前面的期望去掉了: min⁡ω∣d(n)−ωTx(n)∣2\min\limits_{\omega}|d(n)-\omega^Tx(n)|^2ωmind(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 ωminEd(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=1nEd(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=1nForgetting   Factorλ(n,k)Ed(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=1nλnkEd(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=1nλnkd(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=1nλnkd2(k)2k=1nd(k)ωTx(k)λnk+k=1nλnk(ωTx(k))2=k=1nλnkd2(k)2ωT(k=1nλnkx(k)d(k))+ωT(k=1nλnkx(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λnkx(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λnkx(k)xT(k) 来简化符号:
g(ω)=C−2ωTZ(n)+ωTΦ(n)ω g(\omega)=C-2\omega^TZ(n)+\omega^T\Phi(n)\omega g(ω)=C2ω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)+(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=1nλnkx(k)xT(k)=k=1n1λnkx(k)xT(k)+x(n)xT(n)=λk=1n1λn1kx(k)xT(k)+x(n)xT(n)=λΦ(n1)+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)=(λΦ(n1)+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}[ADBC1]​做一个对角化:
[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][ADBC1][ICD0I]=[A+BCD00C1][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} [IDA10I][ADBC1][I0A1BI]=[A00(DA1B+C1)][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+BCD00C1]1=[ICD0I][I0A1BI][A100(DA1B+C1)1][IDA10I][I0BCI]=[ICDA1B][A100(DA1B+C1)1][IDA1BC]=[A1A1B(DA1B+C1)1][IDA1BC](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=A1A1B(DA1B+C1)1DA1


回到我们的问题,我们要对 Φ−1(n)=(λΦ(n−1)+x(n)xT(n))−1\Phi^{-1}(n)=(\lambda\Phi(n-1)+x(n)x^T(n))^{-1}Φ1(n)=(λΦ(n1)+x(n)xT(n))1 求逆,那么用矩阵求逆公式,我们给定 A=λΦ(n−1)A=\lambda\Phi(n-1)A=λΦ(n1)B=x(n)B=x(n)B=x(n)C=1C=1C=1D=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(n1)1+λ1xT(n)Φ1(n1)x(n)λ1Φ1(n1)x(n)xT(n)Φ1(n1)λ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(n1)x(n)λ1Φ1(n1)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(n1)λ1K(n)xT(n)Φ1(n1)我们稍微研究一下这个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(n1)x(n)=λ1Φ1(n1)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(n1)λ1K(n)xT(n)Φ1(n1))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λnkx(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=1nλnkx(k)d(k)=λk=1n1λn1kx(k)d(k)+x(n)d(n)=λZ(n1)+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(n1)λ1K(n)xT(n)Φ1(n1))(λZ(n1)+x(n)d(n))=Φ1(n1)Z(n1)K(n)xT(n)Φ1(n1)Z(n1)+Φ1(n)x(n)d(n)=ωn1+K(n)(d(n)ωn1Tx(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=a1TanTRn×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)=vaTv假定 ∥v∥=1\|\mathbf v\|=1v=1
d2(a,v)=∣aTv∣2 d^2(a,\mathbf v)=|a^T\mathbf v|^2 d2(a,v)=aTv2优化目标:
∑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=1nd2(ak,v)=k=1nakTv2=Av22即,我们要做如下优化:
min⁡v∥Av∥22s.t.∥v∥=1 \min\limits_{\mathbf v}\|A\mathbf v\|_2^2\\ s.t.\|\mathbf v\|=1 vminAv22s.t.∥v=1这个解的形式:
v1=arg⁡min⁡∥v∥=1∥Av∥22 \mathbf v_1=\mathop{\arg\min}_{\|\mathbf v\|=1}\|A\mathbf v\|_2^2 v1=argminv=1Av22我们得到了第一个矢量,下面我们要找第二个矢量,使得这 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=arg⁡min⁡v⊥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=argminvv1,v=1Av22
类似的,剩余的矢量我们也是这么找下去:
v3=arg⁡min⁡v⊥{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{v1v2},v=1Av22
以此类推。假设 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=Avk2,(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σmv1TvmT

其中 (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σm2u1TumT=(u1,u2,...,um,um+1,...,un)σ12σm200u1TunT

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_nURn×n,UUT=InV∈Rm×m,VVT=ImV\in \R^{m\times m}, VV^T=I_mVRm×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) ωmindxω22=(dxω)T(dxω)加入指数遗忘因子 Λ=diag(λn−1,λn−2,...,1)\Lambda=\text{diag}(\lambda^{n-1},\lambda^{n-2},...,1)Λ=diag(λn1,λn2,...,1)
min⁡ω(d−xω)TΛ(d−xω) \min\limits_{\omega}(\mathbf d-\mathbf x\omega)^T\Lambda(\mathbf d-\mathbf x\omega) ωmin(dxω)TΛ(dxω)我们知道最小二乘解为 ω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}Λ=σ120σ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σ12σm2VTVσ1σm0UTd=Vσ11σm10UTd=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σ11σm10UT 称为伪逆(Pseudo Inversion Generalized)

之所以称为伪逆,是因为原先按照线性方程组求解: xω=d⇒ω=x−1d\mathbf x\omega=\mathbf d\Rightarrow \omega=\mathbf x^{-1}\mathbf dxω=dω=x1d

又因为 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的现象会比较严重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值