【老计带你懂线性代数】11:SVD奇异值分解,线代皇冠上的明珠
【老计带你懂线性代数】11SVD奇异值分解线代皇冠上的明珠开头一个更通用的分解上一篇的特征分解很强大但有个硬限制它只能拆方阵。可现实里大量重要的矩阵根本不是方阵一份1000个用户乘500个商品的评分表、一张高乘宽的图片、一个样本乘特征的数据集全是长方形的。有没有一种分解能把任意形状的矩阵都拆开有它就是SVD奇异值分解被誉为线性代数皇冠上的明珠。它是特征分解的终极推广任何矩阵都能做而且在AI里应用极广降维、推荐、压缩、去噪、语义分析处处有它。这一篇把它讲透你会发现它既通用又优雅是整个系列里最值得掌握的工具之一。SVD在拆什么旋转、缩放、再旋转SVD的核心思想一句话任何一个矩阵所做的变换都可以拆解成三个简单动作先旋转、再沿各方向缩放、再旋转。写成公式是矩阵 U 乘 S 乘 V的转置你不用记符号记住三个动作的角色就行第一个旋转V的转置把输入空间转到一个合适的角度。中间的缩放S沿各个坐标轴按不同倍数拉伸或压缩。这些缩放倍数就是大名鼎鼎的奇异值。第二个旋转U再转到输出空间该在的角度。关键在中间那个缩放奇异值。它们衡量这个变换在各个方向上用力多大、多重要。奇异值大的方向是这个矩阵最主要的方向、最重要的信息奇异值小的方向是次要的、甚至可忽略的。奇异值通常按从大到小排列第一个最重要往后越来越次要。打个比方任何一个复杂的变换SVD都把它翻译成三步走摆正姿势旋转、按重要程度分别拉伸各个方向缩放奇异值就是各方向的重要程度、再摆到最终姿势旋转。再复杂的矩阵SVD都能这么拆开看清它每个方向使了多大劲。为什么SVD比特征分解更通用特征分解要求方阵还要求矩阵性格好可对角化。SVD没有任何限制任意形状、任意矩阵都能分解这就是它的通用性所在。而且SVD和特征分解、和PCA有深刻联系对一个数据矩阵直接做SVD得到的结果和对它的协方差矩阵做特征分解也就是PCA本质是相通的。SVD的奇异值的平方正对应着PCA里的特征值方差SVD的右奇异向量正对应着PCA的主成分方向。实践中很多PCA的实现底层就是用SVD算的因为SVD数值上更稳定、更通用。所以你可以把SVD理解成PCA的一个更强大、更通用的引擎。顺便说说它为什么配得上皇冠上的明珠这个名号。线性代数里各种概念向量、矩阵、秩、特征值、变换到了SVD这里像是被一根线串了起来。SVD同时告诉你一个矩阵的秩非零奇异值的个数、它最重要的方向大奇异值对应的向量、它把空间拉伸压缩的程度奇异值大小、以及怎么用低维近似它低秩近似几乎一个分解就把前面几篇讲的东西全兜住了。更难得的是它对任意矩阵都成立没有任何限制。这种既极致通用、又信息量巨大、还数值稳定的性质让它成了线代里最有用、最优雅的结果之一无论理论还是工程都绕不开。你不需要会手工算SVD那很繁琐交给NumPy但一定要理解它拆出来的三部分各是什么意思、奇异值代表重要性、留大扔小能压缩这些直觉在AI里价值连城。用SVD降维和压缩只留大奇异值SVD最实用的能力是低秩近似说白了就是降维和压缩思路特别漂亮既然奇异值按重要性从大到小排那只保留前几个最大的奇异值和对应的向量扔掉后面一大堆小奇异值就能用很少的信息近似重建整个矩阵。丢掉的小奇异值方向信息量少重建出来的矩阵和原来几乎一样却省了大量存储。这正是数据压缩的原理。一张图片是一个矩阵做SVD后前面少数几个大奇异值就抓住了图片的主要结构大色块、主要轮廓后面成百上千个小奇异值只贡献一些细节。只留前几十个奇异值就能把图片压缩到原来的很小一部分肉眼看几乎没差别。这一篇的代码就会演示这个。打个比方描述一幅画SVD告诉你哪几笔是主要的轮廓大奇异值、哪些是可有可无的细节小奇异值。你只临摹那几笔主要的就能画出九成像的赝品还省了大量功夫。留几笔、留多像你自己权衡。这个低秩近似的思想在大模型时代焕发了新的生命值得专门一提就是现在微调大模型最流行的技术之一LoRA低秩适配。大模型的权重矩阵极其巨大全量微调要更新的参数量惊人、又费显存又费钱。LoRA的巧思是微调时不去动那个巨大的原权重矩阵而是用两个小得多的矩阵相乘来表示权重的改动量因为这个改动量往往是低秩的没那么复杂用低秩近似就够了。这样要训练的参数一下子少了成百上千倍普通人用一张消费级显卡就能微调大模型。你看SVD揭示的一个大矩阵常常可以用低秩的方式很好地近似这个洞察几十年后成了大模型平民化微调的理论支柱。这正是线性代数的迷人之处一个看似古老的分解思想会在最前沿的技术里以新的面貌复活。理解了低秩近似你就能看懂LoRA为什么行、为什么省这是只停留在应用层面看不透的。这也再次印证了这个系列的主张把数学地基打牢前沿技术对你就不再是天书。输入和输出长什么样输入任意一个矩阵不必是方阵。输出三部分U左奇异向量、S奇异值一串从大到小的数、V的转置右奇异向量。NumPy里用np.linalg.svd一次求出。降维就是只取前k个。上代码SVD分解 用它压缩图片# 依赖pip install numpyimportnumpyasnp# 1.对一个普通矩阵做SVDAnp.array([[1,2,3],[4,5,6]])# 2x3的长方形矩阵,特征分解做不了,SVD可以U,S,Vtnp.linalg.svd(A)print(原矩阵形状:,A.shape)print(奇异值(从大到小):,np.round(S,3))print(U形状:,U.shape, Vt形状:,Vt.shape)# 2.用SVD做低秩近似(压缩):只保留最大的1个奇异值,重建矩阵k1A_approxU[:,:k] np.diag(S[:k]) Vt[:k,:]print(\n只用前1个奇异值重建的矩阵:\n,np.round(A_approx,2))print(原矩阵:\n,A)print(已经很接近了,只用了一小部分信息)# 3.演示图片压缩:造一张有明显结构的图片矩阵np.random.seed(0)imgnp.zeros((50,50))img[10:40,10:40]1# 中间一个方块(主要结构)imgnp.random.randn(50,50)*0.1# 加点噪声(细节)U,S,Vtnp.linalg.svd(img)print(\n图片是50x50,共有,len(S),个奇异值)# 分别用前5、前20个奇异值重建,看用多少信息够forkin[5,20]:approxU[:,:k] np.diag(S[:k]) Vt[:k,:]errornp.linalg.norm(img-approx)/np.linalg.norm(img)# 存储量:原图50x502500个数; 压缩后只需k*(50501)个数compressedk*(50501)print(f用前{k}个奇异值: 重建误差{error:.3f}, 存储量从2500降到{compressed})运行输出示例图片含随机噪声每次略有差异原矩阵形状: (2, 3) 奇异值(从大到小): [9.526 0.514] U形状: (2, 2) Vt形状: (3, 3) 只用前1个奇异值重建的矩阵: [[1.57 2.06 2.54] [3.68 4.83 5.98]] 原矩阵: [[1 2 3] [4 5 6]] 已经很接近了,只用了一小部分信息 图片是50x50,共有 50 个奇异值 用前5个奇异值: 重建误差0.087, 存储量从2500降到505 用前20个奇异值: 重建误差0.042, 存储量从2500降到2020运行你会看到一个2乘3的长方形矩阵特征分解做不了被SVD顺利拆开奇异值从大到小排只用最大的1个奇异值就能近似重建整个矩阵那张50乘50的图片只用前5个奇异值重建误差就很小、存储量从2500降到505实现了压缩。核心就是奇异值按重要性排序留大扔小就能用很少的信息近似还原这就是SVD降维和压缩的威力。在AI里怎么用SVD是AI里应用极广的一件利器推荐系统的矩阵分解把用户乘物品的稀疏评分矩阵用SVD分解得到用户和物品的隐向量预测缺失评分。这是下一篇的主题呼应《老计带你懂AI算法》的协同过滤篇。降维SVD是PCA的底层引擎前面讲过。数据压缩与去噪图像、信号压缩扔掉小奇异值就去了噪。潜在语义分析LSA对词乘文档矩阵做SVD挖出文档的潜在主题是早期语义分析的核心。大模型里的低秩技术如今微调大模型的LoRA低秩适配思想就和低秩近似一脉相承用两个小矩阵近似一个大矩阵的更新。常见误区SVD对任意矩阵都能做这是它比特征分解强的地方别只在方阵上想它。奇异值一定非负、且按大小排序第一个最重要这是低秩近似的基础。低秩近似不是无损留的奇异值越少压缩越狠、但误差越大要在压缩率和质量间权衡。SVD和PCA不是两回事PCA可以用SVD实现理解了SVD就更懂PCA。小结与承上启下SVD把任意矩阵拆成旋转、缩放、旋转三部分缩放倍数就是奇异值是特征分解的终极推广。奇异值衡量各方向的重要程度从大到小排大的是主结构、小的是细节。低秩近似只留大奇异值用很少信息近似重建实现降维和压缩。和PCA的关系SVD是PCA更通用稳定的引擎AI里推荐、压缩、去噪、LSA、以及大模型微调的LoRA都用它。SVD能把矩阵拆成隐藏的成分这个思想直接通向AI里一个巨大的应用领域把稀疏的大矩阵拆成稠密的隐向量。下一篇讲矩阵分解与嵌入看推荐系统怎么靠它猜你喜欢什么、以及词嵌入的线代本质把万物变向量这条主线彻底收拢。我们下一篇见一起把万物变向量这条主线彻底收拢。延伸阅读3Blue1Brown 及 MIT 的线性代数课程都有SVD的经典讲解https://www.3blue1brown.com/topics/linear-algebraNumPy 官方文档np.linalg.svdhttps://numpy.org/doc/stable/reference/generated/numpy.linalg.svd.htmlSVD图像压缩与LoRA可分别按关键词SVD image compression、LoRA low-rank adaptation检索说明以上为官方与经典公开资料地址可能随版本调整如打不开可用标题搜索。

相关新闻

用Python+uiautomator2实现同花顺模拟盘自动化交易

用Python+uiautomator2实现同花顺模拟盘自动化交易

简介:这是一套基于Python的量化交易辅助工具包,针对同花顺手机版模拟炒股环境,利用uiautomator2库与图色识别方法实现自动下单、持仓查询等API操作,适合量化交易爱好者与Python自动化开发者参考,并预留了扩展到实盘交易…

2026/10/18 14:28:34 阅读更多 →
基于YOLOv4与OpenPose的投篮动作实时分析系统实践

基于YOLOv4与OpenPose的投篮动作实时分析系统实践

简介:面向希望用计算机视觉分析篮球投篮的开发者,这里提供的是一套完整AI Web应用与API实现,涵盖目标检测、运动员追踪与姿态估计等核心模块。项目基于TensorFlow与OpenPose相关技术,既适合学习YOLO/姿态估计的落地应用&#xff0…

2026/10/18 14:28:34 阅读更多 →
数学建模A题“板凳龙”运动学建模与Python递推可视化全解析

数学建模A题“板凳龙”运动学建模与Python递推可视化全解析

简介:2024年高教社杯数学建模A题‘板凳龙’的北京赛区一等奖级完整参赛方案,面向数学建模初学者以及需要课程设计、大作业或毕业设计基础框架的高校学生。方案内置原题PDF、可一键运行的Python代码和配套说明文档,完整呈现从问题解析、模型构…

2026/10/18 14:28:34 阅读更多 →

最新新闻

HEART-fp32四个检查点怎么选?fidelity、sharp、clean、clean2x变体完全解析

HEART-fp32四个检查点怎么选?fidelity、sharp、clean、clean2x变体完全解析

【免费下载链接】HEART-fp32 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/HEART-fp32 点击查看 免费下载 HEART-fp32 是 HEART 超分辨率(图像放大/超分)模型在 MLX 框架下的 fp32 精度版本,仓库一次性提供 4 个检…

2026/10/18 15:21:01 阅读更多 →
室内定位超宽带算法MATLAB实现:从测距到定位的工程链路

室内定位超宽带算法MATLAB实现:从测距到定位的工程链路

简介:这份资源面向从事室内定位研究的高校学生、科研人员与工程开发者,聚焦超宽带(UWB)定位算法在MATLAB环境下的完整实现。内容围绕脉冲生成、室内信道建模、接收机解扩与均衡、TDOA/TOA/AOA等定位算法求解,以及多基站…

2026/10/18 15:21:01 阅读更多 →
微信小程序毕设:个人日程安排系统设计与实现

微信小程序毕设:个人日程安排系统设计与实现

简介:这是一套面向计算机专业本科生的微信小程序毕业设计实战项目,聚焦个人日程管理场景,兼顾前端交互体验与后端业务逻辑完整性,适用于课程设计、毕设选题及Java小程序全栈能力训练。资源包含1175个文件,涵盖163个JS逻…

2026/10/18 15:21:01 阅读更多 →
Argon大模型推理架构:从黑箱生成到白盒协同的范式演进

Argon大模型推理架构:从黑箱生成到白盒协同的范式演进

1. 这不是又一个“跑分冠军”,而是大模型推理范式正在悄悄转向最近刷到“Gemini 4 Argon”这个代号,不少朋友第一反应是:哦,谷歌又发新模型了?点开各种评测文章,满屏都是“12项基准登顶”“百万Token输出”…

2026/10/18 15:21:01 阅读更多 →
Spark重新分区详解:repartition、coalesce与数据倾斜、小文件治理

Spark重新分区详解:repartition、coalesce与数据倾斜、小文件治理

Spark DataFrame重新分区这件事,表面上看不就是调个repartition(n)或coalesce(n)嘛,但真跑到生产环境里,分区数设不对、分区方式选错,轻则任务慢几倍,重则直接OOM或者写出一堆小文件把你整个数仓都搞崩。我之前就被折腾…

2026/10/18 15:21:01 阅读更多 →
Codex Skill详解:自动化提示词

Codex Skill详解:自动化提示词

如果你正在使用 Codex CLI,却发现自己一遍又一遍地重复编写相同的指令,那么你很可能没有充分发挥这个工具的潜力。Codex 提供了一项强大的功能——Skills(技能),它允许你将可复用的工作流打包封装,并按需赋…

2026/10/18 15:20:01 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →