本文翻译自 https://www.ams.org/publicoutreach/feature-column/fcarc-svd
仅用于研究及学习
介绍
本文主题 singluar value decomposition (奇异值分解,下文简称 SVD ) 原本应当是本科课程的一部分, 但却总是被忽视。除却相当的直观性,这些分解同样极其拥有应用价值。如,在线电影租借公司 Netflix, 现在就在悬赏:只要能将他们的电影推荐系统的效率提升10%的人,就能获得1百万美元的奖金。令人惊讶的是,这个看起来简单的问题实际上却非常具有挑战性,参与其中的团队现在使用技术相当复杂。而这些技术的核心正是SVD。
线性变换的几何意义
让我们从一些简单的矩阵开始,也就是 2x2 的矩阵。我们的第一个例子就是对角矩阵:
\[M = \begin{bmatrix} 3 & 0\\ 0 & 1 \end{bmatrix} \]几何上讲,我们可以把像这样的矩阵看作通过矩阵乘法将一个平面点 (x, y) 变换到另一个点的变换:
\[\begin{bmatrix} 3 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} 3x \\ y \end{bmatrix} \]这个变换的作用如下所示:平面被横向拉伸了3倍,同时纵向未发生变化
现在让我们来看另一个矩阵
它产生的变换是
这样很难清晰的表述矩阵产生的几何变换。但让我们把图中的格网旋转45°,再看看会怎么样。
啊哈,我们现在可以清晰的发现这个新格网就像前文中被对角矩阵变换的格网一样:在一个方向上被拉伸了3倍。
这种矩阵为对称矩阵的情况是一种特殊情况。如果我们有一个 2x2 的对称矩阵,我们就可以通过旋转格网来使得矩阵变换表现为在两个方向上的拉伸,或者反转。
用更数学严谨化的表述,给定一个对称矩阵M, 我们可以找到一组正交向量 \(\vec{v_i}\) , 使得 \(M \vec{v_i}\) 是 \(\vec{v_i}\) 的系数倍, 即 \(M \vec{v_i} = \lambda \vec{v_i}\) ,其中 \(\lambda\) 为一标量。
几何意义上,这意味着,当向量 \(\vec{v_i}\) 被矩阵 \(M\) 所乘时, 它仅仅进行了拉伸或反转。正是由于这个性质,我们将向量 \(\vec{v_i}\) 称为矩阵 \(M\) 的特征向量, 值 \(\lambda\) 称为特征值。这样我们可以很容易得出另一个结论:一个对称矩阵的对应不同特征值的特征向量彼此正交。
如果我们将格网与对称矩阵的特征向量对齐,那么矩阵就会像对特征向量一样对格网进行拉伸或反转。
我们对这种线性变换的几何表述很简单:格网被在一个方向上拉伸。而对更为一般情况下的矩阵,我们就会想,是否存在一个正交格网,使得矩阵变换后的格网依然正交。
让我们以一个非对称矩阵作为最后一个例子:
\[M = \begin{bmatrix}1 & 1 \\ 0 & 1\end{bmatrix} \]它产生的几何变化可以被称为切变。
我们很容易就能发现沿水平轴方向的向量是矩阵的特征向量之一。但,上图明确表示,沿这个方向对齐的格网在变换后明显不再正交。
尽管如此,让我们先看看将格网旋转30°会怎么样。
我们可以注意到,右边的变换后平行四边形的较小夹角增大了。让我们旋转60°再看看。
嗯,现在右边的格网看起来基本正交了。事实上,当我们旋转格网58.28°时,两边的格网就都正交了。
奇异值分解
对 2x2 矩阵的奇异值分解的几何意义为:对任意 2x2 矩阵,我们可以找到一个正交的格网,使得变换后的格网依然正交。
用向量表示为:选择合适的正交单位向量 \(\vec{v_1}\) 和 \(\vec{v_2}\), 向量 \(M \vec{v_1}\) 和 \(M \vec{v_2}\) 依然正交。
我们用单位向量 \(\vec{u_1}\) 和 \(\vec{u_2}\) 来表示 \(M\vec{v_1}\) 和 \(M\vec{v_2}\) 的方向。\(\sigma_1\) 和 \(\sigma_2\) 表示 \(M\vec{v_1}\) 和 \(M\vec{v_2}\) 的长度,也是格网在特定方向上的拉伸倍数。这些数(\(\sigma_1\) 和 \(\sigma_2\))被称为 \(M\) 的奇异值。
因此,我们有
\[M \vec{v_1} = \sigma_1 \vec{u_1} \]\[M \vec{v_2} = \sigma_2 \vec{u_2} \]我们现在可以简单描述矩阵 \(M\) 如何作用于向量 \(x\)
\[\vec{x} = (\vec{v_1} \cdot \vec{x}) \vec{v_1} + (\vec{v_2} \cdot \vec{x}) \vec{v_2} \]这表明:
\[M \vec{x} = (\vec{v_1} \cdot \vec{x})M\vec{v_1} + (\vec{v_2} \cdot \vec{x})M\vec{v_2} \]\[M \vec{x} = (\vec{v_1} \cdot \vec{x})\sigma_1\vec{u_1} + (\vec{v_2} \cdot \vec{x})\sigma_2\vec{u_2} \]即:
\[M \vec{x} = \vec{u_1}\sigma_1\vec{v_1^T}\vec{x} + \vec{u_2}\sigma_2\vec{v_2^T}\vec{x} \]\[M = \vec{u_1}\sigma_1\vec{v_1^T} + \vec{u_2}\sigma_2\vec{v_2^T} \]通常写作:
\[M = U \Sigma V^T \]上述说明了如何将一个矩阵分解为三个矩阵的乘积,其中 \(V\) 为域内正交基,\(\Sigma\) 为特征值对角阵, \(U\)为变换后域内正交基。
如何找到矩阵的奇异分解
矩阵奇异分解的强大之处在于它可以用于任何矩阵。但如何我们要怎么去分解呢?让我们看看前面的例子,向域内加入单位圆,而它的变换后对应域内变成了椭圆,其长、短半轴分别规定了新的正交格网。
换句话说,就是方程 \(|M\vec{x}|\) 在单元圆中在 \(\vec{v_1}\) 处取得极大值,在 \(\vec{v_2}\) 处取得极小值。这就将问题降低到了标准的数学计算,我们只需要找到方程在单位圆上的极值。而这个方程的驻点正是在矩阵 \(M^TM\) 的特征向量上。而这个矩阵又是对称的,那么它不同特征值的特征向量是正交的。这就得出了 $\vec{v_i} 的取值。
奇异值可以由 \(\sigma_i = | M\vec{v_i} |\) 求得, 向量 \(\vec{u_i}\) 为 \(M\vec{v_i}\) 方向上的特征向量。但是,为什么向量组 \(\vec{u_i}\) 两两正交呢?
为了证明,我们先假定 \(\sigma_i\) 和 \(\sigma_j\) 为奇异值。则有
\[M \vec{v_i} = \sigma_i \vec{u_i} \]\[M \vec{v_j} = \sigma_j \vec{u_j} \]让我们先观察这个式子 \(M \vec{v_i} \cdot M \vec{v_j}\) ,为了方便起见,我们先假定奇异值均为非零值。一方面,前式显然为0,因为 \(\vec{v_i}\) 彼此正交。
\[M \vec{v_i} \cdot M \vec{v_j} = \vec{v_i^T}M^TM\vec{v_j} = \lambda_j \vec{v_i^T} \vec{v_j} = 0 \]另一方面,我们有
\[M \vec{v_i} \cdot M \vec{v_j} = \sigma_i \vec{u_i} \cdot \sigma_j \vec{u_j} \]因此,\(\vec{u_i}\) 彼此正交。
另一个例子
现在让我们来看这个奇异矩阵
\[M = \begin{bmatrix} 1 & 1 \\ 2 & 2 \end{bmatrix} \]该矩阵的几何意义如下:
在这种情况下,矩阵的第二个奇异值为0,此时我们可以认为 \(M\) 的分解为:
换句话说,如果某些奇异值为0, 那么它相关的向量不会在矩阵分解中出现。此时,我们可以发现,矩阵的秩就是非零奇异值的数量。
应用
译者注:此处的应用部分举例均较为常见, 如数据压缩、噪声过滤,数据分析等,故不对此部分进行翻译。若对此部分感兴趣,请参考原文。
略
总结
如文首所言, 奇异值分解应当作为本科主要线性代数课程的主要部分之一。并且,由于其及其简单的几何解释,奇异值分解可以非常高效的将线性代数理论付诸实践。但大多数时候,这份重要性在本科线性代数中被忽视了。
这篇文章应该多少给大家留下一些印象。我旨在提供奇异值分解内核心概念的直观理解,并举例表明如何在实践中进行应用。更加深入的学习应该会变得简单些。
标签:格网,SVD,矩阵,正交,分解,vec,bmatrix,几何,sigma From: https://www.cnblogs.com/Keaton/p/18609491