Skip to content

数学:只学用得上的那部分 ​

目标:看得懂公式、写得出代码,不追求会证明。

这篇按「AI 实际用到的部分」重排数学。每节都给出:它解决什么问题 → 必须掌握到什么程度 → 一项可验证的小练习。

总览:优先级排序 ​

分支优先级必须掌握可以先跳过
线性代数★★★★★向量/矩阵运算、内积、矩阵乘法、秩、特征值直觉、范数奇异值分解的证明、广义逆推导
微积分★★★★★导数、偏导、梯度、链式法则、常见函数导数ε-δ 极限、多重积分技巧
概率统计★★★★☆条件概率、贝叶斯、期望方差、常见分布、最大似然测度论、特征函数
优化★★★★☆梯度下降、随机梯度、凸性直觉、学习率影响收敛性证明
信息论★★★☆☆熵、交叉熵、KL 散度(会算会用)编码定理

一、线性代数:数据就是张量 ​

你真正要建立的三件事 ​

1. 形状(shape)是第一公民

AI 代码 90% 的报错是形状对不上。养成习惯:每写一行张量操作,先问「形状变成什么了」。

数据形状含义
一个标量()单个数字
一个向量(768,)一句话的 embedding
一批向量(32, 768)32 句话
一批序列(32, 128, 768)32 句 × 128 个 token × 768 维
一批图像(32, 3, 224, 224)32 张 × RGB × 高 × 宽

2. 矩阵乘法 = 批量线性变换

python
import numpy as np
x = np.random.randn(32, 768)     # 32 个样本
W = np.random.randn(768, 256)    # 权重
y = x @ W                        # (32, 768) @ (768, 256) → (32, 256)
print(y.shape)

记法:内维相同才能乘,结果是外维。 这一条能解决你 80% 的形状困惑。

3. 内积 = 相似度

两个向量的内积越大,方向越接近。这是向量检索(RAG 的召回) 的数学基础:

python
a = np.array([1.0, 0.0])
b = np.array([0.7, 0.7])
cos = (a @ b) / (np.linalg.norm(a) * np.linalg.norm(b))
print(f"余弦相似度 = {cos:.3f}")   # 0.707

为什么这很重要

你在 RAG 里做的所有「语义检索」,本质就是这篇讲的:把文本变成向量,算内积。理解了这点,向量数据库就不再是黑盒。

必须会的运算清单 ​

运算含义NumPy
转置行列互换A.T
矩阵乘线性变换A @ B
内积相似度a @ b
范数向量长度np.linalg.norm(a)
逆解方程用np.linalg.inv(A)
特征值变换的主方向np.linalg.eig(A)
广播不同形状的对齐运算自动

广播规则(必记):从最右维开始逐维比较,维度相等或其中一个为 1 则可广播。

python
X = np.random.randn(32, 10)     # (32,10)
mu = X.mean(axis=0)             # (10,)
print((X - mu).shape)           # (32,10):mu 被广播到每一行

练习 ​

一行代码完成:给 1000×768 的矩阵做行归一化(每行除以自己的 L2 范数)。

二、微积分:梯度指向最陡上坡 ​

只需要一个核心直觉 ​

梯度 = 函数上升最快的方向。要最小化损失,就往梯度反方向走。

这就是所有训练的本质。剩下的是工程细节。

必须掌握的导数 ​

函数导数用处
$x^n$$nx^{n-1}$多项式
$e^x$$e^x$softmax、概率
$\ln x$$1/x$交叉熵
$\sigma(x)$$\sigma(x)(1-\sigma(x))$sigmoid 激活

链式法则:复合函数逐层乘导数。反向传播就是链式法则在计算图上的高效实现。

python
import torch

# 自动求导:你只需要写前向
x = torch.tensor(2.0, requires_grad=True)
y = (3 * x ** 2 + 2 * x + 1)      # f(x) = 3x² + 2x + 1
y.backward()
print(x.grad)                      # 6x + 2 = 14

手算验证:$f'(x)=6x+2$,代入 $x=2$ 得 14 ✓

梯度下降的三种形态 ​

形态每步用多少数据特点何时用
批量 GD全部稳但慢、占内存小数据集
随机 SGD1 条快但抖极少单独用
小批量32–1024 条兼顾稳定与速度默认选择

学习率的影响(一定要亲手试):

学习率现象
太小(1e-6)loss 几乎不动,训练像没开始
合适(1e-3 ~ 1e-4)loss 平滑下降
太大(1.0)loss 震荡、变成 nan

练习 ​

写一个梯度下降求 $f(x)=x^4-3x^2+2$ 最小值的脚本,画出 loss 曲线,分别用 lr=0.001 / 0.1 / 1.0 对比。

三、概率统计:AI 在跟不确定性打交道 ​

必须掌握 ​

1. 条件概率与贝叶斯

$$P(A|B) = \frac{P(B|A)P(A)}{P(B)}$$

用处:从「已知特征,猜类别」反过来建模,朴素贝叶斯的原理,以及理解「先验 + 证据 → 后验」。

2. 期望与方差

  • 期望 = 平均值,模型预测的目标
  • 方差 = 波动,衡量稳定性
  • 偏差-方差权衡:模型太简单(高偏差,欠拟合)vs 太复杂(高方差,过拟合)—— 这是 L2 评估 的理论根基

3. 常见分布

分布用途
正态分布噪声假设、参数初始化
伯努利 / 二项二分类
分类分布(Categorical)语言模型下一个 token 的概率
泊松计数型事件

4. 最大似然估计(MLE):为什么用交叉熵

一句话:让模型输出的概率分布尽可能接近真实分布,等价于最小化交叉熵,也等价于最大化似然。

这就解释了为什么分类任务用交叉熵而不是 MSE —— 它是从概率假设推出来的,不是拍脑袋。

信息论三件套(会算就够) ​

python
import numpy as np

def entropy(p):
    p = np.asarray(p, dtype=float)
    return -np.sum(p * np.log(p + 1e-12))

def cross_entropy(p, q):
    p, q = np.asarray(p, float), np.asarray(q, float)
    return -np.sum(p * np.log(q + 1e-12))

def kl_div(p, q):
    p, q = np.asarray(p, float), np.asarray(q, float)
    return np.sum(p * np.log(p / (q + 1e-12)))

p = [1.0, 0.0, 0.0]          # 真实标签(one-hot)
q = [0.7, 0.2, 0.1]          # 模型预测

print(f"H(p)   = {entropy(p):.3f}")        # 0(确定性事件无信息量)
print(f"H(p,q) = {cross_entropy(p, q):.3f}")# 0.357(与真实分布的差距)
print(f"KL     = {kl_div(p, q):.3f}")      # 0.357(p 与 q 的分布差异)

记忆:交叉熵 = 熵 + KL 散度 = 「本来的不确定性」+「你猜错了多少」。

四、按需补充,不要提前学 ​

你开始做…那时再补
Transformer 与注意力点积注意力、softmax 数值稳定性
概率模型 / 生成模型变分推断、KL 散度深入
强化学习马尔可夫决策过程、贝尔曼方程
优化调不动动量、Adam 的偏差修正、二阶方法直觉
图神经网络图论基础、拉普拉斯矩阵

学习方式建议 ​

做法效果
✅ 看 3Blue1Brown 线代/微积分系列(建立直觉)极好,2–3 天看完
✅ 每个概念都写 5 行 NumPy 验证记忆最深
✅ 遇到论文公式,先问「这个量的形状是什么」破题关键
❌ 从头做教材习题到第 8 章时间黑洞
❌ 追证明除非你要写论文

通过标准 ​

下一步 ​

→ 数据工具链:NumPy / Pandas / 可视化

AI 学习路线 · 从入门到专家