d2l-v2(PyTorch)预备知识|CORE(考研强化版)
覆盖:数据操作、数据预处理、线性代数、微积分、自动微分、概率。
使用方式:
- 复习时按“定义→性质/公式→典型题型/易错点→最小代码模板”走。
- 做题/写实验时直接抄“代码模板”。
0. 总体地图:深度学习里这些预备知识分别解决什么
- 数据操作:把数据表示成张量并高效变换(形状/广播/索引)。
- 数据预处理:把原始表格/文本变成“可喂给模型”的数值张量(缺失值、标准化、划分)。
- 线性代数:网络=大量矩阵运算;理解维度、范数、特征值等。
- 微积分:损失函数最小化;梯度/链式法则。
- 自动微分:让框架替你算梯度(反向传播的工程实现)。
- 概率:不确定性与泛化;极大似然、交叉熵、期望与方差。
1. 数据操作(Tensor 基础|高频易错点:shape/broadcast/view)
1.1 Tensor 与形状(shape)
- 张量:标量(0D)、向量(1D)、矩阵(2D)、高阶张量(≥3D)。
- 形状决定运算是否合法:
- 向量
- 矩阵
- 批量数据常写
易错点:
- 不要把“元素个数”和“维度”混。
- 线性层
nn.Linear(in_features, out_features)吃的是最后一维。
1.2 广播(broadcasting)规则(必须会判断结果形状)
- 对齐右端维度;每一维要么相等,要么其中一个为 1;缺失维度视为 1。
- 输出形状是逐维
max。
典型判断:
(3,1,5) + (4,5)→ 先视为(3,1,5) + (1,4,5)→(3,4,5)。
1.3 索引/切片(view vs copy 思维)
- 切片/索引用于取子张量:
X[1:3, :]。 reshape/view:改变形状(一般不改元素总数)。
易错点:
view需要内存连续;不连续先contiguous()。reshape可能返回拷贝;但语义更稳。
1.4 梯度与 in-place 操作(非常关键)
- 带梯度跟踪时,尽量避免 in-place(如
x += 1、relu_()),可能破坏计算图。
1.5 最小代码模板(PyTorch)
import torch
X = torch.arange(12).reshape(3, 4) # (3,4)
y = torch.ones(4) # (4,)
Z = X + y # broadcasting -> (3,4)
# 常用:维度变换
X_T = X.T
X2 = X.reshape(-1, 2) # 自动推断
# 拼接
A = torch.cat([X, X], dim=0) # dim=0 行拼接
# 统计
mean = X.float().mean(dim=0) # 按列均值2. 数据预处理(从表格到张量|缺失值/标准化/划分)
2.1 常见流程(考研式“写步骤”)
- 读取数据(CSV/表格)
- 处理缺失值(删除/填充)
- 类别特征编码(one-hot)
- 数值特征标准化/归一化
- 划分训练/验证/测试集
- 转为张量,送入 DataLoader
2.2 缺失值处理(会比较优缺点)
- 删除:简单但损失信息。
- 填充:均值/中位数/众数/常数;更稳健。
2.3 标准化(最常用)
- Z-score:
- 作用:让不同量纲特征可比,改善优化收敛。
2.4 最小代码模板(pandas + one-hot + tensor)
import pandas as pd
import torch
df = pd.read_csv('data.csv')
# 缺失值:数值列用均值填充
num_cols = df.select_dtypes(include='number').columns
df[num_cols] = df[num_cols].fillna(df[num_cols].mean())
# 类别列 one-hot
df = pd.get_dummies(df, dummy_na=True)
X = torch.tensor(df.values, dtype=torch.float32)3. 线性代数(矩阵运算是深度学习的“语法”)
3.1 基本运算与维度匹配(必会)
- 矩阵乘法:
- 点积:
- 范数:
易错点:
- Hadamard 积(逐元素乘)与矩阵乘法不同:
A * BvsA @ B。
3.2 线性变换视角(考研常考“解释题”)
- 矩阵乘法 表示线性变换(旋转/缩放/投影的组合)。
- 线性层本质:。
3.3 特征值/特征向量(理解意义即可)
- 。
- 在优化/二次型/稳定性分析中常出现。
3.4 最小代码模板(矩阵与范数)
import torch
A = torch.randn(3, 4)
B = torch.randn(4, 2)
C = A @ B # (3,2)
x = torch.randn(5)
l2 = torch.norm(x, p=2)
linf = torch.norm(x, p=float('inf'))4. 微积分(优化的数学底座|导数/梯度/链式法则)
4.1 导数与梯度
- 单变量:
- 多变量:梯度 指向函数增长最快方向。
最关键结论:
- 沿负梯度方向小步走:函数值下降最快(局部)。
4.2 链式法则(反向传播的数学本质)
- 多层复合:层层相乘(计算图)。
4.3 常用导数(建议背)
- (sigmoid)
4.4 最优化的最小表达
- 梯度下降:
5. 自动微分(Autograd|计算图/反向传播/梯度清零)
5.1 计算图与反向传播(会解释)
- 前向:记录运算,构建计算图。
- 反向:从标量损失出发,用链式法则把梯度传回每个叶子张量。
5.2 PyTorch 必会操作(易错点集中)
requires_grad=True:开启梯度跟踪。y.backward():对标量 y 求梯度。x.grad:梯度累加在这里。- 梯度会累加:每次迭代要
grad.zero_()或optimizer.zero_grad()。
易错点:
backward()默认只能对标量;向量要指定gradient=或先sum()。- 不要对参与求导的变量做危险的 in-place 修改。
5.3 最小代码模板(autograd)
import torch
x = torch.arange(4.0, requires_grad=True)
y = (x * x).sum() # 标量
y.backward()
print(x.grad) # 2x
x.grad.zero_()6. 概率(深度学习里的“统计语言”)
6.1 随机变量与分布(概念)
- 随机变量 X:把随机结果映射到数值。
- 分布:描述 X 取值的概率规律(PMF/PDF)。
6.2 期望与方差(必会公式 + 常用性质)
- 期望: 或
- 方差:
常用性质:
- 线性:
- 方差缩放:
6.3 常见分布(会写参数含义)
- 伯努利 Bernoulli(p):,
- 二项 Bin(n,p):n 次独立伯努利之和
- 正态 :中心极限定理背景
6.4 与损失函数的联系(考研级“连接题”)
- 许多损失函数可视为极大似然或其等价形式:
- 高斯噪声假设 → 最小二乘(MSE)
- 伯努利/多项分布 → 交叉熵(CE)
(只需要抓住“分布假设 ↔ 似然 ↔ 损失”这条线即可。)
7. 高频易错点清单(考研强度必看)
B/svsb/s、shape vs numel(类比到张量)。- 广播:先右对齐;不满足“相等或为 1”就报错。
A * B(逐元素)≠A @ B(矩阵乘)。view需要 contiguous;不稳就用reshape。- autograd:梯度默认累加,迭代前必须清零。
- 期望线性、方差不线性(别把 Var(A+B) 写成 Var(A)+Var(B) 但忘了协方差)。
8. 典型题型(考研强化|带答案要点)
用法:先遮住“答案要点”自己做一遍,再对照纠错。
8.1 数据操作:broadcasting/shape 判断
题 1:设 A.shape=(3,1,5),B.shape=(4,5),问 A+B 是否可广播?结果形状是什么?
- 答案要点:右对齐;把 B 看成
(1,4,5);逐维满足“相等或为1”;结果(3,4,5)。
题 2:X.shape=(2,3),y.shape=(2,),问 X+y 是否可行?
- 答案要点:右对齐后为
(2,3)与(1,2),第二维 3 与 2 冲突 → 不可广播(常见修复:让 y 变成(2,1)或(1,3)视需求)。
8.2 线性代数:维度/运算区分
题 3:给定 ,。写出 的维度,并说明 的含义。
- 答案要点:;
A*B是逐元素乘(要求同形状或可广播),与矩阵乘不同。
题 4: 与 各自几何意义是什么?
- 答案要点:L2 表示“欧氏长度”;L1 表示“曼哈顿距离/稀疏相关的度量”(常用于稀疏正则)。
8.3 微积分:梯度/链式法则
题 5:设 ,写出 的形式(只写结果,不要求推导细节)。
- 答案要点:,梯度 。
题 6:解释“为什么反向传播本质是链式法则”。
- 答案要点:神经网络是复合函数;梯度从输出到输入按链式法则逐层相乘/累积;计算图实现了这种依赖关系的系统化计算。
8.4 自动微分:梯度累加与清零
题 7:为什么训练循环里每步都要 optimizer.zero_grad()?
- 答案要点:PyTorch 默认把梯度累加到
.grad;不清零会把多步梯度叠加,导致更新错误。
8.5 概率:期望/方差与损失的统计解释
题 8:证明 。
- 答案要点:从定义 ,展开平方:,再用 。
题 9(连接题):为什么“最小化 MSE”可视为“高斯噪声假设下的极大似然”?
- 答案要点:若观测 满足 ,且 ,则负对数似然与 只差常数因子/常数项,故最小化 MSE 等价于最大化似然。
9. 计算题/证明题(更强一步|含完整推导)
9.1 线性代数计算题:矩阵微分的经典结果
题 1:设 ,其中 、、。求 。
解: [ \begin{aligned} f(x) &= (Ax-b)^T(Ax-b)\ &= x^T A^T A x - 2 b^T A x + b^T b. \end{aligned} ] 对 求梯度(记住:,当 对称时为 ;且 ): [ \nabla_x f(x) = 2A^T(Ax-b). ]
备注:这是线性回归/最小二乘的核心梯度公式。
9.2 微积分证明题:链式法则(多维版本的直觉)
题 2:设 ,(标量)。写出 与 、Jacobian 的关系。
解(要点):
- 由于 是标量,对 的梯度是 维向量。
- 多维链式法则: [ \nabla_x z = J^T,\nabla_y z, ] 其中 。
解释:反向传播就是在计算图上不断应用这一形式:把“上游梯度”左乘(或等价右乘)局部 Jacobian 的转置,把梯度传回去。
9.3 概率计算题:期望/方差的基本计算
题 3:若 ,求 、。
解:
- 取值:,。 [ \mathbb{E}[X]=1\cdot p + 0\cdot (1-p)=p. ] 又 ,所以 [ \mathrm{Var}(X)=\mathbb{E}[X^2]-(\mathbb{E}[X])^2 = p - p^2 = p(1-p). ]
9.4 概率证明题:期望线性(非常常用)
题 4:证明对任意随机变量 与常数 ,有 。
解:
- 离散情形: [ \mathbb{E}[aX+bY]=\sum_{x,y}(ax+by)P(X=x,Y=y) = a\sum_{x,y}xP(\cdot)+b\sum_{x,y}yP(\cdot)=a\mathbb{E}[X]+b\mathbb{E}[Y]. ]
- 连续情形同理,用积分替代求和。
关键点:线性不需要独立性。
9.5 统计连接题:交叉熵与极大似然(分类必会)
题 5:二分类中,令标签 ,模型输出 。写出负对数似然(NLL),并说明它为什么等价于二元交叉熵损失。
解:
- 伯努利似然:。
- 负对数似然: [ \mathcal{L}(\hat p,y) = -\log P(y\mid x) = -\big(y\log \hat p + (1-y)\log(1-\hat p)\big). ] 这正是二元交叉熵(Binary Cross Entropy)的标准形式。
9.6 Autograd 实操题:向量 backward 的正确姿势
题 6:令 ,(逐元素平方)。为什么直接 y.backward() 会报错?如何修正并得到 ?
解:
backward()默认从标量出发。- 修正:先把 y 变成标量,如
y.sum().backward()。 - 得到梯度:。
10. 速刷自检题(无答案版)
- 写出 broadcasting 的判定规则,并举一个可广播与不可广播的例子。
- 给定 、,写出 的形状。
- 写出梯度下降更新式,并解释学习率过大/过小的后果。
- 为什么需要链式法则?它与反向传播的关系是什么?
- 证明 。
- 为什么 MSE 可以看作高斯噪声假设下的极大似然?(一句话说明即可)
tag:deep-learning/d2l-v2 tag:chapter/01-preliminaries tag:exam/grad tag:group:Learn