时间可能不存在

没有追求的灵魂会很无趣

用户工具

站点工具


math

一、AI 需要哪些数学?

如果把 AI 数学压缩一下,主要就是这 5 类:

snippet.text
AI 数学
│
├── ① 线性代数
│   ├── 向量
│   ├── 矩阵
│   ├── 张量
│   ├── 矩阵乘法
│   └── 特征值/特征向量
│
├── ② 微积分
│   ├── 函数
│   ├── 导数
│   ├── 偏导数
│   └── 梯度
│
├── ③ 概率
│   ├── 概率
│   ├── 条件概率
│   ├── 随机变量
│   └── 概率分布
│
├── ④ 统计
│   ├── 均值
│   ├── 方差
│   ├── 协方差
│   └── 相关性
│
└── ⑤ 优化
    ├── Loss
    ├── Gradient Descent
    └── Adam

不用怕。

这里面很多东西你以前其实学过,只是现在忘了。

而且我们真正需要的数学深度,远没有大学数学系那么夸张。


二、第一课:什么是“函数”?

这是后面所有东西的基础。

先别管 AI。

假设有一个程序:

snippet.text
输入 CPU 温度
      ↓
   某个计算公式
      ↓
输出风扇转速

例如:

snippet.text
风扇转速 = 10 × 温度

数学上写成:

snippet.text
y = 10x

这就是一个函数。

可以理解成:

**函数 = 一个输入 → 按某种规则 → 得到一个输出**

例如:

snippet.text
x = 20
↓
y = 10 × 20
↓
y = 200

所以:

snippet.text
f(x) = 10x

和:

snippet.text
y = 10x

本质上是一回事。


三、为什么 AI 里面到处都是函数?

因为神经网络本质上就是:

snippet.text
输入
 ↓
函数
 ↓
函数
 ↓
函数
 ↓
输出

例如:

snippet.text
输入 x
 ↓
f₁(x)
 ↓
f₂(x)
 ↓
f₃(x)
 ↓
预测结果

所以可以把神经网络粗略理解成:

**一个非常复杂的函数。**

例如:

snippet.text
图片
 ↓
神经网络
 ↓
猫的概率 = 0.97

数学上其实就是:

snippet.text
y = f(x)

四、第二个概念:变量

这个更简单。

snippet.text
x = 10

这里:

snippet.text
x

就是变量。

它可以换:

snippet.text
x = 20
x = 30
x = 100

在 AI 中:

snippet.text
x

可能代表:

  • 一个温度
  • 一个 CPU 利用率
  • 一个图片
  • 一个 Token
  • 一个向量
  • 一批训练数据

所以看到:

snippet.text
x

不要害怕。

它通常就是:

**某个我们暂时不知道具体数值的东西。**

—

五、第三个概念:向量

这个是你接下来必须重点理解的。

假设我们测试一台服务器,记录:

snippet.text
CPU = 80%
Memory = 60%
GPU = 90%
Temperature = 70℃

可以写成:

snippet.text
x =
[
    80
    60
    90
    70
]

这就是一个向量(Vector)。

你也可以把它理解成:

**一组有顺序的数字。**

例如:

snippet.text
[1, 2, 3]

就是一个 3 维向量。

snippet.text
[1, 2, 3, 4, 5]

就是 5 维向量。


六、为什么 AI 特别喜欢向量?

因为计算机最擅长处理数字。

例如:

snippet.text
一个人

计算机不知道这个人是什么。

但是我们可以把一些特征数字化:

snippet.text
年龄 = 30
身高 = 175
体重 = 70
收入 = 10000

变成:

snippet.text
[30, 175, 70, 10000]

于是:

**现实世界的信息 → 数字 → 向量**

这就是 AI 数学非常重要的一步。


七、Embedding 就是这个思路

以后你会经常看到:

snippet.text
Embedding

例如:

snippet.text
"苹果"

经过模型:

snippet.text
Embedding
 ↓
[0.12, -0.43, 0.82, 0.11, ...]

可能是 768 维:

snippet.text
[
  0.12,
 -0.43,
  0.82,
 ...
]

于是计算机就可以通过数学方法比较:

snippet.text
苹果
香蕉
汽车
电脑

之间的“相似程度”。

所以你以后看到:

**Embedding = 把东西变成向量**

先记住这个直觉。


八、第四个概念:矩阵

如果一个向量是一行数据:

snippet.text
[1, 2, 3]

那么很多向量放在一起:

snippet.text
[
  1  2  3
  4  5  6
  7  8  9
]

就是:

**矩阵 Matrix**

可以简单理解:

snippet.text
向量 = 一排数字
 
矩阵 = 很多排数字

比如:

snippet.text
CPU Memory GPU
80  60     90
70  50     80
90  70     95

就是一个矩阵。


九、为什么 AI 需要矩阵?

这是非常重要的问题。

假设:

snippet.text
输入:
[1, 2, 3]

神经网络需要把它变换成:

snippet.text
[4, 5]

于是可以使用一个矩阵:

snippet.text
W =
[
  1  2
  3  4
  5  6
]

然后做:

snippet.text
X × W

得到:

snippet.text
Y

这就是神经网络最核心的计算之一:

snippet.text
Y = XW + b

你以后会发现:

**深度学习里面大量计算,本质上就是矩阵运算。**

而这也正是为什么 GPU 对 AI 如此重要。


十、矩阵乘法一定要搞懂

这个是后面 Transformer、CUDA、GPU 性能测试的基础。

假设:

snippet.text
A =
[
  1  2
  3  4
]
snippet.text
B =
[
  5  6
  7  8
]

那么:

snippet.text
A × B

结果:

snippet.text
[
  1×5 + 2×7    1×6 + 2×8
  3×5 + 4×7    3×6 + 4×8
]

得到:

snippet.text
[
  19  22
  43  50
]

你不需要现在死记。

但是一定要形成一个意识:

**矩阵乘法不是“对应位置直接相乘”,而是“行 × 列”。**

—

十一、为什么矩阵乘法和 GPU 有关系?

看一下刚才的计算:

snippet.text
1×5 + 2×7

实际上就是:

snippet.text
乘
+
乘
+
乘
+
乘
...

如果矩阵非常大:

snippet.text
4096 × 4096

就会产生海量乘加操作。

AI 模型里面这种计算可能达到:

snippet.text
数十亿
数万亿

次。

而 GPU 特别擅长:

**同时进行大量简单的乘加计算。**

所以:

snippet.text
Transformer
 ↓
大量矩阵乘法
 ↓
GPU
 ↓
Tensor Core

这条链你以后会经常看到。


十二、第五个概念:Tensor

你以后看 PyTorch 会疯狂看到:

snippet.python
Tensor

Tensor 不需要把它想得很复杂。

可以先这么理解:

snippet.text
标量 Scalar
    ↓
向量 Vector
    ↓
矩阵 Matrix
    ↓
多维数组 Tensor

例如:

snippet.text
10

是标量。

snippet.text
[1, 2, 3]

是向量。

snippet.text
[
 [1,2,3],
 [4,5,6]
]

是矩阵。

再往上:

snippet.text
[
 [
   [1,2,3],
   [4,5,6]
 ],
 [
   [7,8,9],
   [10,11,12]
 ]
]

就是更高维的 Tensor。

所以你可以简单记:

**Tensor = 多维数字容器。**

—

十三、为什么 PyTorch 不直接叫 Matrix?

因为 AI 数据经常不是二维。

例如一批图片:

snippet.text
Batch
 ×
Channel
 ×
Height
 ×
Width

可能是:

snippet.text
32 × 3 × 224 × 224

这已经是 4 维数据。

所以:

snippet.python
x.shape

可能返回:

snippet.text
[32, 3, 224, 224]

这就是 Tensor。


十四、接下来是一个非常重要的概念:距离

假设:

snippet.text
A = [1, 2]
 
B = [4, 6]

A 和 B 离得多远?

你应该还记得初中数学:

snippet.text
√((4-1)² + (6-2)²)

也就是:

snippet.text
√(3² + 4²)
= √25
= 5

这就是向量之间的欧氏距离。

为什么 AI 需要这个?

例如:

snippet.text
Embedding A
Embedding B

如果两个向量距离比较近:

snippet.text
语义可能比较相似

于是:

snippet.text
Embedding
 ↓
Vector
 ↓
Distance / Similarity
 ↓
判断相似程度

这就是 RAG、向量数据库的基础之一。


十五、点积:AI 中超级重要

再看:

snippet.text
A = [1, 2, 3]
 
B = [4, 5, 6]

点积:

snippet.text
A · B
=
1×4 + 2×5 + 3×6
=
32

你会发现:

**点积本质上也是乘法 + 加法。**

它可以用来衡量两个向量之间的某种“方向一致程度”。

这就非常重要了。

因为 Transformer 的 Attention:

snippet.text
QKᵀ

本质上就在大量做:

**向量之间的点积。**

所以你现在理解:

snippet.text
向量
 ↓
点积
 ↓
矩阵乘法
 ↓
Attention

以后学 Transformer 会轻松很多。


十六、然后我们进入微积分:导数

这个名字很吓人。

实际上先理解一个非常简单的问题:

**一个东西变化的时候,另一个东西变化得有多快?**

例如:

snippet.text
时间 → CPU温度

假设:

snippet.text
10秒:50℃
20秒:60℃
30秒:70℃

温度变化速度:

snippet.text
10℃ / 10秒
=
1℃/秒

这个“变化速度”的概念,就是导数最核心的直觉。


十七、为什么 AI 需要导数?

这是 AI 最关键的问题之一。

假设:

snippet.text
模型参数 W
    ↓
模型
    ↓
预测结果
    ↓
Loss

我们希望:

**Loss 越来越小。**

那么我们需要知道:

W 改一点,Loss 会怎么变化?

也就是:

snippet.text
Loss 对 W 的变化率

这就是导数。


十八、梯度

如果只有一个参数:

snippet.text
W

我们可以:

snippet.text
dLoss / dW

但是神经网络可能有:

snippet.text
10亿个参数

于是:

snippet.text
W1
W2
W3
...
W1000000000

每个参数都有一个变化方向。

于是把这些导数放在一起:

**梯度 Gradient**

可以理解成:

snippet.text
Gradient =
[
 ∂Loss/∂W1
 ∂Loss/∂W2
 ∂Loss/∂W3
 ...
]

十九、梯度到底有什么用?

想象你站在一座山上。

目标:

**走到山谷最低点。**

你需要知道:

哪个方向是下坡?

梯度就是在告诉你:

**当前这个位置,哪个方向 Loss 增长最快。**

所以我们反过来走:

snippet.text
参数
 ↓
计算梯度
 ↓
朝梯度反方向走
 ↓
Loss下降

这就是:

Gradient Descent

梯度下降。


二十、这就是 AI 训练的核心循环

你现在应该开始把前面的知识串起来:

snippet.text
输入数据
   ↓
Tensor
   ↓
神经网络
   ↓
矩阵运算
   ↓
预测结果
   ↓
Loss
   ↓
计算 Gradient
   ↓
修改参数
   ↓
再次计算
   ↓
Loss越来越小

所以你以后看到:

snippet.python
loss.backward()

不要觉得这是什么神秘魔法。

它本质上是在:

**计算损失函数对模型参数的梯度。**

—

二十一、概率:AI 为什么需要概率?

这个也非常重要。

假设模型看到一张图片:

snippet.text
猫?
狗?
兔子?

模型可能输出:

snippet.text
猫:0.80
狗:0.15
兔子:0.05

这里:

snippet.text
0.80
0.15
0.05

就是概率。

所以 AI 很多时候不是:

snippet.text
一定是猫

而是:

snippet.text
P(猫) = 80%
P(狗) = 15%
P(兔) = 5%

二十二、条件概率

这个以后也非常重要。

例如:

已知一个词前面出现了“北京”,后面出现“天气”的概率是多少?

写成:

snippet.text
P(天气 | 北京)

读作:

在已知北京的条件下,天气出现的概率。

LLM 本质上就在不断做类似的事情:

snippet.text
P(next token | previous tokens)

也就是:

**根据前面的 Token,预测下一个 Token 的概率。**

这句话非常重要。

因为:

LLM 的核心任务之一,就是预测下一个 Token。


二十三、均值

这个最简单。

例如 GPU 温度:

snippet.text
60
65
70
75

平均值:

snippet.text
(60+65+70+75)/4
=67.5

AI 里面到处都是均值。

例如:

snippet.text
Batch Mean
Dataset Mean
Loss Mean

二十四、方差

这个非常值得理解。

假设两组测试数据:

snippet.text
A:
50
50
50
50
snippet.text
B:
20
50
80
50

两组平均值都是:

snippet.text
50

但是:

B 的波动明显更大。

这个“数据有多分散”,就是:

方差 Variance

标准差:

snippet.text
Standard Deviation

就是方差开平方。

你以后做 AI 性能测试,会大量用到:

snippet.text
Mean
Median
P95
P99
Standard Deviation

所以统计学对测试工程师其实非常重要。


二十五、你现在暂时不用学什么?

为了避免你重新掉进“大学数学大坑”,这些暂时不用深入:

snippet.text
❌ 复杂积分
❌ 微分方程
❌ 实分析
❌ 抽象代数
❌ 群论
❌ 拓扑

甚至:

snippet.text
特征值
SVD
概率分布
贝叶斯

现在也只需要先建立概念。

后面学 Transformer、机器学习的时候再回来补。


二十六、我们现在先建立一张“AI 数学地图”

你可以把下面这张图当作接下来学习的主线:

snippet.text
                    AI
                     │
          ┌──────────┴──────────┐
          │                     │
       数据表示                模型训练
          │                     │
       Vector                  Loss
          │                     │
       Matrix                  Gradient
          │                     │
       Tensor                  Derivative
          │                     │
       Dot Product             Optimization
          │                     │
          └──────────┬──────────┘
                     │
                Neural Network
                     │
                 Transformer
                     │
                    LLM

二十七、你现在最应该先搞懂的 10 个东西

不要一次学几十个。

按照这个顺序:

snippet.text
① 函数
② 变量
③ 向量
④ 矩阵
⑤ 矩阵乘法
⑥ Tensor
⑦ 点积
⑧ 导数
⑨ 梯度
⑩ 概率

其中我尤其建议:

**向量 → 矩阵 → 矩阵乘法 → 点积**

这四个一定要真正理解。

因为后面:

snippet.text
Neural Network
       ↓
Transformer
       ↓
Attention
       ↓
LLM
       ↓
GPU
       ↓
CUDA

会不断出现它们。

math.txt · 最后更改: 由 chenyang