《PyTorch 深度修炼》优化器:参数到底是怎么被更新的
11 / 13 章
梯度不是参数更新。梯度只是方向,优化器才是真正踩油门的人。 1. 模型参数不会自己变好 模型训练不是“算出 loss 就结束”。loss 只是告诉我们错了多少。 backward 会把错误沿计算图传回去,写到每个参数的 grad 里。 但
梯度不是参数更新。梯度只是方向,优化器才是真正踩油门的人。
1. 模型参数不会自己变好
模型训练不是“算出 loss 就结束”。loss 只是告诉我们错了多少。
backward 会把错误沿计算图传回去,写到每个参数的 grad 里。
但 grad 还不是更新。grad 只是一个方向提示。真正修改 weight 和 bias 的,是 optimizer.step()。
Autograd 负责算梯度,Optimizer 负责改参数。
2. Optimizer 在训练循环中的位置
一轮训练可以拆成五步:forward、loss、backward、step、zero_grad。
forward 负责预测。loss 负责衡量错误。backward 负责计算梯度。step 负责更新参数。zero_grad 负责清理旧梯度。
这里最容易误解的是 step。step 不会重新计算 loss,也不会自动 backward。它只读取已有的 param.grad,再按算法更新参数。
3. 梯度给方向,学习率给步长
参数更新的最小动作,就是从当前参数出发,沿着让 Loss 下降的方向挪一点。
梯度告诉你坡往哪边陡。学习率告诉你每步走多远。
学习率太小,训练慢。学习率太大,容易震荡,甚至 loss 爆炸。
记忆:梯度是方向盘,学习率是油门,优化器是驾驶策略。
4. SGD:最朴素的更新规则
SGD 的直觉很简单:当前参数减去学习率乘以梯度。
梯度指向 Loss 上升最快的方向。要让 Loss 下降,就反方向走。
SGD 的优点是简单、透明、泛化能力经常不错。缺点是调参比较敏感,训练可能抖。
5. Momentum:让更新带一点惯性
普通 SGD 每一步只看当前梯度。当前梯度有噪声,方向就会左右晃。
Momentum 会维护一个 momentum_buffer。它把历史梯度方向和当前梯度混合起来。
这样可以减少无意义抖动,在长期正确的方向上走得更快。
Nesterov Momentum 更进一步:它像是先看一步前方的坡度,再做修正。
6. Adam:每个参数都有自己的步长
Adam 可以理解成 Momentum 的升级版。
它同时维护两个状态:exp_avg 和 exp_avg_sq。
exp_avg 记录梯度方向的滑动平均,类似动量。exp_avg_sq 记录梯度平方的滑动平均,用来衡量这个参数的梯度尺度。
梯度经常大的参数,步子自动变小。梯度稀疏或较小的参数,步子可以相对变大。
这就是 Adam 在 NLP、Transformer、稀疏梯度场景里常用的原因。
7. AdamW:大模型时代的默认选择之一
Adam 里如果直接把 weight_decay 加进梯度,会被 Adam 的自适应缩放影响。
AdamW 的关键是解耦。它把权重衰减从梯度更新里拆出来。
先让参数按 weight_decay 轻微衰减,再执行 Adam 的自适应更新。
这让 weight_decay 更像真正的正则化,而不是混在梯度里的另一个项。
大模型经验:AdamW 常作为默认起点,但 bias 和 norm 参数通常不做 weight decay。
8. 怎么选优化器
不要把优化器当玄学。先看任务,再看模型,再看训练稳定性。
传统 CNN 可以从 SGD + Momentum 开始,尤其追求最终泛化时。
Transformer、NLP、大模型微调,通常优先 AdamW。
快速验证想法时,Adam 或 AdamW 往往更省心。
9. param_groups:不是所有参数都该一样更新
优化器可以把参数分成多组。每一组可以有自己的 lr、weight_decay、betas 或 momentum。
这在微调里很常见:预训练 backbone 用小学习率,新加分类头用大学习率。
这在 AdamW 里也很常见:weight 参数做 weight_decay,bias 和 norm 参数不做。
参数分组不是技巧,而是工程基本功。
10. optimizer.state_dict:优化器也有记忆
模型的 state_dict 保存 weight 和 bias。优化器的 state_dict 保存更新过程中的历史状态。
SGD with Momentum 会保存 momentum_buffer。
Adam 和 AdamW 会保存 step、exp_avg、exp_avg_sq。
如果断点续训只保存模型,不保存优化器,恢复后参数虽然在,但优化器的历史记忆没了,训练曲线可能突然变差。
断点续训:model.state_dict 和 optimizer.state_dict 要一起保存。
11. zero_grad:为什么每轮都要清梯度
PyTorch 的梯度默认是累加的。
这很有用,因为它支持梯度累积。但普通训练里,如果不清空上一轮梯度,下一轮 backward 会把新旧梯度加在一起。
所以标准顺序是:清梯度、算 loss、backward、step。
zero_grad 默认 set_to_none=True。它会把 grad 设成 None。这样更省内存,也让没有收到梯度的参数在 step 时被跳过。
12. 源码级讲解:step 背后的主线
Optimizer 基类在初始化时,会把传入的 model.parameters() 包装成 param_groups。
每个优化器都有自己的 step 方法。SGD.step 会遍历 param_groups,收集 params、grads、momentum_buffer,然后调用 functional sgd。
Adam.step 会收集 params、grads、exp_avg、exp_avg_sq、state_steps,然后调用 functional adam。
AdamW 继承自 Adam。它在初始化时把 decoupled_weight_decay 固定为 True。
functional 层会根据设备、dtype、foreach、fused 等条件选择实现路径。最后底层算子对参数做原地更新。
源码主线:Optimizer 管参数组和状态,step 收集梯度,functional 选择实现,底层算子原地改参数。
13. 实战常见坑
第一个坑:忘记 zero_grad。表现是梯度越来越怪,loss 抖动。
第二个坑:学习率太大。表现是 loss 爆炸、NaN、指标突然崩。
第三个坑:weight_decay 误伤 bias 和 norm。大模型微调里尤其常见。
第四个坑:断点续训只保存 model,不保存 optimizer。Adam 的历史状态会丢。
第五个坑:grad 是 None。说明这个参数没有参与计算,或者 requires_grad 被关掉。
14. 总结
优化器是训练闭环里真正修改参数的组件。
SGD 简单直接,适合追求可控和泛化。
Momentum 用历史方向减少震荡。
Adam 用一阶矩和二阶矩给每个参数自适应步长。
AdamW 把 weight_decay 从梯度更新里解耦出来,是 Transformer 和大模型训练里的常见默认选择。
源码上,Optimizer 管理 param_groups 和 state;具体 step 收集 grad 和状态,再下沉到 functional 与底层算子。
相关推荐
大模型应用日志体系、Callback 源码链路、Trace 复盘、企业级落地
开篇:AI 应用没有日志,就是黑盒 大模型应用最怕的不是慢,也不是贵。最怕的是:用户说答案错了,你不知道错在哪。 普通业务系统出了问题,看接口日志、SQL 日志、异常堆栈,大多能定位。但大模型应用不一样。一次回答背后可能经过问题改写、意图识
《PyTorch》Transforms:数据增强不是锦上添花,是训练基本功
“模型不是直接学习真实世界,模型学习的是被 Transforms 处理后的 Tensor 世界。” 上一章讲了 Dataset 和 DataLoader。Dataset 负责取样本,DataLoader 负责拼 batch。中间还缺一个关键
《LangChain 系列》LangSmith:如何调试、追踪、评测一个 Agent?
开篇:Agent 能跑起来,不等于能上线 前面我们已经讲了 Tools、Agent、Memory、LangGraph、Middleware 和 Streaming。到这里,很多人会以为:Agent 跑起来了,项目就完成了。 错。真正难的地方

溢价数倍势在必得,高通正洽谈最高百亿美元收购 AI 芯片初创公司
据海外知名媒体披露,全球芯片巨头高通公司目前正在展开一场重磅收购谈判,其目标直指人工智能芯片设计领域的明星初创企业 Tenstorrent。这笔潜在的交易如果最终达成,将成为近年来半导体行业瞩目的焦点事件。 巨额溢价彰显势在必得 知情人士透露,高通为本次收购开出了极为丰厚的条件,双方商讨的收购对价区间预计在 80 亿至 100 亿美元之间。相较于 Tenst

加码国产算力:字节跳动拟采购 5 万颗AI芯片,国产GPU阵营再添新主力
随着AI大模型用户规模的持续扩张,算力基础设施的自主可控正成为各大科技企业的战略重心。 6 月 15 日,有消息传出,字节跳动目前正与国内高性能计算厂商天数智芯进行深度洽谈,计划大规模采购AI芯片。 根据目前掌握的信息,此次采购规模预计达到 5 万颗。这批芯片交付后,将被主要部署于推理任务场景,为字节跳动旗下AI聊天机器人“豆包”的持续迭代与用户增长提供强有

AI内容产业再下一城,吉视传媒首部AI漫剧定档 7 月
在AIGC技术重塑内容生产模式的浪潮下,吉视传媒正加快其在文化与科技融合领域的布局深度。近日,该公司宣布其首部由AI技术辅助创作的漫剧已圆满完成制作,并顺利通过了相关平台审核,目前已定档于 7 月正式上线发布。 此次制作完成的漫剧项目,是由吉视传媒旗下全资子公司——吉林省东北亚新媒体有限公司,与灵境万维(杭州)智能科技有限公司共同联合投资打造。这一举措标志着
阅读补充
一句话看懂
梯度不是参数更新。梯度只是方向,优化器才是真正踩油门的人。 1. 模型参数不会自己变好 模型训练不是“算出 loss 就
事件背景
这篇内容围绕“PyTorch”展开,热闻岛基于公开信息整理事件背景、主要进展与可继续关注的方向。
事件时间线
发布
相关信息进入公开传播
更新
热闻岛对内容进行整理与补充。
看点
- · PyTorch的最新进展是什么
- · 相关信息对用户或行业会带来哪些影响
- · 后续是否会有新的回应或处理结果
后续关注
- · 后续官方回应或权威通报
- · 相关主体的进一步说明
- · 事件对普通用户和平台传播的持续影响
免责声明:本文仅代表作者观点,不构成投资建议、法律建议、医疗建议。财经类内容尤其需要注意风险;爆料类信息请以权威通报为准。
评论 (0)
登录后即可发表评论
去登录