Adam 优化器 模拟器 返回
机器学习

Adam 优化器 模拟器

深层学习学习过程的标准算法 Adam 体验工具。改变学习率、β₁、β₂,看一阶矩(动量)和二阶矩(自适应学习率)如何组合下降狭长谷,等高线上的轨迹和损失收敛曲线实时显示。

参数设置
学习率 α
单步的基本步长。由 √v̂ 归一化
一阶矩衰减 β₁
梯度平均保留多少(动量)
二阶矩衰减 β₂
梯度平方平均保留多少(自适应学习率)
迭代次数
损失曲面
切换谷的狭长程度(条件数)
计算结果
最终损失 f
最终 x
最终 y
迭代次数
收敛判断
损失低减率 (%)
损失曲面等高线和 Adam 轨迹

同心椭圆为损失 f 等高线,中心点为最小值。从起始点 (−9, 4) 伸出的彩色路径为 Adam 更新轨迹,标记在其上反复前进。

损失收敛曲线
优化路径比较 — Adam vs 标准GD
理论·主要公式

$$m_t=\beta_1 m_{t-1}+(1-\beta_1)g_t,\qquad v_t=\beta_2 v_{t-1}+(1-\beta_2)g_t^2$$

一阶矩 m(梯度 g 的指数移动平均)和二阶矩 v(梯度平方的指数移动平均)。β₁、β₂ 为衰减率。

$$\hat m_t=\frac{m_t}{1-\beta_1^t},\ \hat v_t=\frac{v_t}{1-\beta_2^t},\qquad \theta_t=\theta_{t-1}-\frac{\alpha\,\hat m_t}{\sqrt{\hat v_t}+\varepsilon}$$

用偏差校正后的 m̂、v̂ 更新。参数的 √v̂ 除法正是 Adam "自适应"的核心。

$$f(x,y)=\tfrac12\left(a\,x^{2}+b\,y^{2}\right),\quad \nabla f=(a\,x,\;b\,y)$$

本工具的目标函数。条件数为 b/a。狭长谷中 b/a=20,方向间梯度尺度差异大。

Adam 优化器是什么

🙋
深层学习的入门书总是写"先用 Adam"。Adam 到底在做什么优化器啊?
🎓
简单说,Adam 是"动量"和"自适应学习率"的优点结合。Adam 名字就是 Adaptive Moment Estimation(自适应矩估计)的缩写。梯度下降法加上两个机制:用过去梯度平均(一阶矩 m)稳定移动方向,用过去梯度平方平均(二阶矩 v)调整各参数步长。左边的工具就是这样,先用默认参数跑一下看看。
🙋
轨迹几乎直接指向谷底呢。前面看的标准梯度下降法这个狭长谷里是之字形的。
🎓
这就是 Adam 的强点。这个谷 y 方向陡,x 方向平缓对吧。标准GD 对所有参数用一样的学习率,y 方向容易过头振荡,x 方向进得慢。Adam 用二阶矩 v "y 方向梯度大所以步长小,x 方向梯度小所以步长大"来自动调整。所以条件数差的地形也能直接下降。下面"比较"图看同样步数,Adam 和标准GD 差异很明显。
🙋
有 β₁ 和 β₂ 两个值,这是干什么的?默认 0.9 和 0.999 改了会怎样?
🎓
β₁ 是一阶矩也就是梯度平均保留多少的衰减率,0.9 是标准。β₂ 是二阶矩、梯度平方平均的衰减率是 0.999 标准。β₂ 更接近1是因为步长基准的 v 要缓慢变化。β₁ 小了动量弱反应灵敏,大了惯性强。实务中这两个几乎不碰,都用默认值。
🙋
公式里出现"偏差校正"的除法 m̂=m/(1−β₁ᵗ)。这是干什么的?
🎓
好问题。m 和 v 从0开始对吧。那第1步 m 只吸收了 (1−β₁) 的梯度,比真实平均小得多,是"初始偏差"。m̂=m/(1−β₁ᵗ) 通过除法精确抵消这个缩小。t=1 时除以 1/(1−β₁)=10 倍放大来补偿,t 大了 β₁ᵗ 接近0修正系数接近1即不做什么。所以"偏差校正在学习初期最有效"记住这个。没它序盤的步长极端小。
🙋
那学习率 α 要不要和标准GD 一样选?
🎓
有点不同。Adam 更新量是 α·m̂/(√v̂+ε),√v̂ 归一化后实际单步步长约 α。所以 Adam 对学习率没GD 敏感,深层学习中 α=0.001 差不多是标准起点。本工具的简单二次函数可以用更大的 α,但过大最小值附近会振荡,再大就发散。"从 α=0.001 开始,慢就上调几倍,乱就下调"是现场铁则。

常见问答

Adam(自适应矩估计)是将动量和自适应学习率相结合的优化算法。勾配的指数移动平均的一阶矩 m 决定"移动方向",勾配平方的指数移动平均的二阶矩 v 决定"每个参数的步长"。更新公式为 θ ← θ − α·m̂/(√v̂+ε),其中 m̂、v̂ 为偏差校正后的值。即使在条件数差的地形或稀疏梯度上也能稳定快速收敛,是深层学习的默认优化器。
β₁ 是一阶矩(梯度平均)的衰减率,默认值为0.9。β₂ 是二阶矩(梯度平方平均)的衰减率,默认值为0.999。都决定了指数移动平均"保留多少过去信息"。问题在于 m 和 v 从0初始化,导致最初几步平均偏向0。偏差校正 m̂=m/(1−β₁ᵗ)、v̂=v/(1−β₂ᵗ) 通过除法消除这种偏差,学习初期效果最大,随着 t 增大修正系数趋向1。
标准梯度下降法对所有参数使用相同学习率,θ ← θ − α∇f。Adam 添加两个机制:1)动量(一阶矩 m)平均过去梯度稳定移动方向;2)二阶矩 √v 的除法自动调整步长,梯度大的方向步长小,梯度小的方向步长大。这样即使在方向间梯度尺度差异大的狭长谷中也能按各参数合适的步长收敛。
Adam 的更新量为 α·m̂/(√v̂+ε),√v̂ 的归一化使得每步的实际步长约为 α。因此 Adam 对学习率不如标准GD敏感,深层学习中 α=0.001 是常用起点。本工具的二次函数可以用更大的 α,但过大会在最小值附近振荡,继续增大则发散。实务中从 α=0.001 开始,学习慢则上调几倍,损失波动则下调。

实际应用

神经网络学习:Adam 是图像识别、自然语言处理、语音识别等深层学习各领域最先选的优化器。Transformer 学习时会把 β₂ 改成 0.98 等领域特有调整,但 α=0.001、β₁=0.9、β₂=0.999 这"Adam 三点组合"仍是很多实现的默认值。无需手工调各方向学习率,试新模型时第一选择。

稀疏梯度问题:推荐系统、词嵌入等每次只更新部分参数的"稀疏梯度"问题中,Adam 特别强。二阶矩 v 各参数独立累计,难得梯度的参数分配大步长,频繁更新的参数分配小步长。这是原 Adam 论文的主要动机之一。

CAE·数值优化设计探索:结构优化、拓扑优化、形状优化也用梯度下降来最小化目标函数(重量、应力、柔度)。设计变量尺度不一致时损失地形变成狭长谷,收敛极慢。Adam 的"方向间自适应步长"思想自动承担变量归一化,机器学习外工程设计优化也有效。

反演·参数辨识:根据实验数据调整材料模型、边界条件参数的反演问题也最小化误差损失。参数敏感度差异大(某系数对损失敏感,别的系数迟钝)常见,固定学习率梯度下降收敛困难。Adam 自适应学习率自动吸收敏感度差异,稳定收敛。

常见误解和注意事项

最常见是"Adam 总是最好的优化器"思想。Adam 收敛快调整方便,但泛化性能(模型在学习数据外的表现)上,充分调好的 SGD with momentum 有时更优。图像识别竞赛有队伍最后用 SGD 收尾的。Adam 是"快、简单、不错解"的优化器,不保证"总是最优解",要理解这点。

其次是"收敛后损失应该是零"误解。本工具目标函数最小值在原点 f=0,但迭代有限次数损失严格不会零。收敛判断用"最终损失小于初始损失的1%"这相对标准。实际机器学习中损失最小值往往不是零(数据噪声、表达力限制),看"还能不能再降"这相对变化来判收敛。损失绝对值不是关键,减速停了吗才是实务感觉。

还有"学习率越大收敛越快"误解。√v̂ 归一化让 Adam 比标准GD 对学习率鈍感,但有底线。本工具狭长谷学习率 α 上到 1.0,Adam 也会最小值附近激烈振荡甚至发散。偏差校正让序盤实效步长扩大,α 大时特别不稳定,发散风险高。"发散就先降 α"Adam 也是铁律。

使用指南

  1. 学习率(Learning Rate)设0.001~0.1范围,调梯度下降步幅
  2. β₁(动量系数)设0.8~0.99,β₂(自适应学习率指数平均系数)设0.999~0.9999,按 TensorFlow、PyTorch 规范设 Adam 超参数
  3. 迭代步数设100~10000,运行模拟实时显示损失曲线、参数轨迹,对比评估最终损失和收敛速度

具体计算例

Rosenbrock函数(f=(1-x)²+100(y-x²)²)优化,初始点(x₀=-1.5, y₀=2.5),学习率0.002、β₁=0.9、β₂=0.999运行5000步,最终损失约0.0045,最终坐标(x≈0.998, y≈0.996),损失低减率达99.8%。改β₁=0.99时振荡增加收敛迟延。

实务注意点