当前位置: 首页 > news >正文

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

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

我们只需把精力放在如何寻找这个系数 ω \omega ω

接下来我们假定一个损失,均方误差 min ⁡ ω E ∣ d ( n ) − ω T x ( n ) ∣ 2 \min\limits_{\omega}E|d(n)-\omega^Tx(n)|^2 ωminEd(n)ωTx(n)2

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

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

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

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

LMS算法的损失函数把前面的期望去掉了: min ⁡ ω ∣ d ( n ) − ω T x ( 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 ) − ω ^ n T x ( n ) e(n)=d(n)-\hat \omega^T_nx(n) e(n)=d(n)ω^nTx(n)是误差项。

典型的最小二乘解(LS)

现在我们要重新考量Loss的定义:
min ⁡ ω E ∣ d ( n ) − ω T x ( n ) ∣ 2 \min\limits_{\omega}E|d(n)-\omega^Tx(n)|^2 ωminEd(n)ωTx(n)2上述损失函数有什么问题?——只考虑了一个时刻。包括LMS也是,调整所用的数据信息都只用了一个时刻。如果我们对一段历史已经有完全把握,当我们试图做n+1时刻的某些事情,该如何把整段历史利用起来?我们可以这么调整损失函数:
min ⁡ ω ∑ k = 1 n E ∣ d ( k ) − ω T x ( k ) ∣ 2 \min\limits_{\omega}\sum_{k=1}^nE|d(k)-\omega^Tx(k)|^2 ωmink=1nEd(k)ωTx(k)2这么做虽然可行,但是有点违背马尔可夫假设,因为马尔可夫性质告诉我们,历史上的东西重要性没那么大。如果我既想利用历史信息,又不想太过“负重前行”,那么我可以添加遗忘因子
min ⁡ ω ∑ k = 1 n λ ( n , k ) ⏟ Forgetting Factor E ∣ d ( k ) − ω T x ( 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 = 1 n λ n − k E ∣ d ( k ) − ω T x ( 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 = 1 n λ n − k ∣ d ( k ) − ω T x ( 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 = 1 n λ n − k d 2 ( k ) − 2 ∑ k = 1 n d ( k ) ω T x ( k ) λ n − k + ∑ k = 1 n λ n − k ( ω T x ( k ) ) 2 = ∑ k = 1 n λ n − k d 2 ( k ) − 2 ω T ( ∑ k = 1 n λ n − k x ( k ) d ( k ) ) + ω T ( ∑ k = 1 n λ n − k x ( k ) x T ( 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 = 1 n λ n − k x ( 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 = 1 n λ n − k x ( k ) x T ( 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 ω T Z ( n ) + ω T Φ ( n ) ω g(\omega)=C-2\omega^TZ(n)+\omega^T\Phi(n)\omega g(ω)=C2ωTZ(n)+ωTΦ(n)ω这样的优化目标我们很熟悉,是关于这个线性系数 ω \omega ω​的二次型,我们只需对它求梯度:
∇ ω g ( ω ) = − 2 Z ( 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 = 1 n λ n − k x ( k ) x T ( k ) = ∑ k = 1 n − 1 λ n − k x ( k ) x T ( k ) + x ( n ) x T ( n ) = λ ∑ k = 1 n − 1 λ n − 1 − k x ( k ) x T ( k ) + x ( n ) x T ( n ) = λ Φ ( n − 1 ) + x ( n ) x T ( 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 ) x T ( 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 + B C D ) − 1 = ? (A+BCD)^{-1}=? (A+BCD)1=?我们想对分块矩阵 [ A B D − C − 1 ] \begin{bmatrix}A&B\\D&-C^{-1}\end{bmatrix} [ADBC1]​做一个对角化:
[ I B C 0 I ] [ A B D − C − 1 ] [ I 0 C D I ] = [ A + B C D 0 0 − 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] [ 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 ) ] \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 + B C D 0 0 − C − 1 ] − 1 = [ 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 ∗ ] \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 + 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=A1A1B(DA1B+C1)1DA1


回到我们的问题,我们要对 Φ − 1 ( n ) = ( λ Φ ( n − 1 ) + x ( n ) x T ( 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 = 1 C=1 C=1 D = x T ( n ) D=x^T(n) D=xT(n)
Φ − 1 ( n ) = λ − 1 Φ − 1 ( n − 1 ) − λ − 1 Φ − 1 ( n − 1 ) x ( n ) x T ( n ) Φ − 1 ( n − 1 ) λ − 1 1 + λ − 1 x T ( 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 + λ − 1 x T ( 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 ) − λ − 1 K ( n ) x T ( 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 ) + λ − 1 K ( n ) x T ( 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 ) − λ − 1 K ( n ) x T ( 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 = 1 n λ n − k x ( 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 = 1 n λ n − k x ( k ) d ( k ) = λ ∑ k = 1 n − 1 λ n − 1 − k x ( 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 ) − λ − 1 K ( n ) x T ( n ) Φ − 1 ( n − 1 ) ) ( λ Z ( n − 1 ) + x ( n ) d ( n ) ) = Φ − 1 ( n − 1 ) Z ( n − 1 ) − K ( n ) x T ( n ) Φ − 1 ( n − 1 ) Z ( n − 1 ) + Φ − 1 ( n ) x ( n ) d ( n ) = ω n − 1 + K ( n ) ( d ( n ) − ω n − 1 T x ( 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 = ( a 1 T ⋮ a n T ) ∈ R n × 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= a1TanT Rn×m, (n>m)

那么 a i T a_i^T aiT 全部是 m m m 维空间的点,我现在想要找一个超平面,使得这 n n n个点到这个超平面的距离的平方和最小。这个问题跟最小二乘有微妙的差异,最小二乘是在做点与超平面垂直方向上的距离优化,而不是直接点与超平面的距离优化。所以,这本质上是对最小二乘理论的前进。

a a a 到超平面 v \mathbf v v的距离:
d ( a , v ) = ∣ a T v ∣ ∥ v ∥ d(a,\mathbf v)=\frac{|a^T\mathbf v|}{\|\mathbf v\|} d(a,v)=vaTv假定 ∥ v ∥ = 1 \|\mathbf v\|=1 v=1
d 2 ( a , v ) = ∣ a T v ∣ 2 d^2(a,\mathbf v)=|a^T\mathbf v|^2 d2(a,v)=aTv2优化目标:
∑ k = 1 n d 2 ( a k , v ) = ∑ k = 1 n ∣ a k T v ∣ 2 = ∥ A v ∥ 2 2 \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 ∥ A v ∥ 2 2 s . t . ∥ v ∥ = 1 \min\limits_{\mathbf v}\|A\mathbf v\|_2^2\\ s.t.\|\mathbf v\|=1 vminAv22s.t.∥v=1这个解的形式:
v 1 = arg ⁡ min ⁡ ∥ v ∥ = 1 ∥ A v ∥ 2 2 \mathbf v_1=\mathop{\arg\min}_{\|\mathbf v\|=1}\|A\mathbf v\|_2^2 v1=argminv=1Av22我们得到了第一个矢量,下面我们要找第二个矢量,使得这 n n n个点到这两个矢量张成的子空间的距离最小。
d ( a , { v 1 , v 2 } ) = d ( a , v 1 ) + d ( a , v 2 ) 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)
我们自然希望上式能够成立,这就要求我们得在 v 1 \mathbf v_1 v1正交补空间里找 v 2 \mathbf v_2 v2​。
v 2 = arg ⁡ min ⁡ v ⊥ v 1 , ∥ v ∥ = 1 ∥ A v ∥ 2 2 \mathbf v_2=\mathop{\arg\min}_{\mathbf v\perp \mathbf v_1,\|\mathbf v\|=1}\|A\mathbf v\|_2^2 v2=argminvv1,v=1Av22
类似的,剩余的矢量我们也是这么找下去:
v 3 = arg ⁡ min ⁡ v ⊥ { v 1 , v 2 } , ∥ v ∥ = 1 ∥ A v ∥ 2 2 \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
以此类推。假设 A A A 矩阵的秩为 rank ( A ) = r \text{rank}(A)=r rank(A)=r,那么找到的矢量就有 r r r ( v 1 , v 2 , . . . , v r ) (\mathbf v_1,\mathbf v_2,...,\mathbf v_r) (v1,v2,...,vr) 标准正交。

我们可以进一步扩充为标准正交基 ( v 1 , v 2 , . . . , v r , v r + 1 , . . . , v m ) (\mathbf v_1,\mathbf v_2,...,\mathbf v_r,\mathbf v_{r+1},...,\mathbf v_m) (v1,v2,...,vr,vr+1,...,vm)

我们令 u k = A v k / ∥ A v k ∥ \mathbf u_k=A\mathbf v_k/\|A\mathbf v_k\| uk=Avk/∥Avk σ k = ∥ A v k ∥ 2 , ( k = 1 , 2 , . . . , m ) \sigma_k=\|A\mathbf v_k\|_2,(k=1,2,...,m) σk=Avk2,(k=1,2,...,m),于是有
A ( v 1 , v 2 , . . . , v m ) = ( u 1 , u 2 , . . . , u m ) [ σ 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 = ( u 1 , u 2 , . . . , u m ) [ σ 1 ⋱ σ m ] ( v 1 T ⋮ v m T ) 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σm v1TvmT

其中 ( u 1 , u 2 , . . . , u m ) (\mathbf u_1,\mathbf u_2,...,\mathbf u_m) (u1,u2,...,um) 彼此正交,因为有如下对称矩阵分解 A A T = U Λ U T AA^T=U\Lambda U^T AAT=UΛUT成立:
A A T = ( u 1 , u 2 , . . . , u m ) [ σ 1 2 ⋱ σ m 2 ] ( u 1 T ⋮ u m T ) = ( u 1 , u 2 , . . . , u m , u m + 1 , . . . , u n ) [ σ 1 2 ⋱ σ m 2 0 ⋱ 0 ] ( u 1 T ⋮ u n T ) \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σm2 u1TumT =(u1,u2,...,um,um+1,...,un) σ12σm200 u1TunT

rank ( A A T ) = rank ( A ) = rank ( A T ) \text{rank}(AA^T)=\text{rank}(A)=\text{rank}(A^T) rank(AAT)=rank(A)=rank(AT)

于是我们便证明了奇异值分解: A = U Σ V T A=U\Sigma V^T A=UΣVT

其中 U ∈ R n × n , U U T = I n U\in \R^{n\times n}, UU^T=I_n URn×n,UUT=In V ∈ R m × m , V V T = I m V\in \R^{m\times m}, VV^T=I_m VRm×m,VVT=Im


奇异值分解下的最小二乘(伪逆)

下面我们打算用奇异值分解对最小二乘重新做一个透视,原问题:
min ⁡ ω ∥ ( d ( 1 ) ⋮ d ( n ) ) − ( x T ( 1 ) ⋮ x T ( n ) ) ω ∥ 2 2 \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 ωmin d(1)d(n) xT(1)xT(n) ω 22也可以写为:
min ⁡ ω ∥ d − x ω ∥ 2 2 = ( 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ω)我们知道最小二乘解为 ω L S = ( x T x ) − 1 x T d \omega_{LS}=(\mathbf x^T\mathbf x)^{-1}\mathbf x^T\mathbf d ωLS=(xTx)1xTd

x \mathbf x x做奇异值分解: x = U Λ V T \mathbf x=U\Lambda V^T x=UΛVT Λ = [ σ 1 2 ⋱ σ m 2 0 ] = [ Λ ~ 0 ] \Lambda=\begin{bmatrix}\sigma^2_1&&\\ &\ddots& \\&&\sigma^2_m\\&0& \end{bmatrix}=\begin{bmatrix}\widetilde \Lambda\\0 \end{bmatrix} Λ= σ120σm2 =[Λ 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 = ( V Λ ~ 2 V T ) − 1 V Λ T U T d = V [ σ 1 − 2 ⋱ σ m − 2 ] V T V [ σ 1 ⋱ σ m 0 ] U T d = V [ σ 1 − 1 ⋱ σ m − 1 0 ] U T d = 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σm2 VTV σ1σm0 UTd=V σ11σm10 UTd=x+d其中, x + = V [ σ 1 − 1 ⋱ σ m − 1 0 ] U T \mathbf x^{+}=V \begin{bmatrix} \begin{matrix} \sigma^{-1}_1&&\\ &\ddots& \\&&\sigma^{-1}_m \end{matrix}0 \end{bmatrix} U^T x+=V σ11σm10 UT 称为伪逆(Pseudo Inversion Generalized)

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

又因为 n > m n>m n>m 是一个超定方程,无法求精确解,所以最小二乘是在做 Fitting \text{Fitting} Fitting

而现在通过奇异值分解的角度进一步对最小二乘进行透视,我们发现实际上是在求伪逆: ω = x + d \omega=\mathbf x^{+}\mathbf d ω=x+d

伪逆求法两部曲:

  • 先把 Λ \Lambda Λ 转秩
  • 能求逆的部分就求,求不了的那些个零就扔在那。

x + = V Λ + U T \mathbf x^+=V\Lambda^+U^T x+=VΛ+UT伪逆的性质:

  • x x + x = x \mathbf x\mathbf x^+\mathbf x=\mathbf x xx+x=x
  • x + x x + = x + \mathbf x^+\mathbf x\mathbf x^+=\mathbf x^+ x+xx+=x+

矩阵求逆,用奇异值分解,它的数值稳定性和效率都是最好的。用奇异值分解伪逆的思想求最小二乘,是大部分软件的做法。原因是求逆这个操作本身,很怕矩阵的刚性比(=|最大特征值|/|最小特征值|)很大。从优化角度来说,这样会导致优化曲面很扁,从而梯度下降时Zigzag的现象会比较严重。

http://www.xdnf.cn/news/149239.html

相关文章:

  • #什么是爬虫?——从技术原理到现实应用的全面解析 VI
  • Vue回调函数中的this
  • 【CF】Day43——Codeforces Round 906 (Div. 2) E1
  • Libconfig 修改配置文件里的某个节点
  • Linux 系统用户管理与权限掌控:从基础到精通
  • 《深入理解计算机系统》阅读笔记之第三章 程序的机器级表示
  • Python判断语句-语法:if,if else,if elif else,嵌套,if else语句扁平式写法,案例
  • LatentSync - 字节联合北交大开源的端到端唇形同步框架-附整合包
  • Cannot read properties of null (reading ‘classList‘)
  • 人工智能的100个关键词系统学习计划
  • Trae 实测:AI 助力前端开发,替代工具还远吗?
  • mysql 导入很慢,如何解决
  • 猿人学题库13题—动态css字体加密 记录
  • JavaScript性能优化实战(5):数据结构与算法性能优化
  • Python爬取天猫畅销榜接口的详细教程
  • Python基础语法:字符串格式化(占位拼接,精度控制,format()函数,快速格式化,表达式格式化)
  • dstream
  • 《深入浅出ProtoBuf:从环境搭建到高效数据序列化》​
  • python基础-requests结合AI实现自动化数据抓取
  • 文档编辑:reStructuredText全面使用指南 — 第三部分 进阶特性
  • 第四章 安全审计
  • HMI与组态,自动化的“灵珠”和“魔丸”
  • 【FastJSON】的parse与parseObject
  • Huffman(哈夫曼)解/压缩算法实现
  • 【多目标进化算法】常见多目标进化算法一览
  • 持久登录的存储
  • 在统信桌面操作系统上修改启动器中软件名称
  • Semantic Kernel也能充当MCP Client
  • PMIC PCA9450 硬件原理全解析:为 i.MX 8M 平台供电的“大脑”
  • 【EDA】Floorplanning(布局规划)