Skip to content

Part 1 黑盒拆解实验卡 ​


总览 ​

text
✅Part 0  出发包
🚩Part 1  黑盒拆解实验卡
🟩Part 2  决策边界画家
🟩Part 3  计算机视觉
🟩Part 4  方向探险

🎯 目标 ​

本部分是希望各位通过一些小的程序,对机器学习的核心概念有更加直观的感受

💡 规则 ​

从下面 12 张实验卡中至少选 6 张。
每张卡提交一个 .md ,或将你所做的整合在一个 .md 中提交,模板推荐如下:(如果有自己觉得更好的想法,也可以按照自己想法来,让我们看到你们自己独特的风格)

markdown
# 实验卡 X:标题

## 实验
我改了什么参数,写了什么代码

## 观察
截图 / 打印值 / 曲线

## 解释
自己的思考和理解

## AI 日志
我问了 AI 什么?AI 哪里不靠谱?我怎么验证?

尽量不要只有理论知识,我们希望大家可以通过小的动手来学习知识

📍 tips ​

这一部分无论是任务量,还是对于新手的难度都是有的,所以在这一部分,我们希望大家可以学会如何正确使用网络和 AI 来完成任务

⚠️ 注意 ​

你选择了实验卡以后,并不代表其他实验卡中所包含的知识可以不学习。每个实验卡背后所包含的都是机器学习重要的核心概念与基础知识,对于往后的学习都是会有帮助的,所以每一个实验卡所对应的理论知识,我们希望大家都进行学习和研究,但是对于实验不做硬性要求

实验卡 1:model.eval() 与 torch.no_grad() ​

实验:定义一个带 Dropout 的小模型,分别做推理:

  • 只写 model.eval()
  • 只写 torch.no_grad()
  • 两个都写
  • 两个都不写

观察:输出是否变化?显存/内存占用是否变化?

回答:

  • 推理时只写 model.eval() 不写 torch.no_grad(),会影响计算结果吗?
  • 会影响显存占用吗?
  • 为什么?

实验卡 2:漏掉 optimizer.zero_grad() ​

实验:写一个线性回归训练循环,故意不调用 optimizer.zero_grad(),连续两次 backward(),打印 w.grad。

观察:梯度是被覆盖,还是累加?

回答:

  • 这种累加机制在什么训练场景下有用?

实验卡 3:权重全初始化为 1 ​

实验:把某层权重全部初始化为 1,跑一次反向传播,打印同一层不同神经元的梯度。

观察:它们的梯度有什么关系?

回答:

  • 这对模型学习能力有什么致命影响?

实验卡 4:Momentum 动量 ​

实验:构造一个“峡谷”形状的损失函数,或者用简单二次函数模拟。分别用:

  • 纯 SGD
  • SGD + Momentum

画参数更新轨迹。

回答:

  • 动量如何帮助加速收敛并抑制震荡?

实验卡 5:学习率过大 / 过小 ​

实验:用三个不同学习率训练同一个简单模型:

  • 过大:如 1.0
  • 合适:如 0.01
  • 过小:如 1e-6

画 Loss 曲线。

回答:

  • 学习率过大,Loss 通常出现什么现象?
  • 学习率过小,训练面临什么问题?

实验卡 6:过拟合与欠拟合 ​

实验:取一小部分数据训练一个 MLP,同时记录训练 Loss 和验证 Loss。

画 train/val loss 曲线。

回答:

  • 场景 A:训练 Loss 很低,验证 Loss 先降后升,发生了什么?
  • 场景 B:训练和验证 Loss 都居高不下,发生了什么?
  • 针对过拟合,除了增加数据,还能用什么方法?

实验卡 7:Sigmoid / Tanh 梯度消失 ​

实验:搭建 10 层网络,分别用 Sigmoid、Tanh、ReLU,打印每层梯度范数。

观察:哪种激活函数梯度衰减最快?

回答:

  • 从导数最大值角度解释为什么 Sigmoid/Tanh 容易梯度消失?
  • ReLU 如何缓解?

实验卡 8:Dying ReLU ​

实验:用较大学习率训练 ReLU 网络,统计有多少神经元的输出恒为 0。

回答:

  • Dying ReLU 是指神经元进入什么状态?
  • 进入后梯度是多少?
  • 还有可能“复活”吗?

实验卡 9:CrossEntropyLoss 为什么收 Logits ​

实验:构造极端 logits,例如 [1000, 0, 0]。

比较:

  • 先手动 Softmax,再取 log
  • 直接用 nn.CrossEntropyLoss 或 log_softmax

观察:数值是否稳定?是否出现 inf / nan?

回答:

  • 为什么 PyTorch 建议直接传 Logits?
  • 从 Log-Sum-Exp 数值稳定性角度解释。

实验卡 10:Dropout 的期望补偿 ​

实验:训练时 p=0.5,分别观察训练和测试阶段输出。

回答:

  • 为了保证测试阶段和训练阶段输出期望一致,测试阶段需要对权重或输出做什么?
  • 或者反过来,PyTorch 在训练阶段做了什么?

实验卡 11:BN vs LN ​

实验:创建一个形状为 (B, C, H, W) 的张量:

  • 做 BatchNorm
  • 做 LayerNorm

打印均值和方差是在哪个维度上计算的。

回答:

  • BN 和 LN 在计算均值和方差的维度上有什么核心区别?
  • 为什么 Transformer 通常用 LN,ResNet 通常用 BN?

实验卡 12:感受野 ​

实验:连续堆叠 3 个 3×3 卷积层,Stride=1,Padding=0。

回答:

  • 第 3 层输出特征图上的一个像素,能看到原始输入多大区域?
  • 写出感受野计算过程。

提交 ​

  • 至少包含 6 张实验卡
  • 最终文档内要有自己对于这个实验的理解与感受

Released under the MIT License.