核心要点

  • 能解释优化器根据 .grad 更新参数

  • 熟悉 SGDAdam 等常用优化器及超参

  • 会写 optimizer = torch.optim.Adam(model.parameters(), lr=...) 标准用法

  • 知道 param_groups 与学习率分组

简要回答

PyTorch 优化器(如 SGD、Adam)封装参数更新规则:每步 backward 后调用 optimizer.step() 根据 .grad 和学习率等超参更新 model.parameters()。

标准回答

一、核心回答

PyTorch 优化器实现各类梯度下降变体,在 loss.backward() 之后调用 optimizer.step() 更新 model.parameters()

二、常用优化器

优化器 特点 典型场景
SGD 简单,+momentum 加速 CV 经典训练
Adam 自适应学习率,收敛快 默认首选、NLP
AdamW 解耦权重衰减 Transformer 预训练
RMSprop 适应非平稳目标 RNN 历史常用

三、标准用法

示例代码可以这样理解:
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3, weight_decay=1e-4)
# 训练循环内
optimizer.zero_grad()
loss.backward()
optimizer.step()

四、进阶

param_groups 为不同层设不同 lr(如 backbone 小 lr、head 大 lr);torch.optim.lr_scheduler 配合做学习率调度;optimizer.state 存 Adam 的一阶/二阶动量。
选型:小数据集+CNN 可 SGD+momentum;大模型微调多用 AdamW + warmup。详见 深度学习训练技巧

回答思路

  • 【定义】用一句话说清「PyTorch 中的优化器是什么?如何使用」

  • 【原理】讲清关键机制或步骤(2~3 点)

  • 【例子】举一个真实项目、论文或产品中的例子

  • 【对比】与易混淆概念或替代方案比较(如有)

  • 【收尾】总结适用场景 + 一个局限或风险

延伸学习

工具:PyTorch。知识库:深度学习训练技巧深度学习基础。术语:梯度

常见误区

⚠️ 常见踩坑

误区一:容易答偏的地方:step() 写在 backward() 之前;忘记 zero_grad;对同一 optimizer 重复实例化导致动量状态丢失;学习率过大不配合 scheduler。

追问

追问 1Adam 和 SGD 何时选谁?

Adam 默认收敛快、调参友好,适合 NLP/快速实验;SGD+momentum 在 CV 大模型上有时泛化更好但需精细调 lr。微调时常用较小 AdamW lr + warmup。

追问 2weight_decay 和 L2 正则有何关系?

经典 L2 正则把 λ‖W‖² 加入 loss;AdamW 将权重衰减与梯度更新解耦,直接 shrink 权重,是 Transformer 训练的标准做法,效果通常优于在 Adam 里加 L2。

追问 3如何只优化部分参数?

optimizer = Adam(filter(lambda p: p.requires_grad, model.parameters())) 或传入子模块 .parameters();冻结 backbone 时设 requires_grad=False。

落地时需结合业务场景说明取舍、边界条件与可观测指标,避免只背概念。

🔗 相似问题

同一考点的不同问法,换着练更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习