跳到主要内容

参考答案

核对日期:2026-05-13。

1. 阶段练习参考方向

1.1 Tensor 练习

示例:

import torch

x = torch.randn(32, 10)
images = torch.randn(16, 3, 224, 224)

batch_mean = images.mean()
batch_std = images.std()

维度解释:

  • [32, 10]:32 条样本,每条 10 个特征。
  • [16, 3, 224, 224]:16 张图片,3 个通道,高 224,宽 224。

打印模型每层 shape 的重点是验证数据流,而不是猜维度。可以在 forward 中临时打印,也可以用 hook 或 summary 工具。

1.2 PyTorch 训练练习

最小训练循环应包含:

for epoch in range(num_epochs):
model.train()
for features, labels in train_loader:
optimizer.zero_grad()
logits = model(features)
loss = criterion(logits, labels)
loss.backward()
optimizer.step()

model.eval()
with torch.no_grad():
for features, labels in val_loader:
logits = model(features)
val_loss = criterion(logits, labels)

关键检查:

  • 训练阶段 model.train()
  • 验证阶段 model.eval()torch.no_grad()
  • 每步更新前 optimizer.zero_grad()
  • checkpoint 保存验证集最佳结果,而不是最后一轮。

1.3 调参练习

参考结论通常是:

  • 1e-1 可能过大,loss 震荡或发散。
  • 1e-3 常作为合理起点。
  • 1e-5 可能收敛太慢。
  • 小 batch 噪声大但可能泛化好;大 batch 稳定但显存高,也可能泛化变差。
  • dropout 能缓解过拟合,但过强会欠拟合。

最终结论要基于 loss 曲线、验证指标和错误样例,而不是只看单次最高分。

1.4 错误样例练习

错误样例分类应包含:

类别判断依据后续动作
标签可能错误人看也认为标签不合理清洗或复核标签
输入质量差模糊、截断、噪声大数据增强或过滤
类别边界模糊多个类别都合理调整标签体系
模型能力不足相似样本普遍错改模型或特征
数据分布少见训练集中少见场景补数据或重采样

2. 项目评分样例

高分 PyTorch 实验应具备:

  • Dataset / DataLoader 清晰,训练、验证、测试严格分离。
  • 模型结构可读,forward 维度明确。
  • 训练循环包含 loss、optimizer、scheduler 或 checkpoint。
  • 实验记录包含随机种子、超参数、曲线和指标。
  • 错误样例不是附录装饰,而能导出改进方向。

不合格表现:

  • 只在训练集上看准确率。
  • 验证集参与训练或调参后当测试集汇报。
  • 不保存配置,最好结果无法复现。
  • 只说“增加模型层数”作为改进计划。

3. 验收题参考答案

  1. 前向传播和反向传播分别做什么?

前向传播把输入经过模型计算得到预测和 loss;反向传播根据 loss 计算各参数梯度,为参数更新提供方向。

  1. 为什么需要激活函数?

激活函数引入非线性。没有非线性,多层线性网络仍等价于一个线性变换,无法表达复杂模式。

  1. loss.backward()optimizer.step() 分别做什么?

loss.backward() 计算梯度并累积到参数的 .gradoptimizer.step() 根据梯度和优化算法更新参数。

  1. 为什么训练前要 optimizer.zero_grad()

PyTorch 默认梯度累积。如果不清零,当前 batch 的梯度会叠加上之前 batch 的梯度,导致更新错误,除非你有意做梯度累积。

  1. 学习率过大和过小分别有什么表现?

过大表现为 loss 震荡、发散、指标不稳定;过小表现为 loss 下降很慢、训练时间长、可能停在较差结果。

  1. 如何识别过拟合?

训练集 loss 持续下降、训练指标很好,但验证集 loss 上升或指标下降。错误样例可能集中在验证集长尾或分布变化场景。

  1. Dropout 和 weight decay 分别有什么作用?

Dropout 随机屏蔽部分神经元,减少共适应;weight decay 惩罚过大的权重,约束模型复杂度。两者都常用于缓解过拟合。

  1. CNN、RNN、Attention 的核心差异是什么?

CNN 擅长局部模式和空间结构;RNN 按序处理序列,适合时间依赖但并行性差;Attention 直接建模 token 之间关系,便于并行和长距离依赖建模。

  1. 为什么验证集不能参与训练?

验证集用于模型选择和调参。如果参与训练,验证指标会失真,无法判断模型对未见数据的泛化能力。

  1. 为什么深度学习实验必须记录随机种子和超参数?

深度学习结果受初始化、数据顺序、增强、硬件和超参数影响。记录这些信息才能复现结果、比较实验和定位退化。