为什么从这里开始
打开任何一本机器学习书,第一章往往不是「神经网络」,而是一堆 、、。这不是装腔作势——
- 一张 224×224 的 RGB 图像,是一个 的张量。
- 一句话的 embedding,是一个 4096 维的向量。
- Transformer 里一次注意力计算,就是几次矩阵乘法。
ML 的语言是线性代数。但课本里的线性代数常常被讲成「行列式按定义展开」、「高斯消元到最简形」——让人记住了步骤却没看见它到底在动什么。这篇我们换一种视角:所有矩阵都是对空间的扭曲,所有矩阵乘法都是两次扭曲的叠加,特征向量是扭曲里不动的轴。
向量:一个箭头
最简单的开始:二维向量 是从原点出发指向 的箭头。
写成列向量更顺手:
数字本身不重要——重要的是它代表一种移动:从原点走 3 步右、2 步上。机器学习里所谓「图像的 embedding」、「token 的 embedding」都是同一回事:高维空间里的一个箭头,方向编码了语义。
向量有长度(模):
长度衡量的是「这个箭头有多远」,在 embedding 空间里对应「这个信号有多强」。但更常见的操作不是比长度——而是比方向。
点积:投影与相似度
两个向量之间最基本的运算是点积(dot product):
公式是「对应分量相乘再相加」,但这个公式的几何意义才是 ML 里真正用的:
其中 是两个箭头之间的夹角。翻译一下:
- 点积 > 0:两个箭头方向大致相同()。
- 点积 = 0:两个箭头垂直(,互不相关)。
- 点积 < 0:两个箭头方向大致相反。
还有一个更直观的读法: 等于 在 方向上的投影长度乘以 。如果你把 看成一根「尺子」,点积就是 在这根尺子上量出来有多长。
把两个向量都归一化(除以各自的长度),点积就变成了余弦相似度:
这就是 embedding 空间里「语义相似 = 夹角小 = 余弦相似度高」的数学基础。
在 Transformer 里,Attention 机制的核心操作就是Query 和 Key 的点积:。它衡量的是「这个 query 和这个 key 有多匹配」——点积越大,说明两个向量指向越相似的方向,注意力权重就越高。整个 Attention 可以读作:用点积找到最相关的 key,然后取对应的 value。
矩阵:一次空间变换
把一个 的矩阵作用到向量上:
公式很无聊,直觉却惊艳:把这个矩阵作用到平面上每一个点,整个平面会被线性地扭曲——直线还是直线,原点不动,平行线还是平行线,但网格被拉、被压、被旋转、被翻折。
更关键的观察:矩阵的两列分别就是变换后的基向量。
- 第一列 = 原本指向 的单位向量 被送到了哪里。
- 第二列 = 原本指向 的单位向量 被送到了哪里。
知道了基向量去了哪里,整片平面去了哪里就自动确定了——因为任何向量 都是基向量的组合,变换是线性的,组合关系不会变。
矩阵就是一份关于「基向量去哪里」的说明书。 拖动滑块或点几个预设感受一下:
变换矩阵
det = 1.00(面积缩放倍数)
预设变换
下面那个 (行列式)也有几何意义——它是单位方格变换后的面积。 表示面积翻倍; 表示整片平面被压成一条线(信息丢了,矩阵不可逆); 表示平面被翻面——左右手互换了。
注意:矩阵-向量乘法 的每一行其实就是一次点积——第 行和输入向量 做点积得到输出的第 个分量。所以矩阵变换的本质是:同时做 次点积(投影),每一行是一根不同方向的「尺子」。
乘法:变换的叠加
理解了「矩阵是变换」,乘法就不再神秘:
表示先做 ,再做 ——从右往左读,像函数复合 。
这立刻解释了一个反直觉的事实:
「先旋转 90° 再横向剪切」和「先剪切再旋转」当然结果不同——做事的顺序变了。矩阵乘法不满足交换律不是数学家的恶趣味,而是变换本身的性质。
顺带也能解释几个熟悉的符号:
- 单位矩阵 是「什么都不做」的变换——基向量没动。
- 逆矩阵 是「把 撤回去」的变换——所以 。
- 当 时矩阵不可逆——把平面压成一条线之后,没办法靠另一个线性变换把丢掉的那个维度变回来。
从 2D 到 4096 维
上面的所有演示都在二维平面上——但 LLM 的 embedding 是 4096 维,权重矩阵是 4096×4096。直觉还能用吗?
完全能用。 虽然人类无法想象 4096 维的空间,但线性代数的规则和 2D 一模一样:矩阵乘法还是「变换的叠加」,行列式为零还是「某些维度被压没了」,特征向量还是「不动的方向」。这就是线性代数的威力——规则不随维度变化。
高维空间有一个新的重要概念:秩(rank)。一个 的矩阵如果秩只有 8,意味着它把 4096 维空间压成了一个 8 维的「薄片」——3988 个维度的信息丢了。反过来说,这个矩阵只在 8 个方向上有「动作」。LoRA 微调就利用了这一点:假设大模型的权重更新 是低秩的(,秩 = 8),只需训练 + 的参数,而不是完整的 。
特征向量:不动的方向
一次普遍的线性变换会把大多数向量旋转到一个新方向。但偶尔有些「幸运」的向量:它们的方向保持不变,只是长度被缩放。这些叫做特征向量(eigenvector),对应的缩放倍数叫特征值(eigenvalue)。
数学定义就这一句话:
「矩阵作用在 上,等于直接给 乘一个数 」——这意味着 没有被旋转出它原来的方向。
变换矩阵
为什么 ML 里到处是特征向量?因为「不被旋转的方向」就是变换的本质轴——它们告诉你这个矩阵真正在做什么。
- PCA 找的是数据协方差矩阵的特征向量——在数据形成的高维云团中,找到方差最大(分布最广)的那几个方向,然后把数据投影过去。砍掉方差小的轴 = 降维。
- SVD 把任意矩阵分解成三步:先旋转(),再沿特征轴拉伸(),最后再旋转一次()。无论一个矩阵多么复杂地扭曲了空间,它都能被精确地拆解成这三个简单操作的组合。
- Google 的 PageRank 算的是网页转移矩阵的最大特征向量——稳态分布。
- 谱聚类、图神经网络 在图的拉普拉斯矩阵的特征向量上做聚类。
特征向量出现在哪里,哪里就有「不变量」的故事。
为什么还需要非线性
到这里你已经掌握了线性代数的核心直觉。但有一个关键的限制必须点明:
无论你叠加多少次线性变换,结果还是一次线性变换。
数学上:——几个矩阵连乘还是一个矩阵。这意味着如果神经网络只做矩阵乘法(线性变换),不管堆多少层,效果都跟一层一模一样。
这就是为什么深度学习需要在每次矩阵乘法之后加入 ReLU 等激活函数——在线性扭曲之后,把空间折叠或弯曲一下。正是这个「非线性的弯」让多层叠加变得有意义,让模型能拟合出世界上极其复杂的非线性规律。这个故事我们会在神经网络那篇展开。