新闻详情

新闻详情

首页 / 资讯中心 / 详情

单位圆到椭圆:用几何直觉彻底看懂SVD奇异值分解

发布时间:2026/9/26 7:14:34来源:尧图网络
单位圆到椭圆:用几何直觉彻底看懂SVD奇异值分解
第一次接触SVD奇异值分解的时候我和大多数人的反应一样把公式 A UΣVᵀ 背下来会算特征值甚至能直接调 numpy.linalg.svd可一旦有人问这玩意儿到底在干什么我只能支支吾吾说一句就是矩阵分解啊。这个状态持续了很久直到我把单位圆画出来让矩阵作用在它上面才真正看懂SVD在讲什么。SVD本质上不是一个代数技巧而是一台空间变换的拆解手术任意矩阵对空间的改变都可以拆成一次旋转、一次沿坐标轴的拉伸、再一次旋转可能附带反射。这篇文章就是带你用这个几何视角重新认识SVD适合正在学线性代数、刚接触机器学习、或者已经会用SVD但想补上几何直觉的读者。1. 先看一个事实矩阵本来就是空间变换1.1 从一个具体矩阵开始很多教程一上来就写 A UΣVᵀ把公式砸在脸上然后开始讲怎么求特征值。但我想先说一件更基本的事矩阵不是一堆数字的表格矩阵是一条指令——它把空间里的每个点搬运到另一个位置。比如下面这个 2×2 矩阵A [[2, 2], [-1, 1]]它把一个二维点 (x, y) 变成 (2x 2y, -x y)。取几个点试一试e₁ (1, 0) 被送到 (2, -1)e₂ (0, 1) 被送到 (2, 1)(0.6, 0.8) 被送到 (2.8, 0.2)可以看到基向量被搬走了一般的点也被搬走了。而且这个搬运有很强的结构直线还是直线平行线还是平行线原点不动。这就是线性变换。SVD解决的核心问题是给定这样一个变换找出它最主要的方向和在这些方向上分别放大了多少倍。单位圆恰好是最好的探针因为一个简单的线性变换会把圆变成椭圆而椭圆的两条轴完整地记录了变换的性格。1.2 为什么是旋转—拉伸—旋转先给出几何结论后面逐步验证任意实数矩阵的作用效果都等价于先做一个正交变换旋转可能加反射再沿坐标轴分别拉伸不同的倍数最后再做一次正交变换。写成公式就是 A UΣVᵀ。这个结论初看很反直觉矩阵明明可以产生剪切比如把正方形推成平行四边形为什么说它本质上只是旋转加拉伸关键在于顺序。剪切看起来是斜着推的变换但如果你先把整个空间旋转到合适的角度剪切就变成了沿坐标轴的拉伸——这正是 Vᵀ 和 U 的前后两次旋转在干的事。SVD的价值就是自动找到这两个合适的旋转角度。2. 用单位圆做实验圆变成了椭圆2.1 椭圆的两条轴就是问题的答案把单位圆上的所有点拿出来用 A [[2, 2], [-1, 1]] 逐一变换整个圆会变成一个椭圆。为什么一定是椭圆而不是奇怪形状因为线性变换具有叠加性而圆上任意一点都可以写成两个互相垂直方向的组合。更本质的说法是这样对任意单位向量 v变换后长度 ||Av|| 就代表这个方向被放大或缩小的倍数。单位圆上存在两个特殊方向一个让 ||Av|| 取最大值一个取最小值它们恰好互相垂直。变换后这两个方向变成了椭圆的半长轴和半短轴它们也恰好互相垂直。我一直觉得 SVD 最优雅的地方就在这椭圆的长短轴一定是垂直的所以任何线性变换的最拉伸方向和最压缩方向天然正交。这保证了 U 和 V 的列向量可以构成标准正交基整个分解才有干净的结构。对 A [[2, 2], [-1, 1]]眼睛尖的读者已经能看出方向 45°即 (0.707, 0.707)被变换到 (2.828, 0)长度放大了 2.828 倍完全落到了 x 轴上方向 135°即 (-0.707, 0.707)被变换到 (0, 1.414)长度放大了 1.414 倍完全落到了 y 轴上这两个输入方向就是 V 的列向量两个输出方向就是 U 的列向量两个放大倍数就是奇异值。SVD 的全部信息其实都藏在这一个椭圆里。2.2 用代码把实验做出来光靠口头描述不过瘾直接上代码。只要环境里有 numpy 和 matplotlib就能在五分钟内亲眼看一遍圆变椭圆的过程import numpy as np import matplotlib.pyplot as plt A np.array([[2.0, 2.0], [-1.0, 1.0]]) theta np.linspace(0, 2 * np.pi, 400) circle np.c_[np.cos(theta), np.sin(theta)] ellipse circle A.T U, s, Vt np.linalg.svd(A) fig, axes plt.subplots(1, 2, figsize(10, 4)) axes[0].plot(circle[:, 0], circle[:, 1], color#333333) axes[0].axis(equal) axes[0].grid(True) axes[0].set_title(单位圆上的一组点) axes[1].plot(ellipse[:, 0], ellipse[:, 1], color#c0392b) axes[1].axis(equal) axes[1].grid(True) axes[1].set_title(A 作用之后的椭圆) plt.show() print(U , np.round(U, 4)) print(s , np.round(s, 4)) print(Vt , np.round(Vt, 4))跑出来的奇异值约是 2.828 和 1.414也就是半长轴和半短轴的长度。U 的列指向椭圆两轴方向Vᵀ 的行即 V 的列对应变换前被映射到两轴上的输入方向。整张图一旦画出来SVD 的三个因子各管什么立刻清清楚楚。这里要提醒一句np.linalg.svd返回的 U、V 列向量允许整体翻符号不同版本、不同库可能给你符号不同的结果但几何意义完全一致别被数值上的负号吓到。2.3 一个小表格把对应关系钉死为了看得更细我把单位圆上几个有代表性的方向列出来输入方向单位向量输入角度变换后的向量输出角度长度放大倍数(0.707, 0.707)45°(2.828, 0)0°2.828(-0.707, 0.707)135°(0, 1.414)90°1.414(1, 0)0°(2, -1)-26.6°2.236(0, 1)90°(2, 1)26.6°2.236注意最后两行x 轴和 y 轴被 A 作用后既不落在坐标轴上长度也不是整数倍。只有当输入恰好对准 v₁ 和 v₂ 时输出才会精确落在椭圆轴上——这就是为什么 SVD 一定要先做 Vᵀ把输入空间校准一下。3. 分解的每一步在做什么怎么找出旋转和拉伸3.1 第一步把最长放大方向变成优化问题既然要找出让 ||Av|| 最大的 v那就在单位圆上做优化max ||Av||² max vᵀ(AᵀA)v条件是 ||v|| 1AᵀA 是个对称矩阵而对称矩阵有个极好的性质它可以被正交对角化特征向量两两正交。所以这个问题瞬间从盲目搜索所有方向变成了求对称矩阵的特征分解——这就是为什么教材总是在 SVD 之前先讲 AᵀA 和 AAᵀ它们才是 SVD 真正的幕后推手。对我们的例子AᵀA [[5, 3], [3, 5]]它有两个特征值 8 和 2对应的特征向量分别是 (0.707, 0.707) 和 (-0.707, 0.707)。奇异值就是特征值的平方根√8 ≈ 2.828 和 √2 ≈ 1.414。这两个特征向量合起来构成 V 的列。这个步骤的几何含义非常朴素AᵀA 描述的是每个输入方向被拉伸了多少的平方它比 A 更容易分析因为它是个对称矩阵总有干干净净的正交基。A 自己可能旋转得乱七八糟但 AᵀA 把旋转抵消了只剩下拉伸的信息。3.2 第二步让输出方向归位凑出 U有了 v₁、v₂ 和 σ₁、σ₂输出方向 u₁、u₂ 不需要猜直接算u_i A v_i / σ_i对 v₁ (0.707, 0.707)A v₁ (2.828, 0)除以 σ₁ 2.828 得 u₁ (1, 0)对 v₂ (-0.707, 0.707)A v₂ (0, 1.414)除以 σ₂ 1.414 得 u₂ (0, 1)。于是这个例子的 SVD 特别清爽U [[1, 0], [0, 1]]Σ [[2.828, 0], [0, 1.414]]V [[0.707, -0.707], [0.707, 0.707]]整个变换 A 可以这样读先由 Vᵀ 把空间旋转 -45°让原来 45° 和 135° 的特殊方向对齐到坐标轴然后 Σ 沿 x 轴拉伸 2.828 倍、沿 y 轴拉伸 1.414 倍最后 U 是单位矩阵啥都不用做。所以这个矩阵本质上是旋转 -45° 之后沿标准轴拉伸。这里有一个经常被忽略的阅读顺序矩阵乘法从右往左读。A x U(Σ(Vᵀx))也就是先 Vᵀ、再 Σ、最后 U。很多人地铁上刷到 SVD 觉得混乱多半是没养成这个从右往左读的习惯。3.3 为什么顺序不能反过来有人可能会问既然是旋转、拉伸、旋转那能不能写成 UΣVᵀ 旋转·拉伸·旋转顺序有什么讲究设想一下如果先把输入旋转再拉伸最后再旋转那么拉伸这一脚必须作用在已经被旋转到合适位置的坐标系上。这个合适位置就是 Vᵀ 干的活拉伸完成之后还得把结果摆回输出空间的自然坐标这是 U 干的活。如果你把顺序换成先 U 后 Σ 再 Vᵀ等于把拉伸用在了错误的方向上得到的会是另一个矩阵。用生活化的类比你要把一台横着放的投影仪摆正。先得把投影仪本身转到标准朝向下Vᵀ然后调节放大倍数Σ再整体搬到墙上合适的位置U。三步顺序错一步画面就是歪的。矩阵乘法不满足交换律U 和 V 不相等的时候尤其明显。4. U、Σ、V 各自的几何性格4.1 正交矩阵只旋转不拉伸U 和 Vᵀ 都是正交矩阵正交矩阵的列向量互相垂直且长度为 1。两个正交矩阵夹着一个对角矩阵这件事本身就在说所有放大缩小的戏法都发生在中间的 Σ 里两边的正交矩阵只负责转动不负责变形。在二维里正交矩阵的行列式要么是 1纯旋转要么是 -1旋转加反射。反射来自哪里来自坐标轴方向的翻转比如上面例子中如果把 v₂ 取成 (0.707, -0.707) 而不是 (-0.707, 0.707)U 里对应列也会跟着翻U 的行列式就会变成 -1。几何上这没什么大不了的无非是想清楚哪条轴朝正哪条轴朝负的问题。4.2 对角矩阵沿坐标轴的独立拉伸Σ 每个对角线上的 σ_i 都是非负的它的几何语义再直白不过σ 1这个方向被放大σ 1这个方向被压缩σ 1这个方向原封不动σ 0这个方向的整个维度被压扁消失当 σ 0 出现圆就变不成椭圆而是变成线段甚至一个点。比如 A [[1, 2], [2, 4]]它是一个秩为 1 的矩阵奇异值为 5 和 0单位圆被 A 一作用整个塌缩成一条长度为 10 的线段。这种维度塌缩是 SVD 优于特征分解的地方特征分解遇到非方阵或秩亏矩阵经常束手无策SVD 则照常工作把零奇异值明明白白地摆在 Σ 里。4.3 符号的自由度和退化情形计算 SVD 时你会发现答案往往不唯一。最常见的原因是符号把 V 的第 i 列和 U 的第 i 列同时取负Σ 不变乘积 UΣVᵀ 还是原来的 A。这对应几何上椭圆轴本来就没有正方向朝左朝右是同一根轴。比符号更微妙的是奇异值相等的情况。当 σ₁ σ₂椭圆退化成圆那么长轴和短轴根本不存在此时任何一组正交方向都可以充当 V 和 U 的列。数据科学里当数据在某个子空间内呈各向同性分布时主成分方向就会出现这种不确定性这不是 bug是数据本身在告诉你这些方向没有谁比谁更重要。5. SVD和特征分解的关系什么时候它俩长得一样5.1 对称矩阵SVD自动退化成特征分解对称矩阵有一个特殊待遇AᵀA A²所以 SVD 中的 V 直接取 A 的特征向量奇异值是特征值的绝对值U 的列和 V 的列最多差个符号。拿 A [[2, 1], [1, 2]] 举例它的特征值是 3 和 1特征向量是 (0.707, 0.707) 和 (-0.707, 0.707)。因为 A 是正定的它的 SVD 正好是 U VΣ diag(3, 1)跟特征分解完全一致。如果 A 是对称但非正定比如 A [[1, 0], [0, -2]]情况就微妙一点SVD 的奇异值是 1 和 2取绝对值而特征值仍是 1 和 -2。负号被挤到 U 或 V 的某一列里去了。很多人做 PCA 时遇到协方差矩阵天然是半正定的所以这一节的关键结论可以放心用对半正定矩阵SVD 就是特征分解。5.2 正交矩阵、条件数和行列式的统一视角A 是正交矩阵时所有奇异值都等于 1Σ I于是 A UVᵀ。两个正交矩阵相乘还是正交矩阵这解释了为什么正交矩阵在任何方向上都不改变长度。更一般的关系是奇异值是 AᵀA 特征值的平方根特征值是 A 自身相对某个不变方向的伸缩系数行列式的绝对值等于所有奇异值的乘积条件数 κ σ_max / σ_min其中条件数是个特别值得记住的量。几何上σ_max / σ_min 就是椭圆长轴和短轴的比值它刻画变换把圆捏得多扁。解线性方程组 Ax b 时条件数越大b 上哪怕只有一点误差解的方向都会被剧烈放大。所以椭圆越扁这个矩阵在数值上就越不健康。我在调最小二乘问题时会先打印奇异值看一眼如果最小奇异值比最大奇异值小了好几个数量级我就会意识到问题本身对噪声极度敏感。下面这张表把常见的几个矩阵身份和 SVD 对应关系整理出来矩阵类型特征值奇异值SVD 与特征分解的关系对称正定全为正等于特征值U V两者完全一致对称非正定有正有负特征值的绝对值U、V 差符号正交矩阵模长 1全部为 1Σ IA UVᵀ一般非对称矩阵不一定实非负数两者大概率不同秩亏矩阵可能缺多个出现 0SVD 依然完整输出5.3 特征向量和奇异向量根本不是一回事我见过太多人把 SVD 理解成更稳的特征分解然后在非对称矩阵上翻了车。两者的几何问题不一样特征分解寻找的是变换后仍落在同一条直线上的方向即只有长度变化、方向不变的方向这叫不变直线SVD 寻找的是变换前互相垂直、变换后也互相垂直且恰好被拉伸到椭圆轴上的成对方向。对对称矩阵这两种问题的答案恰好重合但对非对称矩阵它们各说各话。一个直观的例子就是剪切矩阵 A [[1, 1], [0, 1]]。它的特征值只有 1双重特征向量只有一个方向 (1, 0)几何上对应除了 x 轴方向几乎不动其他方向全被扭曲。但它的 SVD 奇异值是约 1.618 和 0.618对应的 v、u 方向都斜得很这说明从圆变椭圆的角度看剪切其实也能理解为斜方向的拉伸与压缩。两种描述都对只是回答了不同的问题。6. 几何直觉在真实场景中的用处6.1 主成分分析给数据云块拟合椭球PCA 和 SVD 的关系是机器学习入门最经典的桥段。数据矩阵 X 经过中心化后每列减去均值对它做 SVDX X - X.mean(axis0) U, s, Vt np.linalg.svd(X, full_matricesFalse) # Vt 的行就是主成分方向 # X Vt.T 得到数据在新坐标系下的坐标几何上你做的事情是把数据点组成的云块近似看成一个椭球然后问这个椭球的长轴朝哪儿。SVD 的 V 列直接给出这些轴的方向奇异值给出每个方向上的胖瘦程度。协方差矩阵的传递关系是 XᵀX VΣ²Vᵀ所以用 SVD 求主成分等于先旋转对齐、再数每个方向上的方差这个流程和单位圆实验是同构的——只是单位圆换成了数据中心周围的云块。6.2 低秩近似与图像压缩把次要轴直接砍掉一旦接受了奇异值椭圆半轴长度这个设定低秩近似的原理就非常自然既然引入某个方向只贡献一点点的拉伸那把它去掉对整个变换的影响就最小。Eckart-Young 定理说的正是这件事在所有秩为 k 的矩阵中和 A 的 Frobenius 距离最小的就是保留前 k 个奇异值、把后面的置零得到的 UₖΣₖVₖᵀ。几何上等于把椭圆的长轴留下短轴抹平图像的信息量立刻降下来。实际操作上一张 m×n 的灰度图本来要存 m×n 个数截断到前 k 个奇异值后只需要存 U 的 m×k、Σ 的 k、Vᵀ 的 k×n一共 k(m n 1) 个数。m n 1000 的图k 取 50存储量从 100 万降到约 10 万十倍压缩起步而且人眼看不出明显区别。背后其实就是自然图像的有效椭圆非常扁真正重要的方向没几个。6.3 伪逆和最小二乘逆着几何步骤走回去线性方程组 Ax b 没有精确解时我们想找误差最小的解几何上就是找离 Ax 最近的向量。SVD 给出了一条极其清晰的路线先让 b 对准 U 的各个方向乘 Uᵀ沿着奇异值不为零的方向做逆向拉伸除以 σ奇异值为零的方向直接忽略因为它对应的输入方向对结果没有影响最后用 V 把结果换回原始坐标。整个过程写成 A⁺ VΣ⁺Uᵀ其中 Σ⁺ 的对角元是 1/σ。这样哪怕 A 是圆被压扁成线段的秩亏矩阵伪逆也能给你一个合理的解它不会试图恢复那些已经被压扁维度的信息因为那些信息在变换过程中已经彻底丢失了。条件数在这里的意义就体现出来了——如果有个 σ 特别小1/σ 就会特别大待会儿你求出来的解会对 b 的微小误差极其敏感这时就该用正则化去压制它。7. 常见误区与建立直觉的练习方法7.1 四个高频误区误区真相Σ 对角线是 A 的特征值是 AᵀA 特征值的平方根只在对称半正定时才等于U 和 V 一定相等只有对称矩阵进一步要求正定才成立奇异值大一定代表方向重要对压缩是对求逆反而不是小奇异值在伪逆中反而要小心记住 A UΣVᵀ 就算学会 SVD公式只是骨架三个因子各自在空间里做了什么才是血肉第一个误区最致命。很多人用np.linalg.eig求 A 的特征值然后直接拿去当奇异值这在非对称矩阵上会得到完全错误的结果。任何一本认真讲 SVD 的书都会强调先算 AᵀA再开根号。但一旦从几何角度看你就永远不会犯这个错——奇异值是椭圆半轴的长度它必须是非负实数特征值却没有这个限制。7.2 三阶梯练习法理论说得再多不如自己动手过一遍。我给的建议是三级台阶按次序走。第一级手算。选一个 2×2 矩阵比如本文的 A手动求 AᵀA、特征值、特征向量然后组装出 U、Σ、V最后验证 UΣVᵀ 还原 A。这一步不需要任何软件纸笔就够重点是把右到左的读法学扎实。第二级可视化。用刚才的代码跑一遍把单位圆、椭圆、v₁、v₂、u₁、u₂ 都画在同一张图上标出它们之间的映射关系。眼睛看到椭圆长轴那一瞬间很多困惑会自动消失。第三级实战。拿一张小图片写一个函数保留前 k 个奇异值并重建k 从 1 到 50 都试一遍观察压缩率与视觉失真的权衡。再拿一份公开数据集做一次 PCA把前两个主成分方向画出来和 SVD 的 V 列对照一下。两轮下来SVD 就从抽象定理变成了顺手工具。7.3 把单位圆思维推广到其它分解我自己还有一个习惯每学一个新的矩阵分解第一件事就是问它的单位圆实验长什么样。特征分解在回答不变方向QR 分解在回答正交化过程极分解在拆旋转和拉伸——它们都是从不同角度描述同一个几何故事。这个习惯对我的帮助比背一百个定理都大。如果你问我怎样才算真正懂了 SVD我的标准很简单别人随手给你一个矩阵你不需要展开计算就能在脑子里看到那个圆是怎么被捏成椭圆的长轴朝哪、短轴朝哪、哪些原始方向被送到轴上。到这一步SVD 对你而言就不再是一个需要背诵的公式而是一个顺手的思维工具。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

课堂笔记全流程拆解:从记录到复盘的高效笔记法 2026/9/26 7:54:23

课堂笔记全流程拆解:从记录到复盘的高效笔记法

今天整理笔记的时候,翻到了2026年1月8日那天的课堂记录,仔细读完发现那天讲的东西其实特别系统,正好把“怎么记笔记、怎么用笔记”这条线从头到尾捋了一遍。很多同学总觉得课堂笔记就是把老师说的每句话都抄下来,或者期末前找份学…

阅读更多 →
基于.NET的反间谍法宣传网站毕业设计:架构、实现与部署全解析 2026/9/26 7:54:23

基于.NET的反间谍法宣传网站毕业设计:架构、实现与部署全解析

1. 项目解读:为什么"反间谍法宣传网站"是毕业设计的优质选题 第一次看到"基于.NET的反间谍法宣传网站"这个题目的时候,我第一反应是:这个选题挺聪明的。你仔细想想,它其实是一个很典型的"政务信息服务类…

阅读更多 →
大模型网关集成MCP与CLI:智能调度与策略化密钥管理 2026/9/26 7:54:23

大模型网关集成MCP与CLI:智能调度与策略化密钥管理

1. 大模型网关不是“管道”,而是智能调度中枢:MCP 与 CLI 的协同本质很多人第一次看到“大模型网关集成 MCP 与 CLI”这个标题,下意识会把它理解成一条简单的数据通道——模型在后端,前端发请求,中间加个网关做转发。这…

阅读更多 →
LangChain4j+LangGraph4j:低代码智能体工作流的工程落地实践 2026/9/26 7:54:23

LangChain4j+LangGraph4j:低代码智能体工作流的工程落地实践

1. 为什么“低代码工作流智能体”不是噱头,而是工程落地的必然选择我去年在给一家制造业客户做AI中台升级时,被拉着开了整整三天的需求对齐会。他们提了27个业务场景:销售线索自动打分、售后工单智能分派、采购合同条款合规性初筛、设备报修语…

阅读更多 →
Xmind换盘不重装:安装路径迁移、目录联接与C盘释放全攻略 2026/9/26 7:54:23

Xmind换盘不重装:安装路径迁移、目录联接与C盘释放全攻略

如果你百度过“Xmind怎么改安装路径”,大概率会看到一堆教你“装的时候选自定义目录”的回答。这话没毛病,但只对了一半,因为Xmind现在的安装包默认装到C:\Users\你的用户名\AppData\Local\Programs\Xmind,而这一层目录在安装向导…

阅读更多 →
新能源出海下的供应链重构:底层材料配方如何破局核心电感选型痛点 2026/9/26 7:54:16

新能源出海下的供应链重构:底层材料配方如何破局核心电感选型痛点

在电子元器件国产化替代、新能源设备出海以及硬件设备小型化加速推进的产业背景下,硬件研发与采购工程师正面临着愈发严苛的工况适配需求与复杂的运行稳定性考验。传统的产能规模比拼,已无法从根本上解决当前的供应链痛点。当面对进口元器件交期拉长、国…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉