卷0 · 基础篇
0.1 数学基础:线性代数 · 概率 · 优化(深度学习视角三合一)
展开本章目录与同卷章节
1. 为什么学这三样2. 线性代数2.1 向量与内积:相似度的度量2.2 矩阵乘法:三种视角2.3 范数与距离2.4 特征分解与 SVD:低秩的世界2.5 矩阵求导与链式法则3. 概率与信息论3.1 速通核心概念3.2 极大似然:训练到底在干嘛3.3 熵、交叉熵、KL 散度3.4 softmax 与温度4. 优化4.1 损失曲面的高维直觉4.2 从 SGD 到 AdamW4.3 学习率:最重要的单一超参4.4 Batch size 与梯度累积4.5 过拟合与正则化4.6 训练曲线诊断速查表(先背下来)5. 自测十题(答案提示在括号里)6. 动手作业图解 · 数学地图与一次手算7. 延伸资源同卷章节0.1 数学基础:线性代数 · 概率 · 优化(深度学习视角三合一)0.2 Python 与 PyTorch 实战:从装环境到手写训练循环0.3 神经网络与反向传播:从零实现(micrograd 路线)0.4 训练工程常识:混合精度、断点续训、调试与监控0.5 Git / Linux / 远程开发生存包本章目标:不是把你变成数学系学生,而是把后续所有章节会用到的数学一次配齐,并且每个概念都告诉你它在模型里的哪个位置出现。学完标准:能看懂后续所有章节的公式,能自己推导 softmax+交叉熵 的梯度。
1. 为什么学这三样
深度学习里,数学只有三个角色:
| 数学分支 | 角色 | 一句话 |
|---|---|---|
| 线性代数 | 数据的语言 | 图像、文本、特征全都是矩阵/张量,模型就是一连串矩阵变换 |
| 概率与信息论 | 学习的目标 | “训练”= 让模型输出的概率分布逼近真实分布 |
| 优化 | 学习的发生机制 | 沿着梯度下降,把目标变小 |
传统数学课按”定义→定理→证明”推进,我们反过来:先看它在模型里的用法,再回头看定义。
2. 线性代数
2.1 向量与内积:相似度的度量
向量是一列数。内积(点积),几何意义是”对齐程度”:方向越一致,内积越大。
为什么这是最重要的概念:整个多模态大模型都在算内积。
- CLIP 把图像和文本各编码成一个向量,用内积衡量”图文是否匹配”;
- Attention 的核心就是 Query 和 Key 的内积(),内积大 = “这个位置值得注意”;
- 向量数据库检索图片 = 查询向量与百万张图的特征向量算内积。
2.2 矩阵乘法:三种视角
( 是 , 是 )可以同时理解为:
- 变换的复合: 对空间做一次线性变换, 再做一次。神经网络的每一层就是一次变换,100 层网络 = 100 次复合。
- 批量内积: 的第 元 = 的第 行与 的第 列的内积。Attention 矩阵 就是这个视角。
- 加权求和: 的每一列是 的列的线性组合,组合权重来自 。全连接层 就是”用 的行作为权重,混合输入特征”。
三种视角在调试时各有用处。看到矩阵乘法报 shape 错误,先问自己用的是哪个视角。
2.3 范数与距离
- 范数 :欧氏长度,默认选项。
- 范数 :对离群值不敏感,稀疏化时用。
常见用法:权重衰减(weight decay)约束的是权重的 范数;归一化(normalize)把向量除以自己的 范数后,内积就变成了余弦相似度——CLIP 检索、向量库检索都这么做。
2.4 特征分解与 SVD:低秩的世界
SVD(奇异值分解)说:任何矩阵 都可以拆成 ,其中 是对角阵,对角元(奇异值)从大到小排。保留前 个最大奇异值,就能用低秩矩阵近似 。
这在多模态大模型里的出现位置:
- LoRA:微调大模型时不直接更新权重矩阵 ,而是学一个低秩增量 ( 是 , 是 ,)。理论基础就是”微调带来的权重变化近似低秩”。你在路线阶段2就会用它。
- 图像压缩、PCA 降维、推荐系统,本质都是”砍掉小的奇异值”。
2.5 矩阵求导与链式法则
深度学习的”学习”= 对数百万个参数求梯度,然后沿梯度反方向走。你需要的矩阵求导其实只有一条规则:
链式法则:,则 。多变量的情况就是把雅可比矩阵相乘——这就是”反向传播”的全部数学。
必会推导:softmax + 交叉熵的梯度 = 预测 − 标签
softmax 把任意分数向量 变成概率分布:。 交叉熵损失:,其中 , 是 one-hot 标签。
直接对 求导(过程略,建议自己推一遍,用到的只有链式法则和 ),结论:
为什么这个结论是深度学习里最重要的一行公式:梯度恰好是”预测概率分布减去真实分布”。模型错得越离谱,梯度越大——学习的方向自动就是”把概率从错误的类挪到正确的类”。语言模型预测下一个 token、VLM 回答问题,输出的都是这个形式。你以后看到 loss = cross_entropy(logits, labels),脑子里应该浮现 p − t。
3. 概率与信息论
3.1 速通核心概念
- 随机变量与分布:图像分类模型输出 ,就是一个分类分布(categorical distribution)。
- 条件概率 :给定输入图像 ,输出标签 的概率。监督学习学到的就是这个——所以分类模型叫”判别式”,生成模型学 或 ,叫”生成式”。扩散模型和 GPT 都是生成式。
- 期望与方差:随机初始化下 loss 的波动、batch 之间的梯度噪声,都用它们来描述。
3.2 极大似然:训练到底在干嘛
给定数据 和带参数 的模型 ,极大似然估计(MLE)就是选 让数据出现的概率最大:
右边就是”最小化负对数似然(NLL)“——你训练过的每一个模型的损失函数,几乎都是它换个名字:
- 分类任务的交叉熵 = NLL;
- 语言模型”预测下一个 token”= 对下一个 token 的 NLL;
- 扩散模型预测噪声的 MSE = 高斯假设下 NLL 的简化版。
建立这个等式感:以后看到任何奇怪的 loss,第一反应问”它是谁的负对数似然”。
3.3 熵、交叉熵、KL 散度
- 熵 :分布的不确定性。均匀分布熵最大。
- 交叉熵 :用 编码真实分布 的代价。训练时 是数据/标签, 是模型输出。
- KL 散度 :两个分布的差异。 固定时,最小化交叉熵 = 最小化 KL。
出现位置:
- 知识蒸馏:让学生的输出分布逼近老师的(KL);
- DPO / RLHF:约束微调后的模型别偏离原模型太远(KL 惩罚);
- VAE:后验分布逼近标准正态(KL)。
一句话:交叉熵管”学什么”,KL 管”别学歪”。
3.4 softmax 与温度
里的 是温度: 逼近取最大值(独断), 大则分布平坦(犹豫)。出现位置:LLM 采样时的 top-p/top-k 温度参数;蒸馏时高温让老师的”暗知识”(次优选项的相对概率)显现。
4. 优化
4.1 损失曲面的高维直觉
参数量上亿的模型,损失曲面在高维空间里。高维空间的重要事实:真正的”局部极小值”很少,绝大多数驻点是鞍点——某些方向向上、某些方向向下,总能找到出路。所以不用担心”卡在局部最优”,实际问题是”下降太慢”和”震荡”。
4.2 从 SGD 到 AdamW
- SGD:沿当前 batch 的梯度走一小步。问题:不同参数的梯度尺度差异大,一个学习率伺候不了一堆参数。
- Momentum:积累历史梯度方向,冲过小沟坎。
- Adam:为每个参数自适应缩放步长(除以梯度的一阶/二阶动量)。现代默认。
- AdamW:修复了 Adam 中 weight decay 与自适应步长耦合的 bug,把权重衰减解耦出来。现在所有 LLM/VLM 训练默认都是 AdamW,你只需要记住这个名字和”decay 系数一般 0.01~0.1”。
4.3 学习率:最重要的单一超参
现代默认配方:warmup + cosine decay。前 1~5% 步数从 0 线性升到峰值(大模型早期梯度方向不可信,直接大步会崩),然后余弦缓降到接近 0。
经验参考值:从零训小模型峰值 1e-3 量级;微调 7B 用 LoRA 峰值 1e-4 ~ 2e-4;全参数微调大模型 1e-5 量级。微调的学习率几乎总比预训练小 10~100 倍——别把人家学好的东西一脚踢翻。
4.4 Batch size 与梯度累积
大 batch 梯度更稳但单步更贵,且一般认为大 batch 要配大学习率(线性缩放法则,够用即可不必深究)。显存不够时用梯度累积:小 batch 算多次梯度,攒够了再更新一步,等效于大 batch。LoRA 微调 7B 时你几乎一定会用到它。
4.5 过拟合与正则化
- 现象:训练 loss 降、验证 loss 升。数据少 + 模型大 + 训练久 = 必然。
- 手段按优先级:更多/更好的数据 > 数据增强 > weight decay/dropout > 早停。
- 微调场景的特殊性:数据只有几千条时,与其调正则,不如减 epoch、降学习率、用 LoRA。
4.6 训练曲线诊断速查表(先背下来)
| 症状 | 最可能原因 | 处置 |
|---|---|---|
| loss 一开始就 NaN | 学习率过大 / 数据有坏样本 / fp16 溢出 | 降 lr,跳数数据,换 bf16 |
| loss 降到 0.69 附近卡住(二分类) | 模型输出对称、学了个寂寞:标签错了或数据无信号 | 查标签对齐 |
| 训练 loss 降、验证 loss 升 | 过拟合 | 减 epoch、加数据、加正则 |
| loss 剧烈锯齿 | batch 太小或 lr 太大 | 梯度累积、降 lr |
| loss 平台期很久 | lr 太小 / warmup 太长 / 模型容量不够 | 升 lr、查瓶颈 |
5. 自测十题(答案提示在括号里)
- 两个单位向量的内积最大是多少?此时几何关系是什么?(1;同向)
- 为什么归一化后内积 = 余弦相似度?( 时 )
- 一个 的权重矩阵,LoRA 取 ,参数量从多少降到多少?(16.8M → 131K,两个矩阵 )
- 里, 的一行和 的一行分别是什么?(一个 query 向量、一个 key 向量;结果是注意力分数)
- 为什么交叉熵可以写成”负对数似然”?(对 one-hot 标签,,即真实类的对数概率取负)
- 熵为 0 的分布是什么?(one-hot,完全确定)
- KL(p‖q) 和 KL(q‖p) 一样吗?不对称会带来什么行为差异?(不一样;前者在 q 概率低处惩罚重——“宁可信其有”,后者在 p 概率低处惩罚重——“宁可漏掉”。蒸馏里两种选择行为不同,是活跃的研究细节)
- AdamW 和 Adam 的区别一句话?(weight decay 从梯度自适应缩放里解耦出来)
- 微调时学习率应该比预训练大还是小?为什么?(小;预训练权重是好解,只做局部修整)
- 梯度累积解决什么问题?代价是什么?(显存不够模拟大 batch;代价是单位样本耗时几乎不变但每步更慢、BN/LN 统计与真大 batch 有细微差异)
6. 动手作业
- 用 NumPy 手写 softmax 和交叉熵,并用第 2.5 节结论 写出梯度函数,再数值验证(随机小扰动下 )。
- 用 NumPy 对一个随机 矩阵做 SVD,分别保留前 5/20/50 个奇异值重构,算重构误差随秩的下降曲线。这就是”LoRA 为什么可行”的直观感受。
图解 · 数学地图与一次手算
flowchart LR
A["线性代数:数据的语言"] --> A1["内积 → CLIP 相似度 / 检索"]
A --> A2["QKᵀ → Attention 打分"]
A --> A3["SVD / 低秩 → LoRA"]
B["概率与信息论:学习的目标"] --> B1["交叉熵 = 负对数似然<br>一切训练目标"]
B --> B2["KL 散度 → DPO / 蒸馏的缰绳"]
B --> B3["softmax 温度 → 采样与蒸馏"]
C["优化:学习的发生机制"] --> C1["AdamW + warmup/cosine<br>所有现代训练"]
C --> C2["6ND → 任何实验的算力预算"]案例:手算一次 softmax + 交叉熵
设三类 logits ,真实类为第 0 类()。
第一步 softmax:,总和 8.757, 故 。
第二步 loss:。
第三步梯度:。
读出三件事:① 正确类的梯度为负——下一步要抬高它的 logit;② 两个错误类按”谁错得离谱谁多分”,分摊了挪走概率的任务;③ 所有分量之和为 0(概率守恒)。以后你在任何训练日志里看到交叉熵,背后都是这三个数字在动。
7. 延伸资源
- 3Blue1Brown《线性代数的本质》《微积分的本质》(B 站官方翻译版)——直觉构建第一名
- 《Mathematics for Machine Learning》(Deisenroth 等,免费电子版)——按需查阅,不必通读
- Karpathy《The spelled-out intro to neural networks》——把本章数学第一次和代码接起来
