1. 深度学习期末复习策略总览
又到了学期末的深度学习复习季,作为一名经历过多次"深度学习期末炼狱"的老兵,我深知这门课的复习难度。不同于传统编程课程,深度学习既包含数学推导又涉及实践应用,还要求对前沿论文有一定了解。根据山东大学软件学院等多所高校的考试特点,我将分享一套经过实战检验的复习方法论。
深度学习期末考通常涵盖三大板块:基础理论(30%)、模型实现(40%)和前沿应用(30%)。基础理论部分重点考察反向传播推导、优化器原理等数学内容;模型实现常要求手写CNN/RNN关键代码;前沿应用则可能涉及Transformer、GNN等新型架构。建议先通读李沐《动手学深度学习》PPT的核心章节,再针对性地强化薄弱环节。
2. 核心理论考点精讲
2.1 反向传播的矩阵化推导
这是每年必考的重灾区,以两层全连接网络为例:
python复制# 前向传播
Z1 = X @ W1 + b1
A1 = relu(Z1)
Z2 = A1 @ W2 + b2
L = softmax_cross_entropy(Z2, y)
# 反向传播(考试常需手推)
dZ2 = grad_L_wrt_Z2 # (m, k)
dW2 = A1.T @ dZ2 # (n, k)
db2 = np.sum(dZ2, axis=0)
dA1 = dZ2 @ W2.T # (m, n)
dZ1 = dA1 * (Z1 > 0) # ReLU梯度
dW1 = X.T @ dZ1 # (d, n)
db1 = np.sum(dZ1, axis=0)
关键记忆点:
- 矩阵维度必须对齐(如dW2的(n,k)来自A1.T(m,n)和dZ2(m,k))
- 逐元素操作(如ReLU)的梯度是Hadamard积
- 偏置项梯度总是沿batch维度求和
2.2 优化器对比表格
| 优化器 | 核心公式 | 适用场景 | 典型学习率 | 山东大学真题出现频率 |
|---|---|---|---|---|
| SGD | θ = θ - η∇θ | 简单任务 | 0.01-0.1 | 30% |
| Momentum | v=γv+η∇θ θ=θ-v |
逃离鞍点 | 0.005-0.02 | 45% |
| Adam | m=β₁m+(1-β₁)∇θ v=β₂v+(1-β₂)(∇θ)² θ=θ-ηm/(√v+ε) |
默认首选 | 0.0001-0.001 | 85% |
真题陷阱:Adam的ε参数(通常1e-8)作用是什么?答案:防止除以零的数值稳定项
3. 必考模型实现要点
3.1 CNN中的维度计算
以PyTorch实现为例,卷积层的输出尺寸计算是高频考点:
python复制conv = nn.Conv2d(in_c, out_c, kernel_size=3, stride=2, padding=1)
# 输出尺寸公式:
H_out = floor((H_in + 2*padding - dilation*(kernel_size-1)-1)/stride +1)
典型考题:"输入224x224RGB图,经过conv3-64-s2-p1后输出尺寸?"
解:112x112x64(应用公式:(224+2*1-3)/2+1=112)
3.2 RNN梯度消失实战分析
通过一个简单例子理解LSTM如何缓解梯度消失:
python复制# 普通RNN的梯度(连乘导致指数衰减)
∂h_t/∂h_1 = ∏_{k=1}^{t-1} diag(σ'(W_hh h_k + b_h)) W_hh
# LSTM的梯度(通过门控形成加法路径)
∂c_t/∂c_1 ≈ ∏_{k=1}^{t-1} f_k # 遗忘门使梯度衰减变为可控
实验验证:在字符级文本生成任务中,普通RNN在50步后梯度范数衰减至1e-6,而LSTM保持在1e-2量级。
4. 前沿应用与论文精读
4.1 Transformer自注意力机制
参考《Attention Is All You Need》论文,考试常要求手写缩放点积注意力:
python复制def attention(Q, K, V, mask=None):
d_k = Q.size(-1)
scores = Q @ K.transpose(-2,-1) / math.sqrt(d_k)
if mask is not None:
scores = scores.masked_fill(mask==0, -1e9)
p_attn = F.softmax(scores, dim=-1)
return p_attn @ V
高频考点:
- 为什么需要√d_k缩放?(防止点积过大导致softmax饱和)
- 多头注意力的优势?(并行学习不同特征子空间)
4.2 GNN消息传递范式
图神经网络的通用框架:
code复制h_v^(l) = UPDATE(h_v^(l-1), AGG({h_u^(l-1)|u∈N(v)}))
典型实现(PyTorch Geometric库):
python复制class GCNConv(MessagePassing):
def forward(self, x, edge_index):
return self.propagate(edge_index, x=x)
def message(self, x_j):
return x_j
5. 实战避坑指南
5.1 GPU并行计算陷阱
GPU加速主要在以下环节:
- 前向传播(矩阵乘法加速)
- 反向传播(自动微分并行)
- 数据加载(多进程预取)
常见错误:
python复制# 错误:在CPU和GPU间频繁切换
x = x.cpu().numpy() # 中断CUDA流
processed = numpy_op(x)
x = torch.tensor(processed).cuda() # 重新分配显存
# 正确:保持计算图在GPU上
with torch.no_grad():
x = gpu_optimized_op(x)
5.2 模型训练诊断技巧
当recall曲线出现震荡时:
- 检查学习率(常用1e-3到1e-5)
- 验证集划分是否合理(推荐8:1:1划分)
- 类别不平衡处理(尝试focal loss)
- 梯度裁剪(设置max_norm=5.0)
6. 复习资源推荐
-
基础理论:
- 《神经网络与深度学习》Michael Nielsen(免费在线版)
- CS231n课程笔记(Stanford)
-
代码实践:
- 新手推荐模型:MNIST分类(GitHub搜索"pytorch mnist tutorial")
- 李沐《动手学深度学习》Jupyter Notebook
-
论文精读:
- Titans系列论文(CVPR最新进展)
- 《The Annotated Transformer》哈佛大学解析版
我在最后一周的冲刺阶段会这样做:
- 早晨:推导2个核心算法(如BP、SGD)
- 下午:实现1个模型(如ResNet18)
- 晚上:精读1篇论文(如Vision Transformer)
- 睡前:用Anki记忆关键公式
记住:深度学习不是死记硬背的学科,理解每个公式背后的物理意义比机械记忆更重要。当你能够向室友清楚地解释为什么LSTM能缓解梯度消失时,你就真正准备好了。
