MENU

【Rethink Math】矩阵论的几何理解:奇异值分解

2026 年 07 月 06 日 • 文章

奇异值分解之所以厉害,之所以常用,是它将变换拆成了旋转-缩放-旋转三个步骤,在缩放的过程中,能够找到对形状改变最大的方向,从而舍弃一些不重要的方向。

笔者在这一节会讲一些奇异值分解的应用,如果能给读者带来一点灵感,一点启发,再好不过了。

朝花夕拾:酉相似与酉等价

Takeaway:

酉相似是酉等价一个特例。

两个矩阵酉等价,表明一个形状经过两个矩阵的线性变换之后,形状是一样的,只是有了旋转/翻转。

矩阵论的几何理解:矩阵转置与酉相似一文中,我写道:

酉相似的定义是,若两个矩阵$A$与$B$酉相似,就相当于存在一个酉矩阵$U$,使得:

$$ A=U^*BU $$

$U^*$表示$U$的共轭转置,不过我们主要讨论实数域,那么就是正交相似,存在一个正交矩阵$Q$,使得:

$$ A=Q^TBQ $$

这个就很好理解了,先把矩阵换到一套新的标准正交基上,也就是$Q$变换,然后在这组基下描述线性变换,也就是$B$,随后转到常用的坐标轴下,也就是$Q^T$。

那么酉等价——我们讨论实数域情况,也就是正交等价——其实就是对于两个矩阵$A$和$B$,存在两个正交矩阵$Q$和$P$,使得:

$$ A=Q^TBP $$

其实这个公式的意思也很简单,矩阵$A$代表的变换,相当于我们先选择一组坐标系,也就是$P$变换,然后在这组坐标系下描述一下线性变换,也就是$B$,然后再换到一个坐标系下,也就是$Q^T$。当然这个过程是不改变形状的,比如一个半径为1的圆形,经过$A$和$B$的变换,都会变成同样的形状,比如一个长轴2,短轴0.5的椭圆,二者的差别无非就是旋转的角度不同罢了。

那么这样的矩阵关系,就称作酉等价。酉相似是酉等价的一个特例,代表输入输出的坐标系都是同一个,酉等价则是输入和输出可以分别用不同的坐标变换。

旧酒新瓶:奇异值分解

Takeaway:

奇异值分解将变换拆成了旋转-缩放-旋转三个步骤。

奇异值分解就是将矩阵$A\in\mathbb{R}^{m\times n}_r(r>0)$,分解为:

$$ A=U^T\begin{bmatrix}\Sigma & 0\\ 0 & 0\end{bmatrix}V $$

的形式,其中$U$和$V$是正交矩阵,$\Sigma$是一个对角矩阵。这就相当于把一个变换拆成了旋转-缩放-旋转三个步骤。

这里有一个东西叫做奇异值,奇异值就是矩阵$\Sigma$对角的元素,为什么?奇异值是什么,奇异值在书上是这么记的:设矩阵$A\in\mathbb{R}^{m\times n}_r(r>0)$,那么这个矩阵的奇异值就是$A^TA$特征值开根号。为什么?

这里可以通过范数的知识来理解,我们要求缩放,就要求矩阵在一些特别方向上的缩放程度,我们通过$V$换了一组基,那么就要在这些方向上考量缩放程度。缩放,就必须是单纯的缩放,不应该掺入旋转,那么很显然,这些方向就是矩阵$A$特征方向……吗?对于这样一个矩阵:

$$ \begin{bmatrix} 1 & 10 \\ 0 & 1 \end{bmatrix} $$

它特征值都是1,这表明,有两个方向,变换前后方向不变,缩放倍数是1,但是这不是我们的需求,因为单位圆在这个变换中会被拉成一个很长的椭圆状图形。特征值在这里没有很好地反映“最大拉伸程度”。这里读者一定要区分:特征值关心的是某些方向是否保持方向不变;奇异值关心的是所有方向中真正的长度拉伸。

那么,我们的问题就变成了:矩阵在一些方向上对向量缩放了多少倍?落到形式上,就是:

$$ N=\frac{||Ax||}{||x||} $$

看分子的平方:

$$ ||Ax||^2=(Ax)^T(Ax)=x^TA^TAx $$

那么很显然,$A^TA$的特征值就是就是伸缩长度的平方,所以开个根号,就变成了伸缩长度。

具体问题:最小二乘

Takeaway:

奇异值分解通过把问题进行拆分,给出了最小二乘解的通用公式。

最小二乘问题是什么?其形式是给定$Ax=b$,当方程没有精确解的时候,求一个$x$,让其尽可能接近真实解:

$$ x=\min_x||Ax-b||^2 $$

最小二乘怎么起作用?假设我们求取了$A$的奇异值分解:

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

那么最小二乘问题变成:

$$ \min_x \|U\Sigma V^Tx-b\|^2 $$

因为$U$是正交矩阵,不改变长度,所以可以在范数里面左乘$U^T$:

$$ \|U\Sigma V^Tx-b\| = \|\Sigma V^Tx-U^Tb\| $$

令:

$$ y=V^Tx,\qquad c=U^Tb $$

于是问题变成:

$$ \min_y \|\Sigma y-c\|^2 $$

也就是说,原来复杂的最小二乘问题:

$$ \min_x \|Ax-b\|^2 $$

被 SVD 变成了:

$$ \min_y \|\Sigma y-c\|^2 $$

而 $\Sigma$ 是对角矩阵,所以这个问题被拆成了一堆互不干扰的一维问题。具体来看,如果:

$$ \Sigma= \begin{bmatrix} \sigma_1 & 0 & 0\\ 0 & \sigma_2 & 0\\ 0 & 0 & \sigma_3 \end{bmatrix} $$

那么:

$$ \Sigma y= \begin{bmatrix} \sigma_1 y_1\\ \sigma_2 y_2\\ \sigma_3 y_3 \end{bmatrix} $$

所以最小二乘变成:

$$ \sigma_i y_i \approx c_i $$

如果 $\sigma_i\neq 0$,最自然的解就是:

$$ y_i=\frac{c_i}{\sigma_i} $$

最后再变回原来的坐标:

$$ x=Vy $$

所以:

$$ x=V\Sigma^+U^Tb $$

其中 $\Sigma^+$ 是把非零奇异值取倒数之后转置得到的矩阵。

于是:

$$ \boxed{x=A^+b} $$

这里的:

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

这个东西是啥?如果您学过相关内容,您就知道——这是伪逆矩阵呀!也叫做Moore-Penrose 伪逆

所以 SVD 和最小二乘最直接的关系是——SVD 给出了最小二乘解的通用公式。

具体问题:词向量

Caution:

这一节用大模型代劳了,懒……orz

Takeaway:

SVD通常用于降维。

词向量是什么?词向量是自然语言处理的关键步骤,将词语转换成向量的形式,那么一个词语的词向量需要满足一个非常直觉的想法——如果两个词的上下文分布相似,那么它们的行向量就相似。

假设我们有很多文本,比如:

I like deep learning
I like machine learning
deep learning is powerful

我们可以先统计每个词和哪些上下文经常一起出现。比如构造一个矩阵:

$$ X \in \mathbb{R}^{|\mathcal V|\times |\mathcal C|} $$

其中:

  • 行:词;
  • 列:上下文;
  • $X_{ij}$:词 $i$ 和上下文 $j$ 的共现强度。

比如:

$$ X_{\text{deep},\text{learning}}=10 $$

表示 deep 和 learning 在窗口里共同出现了 10 次。这个矩阵可能长这样:

$$ X= \begin{bmatrix} & \text{learning} & \text{machine} & \text{powerful} & \cdots\\ \text{deep} & 10 & 1 & 5 & \cdots\\ \text{machine} & 8 & 9 & 1 & \cdots\\ \text{cat} & 0 & 0 & 0 & \cdots\\ \text{dog} & 0 & 0 & 0 & \cdots \end{bmatrix} $$

如果两个词的上下文分布相似,那么它们的行向量就相似。

比如:

  • “cat” 和 “dog” 经常出现在 eat、run、pet、animal 附近;
  • “deep” 和 “machine” 经常出现在 learning、model、neural 附近。

所以原始的词向量其实可以直接看作矩阵 $X$​ 的一行。问题是:这个向量太高维、太稀疏、噪声也多。很多次可能就出现1次,词表可能很大,那么我们可以用 SVD 降维。对矩阵 $X$ 做奇异值分解:

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

其中:

  • $U$:词这一侧的主方向;
  • $\Sigma$:每个方向的重要程度,也就是奇异值;
  • $V$:上下文这一侧的主方向。

然后只保留前 $k$ 个最大的奇异值即可:

$$ X\approx U_k\Sigma_k V_k^T $$

几何角度的理解就是原始情况下,每个词是一个很长的上下文向量。比如:

$$ \text{cat}=[0,3,0,10,1,0,\dots] $$

它们很高维,而且很多位置是 0。SVD 做的事是:

找出这些词向量变化最大的几个方向,然后把词投影到这些方向上。

也就是说:

$$ \text{高维稀疏上下文空间} \longrightarrow \text{低维稠密语义空间} $$

所以 SVD 词向量本质上是:

共现矩阵的低秩语义表示。