优化器是什么?SGD、Momentum、Adam 有什么区别?

🎯 博主简介

你好,我是安逸,CSDN「人工智能技术领域新星创作者」,码龄 6 年。博客总访问量 31万+,博客粉丝 1.2万+。

我长期关注人工智能技术与工程实践,主要研究和分享 AI Agent、RAG 系统、MCP 协议、OpenClaw、AI 编程工具以及大模型工程化落地。同时也持续输出 Java / Spring、Transformer、机器学习、深度学习与计算机视觉等方向的学习笔记和项目经验。

📚 推荐系列合集

目前已经整理了 生产级 RAG 系统实战Agent 记忆系统MCP 协议深度解析OpenClaw 系列Hermes Agent + Obsidian图解机器学习Claude Code 系列Agent 经典面试题等系列合集,涵盖 AI 应用开发、智能体实践、知识管理、机器学习与 AI 编程工具。

📱GZH:安逸Ai (科技前沿新闻,Github热门项目,最新免费资料...)

网页观看完整系列合集:🌐 Anyi AI 学习资源站


上篇聊完梯度消失和梯度爆炸,你可能在想:为什么梯度会不稳定?怎么才能让训练更顺畅?

答案跟优化器有关。梯度消失和梯度爆炸说的是"方向不准",而优化器决定的是"怎么根据这个方向更新参数"。同一个梯度,优化器不同,效果天差地别。

优化器:决定参数怎么走的那只手

训练神经网络,本质上是找一组参数让损失函数最小。

损失函数衡量的是"模型预测"和"真实答案"之间的差距。优化器的任务就是不断调整参数,让这个差距越来越小。

核心公式很简单:新参数 = 旧参数 - 学习率 × 梯度

梯度告诉优化器哪个方向是下坡,学习率决定这一步迈多大。这个过程重复几百上千次,参数就慢慢变"聪明"了。

想象你在多维曲面上找一个最低点。起点是随机初始化的地方,终点是某个低洼处。梯度下降就是每一步都往最陡的下坡方向走。

问题是,这个曲面可能极其复杂。有平坦的 plateau,有陡峭的峡谷,还有很多小坑。如果优化器只会"低头看脚下",就容易走弯路。

三维Loss曲面图展示参数从高Loss点沿曲面下降至局部最小值,标注梯度方向箭头

所以需要不同的优化器。

SGD:最老实的笨办法

SGD,即随机梯度下降,每次只用1个样本(或少量样本)计算梯度。

为什么要"随机"?因为算全部数据的梯度太慢了。如果有100万条数据,每次迭代都要过一遍全部数据,训练一轮可能要几个小时。

SGD的思路是:用1个样本的梯度来近似全部样本的梯度。虽然不准确,但速度快。

深度学习里常用的是 Mini-batch SGD。每次用几十到几百个样本来估计梯度,在"准确度"和"速度"之间找平衡。Batch Size 一般设成 32、64、128 这些 2 的幂次。

SGD最大的问题是"晃"。

Loss随迭代次数变化曲线图,明显标注SGD的波动特征和最终收敛震荡区域

看这张图,SGD的Loss曲线不是平滑下降的,而是来回波动。特别是在最优解附近,晃来晃去就是停不下来。

原因很简单:每个batch的样本不一样,梯度估计有噪声。就像在浓雾里下山,你每次只能看清脚下一米,偶尔会往错误方向迈一步。

这个"晃"有坏处:收敛慢,最终精度可能差那么一点点。

但也有好处:有时候能帮助跳出局部最优。SGD的噪声反而让它不会困在小的局部最优里。

调参的时候,学习率是最关键的一个参数。设大了震荡剧烈,设小了收敛像蜗牛爬。

Momentum:给梯度加个惯性

Momentum,中文叫动量法,核心思想是"累积历史梯度"。

物理里有个概念:一个滚动的球有惯性,往某个方向滚的时间越长,继续往那个方向滚的趋势越大。Momentum就是借鉴了这个思想。

公式变成这样:

复制代码
  速度 = 动量系数 × 旧速度 + 当前梯度
参数 = 旧参数 - 学习率 × 速度

动量系数通常设为0.9。这意味着历史梯度占大头,当前梯度只占10%。

想象一个小球在山坡上滚。当前坡度变陡了,但小球不会马上垂直下落,而是沿着之前的方向偏移一下。

物理小球沿斜面滚动图,展示速度累积方向和当前梯度方向的几何关系

这样做有两个好处:

一是相关方向加速。连续几轮梯度都往东,那速度越来越大,更新步子越来越快。

二是摇摆方向减速。如果这轮梯度往东,下轮往西,速度会相互抵消,晃动的幅度就小了。

我以前用Momentum训练图像分类模型,明显感觉比SGD收敛快,而且曲线平滑很多。

Adam:自适应学习率的集大成者

Adam是Adaptive Moment Estimation的缩写,2014年提出,迅速成为深度学习的默认优化器。

它聪明在哪里?

Adam同时用了两个东西:动量(一阶矩)和自适应学习率(二阶矩)。

动量帮你"顺着惯性走",自适应学习率帮你"知道路况"。

什么是自适应学习率?梯度大的方向,学习率自动变小;梯度小的方向,学习率自动变大。

这就好比登山时,遇到陡坡就小步谨慎,碰到平路就大步快走。

Adam怎么做到的?

它维护两个移动平均:一个是梯度的均值(类似Momentum),一个是梯度平方的均值(反映梯度大小)。

用梯度平方的均值来调整学习率:大梯度→小步长,小梯度→大步长。

默认学习率0.001。听起来很小,但Adam会自动调节。

实际用下来,Adam对学习率的初始值确实不那么敏感。我一般直接用0.001,很少需要改。

Adam的公式比较复杂,但效果简单粗暴:大多数任务直接用Adam,效果都不会太差。

Adam优化器四步计算流程图,从输入梯度到参数更新的完整计算链路

三种优化器怎么选

没有最好,只有最适合。

SGD/Momentum/Adam三者在收敛速度、稳定性、调参难度、适用场景的雷达图或评分表

总结一下:

SGD像老黄牛。慢,但稳。最终精度往往最好。适合搞研究、写论文、刷比赛。

Momentum像山地自行车。比SGD快,比Adam省心。是很多工程的默认选择。

Adam像智能导航。快,自动化程度高。但有时候"聪明反被聪明误",在测试集上可能略输Momentum一点点。

关键区别:Adam训练快,Momentum测试准。

追求模型上线后的最终表现,用Momentum值得。

快速迭代一个想法,Adam帮你省时间。

大规模预训练模型(GPT、BERT这些),清一色用Adam,参数量太大,Adam的收敛速度优势明显。

实战建议

别纠结,按这个来:

优化器选择决策流程图,从数据集规模→模型复杂度→性能要求的懒人选择指南

快速实验阶段,用Adam。它能让你快速验证想法是否靠谱。

追求最终精度,用Momentum。学习率和动量系数要仔细调。

超大规模训练,用AdamW(带权重衰减的Adam)。防止参数过大导致过拟合。

另外,Batch Size和学习率要配合调整。Batch Size翻倍,学习率也可以适当加大。这个很多人会忘。

总结

优化器是深度学习的引擎。没有它,参数永远停在初始化状态。

梯度消失和梯度爆炸是"方向问题",Batch Normalization可以缓解。但真正的解决之道,往往需要配合合适的优化器。

Adam虽好,但不是银弹。面对越来越大的模型、越来越复杂的数据,理解每种优化器的本质,才能做出明智选择。

下次模型不收敛或者收敛太慢,先检查一下:优化器选对了吗?学习率合适吗?

有时候,换个优化器,问题就迎刃而解了。

相关推荐
动物园猫1 小时前
狗行为目标检测数据集:6类别、近3,000张图像 | 目标检测
人工智能·目标检测·计算机视觉
王莹月1 小时前
全店商品图风格怎么统一?生图API 用 nano banana pro 批量出同一套视觉
gpt·ai·chatgpt·ai作画·aigc·agi
知识燃料2 小时前
企业技术决策者落地 AI Agent 体系,AWS 中国峰会有哪些战略与工程内容可看?
大数据·人工智能
一个王同学2 小时前
从零到一 | CV转多模态大模型 | week22 | 实战项目-DocuMind-VL:基于 OCR 与 Qwen-VL 的文档多模态问答系统(二)
人工智能·深度学习·机器学习·计算机视觉·ocr
Canace2 小时前
笔记本都合上了,Claude 为什么还能在手机上执行电脑上装的技能?
前端·人工智能·ai编程
u0103055272 小时前
昇腾+AtomGit打造AI甘特图应用生产线
人工智能
美狐美颜SDK开放平台2 小时前
第三方美颜SDK接入教程:直播APP实现实时美颜、滤镜与美型效果的方法
人工智能·深度学习·音视频·sdk·美颜sdk·视频美颜sdk·直播app开发
乱世刀疤2 小时前
AI Weekly 8.3-8.9
人工智能
AI导出鸭2 小时前
怎么让豆包做表格?AI导出鸭苹果版将豆包输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭