A2 · CLASSIFIERS

从 score 到可学习 representation

沿 linear classifier、softmax 与 two-layer net 审计 forward、loss、gradient 和 update 的完整闭环。

Loss derivationGradient checkingTraining diagnosis

Review Lab,不是作业答案。阅读现有实现,先预测,再运行小实验并解释证据;原始仓库快照是代码事实来源。

阶段 01

得分与损失

让 XW 产生 class scores,再由 SVM/softmax 把错误压成标量。

为什么需要它

没有标量 objective,就没有统一的优化方向。

开始前应该已经会回答

  • 会从 shape 推导 XW
  • 能解释数值稳定 softmax 为什么减 max

输入、输出与契约

输入
X [N,D], W [D,C], y [N]
输出
scores [N,C], scalar loss
不变量
  • 每个样本只有正确类别索引
  • regularization 只约束参数
不成立的假设
  • 把 score 当 probability
  • 在 batch sum 后忘记除 N

用最小例子检查

用 N=2,C=3 的整数 scores 手算 softmax probability 与平均 loss。

如果你看到……

loss 随统一平移 scores 改变

优先检查:softmax 稳定化/归一化

batch 翻倍 loss 也翻倍

优先检查:是否取平均

预测 → 实验 → 证据

先预测
同一行 scores 加常数不改变 softmax;增大正确类相对 margin 应降低 loss。
做实验
对固定 scores 做两次受控扰动并记录 loss 变化。
留证据
  • 原始/扰动 scores
  • 概率和是否为 1
  • loss 变化方向

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先算 exp 前的相对差

提示 2

检查 softmax dimension

提示 3

把 batch 缩成两行

闭卷检查 · 得分与损失

  • 手算与实现一致
  • 能解释 invariance
  • loss 对正确方向响应
阶段 02

梯度契约

证明 vectorized gradient 与数值梯度、naive 实现一致。

为什么需要它

向量化可能保持 shape 却把样本轴和类别轴混掉。

开始前应该已经会回答

  • 能写中心差分
  • 知道 relative error 比 absolute error 更可比

输入、输出与契约

输入
loss(W)
输出
dW [D,C]
不变量
  • dW 与 W 同 shape
  • 有限差分误差随 epsilon 在合理区间下降
不成立的假设
  • 只凭 loss 下降认定梯度正确
  • 在含 ReLU kink 点机械做 gradient check

用最小例子检查

用 2×3 的 W 只检查三个指定元素,不先跑全矩阵。

如果你看到……

部分列符号反了

优先检查:正确类别修正项

误差对 epsilon 极敏感

优先检查:非光滑点或浮点消减

预测 → 实验 → 证据

先预测
naive/vectorized loss 和 gradient 应一致;vectorized 只改变执行方式。
做实验
在相同输入上记录 loss 差、dW relative error、运行时间。
留证据
  • epsilon
  • dtype
  • 最大误差位置

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

先比较 loss 再比较 gradient

提示 2

定位最大误差的索引

提示 3

对该索引展开一个样本的贡献

闭卷检查 · 梯度契约

  • relative error 达到预期
  • 能解释误差来源
  • vectorization 不改变语义
阶段 03

两层网络的表示

审计 affine→ReLU→affine 的参数、activation 与 gradient。

为什么需要它

ReLU 是两层不坍缩成一次 affine 的关键。

开始前应该已经会回答

  • 能区分 parameter/activation/gradient
  • 会追 [N,D]→[N,H]→[N,C]

输入、输出与契约

输入
X [N,D]
输出
scores [N,C]
不变量
  • W 不带 batch 轴
  • ReLU mask 只由 forward preactivation 决定
不成立的假设
  • 把 hidden activation 当 parameter
  • backward 重新计算不同 mask

用最小例子检查

取 N=2,D=3,H=2,C=2,设置一个隐藏单元恒为负,预测其梯度路径。

如果你看到……

W1 完全不更新

优先检查:ReLU mask 与链式法则

训练/验证差距快速扩大

优先检查:capacity、regularization 与数据

预测 → 实验 → 证据

先预测
没有 ReLU 时两层可合并;加入 ReLU 后不同样本可走不同局部线性区域。
做实验
同一初始化比较有/无 ReLU 的 gradient pattern 与训练曲线。
留证据
  • 相同 seed/init
  • 激活稀疏率
  • loss 曲线

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

打印 preactivation 与 mask

提示 2

确认 cache 来自同一次 forward

提示 3

先检查一条样本路径

闭卷检查 · 两层网络的表示

  • shape 与 cache 正确
  • 能解释非线性
  • 证据支持局部路径差异
阶段 04

训练证据

用 loss、accuracy、gradient norm 和基线共同解释训练。

为什么需要它

单一 accuracy 无法区分没学会、过拟合或数据泄漏。

开始前应该已经会回答

  • 会建立 random/chance baseline
  • 知道 loss 降而 accuracy 暂不变并非矛盾

输入、输出与契约

输入
model + optimizer + split
输出
可解释训练轨迹
不变量
  • 训练配置完整记录
  • test 不参与调参
不成立的假设
  • 只保存最好模型不记录过程
  • 把随机波动写成优化结论

用最小例子检查

在十个样本上尝试过拟合到接近 100%;失败时按 shape→gradient→update 排查。

如果你看到……

loss 恒定

优先检查:gradient 是否非零、参数是否更新

train 高 val 低

优先检查:overfit、regularization、split

预测 → 实验 → 证据

先预测
正确实现应能过拟合极小数据;全量数据表现则受泛化影响。
做实验
先 tiny overfit,再固定配置跑完整 split。
留证据
  • tiny loss/accuracy
  • gradient norm
  • train/val curves

渐进提示

先独立排查 10–15 分钟,再按需展开。

提示 1

检查参数前后差值

提示 2

关闭复杂 augmentation

提示 3

一次只检查一个模块

闭卷检查 · 训练证据

  • tiny data 可过拟合
  • 完整轨迹可解释
  • 结论不依赖 test 调参

复盘与迁移