深度学习进阶文档深度页
优化器与学习率调度
优化器利用梯度历史更新参数,调度器改变后续更新学习率。
学习目标
- 区分 optimizer/scheduler
- 正确 step 顺序
- 配置参数组
为什么需要这个概念
同一梯度可由不同历史规则转为不同更新。
- 训练配置核心
- 恢复训练需保存状态
学习前需要掌握
梯度内容待补充训练循环内容待补充
背景与问题
同一梯度可由不同历史规则转为不同更新。
概念定义
SGD、Momentum、Adam/AdamW 的状态不同;scheduler 不更新参数。
直观理解
梯度给方向,优化器决定如何结合历史走,调度器决定步长随时间如何变。
核心原理
常规顺序 optimizer.step 后 scheduler.step;调用频率由调度器定义。
解冻参数需进入优化器;不同参数组可使用分层学习率和衰减。
数学表达
核心公式
SGD 基本更新。
变量含义
η_t当前学习率g_t当前梯度
计算步骤
- 12-.1×(-.4)
代码对应位置
示例 1优化器与学习率调度 · PyTorch 示例:验证优化器与学习率调度的输入、计算和输出。
变量解释
| 变量 | 含义 |
|---|---|
η_t | 当前学习率 |
g_t | 当前梯度 |
完整数值示例
SGD 更新
已知条件
- θ=2,g=-0.4,η=.1
- 1
2-.1×(-.4)
2.04
处理前后对比
计算与实现步骤
- 1
backward
- 2
optimizer.step
- 3
按类型 scheduler.step
- 4
记录各组 lr
- 5
保存状态
代码实现
示例 1
优化器与学习率调度 · PyTorch 示例
优化器与学习率调度 · PyTorch 示例
PyTorch
example_01.py用途:验证优化器与学习率调度的输入、计算和输出。
optimizer=torch.optim.AdamW(model.parameters(),lr=3e-4,weight_decay=1e-2)
loss.backward();optimizer.step()代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
验证优化器与学习率调度的输入、计算和输出。
model- 组合预处理和估计器的模型对象。
loss- 当前预测与目标之间的损失值。
Step 1 · 1–2 行
计算损失对参数的梯度,对应数学表达中的 ∇J;梯度只给出局部变化方向。
optimizer=torch.optim.AdamW(model.parameters(),lr=3e-4,weight_decay=1e-2)
loss.backward();optimizer.step()代码与数学原理
参数更新由当前梯度与学习率共同决定。
平方误差代码对应均方损失。
预期输出或运行结果
参数依据 AdamW 规则改变。
常见错误 · 4 条
- 每 epoch 重建 optimizer
- scheduler 频率错
- 参数组重复
- 只恢复权重
实际应用
- CNN/Transformer/微调
常见错误
每 epoch 重建 optimizer
scheduler 频率错
参数组重复
只恢复权重
文档来源
15_优化器与学习率调度进阶原始文档
学习资料/deeplearning/15_优化器与学习率调度进阶.md- §1 职责
- §2–6 优化器
- §7–15 调度
- §17 恢复
常见问题
scheduler 会更新参数吗?
不会,只修改 optimizer 学习率。
解冻后为何重建优化器?
确保新参数进入参数组。