首页/新闻资讯/正文详情

Adam凭什么比SGD快?手写三组优化器,NumPy跑出10个数量级差距,ML数学基础第8期

发布时间:2026/11/5 5:26:05 来源:云帆数科 栏目:资讯中心
Adam凭什么比SGD快?手写三组优化器,NumPy跑出10个数量级差距,ML数学基础第8期
标前七期我们攒齐了半套装备第2期注意力是矩阵乘法第3期softmax第4期交叉熵第5期LayerNorm第6期反向传播第7期讲学习率。今天把第7期留的尾巴收了学习率调对之后优化器本身还能不能再快先摆个靶子。Rosenbrock函数长得像一根香蕉谷底又细又长是优化器的经典考场。起点(-1, 1)函数值4.0目标是走到谷底的(1, 1)。SGD学习率0.001跑2000步函数值还剩7.42e-02。能走但慢。慢在哪香蕉谷底两个方向的坡度差了上百倍。学习率按最陡的方向设到了平缓方向就只能一步步挪。这时候动量(momentum)登场。想法很直观梯度方向基本一致的时候把历史梯度累积起来越走越快方向来回震荡的时候正负抵消自动减速。像推着一个小球滚下山有惯性。代码不长核心就三行importnumpyasnpdefrosenbrock(x):return(1-x[0])**2100*(x[1]-x[0]**2)**2defgrad(x):g0-2*(1-x[0])-400*x[0]*(x[1]-x[0]**2)g1200*(x[1]-x[0]**2)returnnp.array([g0,g1])defmomentum(x0,lr0.001,beta0.9,steps2000):xx0.copy()vnp.zeros(2)# 速度累积历史梯度for_inrange(steps):vbeta*vgrad(x)x-lr*vreturnrosenbrock(x)beta0.9是惯例相当于记住最近10步左右的梯度方向。Adam是两步再往前动量管往哪走再加一个每步走多大。它给每个参数单独算学习率梯度一直很大的方向步子自动调小梯度稀稀拉拉的方向步子自动放大。用梯度平方的滑动平均来估计每个方向的忙碌程度。另外有个容易忽略的细节叫偏差修正刚开始滑动平均都是0前几步会被低估除以(1-beta^t)把它修正回来。defadam(x0,lr0.01,steps2000):xx0.copy()mnp.zeros(2)# 一阶矩梯度的滑动平均(动量)vnp.zeros(2)# 二阶矩梯度平方的滑动平均(自适应步长)b1,b20.9,0.999fortinrange(1,steps1):ggrad(x)mb1*m(1-b1)*g vb2*v(1-b2)*g*g mhm/(1-b1**t)# 偏差修正vhv/(1-b2**t)x-lr*mh/(np.sqrt(vh)1e-8)returnrosenbrock(x)环境只要numpypip install numpy就行。四组实验我机器上真实跑出来的数字起点都是(-1, 1)都跑2000步SGD学习率0.0017.42e-02Momentum学习率0.0018.97e-09Adam学习率0.0011.23e-01Adam学习率0.011.74e-19看出门道了吗。动量是质变同样学习率Momentum比SGD快了7个数量级。Adam在学习率0.01时最猛1.74e-19基本贴着谷底。但注意第三行Adam在学习率0.001时只走到1.23e-01还不如SGD。这就是今天最大的坑Adam不是无脑强它照样吃学习率学习率没设对再花哨的自适应也救不了。第7期讲学习率不是白讲的优化器换得再勤学习率这一课都躲不掉。为什么Adam在小学习率下反而拉胯它的自适应步长是按历史梯度平方来缩放的Rosenbrock这种狭长山谷里二阶矩估计会把本就不大的步子压得更小2000步根本走不到谷底。调大到0.01一阶矩的动量效果才放出来。所以Adam的自适应不是不用调是调起来和SGD不是一个手感。第二个坑Adam快但不总是最好。小模型、数据干净、调参时间充足的时候SGD动量调好了泛化经常更好。Adam是开箱即用的选择SGD是愿意花时间调的选择。面试被问为什么默认用Adam别只背收敛快把这句也带上。收藏这篇下次有人问你Adam和SGD的区别直接把这四组数字甩出来比背公式管用。下期预告第9期讲正则化——L2、Dropout、早停三个防止过拟合的手段NumPy手写看效果。这个系列在专栏《ML数学基础》里连着更新从矩阵乘法一路写到优化器关注后专栏里能连着看。讨论你训模型时默认用Adam还是SGD有没有遇到过Adam还不如SGD的时候最后怎么解决的—— Cyrus

相关推荐

Mem Reduct 内存清理配置实战指南:从区域选择到自动清理的完整教程与避坑表
Mem Reduct 内存清理配置实战指南:从区域选择到自动清理的完整教程与避坑表

Mem Reduct 内存清理配置实战指南:从区域选择到自动清理的完整教程与避坑表 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/… · 2026/11/5 5:25:05

Agno Workflow 工作流编排实战:从顺序执行到 CEL 表达式的完整指南
Agno Workflow 工作流编排实战:从顺序执行到 CEL 表达式的完整指南

Agno Workflow 工作流编排实战:从顺序执行到 CEL 表达式的完整指南 【免费下载链接】modin Modin: Scale your Pandas workflows by changing a single line of code 项目地址: https://gitcode.com/gh_mirrors/mo/modin 多个 Agent 协作时,流程一… · 2026/11/5 5:25:05

5 步跑通 12 个付费广告平台的审计管线:Claude Ads 源码级完整解析
5 步跑通 12 个付费广告平台的审计管线:Claude Ads 源码级完整解析

5 步跑通 12 个付费广告平台的审计管线:Claude Ads 源码级完整解析 【免费下载链接】claude-ads Claude-first paid-media operations skill for Claude Code across 12 ad platforms (Google, Meta, YouTube, LinkedIn, TikTok, Microsoft, Apple, Amazon, Reddit,… · 2026/11/5 5:25:05

10A太阳能充电控制器开源图纸:PWM直充与三段式充电调试
10A太阳能充电控制器开源图纸:PWM直充与三段式充电调试

简介:面向电子爱好者与嵌入式开发者的10A太阳能充电控制器开源方案,包含完整原理图与固件源码,适用于中小型光伏系统的学习、复刻与二次开发。压缩包共390个文件、约1.99MB,以c/h源码与工程配置为主,辅以sch原理图、pc… · 2026/11/5 8:21:05

自动驾驶NMPC与MPC路径规划控制技术解析
自动驾驶NMPC与MPC路径规划控制技术解析

1. 自动驾驶规划控制的核心挑战在自动驾驶系统开发中,规划控制模块直接决定了车辆行驶的平顺性和安全性。传统PID控制虽然简单易实现,但在复杂动态环境下往往表现不佳。这正是我们需要引入NMPC(非线性模型预测控制)和MPC&#xff… · 2026/11/5 8:21:05

Oracle到DuckDB日期函数迁移与连续区间计算实践
Oracle到DuckDB日期函数迁移与连续区间计算实践

1. 从Oracle到DuckDB:日期处理函数的迁移实践在数据库迁移或跨平台开发过程中,日期时间函数的兼容性处理是个高频痛点。最近我在处理一个VIP会员续费分析系统时,需要将原本运行在Oracle上的"连续会员区间计算"逻辑迁移到DuckDB。这… · 2026/11/5 8:21:05

C#解析.rofl回放元数据:LeagueReplayParser批量落库
C#解析.rofl回放元数据:LeagueReplayParser批量落库

简介:LeagueReplayParser 是面向《英雄联盟》重放解析的 C# 类库,可读取文档目录下扩展名为 .rofl 的重放文件,并围绕客户端版本与重放启动提供基础能力,适合研究比赛统计、回放分析或客户端重放流程的开发者参考;解析… · 2026/11/5 8:21:05

拆解安全厂商17K*15:公积金基数、年终奖与谈薪避坑
拆解安全厂商17K*15:公积金基数、年终奖与谈薪避坑

拿到 Offer 了!某安全厂商 17K15——这个数字组合在安全圈的校招和社招群里一出现,讨论热度基本能顶到当天最高。17K 的月薪基数、15 个月的年薪包,听起来是应届生里相当能打的一档,不少人第一反应就是"年包 25.5 万&#xf… · 2026/11/5 8:21:05

四轴机械臂反解实战:牛顿迭代法的MATLAB实现与嵌入式移植
四轴机械臂反解实战:牛顿迭代法的MATLAB实现与嵌入式移植

简介:本资源面向机器人学初学者与MATLAB实践者,聚焦四轴机械臂逆运动学核心问题——关节反解,系统讲解雅可比矩阵原理、牛顿迭代法数值求解流程及其实现要点。资源包含1个MATLAB仿真脚本(.m)与1份英文权威参考资料PDF&… · 2026/11/5 8:20:04

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

多智能体协作系统架构设计与实践优化
多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39

大模型系统性入门实战指南:从原理到部署微调的全链路路线
大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39

鸿蒙文件系统沙箱机制解析与开发实践
鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码