线性代数:数据与变换的语言
目标:看懂并会算向量和矩阵的运算,理解"神经网络的输入是向量、每一层是一次线性变换",掌握 SVD 降维思想。
向量:AI 的数据语言
在 AI 里,一切皆向量:一张 28×28 像素的图片展平后是 784 维向量;一个词由 300 维的"词向量"表示;一个样本就是一长串数字。
两个基本运算:
- 加法:a + b = (a1+b1, a2+b2, …),逐坐标相加
- 数乘:λa = (λa1, λa2, …),把向量"伸缩"
最重要的运算是内积(点积):
以及范数(向量的"长度"):
📝 小测验:内积 a·b 越大,通常说明两个向量……
✅ 正确!内积越大表示方向越接近("越相似"),这正是词向量和图片特征比较的基础。
矩阵与线性变换
矩阵就是一个 m 行 × n 列的数字表格。神经网络的每一层核心就是一个矩阵 W:
矩阵乘法的规则:
📝 小测验:一个 (3×4) 矩阵乘一个 (4×5) 矩阵,结果的形状是?
✅ 正确!内维数 4 匹配后消掉,结果取外维数:(3×4)·(4×5) = 3×5。
行列式、逆矩阵与特征值
三个"进阶概念",知道直觉即可:
- 行列式 det(W):变换把面积/体积放大了 det 倍。det = 0 表示空间被"压扁"了(信息丢失),此时矩阵不可逆。
- 逆矩阵 W⁻¹:满足 W⁻¹W = I,是"撤销变换"的操作。
- 特征值:Wv = λv —— 向量 v 方向不变,只被拉伸了 λ 倍。
📝 小测验:det(W) = 0 意味着……
✅ 正确!压扁 = 信息丢失,无法还原,所以不存在逆矩阵。
SVD 奇异值分解
奇异值分解(Singular Value Decomposition)把任意矩阵拆成三个"简单操作"的复合:
其中:
- U(m×m):正交矩阵,列向量是 A 的左奇异向量
- Σ(m×n 对角):对角线上是奇异值 σ₁ ≥ σ₂ ≥ … ≥ 0,表示每个方向的"重要程度"
- VT(n×n):正交矩阵,行向量是 A 的右奇异向量
低秩近似:只保留前 k 个奇异值,得到 A 的最佳秩-k 近似:
📝 小测验:SVD 中奇异值越大表示……
✅ 正确!奇异值 = 该方向的拉伸倍率,越大越重要,低秩近似保留大的、丢弃小的。
微积分:变化的语言
目标:理解导数和链式法则,能回答"某个参数变化一点,损失会怎么变"。
导数与链式法则
导数 = 瞬时变化率,直观上就是曲线的"坡度"。
常用的几条(背下来就够用):
链式法则(本课之王):函数套函数时,逐层求导再相乘:
例:f(x) = (2x+1)3 → f′(x) = 3(2x+1)2 · 2
神经网络的激活函数常用 sigmoid:
📝 小测验:f(x) = (3x − 1)² 的导数是?
✅ 正确!外层求导 2(3x−1)¹,再乘内层导数 3 → 2(3x−1)·3 = 6(3x−1)。
偏导数与梯度
神经网络的参数不是一个、而是几百万个。对多元函数 f(x, y),偏导数表示只沿一个方向变化的速度:
把所有偏导数打包成一个向量,就是梯度:
📝 小测验:f(x, y) = x² + y³,∂f/∂y = ?
✅ 正确!对 y 求偏导时把 x 当常数:∂/∂y (x² + y³) = 3y²。
反向传播:层层求导
看一个最简单的神经元(前向传播):
反向传播就是把链式法则从 L 往外一层层拆:
📝 小测验:反向传播本质上是……
✅ 正确!反向传播 = 链式法则 + 动态规划式的记录复用,没有更多魔法。
概率与统计:不确定性的语言
目标:理解分布、期望、贝叶斯、熵与 KL 散度,能读懂模型输出和损失函数的含义。
概率与分布
随机变量 X 的分布列出每种取值的可能性,概率总和为 1:
两条基本规则:
📝 小测验:掷一次骰子,"点数 ≤ 3" 的概率是?
✅ 正确!{1, 2, 3} 三种情况,各 1/6,相加 = 3/6 = 1/2。
期望与方差
📝 小测验:公平骰子的期望点数 E[X] = ?
✅ 正确!E = (1+2+3+4+5+6)×(1/6) = 21/6 = 3.5。
贝叶斯定理
用新证据更新旧观点:
经典例子:某病患病率 P(A)=1%,检测灵敏度 P(B|A)=99%,健康者假阳性 P(B|¬A)=5%。检测阳性后真的患病的概率是?
📝 小测验:上面的检测例子中,P(A|B) ≈ ?
✅ 正确!0.0099 / 0.0594 ≈ 16.7%。先验概率让"阳性"远没直觉以为的那么可靠。
熵与交叉熵
熵衡量分布的"不确定程度"(单位 bit):
交叉熵衡量"真实标签在预测分布下有多意外",二元分类时:
📝 小测验:真实标签 y = 1 时,预测概率 q 越接近 1,交叉熵……
✅ 正确!y=1 时 L = −ln q,q→1 时 L→0,预测越好损失越小。
KL 散度(Kullback-Leibler)
KL 散度衡量两个分布之间的距离(非对称):
性质:
- DKL(P ‖ Q) ≥ 0,当且仅当 P = Q 时为 0
- 非对称:DKL(P ‖ Q) ≠ DKL(Q ‖ P)
- 与交叉熵的关系:H(P, Q) = H(P) + DKL(P ‖ Q)
📝 小测验:KL 散度 DKL(P ‖ Q) = 0 意味着……
✅ 正确!KL = 0 ⟺ P(x) = Q(x) 对所有 x 成立,两个分布完全一致。
优化:让模型变好的方法
目标:理解损失函数与梯度下降,能直觉地判断学习率大小是否合适,理解正则化。
损失函数:衡量"错多少"
损失函数 L 把"模型错得有多离谱"压成一个数字,越小越好:
一个好的损失函数要:① 模型越好值越低;② 光滑可导(这样才能用梯度下降)。
📝 小测验:MSE 什么时候取最小值 0?
✅ 正确!平方项非负,全部为 0 时才整体为 0。
梯度下降:下山算法
梯度下降的更新规则只有一行:
θ 是参数,η 是学习率(步长)。∇L 指向上坡最快方向 → 减去它就是沿下降方向走一步。
🎮 交互演示:调学习率 η,看小球怎么下山
试试把 η 调到 1.5 或 2.0 再看一遍——发生了什么?
📝 小测验:θ ← θ − η∇L 本质上是在……
✅ 正确!梯度指向上坡最快方向,减掉它 = 沿下降方向走一步。
学习率与优化器
- η 太小:慢得像蜗牛,收敛太慢;η 太大:一步迈过谷底,震荡甚至发散(上面的演示里见过)。
- SGD(随机梯度下降):每次只用一小批(mini-batch)样本估计梯度 → 有噪声,但更省、更泛化。
- 动量(Momentum):给更新加"惯性",减少震荡、冲过平缓地带。
- Adam:给每个参数自适应地调步长,是现代网络的默认选择。
📝 小测验:学习率 η 太大通常会导致……
✅ 正确!步太长会迈过谷底来回震荡,甚至直接飞出去(发散)。
正则化:L1 与 L2
模型太复杂会"背答案"(过拟合)。正则化在损失里加一个惩罚项,逼模型"简单":
| 类型 | 惩罚项 Ω(W) | 效果 | 直觉 |
|---|---|---|---|
| L2(权重衰减) | ‖W‖₂² = Σ wᵢ² | 权重趋向小而均匀 | 把参数"往原点拉" |
| L1(Lasso) | ‖W‖₁ = Σ |wᵢ| | 很多权重恰好变 0 | 自动"剪枝"不重要的连接 |
| Dropout | 训练时随机丢弃神经元 | 防止依赖单一路径 | 相当于隐式集成 |
📝 小测验:L1 正则化最显著的效果是……
✅ 正确!L1 的 |w| 在原点不可导,梯度下降会把不重要的权重推到恰好 0。
神经网络数学:核心组件推导
目标:理解 Softmax、激活函数、卷积、注意力机制背后的数学,不再把网络当黑箱。
Softmax 推导与性质
Softmax 把一组任意实数(logits)变成一组概率分布:
为什么这样设计?
- ez > 0 → 保证输出非负
- 除以总和 → 保证概率和为 1
- 指数放大差异 → 最大的 logit 获得最高概率("赢家通吃"倾向)
数值稳定技巧:先减去最大值再算指数,避免溢出:
温度参数 τ:控制"自信程度":
📝 小测验:Softmax 输出中,哪个分量最大?
✅ 正确!e^z 单调递增,最大的 z 产生最大的 e^z,除以总和后仍最大。
激活函数比较
激活函数给网络引入非线性——没有它,多层线性变换等价于一层。
| 函数 | 公式 | 导数 | 优缺点 |
|---|---|---|---|
| Sigmoid | σ(z) = 1/(1+e−z) | σ(z)(1−σ(z)) | 输出 (0,1);但 z 大时导数→0(梯度消失) |
| Tanh | tanh(z) = (ez−e−z)/(ez+e−z) | 1 − tanh²(z) | 输出 (−1,1),零中心;仍有梯度消失 |
| ReLU | max(0, z) | 1 (z>0), 0 (z≤0) | 计算快、缓解梯度消失;但 z<0 时梯度=0("死神经元") |
| Leaky ReLU | max(0.01z, z) | 1 或 0.01 | 解决"死神经元" |
| GELU | z·Φ(z)(Φ 为标准正态 CDF) | ≈ 光滑过渡 | Transformer 默认激活 |
📝 小测验:ReLU(z) = max(0, z) 在 z = −3 时的导数是?
✅ 正确!z < 0 时 ReLU 输出恒为 0,导数 = 0(梯度消失 / 死神经元)。
卷积的数学
卷积(Convolution)是 CNN 的核心运算。对离散信号:
在 CNN 里,"卷积"实际是互相关(cross-correlation)——用滤波器核 K 在输入 X 上滑动:
关键参数:
- 核大小(如 3×3):感受野,决定"看多大范围"
- 步幅(stride):滑动间隔,控制输出尺寸
- 填充(padding):边界补零,保持尺寸
- 通道数:每个核"看"所有输入通道,输出多个特征图
输出尺寸公式:
📝 小测验:卷积核的"权重共享"意味着……
✅ 正确!一个 3×3 核只有 9 个参数,但它在整张图上每个位置都用同一组参数——这就是权重共享。
注意力机制的数学
注意力(Attention)让模型"动态地决定看哪里"。核心公式(Scaled Dot-Product Attention):
拆解每一步:
- Q(Query):当前 token "我想找什么信息?"
- K(Key):每个 token "我是什么?"
- V(Value):每个 token "我能提供什么信息?"
- QKT:内积 → 相似度矩阵(每个 query 对每个 key 的匹配度)
- / √dk:缩放,防止内积过大导致 softmax 梯度消失
- softmax:把相似度变成权重分布(和为 1)
- × V:加权求和 → 每个位置得到"综合了所有相关 token"的新表示
多头注意力:h 个头并行做注意力,拼接后线性变换:
📝 小测验:注意力公式中除以 √dk 的目的是……
✅ 正确!d_k 大时 QK^T 方差大 → softmax 输出接近 one-hot → 梯度极小。缩放使方差归一。
综合实战:把一切串起来
目标:亲手推一遍前向 + 反向传播,亲眼看着参数被"训练"。
训练一个神经元
把所有模块全部串起来——一个神经元,输入 x₁, x₂,目标 t = 1.0:
🎮 亲手训练:拖动权重试试,或点"训练"
观察:每训练一步,链式法则的每个乘数实时变化,损失下降,权重自动趋向让 a→1 的值。
| 数学工具 | 它在哪里出场 |
|---|---|
| 内积 / 矩阵乘法 | 计算每个神经元的输入(每层的线性变换) |
| SVD / 特征值 | 降维、LoRA 低秩近似、理解变换结构 |
| 链式法则 | 反向传播求梯度 |
| 梯度 | 告诉每个参数往哪个方向调 |
| 期望 | 损失是数据分布上的期望误差 |
| 交叉熵 / KL 散度 | 分类损失、知识蒸馏、VAE 正则 |
| Softmax | 分类输出、注意力权重、温度采样 |
| 卷积 | CNN 特征提取、局部模式检测 |
| 注意力 QKV | Transformer / LLM 的核心运算 |
| 正则化 L1/L2 | 防止过拟合、稀疏化、weight decay |
| 梯度下降 | 把上面全部串起来的优化算法 |
- 能手算一个小矩阵乘积和一次链式求导
- 能说出贝叶斯公式,并解释"阳性≠患病"
- 能写出梯度下降更新公式并解释 η 的作用
- 能解释 Softmax 的温度参数 τ 对输出的影响
- 能写出注意力公式并解释 Q、K、V 各自的角色
- 能说出 L1 与 L2 正则化的区别
- 在上面的演示中,能让损失降到 0.01 以下
📝 小测验:当 z → +∞ 时,σ(z) → ?
✅ 正确!z→+∞ 时 e−z→0,所以 σ(z) = 1/(1+e−z) → 1。
学习路线与资源
推荐节奏(本页顺序即是):
- 模块 1:配合 3Blue1Brown《线性代数的本质》看,建立几何直觉;SVD 可参考 Gilbert Strang 的讲解
- 模块 2:复习 Khan Academy 导数章节,重点吃透链式法则
- 模块 3:MIT 18.05 或 Khan Academy 概率章节;KL 散度参考 Cover & Thomas《信息论》第 2 章
- 模块 4:用 Python 从零写一遍梯度下降(不用任何库);正则化部分参考 CS231n 笔记
- 模块 5:Softmax / 激活函数看 CS231n;卷积看 Stanford CS231n Lecture 7;注意力读原论文 "Attention Is All You Need"(2017)
- 模块 6:跟 fast.ai / PyTorch 教程上手真实训练
精选资源:
- 3Blue1Brown:线性代数 / 微积分 / 神经网络系列(可视化直觉极佳)
- 《Mathematics for Machine Learning》(Deisenroth 等):免费在线书,数学与 ML 无缝对接
- Stanford CS229 Notes:经典机器学习课程讲义,含完整推导
- Stanford CS231n:卷积网络与注意力机制的最佳入门课程
- "Attention Is All You Need"(Vaswani et al., 2017):Transformer 原论文,数学清晰
- PyTorch Tutorial:hands-on,autograd 会帮你验证反向传播
- 《Deep Learning》(Goodfellow 等):第 3 章 + 数学附录,进阶圣经
- 《Dive into Deep Learning》(d2l.ai):免费交互式教材,含代码
动手练习建议:
- ① 从零实现线性回归(含梯度下降,拟合 20 个带噪声的点)
- ② 用 PyTorch 搭一个 2 层网络解决 XOR 问题
- ③ 对同一模型调 3 个学习率,画出 loss 曲线并解释差异
- ④ 用 NumPy 手动实现一次 3×3 卷积,与 PyTorch Conv2d 对比验证
- ⑤ 用 4 个 token 手算一遍 Self-Attention(Q、K、V 各 2 维),验证 softmax 权重
- ⑥ 给线性回归分别加 L1 和 L2 正则化,观察权重变化差异
📝 小测验:学完这 22 课后,下面哪个说法是正确的?
✅ 正确!前向靠线性代数,反向靠微积分(链式法则),损失建立在概率(交叉熵/期望)之上,而优化器负责最小化它——四者缺一不可。