我对线性代数中矩阵运算的认识过程
2026-05-18
记录我在学习线性代数时对矩阵运算意义的理解变化。
以此文记录一下我在学习线性代数时的一些感受。
我是在大二下学期接触到线性代数课程的,在开始学习这门课程之前,我对线性代数的价值,或者说应用领域是一无所知的,只是在脑中把它概念化为一门普通的“数学”课——不如说是一门算数课,我坐在教室里,跟着老师学习也许我第二天就会忘记的一种全新的运算规则。学校使用的教材是中国农业出版社的一本线性代数,作者记不清了。开了八周的课,一周上四个课时。
我们老师讲课的顺序是这样的:先复习一些高中学过的向量知识,然后学矩阵和矩阵乘法,再学行列式的解法,最后学线性方程组的解法。印象里老师讲课讲得挺清楚的,可我就是听不懂,可能也是因为课时有限,讲得比较快,我就只能半懂不懂地装模作样学,整个学习过程没什么意思,我就拿矩阵乘法举个例子说说当时的情况。
两个矩阵相乘,第一个矩阵是1×3的(这里指的是1行3列),另外一个矩阵是3×2的,那么他们最后相乘就是1×2的矩阵,而且第一个矩阵的列数和第二个矩阵的行数必须相等,可我当时根本搞不懂为什么有这个规定,就只能死记硬背这个规则。我当时就对着最简单的数值例子,机械地反复运算,比如一个矩阵A
\[A = \begin{pmatrix} 1 & 2 & 3 \end{pmatrix}\],配上一个3行2列矩阵
\[B = \begin{pmatrix} 4 & 5 \\ 6 & 7 \\ 8 & 9 \end{pmatrix}\],按照规则相乘的时候,要拿着第一个矩阵的每一行,挨个和第二个矩阵的每一列对应相乘再相加,一步步算出来结果就是1×2的矩阵。
我全程就只会照搬步骤,完全不懂矩阵乘法到底有什么意义,只觉得是很繁琐的数字拼凑,越学越觉得枯燥乏味。再往后学行列式、线性方程组,我更是听晕了,只能被动地记公式、记解题步骤。等到线性代数期末考试考完,我也就只记得行初等变换了,就是像拼凑数字一样,消掉每一行的一些数字,感觉有点像玩俄罗斯方块。比如面对一个简单的三阶增广矩阵
\[\begin{pmatrix} 1 & 1 & 1 & 6 \\ 1 & 2 & 3 & 14 \\ 2 & 3 & 4 & 20 \end{pmatrix}\],所谓的行变换就是用第二行减第一行、第三行减去两倍的第一行,一步步消掉对应位置的数字,把矩阵化成规整的阶梯形状,全程就是机械操作,我不懂背后的逻辑。最后我考试成绩也不好,卷面只考了79.5分。
现在回想起来,学校选择这样的教学方式可能也是有原因的,我感到我们学校在这方面对地信的本科生都是像对待工科生那样教学,只要会应用就够了。对数学专业而言,线性代数(高等代数)并非核心研究方向,而是一门专业基础课,其核心价值在于引入抽象代数的基本概念,并通过公理化体系奠定现代代数学的研究范式,为后续群、环、域等抽象代数内容做好铺垫;
而工科专业也许更侧重线性代数的工具属性,会算矩阵可以解决工程问题。不过,随着接触到的知识越来越多,现在也是人工智能,机器学习等新技术井喷的时代,他们的底层逻辑都和线性代数有着密不可分的联系,所以只会算矩阵,行列式,就显得不够用了。
确实很长一段时间,我都没有用到线性代数的地方,就把他忘掉了,直到最近我在学习3D Gaussian Splatting(3DGS)的时候,又遇到了这个家伙。
3DGS是近年提出的一种用于三维场景重建和新视角合成的前沿技术。在这个方法里,整个三维场景被表示为了数以百万计的3D高斯椭球。一个三维高斯分布的基本公式是这样的:
\[G(x) = e^{-\frac{1}{2} (x-\mu)^T \Sigma^{-1} (x-\mu)}\]这里的 $x$ 是空间中的点,$\mu$ 是这个高斯椭球的中心位置(均值),而 $\Sigma$ 是它的三维协方差矩阵。在实际渲染时,为了保证这个协方差矩阵在优化过程中始终是半正定的,作者巧妙地把它拆解成了一个缩放矩阵 $S$ 和一个旋转矩阵 $R$ 的组合:
\[\Sigma = R S S^T R^T\]什么是三维协方差矩阵?为什么缩放和旋转可以通过矩阵乘法来表示?转置($T$)在这里到底有什么几何意义?这些矩阵是怎么把一个标准的球体拉伸、旋转成一个扁的椭球的?我这才意识到,如果不搞懂矩阵背后的空间几何意义,我无法真正理解这些前沿图形学算法。
于是,我开始重新学习线性代数,这一回我重新搜集了资料,自己找了课和教材。我看的是 Gilbert Strang 老爷子的课,在B站一搜就能搜到这位麻省理工的老师。他讲的顺序有些不一样:他从向量、矩阵与线性组合切入,再讲线性方程组消元与矩阵分解,核心围绕四个基本子空间展开,后续依次讲解正交性与最小二乘、行列式、特征值、SVD,最后延伸至线性变换与实际应用。当然,后面的我还没真正吃透,这里就讲讲矩阵运算。
首先,我们一定要理解线性空间的概念。线性空间是非空集合与数域结合,满足向量加法、数乘八条运算公理,能进行线性组合的代数结构。这个概念是晦涩难懂的,让我们换一种说法。
所有能随便做加加减减、乘个常数,结果还在自己圈子里的向量集合,就是线性空间。举 3 个最常见的例子:
- 平面上所有向量(二维向量,比如 (1,2)、(0,-3)):两个箭头相加、箭头乘个数字,结果还是平面上的箭头,这就是二维线性空间ℝ²。
- 空间中所有向量(三维向量,比如 (1,2,3)、(0,0,5)):相加、乘常数后还是空间里的箭头,三维线性空间ℝ³(就是你之前矩阵乘向量的那个空间)。
- 所有常数项为0的一次函数(比如 y=2x+0、y=-3x+0):两个一次函数相加(2x + (-3x)=-x)、一次函数乘常数(2×2x=4x),结果还是一次函数,这也是一个线性空间。你可能会想,诶我两个一次函数相乘不就有2次方了么?注意,线性空间从来不要求对乘法封闭,而是对数乘封闭,注意区分。
反例(不是线性空间):平面上所有起点在原点、长度为 1 的箭头:两个这样的箭头相加,长度大概率不是 1,跑出了原来的圈子,所以不满足。
那么用一个矩阵去乘向量,就是在对向量做线性组合。更抽象的说,m×n 矩阵左乘 n 维列向量,本质就是将 n 维线性空间中的向量,通过该矩阵定义的线性变换,映射到 m 维线性空间中。
比如一个简单的方程组:
以前我只会把每一行拿出来,写成 $2x - y = 0$ 和 $-x + 2y = 3$,然后消元法,算出答案,或者在坐标系里画两条直线找交点。但 Strang 教授把它看作是矩阵每一列的线性组合:
\[x \begin{pmatrix} 2 \\ -1 \end{pmatrix} + y \begin{pmatrix} -1 \\ 2 \end{pmatrix} = \begin{pmatrix} 0 \\ 3 \end{pmatrix}\]原来解空间方程,就是去寻找两个列向量的缩放比例($x$ 和 $y$),让它们相加后刚好抵达目标基向量 $\begin{pmatrix} 0 \ 3 \end{pmatrix}$ 的位置。换句话说,就是对向量进行了一次线性变换。
顺着这种思路,我解开了困扰我的问题:到底为什么要发明如此繁琐的矩阵乘法规则?因为两个矩阵AB相乘,是有几何意义的。
那我们就先要明白,其实单独一个矩阵A,就有他的几何意义了,把他看做是由几列向量组成的东西,矩阵A是一次线性变换的操作。不要再把矩阵看作是一个静止的东西,而要把它看作是一个动作。
在以前死记硬背的学法里,我们看矩阵是一行一行看的,因为算乘法是用行乘列嘛。但现在可以试着竖着看矩阵。
想象一个标准的二维坐标系,整个平面的网格是由两个最基础的基向量撑起来的:
- 指向右边长度为1的 $i$ 向量:$\begin{pmatrix} 1 \ 0 \end{pmatrix}$
- 指向上边长度为1的 $j$ 向量:$\begin{pmatrix} 0 \ 1 \end{pmatrix}$
现在假设有一个矩阵 $A = \begin{pmatrix} 3 & 1 \ 1 & 2 \end{pmatrix}$,不要把它当成四个孤立的数字,而是把它看成两列向量拼接在一起的集合:
第一列是 $\begin{pmatrix} 3 \ 1 \end{pmatrix}$,第二列是 $\begin{pmatrix} 1 \ 2 \end{pmatrix}$。
这几列向量到底是什么含义?
它们就是刚才提到的 $i$ 向量和 $j$ 向量在经历了某次运动之后的新去向(落脚点) 。
- 矩阵的第一列 $\begin{pmatrix} 3 \ 1 \end{pmatrix}$,就是告诉我们:原本在 $\begin{pmatrix} 1 \ 0 \end{pmatrix}$ 位置的 $i$ 向量,现在跑到 $\begin{pmatrix} 3 \ 1 \end{pmatrix}$ 去了。
- 矩阵的第二列 $\begin{pmatrix} 1 \ 2 \end{pmatrix}$,就是告诉我们:原本在 $\begin{pmatrix} 0 \ 1 \end{pmatrix}$ 位置的 $j$ 向量,现在跑到 $\begin{pmatrix} 1 \ 2 \end{pmatrix}$ 去了。
既然基向量跑到了新的位置,那整个二维平面当然也被连带着一起拉伸、倾斜、旋转了。这种对整个空间的揉捏,只要满足原点依然固定不动且原本平行的直线变换后依然平行且等距,就叫做线性变换。
那么用矩阵 $A$ 乘以一个任意的输入向量 $v = \begin{pmatrix} x \ y \end{pmatrix}$,底层逻辑到底发生了啥?
在传统的代数里,这叫列方程算数。但在几何图景里,这是一个按图索骥的运动过程。
任意一个向量 $v = \begin{pmatrix} x \ y \end{pmatrix}$,它的意思其实是我这个向量,是由 $x$ 个 $i$ 向量长,和 $y$ 个 $j$ 向量长拼出来的。
既然整个空间被矩阵 $A$ 扭曲了,$i$ 变成了新的 $i’$(也就是矩阵第一列),$j$ 变成了新的 $j’$(也就是矩阵第二列)。那新的向量 $v’$ 会落在哪里?
很简单,按照原来的比例,去新的空间里找就行了!也就是:新向量 = $x$ 个 新$i$向量 + $y$ 个 新$j$向量
写成数学公式就是:
\[A v = x \begin{pmatrix} 3 \\ 1 \end{pmatrix} + y \begin{pmatrix} 1 \\ 2 \end{pmatrix}\]总结
当我们说单独一个矩阵A,就有他的几何意义了时,我们是在说:
- 矩阵是一个动词。 它规定了空间将做怎样的变形(旋转、缩放、斜切等)。
- 矩阵的每一列是名词。 它们是变形后的空间里,新坐标轴(基向量)的精确降落点。
- 矩阵乘向量是执行组合。 把向量扔进这台机器里,机器读取向量的法则,用新的基底给它重新组装成一个扭曲后的新向量。
理解了单个矩阵本质上是对空间进行拉伸、旋转或者投影等线性变换之后,那个曾经让我痛苦的矩阵乘法 $AB$ 的几何意义也就呼之欲出了:它不过就是两个线性变换的叠加而已。
如果我现在有一个向量 $x$,我先对它进行 $B$ 变换,再对它进行 $A$ 变换,写成数学表达式就是 $A(Bx)$。根据结合律,这当然就等于 $(AB)x$。原来,矩阵乘以矩阵,不是什么多此一举的瞎折腾,而是我们在计算如果把第一步变换和第二步变换合并成一步完成,这个最终的总变换该长什么样子?
至于为什么乘法的口诀是前行乘后列再相加?因为矩阵 $B$ 的每一列,实际上就是第一个变换后新坐标轴的落脚点。我们把这几个新坐标轴当作输入,再丢给矩阵 $A$ 做第二步变换,最终算出来的,必定是两次变换后坐标轴的最终位置。
这也解释了另外一个以前只能死记硬背的定理:矩阵乘法为什么不满足交换律($AB \neq BA$ ) 。在脑子里想一下把一块面团先在横向上拉伸 2 倍,再旋转 90 度,和先旋转 90 度,再在原来的横向拉伸 2 倍,最后的形状当然不一样的,几何上的不可交换,自然导致了代数上的不可交换。
我再回过头去看 3D Gaussian Splatting 里的应用,回到那个困扰我的协方差公式:
\[\Sigma = R S S^T R^T\]在三维空间中,一个标准的高斯分布就像一个完美的正圆球。我们想要在空间中把它塑造成任意一个倾斜的、长短不一的扁长椭球(也就是渲染出各种各样的物体表面特征),需要经历几步?
恰好就是两步
第一步,用一个对角线矩阵——缩放矩阵 $S$ 去拉伸它(控制高斯球的三个轴应该有多长多宽);
第二步,用一个旋转矩阵 $R$ 去改变它的朝向(把拉伸好的椭球摆放到正确的角度)。
所以,对高斯球进行的线性变换总和就是 $RS$(先施加 $S$,再施加 $R$)。
在概率学与多维高斯分布的数学性质里,如果一个随机变量经过一个线性变换 $M$,它的协方差矩阵就会从原本的单位矩阵 $I$ 变成 $MIM^T$,也就是 $MM^T$。
在这里,变换矩阵 $M = RS$。那么显然协方差矩阵就是:
根据矩阵转置的性质 $(RS)^T = S^T R^T$,稍微一展开,我们就推导出了 $\Sigma = R S S^T R^T$
在这个式子里,$R$ 负责把椭球的姿态转正,内部的 $S S^T$ 负责决定椭球的胖瘦,然后再通过最外面的 $R$ 转回去。
带着这种直觉,我再次回过头去看三维高斯泼溅里的那个原本让我头疼的协方差矩阵公式:
\[\Sigma = R S S^T R^T\]我脑海中浮现出了这样的画面:假设我们从一个标准的、各个方向均匀分布的球体出发。
首先,对角缩放矩阵 $S$ 作用于它,相当于按照不同的比例在三个坐标轴方向上进行拉伸或压缩,把完美的球体变成了一个形状特定的扁椭球。
紧接着,旋转矩阵 $R$ 就像一双无形的手,与前面的结果相乘,意味着把这个已经变形的椭球在三维空间中旋转到了特定的姿态和朝向。
| 那转置($T$)和逆($-1$)又是什么意义呢?在空间几何的视角下,如果一个矩阵 $A$ 代表把空间进行某种扭曲,那么逆矩阵 $A^{-1}$ 就是把这种扭曲倒放,把空间原封不动地还原回去 。 以前我背过行列式 $ | A | =0$ 时矩阵没有逆矩阵,现在我懂了:因为行列式为 0,意味着这个矩阵在变换时把空间压扁了,把三维立体压成了一张扁平的纸,甚至一条线,维度的坍塌导致了信息的丢失,你自然无法从一张二维的纸里无中生有地还原出三维的立体,所以逆变换不存在。 |
而在这种正交旋转操作中,旋转矩阵 $R$ 的特殊性质使得它的转置恰好等于它的逆($R^T = R^{-1}$ ) 。所以,转置在这里也不再是毫无头绪的把行变成列,它代表着反向旋转。从代数上讲,$R S S^T R^T$ 本质上是对协方差矩阵进行特征分解的体现。
最后,我再总结了一下线性代数的应用场景和精髓。
现在我发现,现代科技的半壁江山都是建立在线性代数之上的。
- 计算机图形学与三维视觉: 无论是在游戏里看到的光影、电影里逼真的特效,还是自动驾驶汽车眼中的三维世界,本质上都是海量空间点的集合。把一个模型放大、平移、旋转,甚至改变视角的透视投影,底层全都是极高频的矩阵乘法运算。我们的显卡擅长做并行的矩阵相乘。
- 人工智能与深度学习: 现在大火的 ChatGPT、各类大模型,它们在算什么?神经网络里的参数,本质是一个个庞大的矩阵。把一句话输入给大模型,本质上就是把一个高维的词向量,连续穿过无数个巨大矩阵做线性变换(再夹杂一些非线性激活函数),最终映射到另一个空间里,输出概率最高的下一个词。在这个领域,万物皆可向量化,而数据的流动就是矩阵乘法。
线性代数最核心的内容,是线性变换,以及线性空间相关的理论。