为什么 AI 的地基是线性代数
你在输入框里敲下「帮我写一封辞职信」,按下回车。在第一个字蹦出来之前的几十毫秒里,GPU 上发生的事情,如果全部打印出来,你会发现其中 95% 以上是同一种运算的重复:矩阵乘法。剩下的那一点,是把数字掰弯的非线性函数和查表。没有魔法,没有「理解」的独立器官——大模型的整栋大厦,砌在你大学睡过去的那门课上。这一章我们先把账算清楚:AI 到底用了哪些线性代数,你需要重学到什么程度,以及这本书打算带你怎么走。
第一毫秒:一句话变成一堆矩阵乘
把「帮我写一封辞职信」送进大模型,流水线大致是这样的。别担心看不懂,这正是全书要拆的东西,这里只是先看一眼全景:
- 分词与查表:句子被切成若干 token,每个 token 去一张巨大的表里查出一行数字——比如 4096 个数。这一行数字,就是一个向量(卷一)。你的那句话,从此变成一个「token 数 × 4096」的数字表格,也就是一个矩阵(卷二)。
- 注意力:模型要弄清「辞职信」和「帮我写」之间的关系。做法是给每个向量算三个变体(Q、K、V),两两做点积算相似度(卷一第 04 章),归一化后加权求和。整个过程就是三次矩阵乘法,第 22 章会亲手拆开。
- 前馈层:每个向量再被送进「乘一个大矩阵 → 非线性掰弯 → 再乘一个大矩阵」的流水线。这是第 20 章的主角。
- 重复几十层,输出:最后一个向量再乘一个矩阵,变成对几万个候选 token 的打分,挑出下一个字。然后整个过程再来一遍,吐出再下一个字。
给这条流水线拍张 X 光片,只看数据的「形状」,它长这样(以一个 7 token 的输入、4096 维的模型为例):
"帮我写一封辞职信" → 分词 [7] 7 个 token 编号 → 查表 [7, 4096] 每个编号换成 4096 维向量 → 注意力 [7, 4096] 形状不变,内容混合了上下文 → 前馈层 [7, 4096] 乘大矩阵→掰弯→再乘回来 → ×32 层 [7, 4096] 同样的结构重复几十次 → 输出投影 [7, 32000] 对词表里每个词打分 → 取最后一行 [32000] → 采样 下一个字诞生
数一数,从头到尾出场的数学对象只有两种:向量(一列数)和矩阵(一张数字表格);出场的运算主要也只有两种:矩阵乘法和逐元素的非线性函数。前者是线性代数的全部家当,后者只是把数字掰个弯。所谓「70 亿参数的模型」,数的就是那些矩阵里一共有多少个数字——参数不是什么神秘的东西,参数就是矩阵的元素。
「7B」「70B」这种叫法,B 是 billion。Llama 系列 7B 模型的 70 亿个参数,几乎全部躺在几百个矩阵里:每层注意力的四个投影矩阵、前馈层的两三个大矩阵、词表那张 32000 × 4096 的查询表。训练一个模型 = 反复微调这些矩阵里的数字;运行一个模型 = 拿你的向量去和这些矩阵做乘法。你重学线性代数,重学的就是「这些矩阵在对你的数据做什么」。
「线性」到底是什么意思
既然整本书都围着「线性」转,这个词值得在第一章就说清楚。中学里「线性」约等于「一次函数,画出来是直线」,这个印象没错但太窄。线性代数里的「线性」指的是一种行为约定:一个变换 f 是线性的,当且仅当它对「加法」和「数乘」这两个动作保持诚实——
翻译成人话:先组合再变换,等于先变换再组合。两份原料混在一起加工,和分别加工再混合,结果一模一样;原料翻倍,产出严格翻倍。不多不少,没有惊喜,没有隐藏的化学反应。
这种「无聊」恰恰是工程上最宝贵的性格。因为诚实,线性运算可以随意拆分与重组:一个大矩阵乘法可以切成小块分给几千个 GPU 核心同时算,算完直接拼起来,结果分毫不差——换成一个非线性的复杂函数,这种切分就没这么便宜了。也因为诚实,线性系统可以被彻底分析:第 15 章你会看到,一个线性变换的全部秘密都写在它的特征向量里,没有藏起来的角落。深度学习的设计哲学正是「用最听话的线性层干重活,只在层与层之间掺一点非线性调味」——第 20 章会解释为什么少了那点调味不行,但重活必须是线性的,否则今天的算力根本喂不起。
线性变换在几何上有个非常干净的画像:它把坐标纸上等距的平行网格线,变成另一组等距的平行网格线——可以旋转、拉伸、剪切、压扁,但绝不弯曲,并且原点钉死不动。第 06 章的旗舰 Demo 会让你亲手拖出各种线性变换,看着整张方格纸变形却始终「横平竖直得有规律」。记住这幅画面,它是判断「某个操作是不是线性」最快的直觉测试。
GPU:一块为线性代数而生的硅片
还有一条更现实的线索能说明线代对 AI 的地基地位:硬件已经替你投票了。GPU 之所以成为 AI 的引擎,不是因为它「聪明」,而是因为它擅长且只擅长一件事——把成千上万个「乘法 + 加法」同时铺开来算。而矩阵乘法恰好就是一大批相互独立的「乘加」:结果矩阵的每一格都是一行与一列的点积,格与格之间互不等待,天生适合并行。
算一笔粗账。两个 n×n 矩阵相乘需要约 2n³ 次浮点运算:n = 4096 时约 1.4 千亿次。听起来吓人,但现代 GPU 的张量核心每秒能做几百万亿次这样的运算——前提是,你的计算必须长成矩阵乘法的形状。于是整个深度学习领域这十几年干的事情,某种程度上可以总结为:「把一切问题重写成矩阵乘法,好让 GPU 吃得下。」卷积可以摊平成矩阵乘、注意力是三次矩阵乘、embedding 查表是独热向量乘矩阵(第 11 章有这个彩蛋)。你学会了线性代数,等于拿到了这场「一切皆矩阵」运动的完整剧本。
这和你熟悉的「为什么 UI 动画要走 GPU 合成」是同一个故事:硬件对某类运算有数量级的偏爱,所以上层框架拼命把工作翻译成那类运算。RenderThread 把 View 树翻译成纹理与矩阵变换(没错,屏幕上每个 View 的位移旋转缩放就是一个 4×4 矩阵),深度学习框架把网络翻译成矩阵乘。看懂了「翻译目标语言」,你才看得懂整个框架的设计动机。
你忘掉的,可能本来就不是重点
先做个小小的心理按摩。大学那门线性代数,你大概率经历过这些:手算三阶行列式按第一行展开、用初等行变换把矩阵化成阶梯形、背「秩 + 零度 = 列数」、考前突击伴随矩阵求逆的公式。然后考完,三个月内忘光。
忘光很正常,因为那门课在很大程度上是一门手工计算课——它教你的是「在没有计算机的情况下,如何用笔算出答案」。而在 AI 的世界里,所有计算都由 NumPy、PyTorch 和 GPU 完成,没有人手算行列式;真正值钱的能力换成了另外两样:
- 几何直觉:看到 Ax 能想到「矩阵 A 把空间掰了一下,向量 x 被带到了新位置」;看到「低秩」能想到「这堆数据其实趴在一个更薄的平面上」。直觉让你能读懂论文里公式背后的意图。
- 形状思维:一个 (32, 512) 的矩阵乘一个 (512, 64) 的矩阵得到 (32, 64)——维度怎么流动、哪里会对不上、batch 维在哪里。这是你未来读模型代码、调 bug 时每天要用的技能,第 19 章专门训练它。
所以「全忘了」不是负债,某种意义上是轻装上阵:你不需要恢复手算能力,只需要建立一套新的、面向 AI 的理解方式。这本书从第一页起就按这个目标设计。
这就像你当年从 View 体系转 Jetpack Compose:不是把 onMeasure/onLayout 的细节背得更熟,而是换一套心智模型——「UI 是状态的函数」。线性代数也一样:应试版的心智模型是「矩阵是一坨要按规则计算的数字」,AI 版的心智模型是「矩阵是一个函数,它吃进一个向量,吐出另一个向量」。后者才是能长在脑子里、十年不忘的那种理解。
需要哪些,不需要哪些
把「为学 AI 服务」当成唯一标准,大学课程表可以砍掉一半、再补上一些当年根本不讲的内容。清单如下:
| 必须掌握(本书正篇) | 为什么 |
|---|---|
| 向量、点积、范数 | embedding、相似度检索、归一化,每天都在用 |
| 矩阵 = 线性变换、矩阵乘法 | 神经网络每一层的本体 |
| 行列式与逆(概念级) | 理解「信息有没有丢」「变换能不能撤销」 |
| 线性无关、基、秩 | 理解维度、压缩与 LoRA 的前提 |
| 投影与最小二乘 | 线性回归的本体,「学习」的最简原型 |
| 特征值 / 特征向量、SVD、PCA | 降维、压缩、初始化、LoRA、推荐系统 |
| 张量与形状运算 | 读写一切 AI 代码的语法基础 |
| 放心跳过(本书只一笔带过) | 为什么 |
|---|---|
| 行列式按行/列展开的手算流程 | np.linalg.det 一行搞定,且 AI 里几乎不算行列式的值 |
| 伴随矩阵求逆、克拉默法则 | 数值计算从不这么做,纯考试道具 |
| 若尔当标准形、λ-矩阵 | 理论美,AI 实践中出场率≈0 |
| 手工高斯消元的步骤记忆 | 思想值得懂(第 09 章讲思想),笔算流程不值得 |
如果你翻过大学教材,会发现上面第一张表里最后三行——SVD、PCA、张量——很多教材要么放在最后一章草草了事,要么根本不讲。而它们恰恰是 AI 里出勤率最高的选手。这正是「重学」的价值:这次我们按真实世界的权重分配注意力。
网上流传一种说法:「学 AI 不需要数学,会调 API 就行。」半对半错。如果你只想调用现成模型,确实不用;但只要你想读懂一篇论文、看懂一段模型源码、理解 LoRA 为什么省显存、debug 一个 shape 错误,线性代数就是绕不开的第一堵墙。好消息是这堵墙比传说中矮得多——它的核心直觉,一本 24 章的小书就装得下。
这本书的玩法
六卷的行军路线,从一支箭头走到大模型内部:
- 卷一 · 向量:一切的原子。箭头、坐标、点积、范数——顺便就把 embedding 和语义检索讲了。
- 卷二 · 矩阵:全书的心脏。矩阵不是数字表格,是变换;矩阵乘法不是数字游戏,是变换的复合。
- 卷三 · 空间:维度、基、秩——「数据的真实形状」这个问题的标准语言。
- 卷四 · 分解:把矩阵拆开看内脏:特征值、SVD、PCA,压缩与降维的数学核心。
- 卷五 · 走进 AI:用前四卷的全部零件,现场组装出神经网络、Attention 和 LoRA。
- 卷六 · 收束:一张对照总表,把 24 章压缩成一页,供你日后随时回查。
阅读时有三个约定,请让我用一小段话立好,它们会贯穿全书:
第一,颜色即身份。全书公式和所有互动 Demo 共用一套配色:橙红色永远是主角向量 v(或矩阵第一列、数据点),青蓝色永远是配角 w(或基向量、第二列),紫色永远是运算结果(v+w、Av、λ、主成分)。你在公式里看到橙红的 v,低头就能在画布里找到那支橙红的箭——颜色替你完成公式与图形之间的翻译。
第二,能拖就拖。本书有 14 个可以直接上手的 Demo:拖箭头、拉滑杆、单步执行。它们不是插图,是正文——很多直觉(比如「行列式变负时发生了翻转」)看十遍文字不如亲手拖一遍。遇到 ✋ DEMO 标记,请务必停下来玩两分钟。
第三,代码即公式。从卷三开始,重要结论都会配一小段 NumPy——AI 世界的通用语。你是 Android 工程师,Kotlin 会作为类比出现,但请把 NumPy 当作这门课的「目标平台」:以后你读任何模型代码,见到的都是它和它的方言(PyTorch)。
为什么书名叫「张成」?因为它是线性代数里最有生成力的概念:给你两支不共线的箭头,用「缩放 + 相加」这两个最朴素的动作,就能生成整个平面上的任何一点。少数几个元素,张成一整个世界——这既是线性代数的工作方式,也是这本书对你的期待:两三个核心直觉,张成你对 AI 的全部理解。第 03 章我们会让你亲手完成这个「张成」的动作。
给上班族重学者的三条建议
一,按卷推进,别跳卷。这本书的依赖关系是刻意设计的:第 22 章的 Attention 用到第 04 章的点积和第 07 章的矩阵乘,第 23 章的 LoRA 用到第 12 章的秩和第 17 章的 SVD。每章 20 分钟左右,一天一到两章,三周走完全程。卷内偶尔跳一章没事,跨卷跳读会让后面的章节变成天书。
二,Demo 的时间不算「耽误」。成年人重学数学最大的敌人是「我读懂了」的错觉——文字顺着眼睛滑过去,没有在脑子里留下抓痕。Demo 的作用就是制造抓痕:当你亲手把两支向量拖到垂直、看着点积读数掉到 0 的那一刻,「点积衡量相似度」才真正写进了长期记忆。每个 Demo 下面的引导问题,值得都试一遍。
三,卡壳时,退一层而不是硬顶。如果某个概念看不懂,九成的原因不是你笨,是它依赖的上一层直觉还没长牢。特征值看不懂就回到「矩阵是变换」(第 06 章),矩阵看不懂就回到「向量是箭头」(第 02 章)。线性代数是一栋依赖清晰的大厦,每层楼都有电梯直达,退回去的成本很低。
小结
这一章没有公式,只有一笔账:大模型的运行时几乎全部由矩阵乘法构成,参数就是矩阵元素,所以线性代数不是 AI 的「数学背景」之一,而是它的母语。你大学忘掉的多半是手算技巧,不可惜;这本书要重建的是几何直觉与形状思维,它们才是读懂模型的钥匙。下一章,我们从最小的原子开始——把「向量」这个词从模糊的记忆里捞出来,擦干净,看看它在几何、数据、代码三种视角下分别长什么样。
出发前留三个问题,不用现在回答,读完全书回头看会很有意思:为什么模型的参数「就是」矩阵元素,而不是别的什么?为什么「注意力」这种听起来很心理学的机制,拆开全是点积?为什么给大模型做微调,改动一个「秩为 8」的小矩阵就够了?——第 24 章见。