Blog

「 IDEA 」 六月 04, 2020

### 想法速记：SVD求齐次线性方程组 Ax=0 的解

文章字数 2.9k 阅读约需 3 mins. 阅读次数 0

> 原创发表于 DavidZ Blog，遵循 CC 4.0 BY-NC-SA 版权协议，转载请附上原文出处链接及本声明。

众所周知，SVD(奇异值分解)可以用于最小二乘法求齐次线性方程组$A\vec{x}=\vec{0}$的解。我看了很多资料，大多使用数学公式推导，得出结论。但是，曾经线性代数差点挂科的我，总觉得有些蹊跷。想了两天，终于有了一些感性的认知（不一定是对的😂），赶紧记录下来。

## ¶矩阵有何意义

按照我的理解，一个矩阵的实际意义是对应一个线性变换，这个变换可以理解为瞬间运动。例如，一个旋转矩阵，

$$
A=\begin{bmatrix}
cos\theta & sin\theta \\\
-sin\theta & cos\theta
\end{bmatrix}
$$

它的意思是，把一个向量顺时针旋转$\theta$。也就是说，给定一个$\vec{v_1}=[-1, 1]^T$, 那么变换的结果就是$\vec{v_2}=A\vec{v_1}=[1, 1]^T$.

除了旋转，矩阵还可以表示包括缩放，投影在内的所有线性变换。

十分推荐大家去看 3Blue1Brown 的 线性代数的本质，B 站有官方翻译版，它完全颠覆了我对线性代数的认知。

## ¶SVD到底干了什么

$$
A = U\Sigma V^T
$$

SVD把矩阵$A(m\times n)$分解成了,

- $U(m\times m)$: 左奇异矩阵
- $\Sigma(m\times n)$: 奇异值矩阵
- $V(n\times n)$: 右奇异矩阵

重点来了，SVD的意思就是，把一个本来由矩阵$A$表示的变换，转化成一个由$U,\Sigma,V$表示的变换。这个变换是，把一个向量，从以$V$为基向量的空间线性变换到成以$U$为基向量的空间中去（$\Sigma$的意义可以说是缩放，待证实，暂时忽略）。这样我们就可以更深入的理解这个变换了。

例如旋转$\vec{v_1}$90度得到$\vec{v_2}$，

其中，

$$
U=\begin{bmatrix}
0 & 1 \\\
1 & 0
\end{bmatrix}
$$

$$
\Sigma=\begin{bmatrix}
1 & 1
\end{bmatrix}
$$

$$
V=\begin{bmatrix}
-1 & 0 \\\
0 & 1
\end{bmatrix}
$$

也就是说，矩阵$A$可以被理解为，我们把一个向量$\vec{v_1}$，从以$\vec{e_1}=[-1, 0]^T,\vec{e_2}=[0, 1]^T$为基向量的空间线性变换到了以$\vec{e_1}=[0, 1]^T,\vec{e_2}=[1, 0]^T$为基向量的空间中。这个变换表现为旋转了90度。

## ¶所以如何理解

说回求齐次线性方程组$Ax=0$的解来。

按照矩阵的意义，我们这里要求的是，已知一个线性变换$A$，给定一个$\vec{x}$，使得线性变换后的结果为$\vec{0}$。

此时非常重要的是，如果$x=\vec{0}$，那一定成立，但是我们想找一个非平凡的解。

我们暂时不关心这个解是否存在，也就是说如果不存在，我们就找个最接近的（最小二乘法思想），我们直接使用SVD分解矩阵$A$，得到对应的$U,\Sigma,V$。

按照SVD的作用，我们现在可以说，矩阵$A$这个线性变换，把一个$\vec{x}$，从以$V$为基向量的空间线性变换到了以$U$为基向量的空间中，而我们想找，在以$V$为基向量的空间中，哪个向量会在投影后趋近于或者等于$\vec{0}$。更重要的是，我们只在乎这个向量的方向，而不在乎他的大小，因为它等于$\vec{0}$是个平凡解，这就像最小二乘法中，我们规定$|\vec{x}|=1$。

这时，答案就开始变得清晰了，因为我们想找的$\vec{x}$，应该就是$V$这组基向量中特异值$\sigma$最小的那一个$\vec{e_{min}}$，也就是说$\vec{x}=\vec{e_{min}}$。此时有两种情况，

1. $\sigma=0$， 那么$\vec{x}$投影后的就是$\vec{0}$。
2. $\sigma\neq0$，那么$\vec{x}$投影后是使$A\vec{x}$最小的解。因为如果$\vec{x}\neq\vec{e_{min}}$，也就是说它偏离了$\vec{e_{min}}$，那么它一定由$\vec{e_{min}}$和另一个基向量线性组合，而无论怎么组合，$\sigma_{combine}\geq\sigma_{min}$。

因此，我们求解$A\vec{x}=0$的过程就是，

1. $U,\Sigma,V^T=SVD(A)$
2. $\vec{x}=V[:, -1]$

留言
0%