Appearance
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 张实验卡
- 最终文档内要有自己对于这个实验的理解与感受
