seegongsik
我的单词本
工程数学

SVD 就是旋转·拉伸·旋转

任何矩阵都是旋转·沿轴拉伸·旋转三步,单位圆变成椭圆,奇异值就是它的半径

一个矩阵看起来再乱,揭开来其实只是三个干净的动作:先转一下(Vᵀ),沿两条轴各自拉伸(Σ),再转一下(U)。把整个单位圆喂进去,出来的是一个工整的椭圆,而这椭圆半轴的长度正是奇异值。最大的那一个奇异值,几乎扛起了椭圆形状的全部。图像压缩和 PCA 都立在这一个事实上。在第一个组件里一步步走过这些动作,看一个圆如何变成椭圆。

用按钮一步步走过各阶段。阶段0只是单位圆,圆上标着右奇异向量 v1、v2。阶段1的 Vᵀ 把圆转一下,但圆还是圆,形状不变;只是 v1、v2 正好落到 x 轴和 y 轴上。阶段2的 Σ 只沿这两条轴拉伸,做出一个工整的椭圆,x 方向半轴为 σ1,y 方向为 σ2。阶段3的 U 再把这椭圆转一次,成为倾斜的最终形状,也就是 A 的像,它的两条半轴是 σ1·u1 和 σ2·u2。旋转、拉伸、旋转,这三个动作能造出任何矩阵。

这次把旋转全部去掉,只留下拉伸(U = V = I)。滑块 σ1 决定单位圆沿 x 轴拉多远,σ2 沿 y 轴拉多远,这两个值就成了椭圆的半轴长度。奇异值说到底就是那条轴被拉伸了几倍。调大 σ1,椭圆变宽;调小 σ2,它在竖直方向变扁。把其中一个滑到接近 0,椭圆就沿那条轴彻底塌成一条线段。那一刻矩阵的秩从 2 掉到 1,并弹出警告。

现在把三个零件抓在自己手里。滑块设定第一个旋转角(V)、两个拉伸倍数(σ1、σ2)和最后一个旋转角(U),它们合起来就是 A = U Σ Vᵀ。画面同时展示网格如何变形、单位圆走向哪个椭圆,下方读数板显示这个 A 的四个分量。把角度和倍数转来转去,你会发现矩阵的数字看起来再任意,归根结底都来自两次干净的旋转和一次轴向拉伸。任何 2×2 矩阵都逃不开这"旋转 → 轴拉伸 → 旋转"的分解。

这个分解里有两组方向:进去的 v1、v2(右奇异向量)和出来的 u1、u2(左奇异向量)。用开关选一对。把 v1 送进 A,出来的正好是 σ1·u1;送 v2 进去,出来 σ2·u2。也就是说,输入方向 v 变成输出方向 u,长度被乘上它的奇异值。单位圆上的蓝箭头是输入 v,椭圆上的箭头是它的输出。V 的方向进去,U 的方向出来,大小由奇异值决定。这就是 SVD 的一句话总结。

最后,看看椭圆的形状是否真的几乎全装在一个大奇异值里。开关的秩2是完整的 A,也就是整个倾斜的椭圆。切到秩1,只留下 σ1·u1·v1ᵀ 这一片,于是椭圆完全落到它最长的轴(长轴)上,成为长度 σ1 的线段。你把小的 σ2 那片扔掉了。画面以百分比显示那一大片所占的能量比 σ1²/(σ1²+σ2²)。通常仅这一片就保住了形状的大部分。只留最大的奇异值,形状仍几乎完整,这正是压缩和 PCA 的核心想法。

实际应用SVD 把每个矩阵分成 A = U Σ Vᵀ,也就是旋转 → 沿轴拉伸 → 旋转。送进单位圆,出来一个椭圆,其半轴长度就是奇异值 σ1 ≥ σ2。Σ 是沿各轴拉伸 σ 倍的纯拉伸,U 和 V 是纯旋转。右奇异向量 v 是输入方向,左奇异向量 u 是输出方向,所以 A·vi = σi·ui 成立。当某个 σ 为 0,那条轴就死了,秩下降;只保留最大 σ 的低秩近似能留住形状的大部分。图像压缩、PCA、推荐系统、去噪都从这一个事实流出。再任意的数据,归根结底也是旋转、拉伸、旋转。
工程数学
如果有帮助,请支持我们