EECS498 · Deep Learning Revisited · 03

Optimization and Training Dynamics

Backprop 给出 gradient;“模型能不能学起来”取决于怎样使用它、信号怎样穿过深层网络,以及 representation 的尺度是否稳定。

55–70 分钟 A2–A3 SGD · Adam · Norm

30-second recall

30 秒回忆

你写过 SGD、momentum、RMSProp、Adam、dropout、Kaiming initialization 和 BatchNorm。

  1. learning rate 控制什么?
  2. Adam 的 m/v 在记什么?
  3. 初始化与 normalization 为什么影响梯度?

Why Did We Need This?

同一个正确 gradient,步子太小会停滞,太大会越过谷底;层数增加后,activation/gradient 尺度还可能逐层放大或衰减。训练失败常不是“模型不会”,而是优化路径失去可用信号。

minibatch Xb [B,D]
loss scalar
gradients same shapes as θ
optimizer state m,v per θ
new θ θ − update

What You Actually Implemented

Mechanism Repository implementation Purpose
SGD / Momentum A3/fully_connected_networks.py step + velocity
RMSProp / Adam same file coordinate-wise scaling + moments
Kaiming / BatchNorm A3/convolutional_networks.py preserve usable scale
Dropout A3/fully_connected_networks.py stochastic regularization
Mental model

优化器决定如何在 loss landscape 上走;初始化与 normalization 决定这张地形和梯度信号是否处在能走的尺度。

Mechanism · 从 SGD 到 Adam

SGD:       θ ← θ − ηg
Momentum:  v ← μv − ηg; θ ← θ + v
Adam:      m ← β₁m+(1−β₁)g
           v ← β₂v+(1−β₂)g²
           θ ← θ − η m̂/(√v̂+ε)

m 平滑方向,v 估计每个坐标近期的平方尺度;bias correction 处理训练初期两个状态从零开始的偏差。

Your code · 2022

A3/fully_connected_networks.py · adam()

View source →
m = beta1*m + (1-beta1)*dw
mt = m / (1-beta1**t)
v = beta2*v + (1-beta2)*(dw**2)
vt = v / (1-beta2**t)
next_w = w - lr * mt / (torch.sqrt(vt) + eps)

Normalization is about coordinates

BatchNorm 用 batch statistics 校准 channel;后来的 Transformer 更常用 LayerNorm,在每个 token 的 feature 维内校准。二者不是可互换 API:它们选择了不同的归一化轴,也就选择了哪些样本/位置互相影响。

Historical implementation note: A3/convolutional_networks.py 的普通 BatchNorm section 有填充,但 SpatialBatchNorm.forward/backward 仍保留 pass。本课程不会把后者写成已完成。

Why This Design?

Common misconception:Adam 不是“永远更好的 SGD”,BatchNorm 也不只是让数字落进固定范围。它们改变训练动力学与隐式偏好,仍需和 learning rate、batch、architecture 一起看。

Then vs Now

现代 LLM 常见 AdamW、warmup、cosine decay、gradient clipping 与 LayerNorm/RMSNorm;但账本仍是:gradient → optimizer state → parameter update。你当年写的 Adam 状态就是今天大模型训练中昂贵 optimizer memory 的来源。

Concept Checks

参数 θ=[128,64],Adam 的 m 与 v 是什么 shape?

都为 [128,64]。它们为每个参数坐标保存一阶、二阶历史,因此 optimizer state 通常是参数量的倍数。

若把 learning rate 放大 1000 倍,gradient 方向仍正确,为什么训练仍会坏?

一阶局部近似只在小邻域可信;大步会跨过低 loss 区域并让 activation/gradient 爆炸。

BatchNorm 与 LayerNorm 最关键的 shape 区别是什么?

BatchNorm 对同一 channel 汇总 batch/空间样本;LayerNorm 对单个样本或 token 的 feature 维汇总,不依赖其他 batch item。

Depth Lab · optimizer 是 trajectory,不是菜单

Gradient 只描述当前位置最陡上升方向;训练还必须决定步长、怎样平滑噪声、以及每个 coordinate 用多大 effective step。

一维参数 w=2,gradient g=4:

lr=.01 → w'=1.96   小步、稳定但可能慢
lr=.5  → w'=0      大步;在弯曲 loss 上可能越过 valley

SGD:      w ← w - ηg
Momentum: v ← μv - ηg; w ← w+v
Adam:     track first moment m and squared-gradient v;
          scale each coordinate by 1/(√v+ε)
  1. Gradient 提供 local direction。
  2. Learning rate 把斜率变成实际 displacement。
  3. Momentum 累积一致方向,抑制来回震荡。
  4. Adam 的 second moment 让长期大-gradient coordinate 步长相对缩小。
  5. None of these guarantees generalization;validation curve 是独立证据。

读曲线,而不是只读最终 accuracy

现象Training lossValidation优先怀疑
lr too low缓慢下降缓慢改善步长太小
lr too high震荡/发散不稳定跨过低 loss region
underfit仍高也差capacity/optimization
overfit持续下降先好后坏memorization / regularization
如果只有 training loss,没有 validation split?

你能判断 optimization 是否拟合训练集,却无法区分可迁移规律与 memorization。

Misconception diagnosis

Adam 不是“自动找到正确 learning rate”。它做 per-parameter adaptive scaling,仍有 global lr、schedule 与稳定性选择。

Training loss 平滑下降、validation 先降后升,继续加 epochs 会怎样?

更可能加剧 overfit;应考虑 early stopping、regularization 或数据,而非只换更强 optimizer。

某 coordinate 最近 gradients 交替 +10/-10,momentum 有何作用?

相反方向贡献部分抵消,减少震荡;持续同方向则累积速度。

Transfer Question

Transformer training 出现 loss spike。若 gradient norm 同时突然升高,你会怎样区分 lr 问题、数据异常与 numerical instability?

闭卷解释

  1. 方向、步长、历史 gradient 各由什么控制?
  2. 从两条 loss curves 诊断 overfit。
  3. 为什么 optimizer 改善 training 不等于改善 validation?

Connection

接下来把“任意 vector function”换成 image-aware function:用 locality 与 weight sharing 改变 parameterization 本身。

Based on your implementation