线性代数究竟是为解决什么问题而生的?

元の動画コンテンツ動画を展開する
  • 线性代数是现代科技文明的绝对底座
  • 它为复杂的多变量问题提供了一种数学语言
  • 几何直觉对于理解线性代数至关重要
  • 线性代数在计算机图形学与深度学习中扮演重要角色
  • 特征值与特征向量揭示系统的内在不变特质

线性代数究竟是为解决什么问题而生的?如果你只看统计教材,你当然会觉得线性代数就是一堆毫无意义的数字表格。每天的任务就是算逆序数,求逆矩阵,把矩阵画成行阶梯形。这些其实根本不是线性代数真正的面貌,充其量叫矩阵算术,而且是上个世纪50年代为了培养人工手算能力而设计的矩阵算术。

**线性代数是现代科技文明的绝对底座。**没有线性代数,就没有你今天玩的所有的3D大作,没有现代的智能手机,没有现代通信网络,更没有目前大火的深度学习和人工智能。现代社会只要涉及到海量数据处理,底层全部都是线性代数。

回到你的问题,线性代数到底是为了解决什么问题?被发明的人类的大脑结构其实非常单线程,我们只擅长处理单变量问题。在中学阶段学的数学大部分都是单变量,一个未知数X,列一个方程,解出一个答案。一辆车以某个速度行驶,求多少小时后到达;一段绳子剪成两段,比例是多少。这些都是标量数学。

但是真实的物理世界和工程世界是相当复杂的。现实世界里的系统从来不是只有一个变量。例如,气象局做天气预报要考虑温度、湿度、气压、风向、地形等成千上万个互相影响的变量。再比如,建造一座跨海大桥,要计算几万个钢梁交接点在不同风速和车辆载重情况下的形变。

当变量成百上千,甚至达到几千万个的时候,你再用中学那种孤立的代数方程组去解,纸不仅写不下,人类的思维也会彻底崩溃。我们需要一种全新的语言来描述和处理这种高维度多变量的并发关系——线性代数就是为了解决高维空间并发问题而诞生的数学语言

它提供了一种绝佳的打包方式,无论你的系统里有三个变量还是三百万个变量,线性代数都可以把它们打包成一个简单的方程式 Ax = b。在这个方程式里,x不再是一个单一的数字,而是一个包含了所有未知数的状态向量;A是一个包含了所有相互作用关系的规则矩阵。

这就是线性代数降生的第一个核心使命,它让我们人类能够用高度简洁的符号体系去操作和求解超越三维直觉的复杂系统。认清了这个使命,我们再来看一下你现在学的东西,为什么让你痛苦。

同济教材最大的罪状就是把整体和局部的关系搞反了,并且完全剥夺了这门课的几何直觉。它一上来就教你算行列式,算一堆毫无几何意义的逆序数。然后教你矩阵乘法,规定一堆死板的同行乘同列的运算规律。这就像教人学开车,一上来不让你摸方向盘,不让你看路,而是把你关在黑屋子里,让你去背诵发动机的气缸是怎么运动的。

要想真正学懂线性代数,你必须建立几何直觉。这是我在踩了无数坑,写了无数行报错代码之后得到的血泪教训。从今天起,你在看课本的时候,不要把矩阵看成数字表格,不要把向量看成一列数字。向量就是空间中的一个固定坐标或者一条有向线段,它代表了事物在当前空间下的一个状态;矩阵就是对这个空间进行操作的动作,它代表了一种变换规则。

当一个矩阵乘以一个向量,比如 Ax,在几何上的实际意义就是矩阵A对向量x施加了一种变换。这种变换可能是拉伸,可能是旋转,可能是剪切。线性代数里的“线性”两个字就意味着这种空间变换必须满足两个死要求:第一是原点保持固定,不能乱跑;第二是所有的直线在变换后依然是直线,且平行线依然平行,空间不能被扭曲成麻花。

你明白了这个几何意义,矩阵的很多死机硬背的规则就豁然开朗了。例如,矩阵乘法两个矩阵相乘AB到底是什么意思?根本不是什么复杂的数字游戏,它就是先对空间施加B变换,然后再施加A变换。矩阵乘法不满足交换率,也就是AB不等于BA,这是理所当然的。你先向左转再向前走,和先向前走再向左转,最后到达的位置当然不一样,物理空间里的动作顺序是不能随便换的,矩阵乘法当然不能交换。

为了让你立刻建立这种几何直觉,去B站搜索 3Blue1Brown线性代数的本质,这是一个系列视频。UP主是斯坦福的数学天才。你千万不要觉得看视频浪费时间,这个系列你花一个周末连轴看完,它能把你脑子里被传统教材搞成一团乱麻的公式全部具象化成精美的动画。你看完就会恍然大悟,原来行列式的本质就是空间变换后体积的缩放比例。如果一个矩阵的行列式等于0,意思就是这个变换把一个三维的立体空间压扁成了一个二维的平面,甚至一条线,体积变成了0。既然空间被压扁了,信息就丢失了,所以这个变换过程不可逆。这就解释了为什么行列式为0的矩阵没有逆矩阵。

你也会立刻明白,矩阵的质到底是什么。质就是变换后空间保留下来的真实维度。只要你看了这个视频,你这学期的现代考试不仅能提分,而且是真正打通任督二脉的那种理解。建立了几何直觉只是第一步,接下来我要用我工作中的具体场景给你深度拆解线性代数在现实中到底是怎么用的。只有知道了应用场景,你学起来才有底气,才知道哪些部分是“图荣记”,哪些部分是真“饭碗”。

第一个非常硬核的真实场景:计算机图形学与游戏引擎开发。我刚入行的时候做过一段时间的底层图形渲染。你平时玩的三维大作,比如《赛博朋克》、 《黑神话:悟空》或者《原神》,里面的角色、建筑、风景,在计算机底层根本不是画面,而是一大堆三维坐标点。一个高精度的游戏人物模型可能有上百万个顶点。计算机怎么知道这个人物在跑动、转身、跳跃的时候,这上百万个顶点应该出现在屏幕的什么位置,光照应该怎么反射?这就完全是线性代数的任务。

游戏引擎会把人物的这上百万个顶点打包成一个巨大的矩阵。当玩家推下摇杆让人物手里的金箍棒挥舞起来的时候,游戏底层的代码实际上就是生成了一系列旋转和平移矩阵,然后让这些矩阵去乘以金箍棒模型上的顶点矩阵。在一瞬间,几千万次的乘法运算并发执行,金箍棒的所有顶点就在三维空间中完成了旋转。紧接着,还需要把这个三维的世界投影到你二维的显示器屏幕上。玩家视角的转动本质上是呈现一个视图矩阵,把三维物体拍扁到屏幕上,本质上是呈现一个透视投影矩阵

这里我要补充一个很多教材都不讲但工程中极其关键的操作,那就是次坐标。在线性代数的严格定义里,线性变换必须保证原点不动,这就导致单纯的3x3矩阵只能做旋转和缩放,无法实现平移,因为平移会把原点挪走。

但是游戏里人物是要往前走的。大牛们想出了一个极其优美的方法,那就是把三维空间的点硬生生拉高一个维度,变成四维空间里的点,给坐标加上一个虚假的w分量。在四维空间里,我们用4x4的矩阵去做一种特殊的错切变换,神奇的事情发生了:四维空间的错切投影回三维空间就完美地变成了平移操作。这就解释了为什么你在计算机图形学教材里看到的永远是4x4的矩阵在处理三维坐标。这是数学和工程学结合的最高级艺术

机箱里那张昂贵的独立显卡里面,成千上万个流处理器设计的初衷和最大的本事,就是飞速地做这种4x4矩阵的并发乘法。英伟达今天之所以能成为全球市值登顶的万亿美元巨头,就是因为图形渲染和后来的AI本质上都是海量的矩阵运算。如果没有线性代数提供这套用矩阵描述空间变换的理论,我们永远不可能在屏幕上看到逼真的三维世界,更别提什么VR和元宇宙了。

第二个场景,目前最火热的深度学习与大模型。我现在每天都在跟这些东西打交道。现在外面都在吹各种生成式AI,动不动就几百亿、上千亿的参数。很多外行人和媒体觉得很神奇,觉得AI涌现出灵魂了。但我坐在电脑前写代码调试模型的时候,看到的根本不是什么灵魂,只有漫山遍野的矩阵和张量。

深度学习的本质就是通过多层人工神经网络去拟合极其复杂的数据分布。一幅猫的图像输入进神经网络,在计算机看来不是毛茸茸的动物,而是一个包含了几万个像素值的三维张量,也就是高维矩阵。神经网络的每一层到底在干什么?最核心的基础操作就是 Y = WX + B,这里的X是上一层传过来的数据向量,W是这一层网络学习到的权重矩阵,B是偏置向量。

你可以把神经网络提取特征的过程理解为在线性空间里不断地对数据进行投影和变换。我们通过一层层的矩阵乘法,加上非线性的激活函数,把一开始杂乱无章、高度纠缠的像素数据映射到一个几千维的极高维抽象空间里。在这个高维空间里,猫和狗的数据点被清晰地划分到了不同的区域。那些所谓的千亿参数,就是成千上万个巨大的全重矩阵W里面的数字。

我们训练AI其实就是用梯度下降法去不断微调这些矩形矩阵里的具体数值,直到这些矩阵能够完美地把输入数据变换成我们想要的正确输出。在算法工程师的日常里,我们最怕的不是业务逻辑写错,而是矩阵的维度对不上。你辛辛苦苦打好一个Transformer模型,满怀期待地点击运行,跑起来直接爆出形状不匹配的致命错误。然后你就得拿着笔在糙糕纸上算这个张量经过自注意力机制的QKV矩阵相乘后,形状变成了多少。拼接之后乘以输出矩阵维度是不是还一致,这玩意简直是深度学习工程师的日常便饭。

为了让你以后在代码世界里顺利运用线性代数,我非常推荐你去看 Fast.ai团队出的Computational Linear Algebra课程。这门课相当接地气,它不是教你用笔去解方程,而是教你怎么用Python语言里的Numpy和PyTorch库,去实际操作巨大的矩阵,怎么去解决现实中的图像处理、背景消除和文本分类问题。学了这门课,你会发现真正的线性代数是活在服务器内存和代码里的,而不是活在B卷考试的试卷上的。

接下来我要深入剖析一下线性代数里最让学生痛苦,也是大部分老师照本宣科根本讲不透的一个概念:特征值与特征向量。你回忆一下同济教材里是怎么教特征值的:冷冰冰的给你一个方阵A,让你列一个叫特征方程的东西,解方程,求出一个或者几个根,叫做特征值。然后再带回去解线性方程组,求出一组非0向量,叫做特征向量。全篇都在算算算,但根本不告诉你这到底是在干嘛。

学完之后,脑子里只有一堆解方程的步骤,这简直是买毒还猪。特征值和特征向量是线性代数里最深刻、最直指事物本质的思想。前面我反复强调了矩阵是对空间的一种变换动作。当一个矩阵对空间进行拉伸、旋转、扭曲的时候,大部分向量在经过变换后都会改变自己原来的方向,被拉扯到乱七八糟的地方去。

但是在每一个方阵所代表的特定变换中,总是存在一些非常刚毅、非常特殊的向量。它们在经历了这个矩阵的摧残后,方向竟然完全保持不变,它们仅仅是长度被拉伸或者压缩了。这些在变换中保持方向绝对不变的特殊向量,就是特征向量,而它们长度被拉伸或压缩的倍数就是对应的特征值。

这在现实中有什么用?用处大得超乎你的想象。特征向量揭示了一个复杂动态系统的内在不变特质和最终演化趋势。Google搜索引擎当年是怎么打败Yahoo等所有竞争对手,成为互联网霸主的?靠的就是两位创始人发明的PageRank网页排名算法。当年互联网上有几十亿个网页,互相之间通过超链接跳来跳去。当用户搜索一个词的时候,Google怎么知道哪个网页最权威,应该排在第一位?难道靠人工去审核吗?显然不可能。

Google的创始人把全互联网所有的网页抽象成节点,网页之间的跳转链接抽象成有向边。然后,他们把这几十亿个网页的跳转关系压缩成了一个无比巨大的状态转移矩阵。这个矩阵里的数字代表了用户从网页A点击链接跳转到网页B的概率。这时候惊为天人的操作来了,他们不去统计具体的点击量,而是直接求这个包含了全网转移概率的超级大矩阵的特征向量。对应着最大特征值等于1的那个特征向量,里面包含的具体数字就是每个网页在系统达到动态平衡后的最终权威得分。

也就是说,全网网页的排名计算本质上就是在求一个几十亿维度的巨型矩阵的主特征向量。就这一个线性代数的应用,造就了今天几万亿美元级别的伟大公司。

再给你举一个结构工程里的例子。当一阵复杂的风吹过一座悬索桥,风的受力可以分解成无数个频率和方向的向量,桥梁本身的刚性和结构的相互作用可以写成一个巨大的刚度矩阵。如果你去求这个刚度矩阵的特征向量和特征值,你求出来的就是这座桥的固有振动模式和共振频率。历史上那座著名的塔克马海峡大桥,就是因为设计师没有充分计算这些特征值,导致风的频率恰好撞上了桥梁主特征向量对应的特征值,引发了灾难性的共振。最后整座大桥在风中扭曲得像面条一样,直接崩塌。在工程师眼里,特征值算错是会死人的。

在这个基础上,我们再往前退一步,聊聊线性代数这顶皇冠上的明珠——奇异值分解(SVD)。如果你期末考试不考这个,大部分老师可能提都不会提,但在数据科学和推荐系统领域,SVD是真正的镇山之宝。

现实中很多矩阵不是方阵,比如淘宝的用户商品矩阵,有几亿个用户、几千万件商品。这个矩阵不仅巨大,而且极其稀疏,因为大部分人一辈子也买不了几件东西。你想分析用户的购买偏好,直接分析这个巨大的矩阵是不可能的,服务器会当场当机。

SVD的伟大之处在于它证明了无论复杂的矩阵多么奇形怪状,都可以被完美地拆解成三个简单矩阵的成分:一个代表原来空间的正交变换,一个代表拉伸的对角矩阵,一个代表目标空间的正交变换。放到淘宝的例子里,SVD操作就是把那个巨大的用户商品矩阵拆解成了一个用户特征矩阵和一个商品特征矩阵。

原来的几千万个商品被压缩成了几十个隐含特征,比如便宜、电子产品、女性向、二次元。算法通过对比你在这些核心特征上的得分,就能精准地猜出你下一步想买什么。你现在天天刷的抖音、小红书背后的推荐流和协同过滤算法,老祖宗全是SVD和矩阵分解技术。

既然线性代数这么有用,而且处处都是工程智慧的结晶,为什么在国内的高校里大部分学生都会觉得学不懂、学得很痛苦?这确实不能全怪你,这反映了我们基础课教学模式的结构性问题。这套以同级为代表的教材体系,脱胎于早年苏联的教育模式。它是为了培养特定年代下缺乏计算设备的人才而设计的。在那个连大型计算器都没有的年代,手算能力是第一位的。国家需要大量的技术员能在草稿纸上把方程组解出来。所以教材花了极其巨大的篇幅教你怎么用克莱姆法则解方程,怎么用高斯消元法做矩阵初等变换,怎么去配方法化简二次行。所有的例题,矩阵的数字永远是1、2、3或者-1这样的“小整数”,刚好能被整除。

但是时代变了。今天,没有任何一个工程师会在草稿纸上手算哪怕是一个4x4的逆矩阵。我们在电脑上敲一行 np.linalg.inv(A),机器在零点几毫秒内就能给出结果,而且绝对不会出错。现实世界的数据采集出来的矩阵里面,全是带着十几位小数的浮点数。你拿克莱姆法则算到下辈子也算不完。现代人学习线性代数最不应该浪费精力的就是繁琐的算术操作。你需要掌握的,是计算思维和系统思维。你需要知道什么是矩阵的列空间,它代表了系统中有效数据的生成范围;你需要知道什么是零空间,它代表了系统里被隐藏和抵消掉的内部矛盾;你需要知道如何把一个高维的噪声数据投影到低维的子空间里去寻找规律。

为了补齐这种现代工程急需的思维体系,我强烈建议你在应付完期末考试后,去阅读麻省理工学院Gilbert Strang教授编写的《每个人的线性代数》。这本书是目前世界上公认最好的线性代数启蒙教材,没有之一。如果你看全英文有困难,国内有引进的中文翻译版。Strang教授的写作风格和国内传统的八股文教材完全相反。他从不干巴巴的推导证明过程,他是把你当成一个有独立思考能力的成年人,用非常平实的语言给你解释四个基本子空间的深层逻辑。而且他会紧密结合数据分析和现代计算的实际需求,告诉你马尔可夫链是怎么运转的,傅里叶变换的矩阵形式长什么样。

强烈建议你配上他在网上的MIT 18.06公立课程视频一起看,老爷子在黑板前画图推导的沉稳气质会让你彻底领略数学的优雅。我当年就是在入职后碰壁无术,回头补看了他的公开课,才彻底把大学里没学明白的一笔烂账算清,打通了读顶级计算机论文的障碍。

结合我作为过来人的经验,对于正在读大一被教材折磨的你,我给出以下非常直接具有时效性的三步走建议。这也是我希望当年有人能早点告诉我的。

第一阶段:认清现实,先保生存。你身在现有的教育和考核体系里,期末考试、月卷,老师依然要看你的算术推导能力。你这段时间依然要刷题,要把矩阵相乘的横竖规则算熟,把初等行变换校园的步骤走稳,把求特征值的行列式方程解对。但是在做这些枯燥计算的同时,你脑子里必须要联想到我前面提到的空间变换画面。算对数字是你目前不挂科的护身符,而脑子里的几何画面是你未来发展的种子。

第二阶段:重建体系,升级认知。考完试后的那个寒假千万不要把书扔了,去找Strang教授的书和公开课视频,重新把线性代数梳理一遍。这一次你不要关注具体的加减乘除过程,你要关注概念之间的逻辑脉络,重点搞清楚列空间和行空间的关系,搞清楚正交投影在最小二乘法中的意义,搞明白特征值分解的几何内涵。这一步决定了你以后能不能看懂高端的专业论文,能不能在一众只会调包的菜鸟中脱颖而出。

第三阶段:结合代码,落地实践。在大二大三的时候,不管你本专业是学计算机、机械、金融还是生物医学,去学一点Python语言,尝试用代码把各种矩阵操作跑一遍。自己去写一个小脚本,用矩阵乘法把一张你喜欢的图片进行旋转和扭曲;调用奇异值分解的酷尝试去压缩一张高分辨率的照片,看看丢弃掉小的奇异值后,图片变得有多模糊。当你亲手用几十行代码实现矩阵变换,并且在屏幕上看到实际效果的时候,线性代数就会真正长进你的骨子里,成为你以后解决复杂工程问题的肌肉记忆

最后我想说,不要觉得数学只是冷冰冰的工具。说数学是工具这种话的人往往自己并没有真正掌握高级工具的精髓。线性代数不仅仅是一把扳手或者一把锤子,它更像是一种看待世界的高维世界观。掌握了线性代数,你就从初等数学的单变量线性思维,跨越到了多变量并发的系统思维。

当你以后面对复杂的业务逻辑、海量的数据报表,甚至是错综复杂的人际利益网络时,你在大脑里都可以潜意识地把它们抽象成矩阵和向量的相互作用关系。你会自然而然地去寻找这个复杂系统的特征项量,去敏锐地抓住最核心的矛盾和趋势。这是一种降维打击般的思考能力。大学最可惜的事情就是很多物性极好的苗子被枯燥脱节的硬式教材磨灭了对硬核技术的兴趣,早早地放弃了对底层逻辑的探索。

你现在能在大一提出这个本质的疑问,说明你没有被填鸭式教育洗脑,你有着探究事物根本规律的好奇心。保持住这种直指核心的求知欲,跨过算术计算的泥潭,去领略高维空间的几何之美和代码里的工程之力。等你大四毕业,做硬核毕业设计或者参加工作,手撕核心算法的时候,你会无比感谢现在死磕线性代数、看透事物本质的自己。