SVD 背后的直觉是什么?

机器算法验证 主成分分析 矩阵 直觉 线性代数 svd
2022-02-07 00:03:53

我已阅读有关奇异值分解(SVD)的信息。在几乎所有教科书中都提到它将矩阵分解为三个具有给定规范的矩阵。

但是以这种形式拆分矩阵背后的直觉是什么?PCA 和其他降维算法是直观的,因为算法具有良好的可视化特性,但对于 SVD,情况并非如此。

3个回答

将矩阵$X$ (real, $n\times p$ ) 的 SVD 写为 $$ X = UDV^T $$ 其中$U$$n\times p$$D$是对角线$p\times p $$V^T$$p\times p$根据矩阵$U$$V$的列,我们可以写成 $X=\sum_{i=1}^p d_i u_i v_i^T$这表明$X$写为$p$ rank-1 矩阵的总和。rank-1 矩阵是什么样的?让我们来看看: $$ \begin{pmatrix} 1 \\ 2 \\ 3 \end{pmatrix} \begin{pmatrix} 4 & 5 & 6 \end{pmatrix} = \begin{pmatrix} 4 & 5 & 6 \\ 8 & 10 & 12 \\ 12 & 15 & 18 \end{pmatrix} $$行成比例,列成比例。

现在将$X$视为包含黑白图像的灰度值,矩阵中的每个条目代表一个像素。例如下面的狒狒图片:

狒狒的形象

然后将此图像读入 R 并获取结果结构的矩阵部分,可能使用库pixmap


如果您想要关于如何重现结果的分步指南,您可以在此处找到代码


计算 SVD:

    baboon.svd  <-  svd(bab) # May take some time

我们怎么能想到这个?我们得到$512\times 512$的狒狒图像,表示为$512$简单图像的总和,每个图像只显示垂直和水平结构,即它是一个垂直和水平条纹的图像!因此,狒狒的 SVD 将狒狒图像表示为512 美元简单图像的叠加,每个图像仅显示水平/垂直条纹。让我们用1 美元20 美元的分量计算图像的低秩重建:

    baboon.1  <-  sweep(baboon.svd$u[, 1, drop=FALSE], 2, 
                  baboon.svd$d[1], "*") %*%
                       t(baboon.svd$v[, 1, drop=FALSE])
    
    baboon.20 <-  sweep(baboon.svd$u[, 1:20, drop=FALSE], 2, 
                baboon.svd$d[1:20], "*") %*%
                       t(baboon.svd$v[ , 1:20, drop=FALSE])

产生以下两个图像:

狒狒图像的rank 1和rank 20重建

在左侧,我们可以很容易地看到 rank-1 图像中的垂直/水平条纹。

最后让我们看看“残差图像”,即从具有最低奇异值的$20$ rank-one图像重建的图像(如上,代码未显示) 。这里是:

来自 20 级狒狒重建的残差图像

这很有趣:我们看到原始图像中难以表示为垂直/水平线叠加的部分,主要是斜鼻毛和一些纹理,还有眼睛!

$A$是一个实数$m \times n$矩阵。为简单起见,我假设$m \geq n$很自然地要问$v$在哪个方向$A$的影响最大(或最具爆发力,或最放大的力量)。答案是 \begin{align} \tag{1}v_1 = \,\,& \arg \max_{v \in \mathbb R^n} \quad \| A v \|_2 \\ & \text{subject to } \, \|v\|_2 = 1. \end{align} 一个自然的后续问题是,在$v_1$之后,下一个最具爆炸性的方向是什么为$A$答案是 \begin{对齐} v_2 = \,\,& \arg \max_{v \in \mathbb R^n} \quad \| A v \|_2 \\ & \text{服从} \,\langle v_1, v \rangle = 0, \\ & \qquad \qquad \, \, \, \, \|v\|_2 = 1。 \end{align}像这样继续下去,我们得到$\mathbb R^n$ 正交基$v_1, \ldots, v_n $ 。$\mathbb R^n$的这个特殊基础告诉我们在某种意义上对于理解$A$最重要的方向。

$\sigma_i = \|A v_i \|_2$(所以$\sigma_i$量化了$A$$v_i$方向上的爆发力)。假设单位向量$u_i$被定义为 $$ \tag{2} A v_i = \sigma_i u_i \quad \text{for } i = 1, \ldots, n。$$ 等式 (2) 可以使用矩阵符号简明地表示为 $$ \tag{3} AV = U \Sigma, $$ 其中$V$$n \times n$矩阵,其第$i$列是$v_i$ , $U$$m \times n$矩阵,其第$i$列是$u_i$,并且$\Sigma$$n \times n$对角矩阵,其第$i$个对角线条目是$\sigma_i$矩阵$V$是正交的,所以我们可以将(3)的两边乘以$V^T$,得到 $$ A = U \Sigma V^T。$$ 看起来我们现在几乎是零努力地推导出了$A$的 SVD。到目前为止,没有一个步骤是困难的。但是,图中缺少一个关键部分——我们还不知道$U$的列是成对正交的。

这是关键的事实,缺失的部分:原来$A v_1$与$A v_2$正交$$ \tag{4} \langle A v_1, A v_2 \rangle = 0。$$ 我声称如果这不是真的,那么$v_1$将不是问题 (1) 的最佳选择。事实上,如果 (4) 不满足,那么可以通过在$v_2$方向上稍微扰动它来改进 $v_1 $ 。

假设(对于矛盾)(4)不满足。如果$v_1$在正交方向$v_2$上受到轻微扰动,则$v_1$的范数不会改变(或者至少,$v_1$的范数变化可以忽略不计)。当我在地球表面行走时,我与地球中心的距离不会改变。但是,当$v_1$在$v_2$方向上受到扰动时,向量$A v_1$非正交方向$A v_2$上受到扰动,因此$A v_1$的范数变化不可忽略的. 的规范$A v_1$可以增加不可忽略的数量。这意味着$v_1$对于问题 (1) 不是最优的,这是一个矛盾。我喜欢这个论点,因为:1)直觉非常清晰;2)直觉可以直接转化为严谨的证明。

一个类似的论点表明$A v_3$与$A v_1$$A v_2$都正交,依此类推。向量$A v_1, \ldots, A v_n$是成对正交的。这意味着单位向量$u_1,\ldots,u_n$可以选择成对正交,也就是说上面的矩阵$U$是一个正交矩阵。这完成了我们对 SVD 的发现。


要将上述直观论证转化为严格证明,我们必须面对这样一个事实:如果$v_1$在$v_2$方向上受到扰动,则扰动向量 $$ \tilde v_1 = v_1 + \epsilon v_2 $$ 并不是真正的单位向量。(其范数为$\sqrt{1 + \epsilon^2}$。)为了获得严格的证明,定义 $$ \bar v_1(\epsilon) = \sqrt{1 - \epsilon^2} v_1 + \epsilon v_2 . $$ 向量$\bar v_1(\epsilon)$是真正的单位向量。但正如您可以轻松展示的那样,如果 (4) 不满足,那么对于足够小的$\epsilon$值,我们有 $$ f(\epsilon) = \| 一个 \bar v_1(\epsilon) \|_2^2 > \| 一个 v_1 \|_2^2 $$ (假设$\epsilon$选择正确)。要显示这一点,只需检查$f'(0) \neq 0$这意味着$v_1$对于问题 (1) 不是最优的,这是一个矛盾。

(顺便说一下,我建议在这里阅读乔楚元对 SVD 的解释。特别是看一下我们上面讨论的“Key lemma #1”。正如乔楚所说,key lemma #1 是“技术核心”奇异值分解”。)

每天花一个小时观看本次讲座。

这家伙超级直截了当;重要的是不要跳过任何一个,因为它们最终都会结合在一起。即使一开始看起来有点慢,他也在努力确定一个临界点,他做到了!

我会为你总结一下,而不是只给你每个人都做的三个矩阵(因为当我阅读其他描述时,这让我感到困惑)。这些矩阵是从哪里来的,为什么我们要这样设置它?讲座一针见血!每个矩阵(在永恒的历史中)都可以从具有相同维度的基本矩阵构造,然后对其进行旋转和拉伸(这是线性代数的基本定理)。人们抛出的这三个矩阵中的每一个都代表一个初始矩阵 (U)、一个缩放矩阵 (sigma) 和一个旋转矩阵 (V)。

缩放矩阵向您显示哪些旋转向量占主导地位,这些称为奇异值。分解求解 U、sigma 和 V。