Token Lab搜索

← 论文资料库
优化与训练 / 2014

Adam:理解更新过程,而不只会使用默认参数

两个移动平均如何改变训练问题的几何形状?从第一次更新入手,观察偏差校正的作用。

Adam: A Method for Stochastic Optimization · Kingma & Ba · arXiv:1412.6980

Token Lab 原创学习解读 · 来源核对 2026-10-25 · 区分论文主张与合成教学例子。

01 · 论文提出了什么

Adam 维护一阶、二阶矩估计,并校正初始化偏差。论文在多项学习任务上比较优化表现;这些结果支持对应实验范围内的结论,不保证某种优化器在所有任务中最优。

一手来源:论文摘要 ↗
学习指南与本课目录LEARNING CONTRACT

理解 → 实现 → 研究

目标:解释本课机制、复现一个例子、测试一个失败案例。读完不自动代表掌握。

  • 理解层:写明假设、形状/单位和一个反例。
  • 实现层:复算数值例子并检查边界。
  • 研究层:在匹配预算下比较一个替代方法。

02 · 核心机制

Text / 原始公式
mₜ = β₁mₜ₋₁ + (1−β₁)gₜ
vₜ = β₂vₜ₋₁ + (1−β₂)gₜ²
m̂ₜ = mₜ/(1−β₁ᵗ), v̂ₜ = vₜ/(1−β₂ᵗ)
θₜ = θₜ₋₁ − αm̂ₜ/(√v̂ₜ + ε)

把每个坐标看作同时具有方向估计和尺度估计。一阶矩平均方向,平方梯度的平均值提供分母。分母并不是 Hessian,因此不能把 Adam 称为牛顿法。零初始化使早期平均值偏小;除以几何级数缺失的质量,可以在矩估计假设下校正这种影响。

符号与直觉为教学解释,完整假设及实现细节请对照原论文方法。

机制图与逐步推导

梯度 g → 更新 m 与 v → 校正初始偏差 → 缩放并更新 θ
原创机制示意图,按从上到下顺序阅读。 SVG ↓
符号与假设
符号含义
gₜ当前梯度,与参数同形状
mₜ, vₜg 与 g² 的指数平均;v 不是中心化方差
α, β₁, β₂, ε步长、两个衰减率及数值稳定项
  1. 展开递推 β₌₁ᵗβ₁ᵗ⁻ʲgⱼ。若 E[gⱼ]=μ 恒定,则 E[mₜ]=(1−β₁ᵗ)μ,由此识别偏差项,而不是死记校正公式。
  2. 对原始二阶矩重复论证。分别除以对应几何级数质量,再用校正二阶矩的平方根归一化方向。
  3. 恒定 时,第二步原始矩 、,校正后仍为 2 与 4。梯度变号时不再有这种相等,平均值编码了历史。
实验检查点

同时记录原始与校正矩。恒定梯度测试不能每步恢复相同矩时,检查步数索引与初始化。

LOCAL / SYNTHETIC / INTERACTIVE

改变一个变量,解释结果为什么变。

原创教学计算,并非论文 benchmark 复现。条形在面板内相对缩放,具体数值与单位以标注为准。

04 · 手算一个例子

原创算例:、β、β、α,则 、;校正后为 2 和 4。忽略 ε,步长为 −0.001;未校正时约为 −0.003162。这只说明首步,不预测整条损失曲线。全部梯度乘以正数时,比值会近似抵消尺度变化,但 ε 起作用的区域例外。

05 · 设计实验

在 上实现 SGD 与 Adam,保持起点和梯度计算预算相同。记录损失、梯度范数、矩估计和实际步长范数。用相同试验次数为两者搜索学习率,再加入梯度变号测试以观察动量滞后。保留失败运行,不只画最佳轨迹。

研究交付物

写出一个假设,保存配置与原始结果,提出替代解释,只报告证据支持的结论。关联实验是本地起点,不是完整论文复现。

打开关联课程/实验 →

06 · 局限与审稿式追问

分析提醒:训练损失下降快不等于泛化好。比较相同计算预算下的留出损失,并检查混合精度、ε 的位置和优化器状态内存。原论文的收敛讨论不能解读为任意非凸问题的普遍收敛保证。

为什么很小的梯度仍可能产生明显的首次更新?

当 g 非零且 ε 可忽略时,校正后的比值为 g/√g²=sign(g),首步幅度由学习率决定。接近零时 ε 会破坏这种抵消;零梯度不会移动。

07 · 阅读原文

先看 Algorithm 1 和偏差校正讨论,逐一跟踪状态变量,再读收敛分析。

年份采用首次 arXiv 投稿年份。未锁定版本的链接随修订变化,复现报告请记录准确版本。此处 DeepSeek-R1 明确固定为 v1。

继续学习本主题

MATHEMATICAL REVIEW · 2026-10-26

假设、参考实现与验收

初始化 =0;t≥1,0≤β₁,β₂<1。运算按元素进行。v 的偏差修正依赖平稳原始二阶矩;实验报告更新幅度的绝对值。

复核所示公式、中英解释及声明滑块范围。代码复现标量教学计算,不是论文训练系统。

运行前:预测一个边界情况

在 上实现 SGD 与 Adam,保持起点和梯度计算预算相同。记录损失、梯度范数、矩估计和实际步长范数。用相同试验次数为两者搜索学习率,再加入梯度变号测试以观察动量滞后。保留失败运行,不只画最佳轨迹。

提示:隔离假设

固定基线输入,只改变一个参数或边界;同时比较数值与声明单位。单例通过仅验证该样例。

最小可运行算例

将算例及所链接模块保存在同一目录。使用 Node.js 22 或更高版本,然后运行 node adam.mjs. 无需第三方运行依赖。

import {paperCalc} from './paper-core.mjs';
const result=paperCalc("adam",2);
console.log(result);
参考输出——先预测再展开
{
  "labels": [
    "Bias corrected step",
    "Uncorrected step"
  ],
  "values": [
    0.000999999995,
    0.003162277160168459
  ],
  "unit": "absolute step"
}

测试与迁移

在 上实现 SGD 与 Adam,保持起点和梯度计算预算相同。记录损失、梯度范数、矩估计和实际步长范数。用相同试验次数为两者搜索学习率,再加入梯度变号测试以观察动量滞后。保留失败运行,不只画最佳轨迹。

在下方笔记记录输入、代码版本、期望值和实测值;再构造违反上述假设的反例,解释原结论为何不再成立。

下载完整代码包(.tar.gz) · 完整参考代码与回归检查

预测、检验与证据记录

展开答案前先预测一个结果;练习后记录差异和迁移测试。记录仅存本地,在不同语言版本间共用。

打开记录/导出/清除 →

数学复核范围逐篇记录,不代表完成论文实证复现;可在笔记中记录疑似错误。 复核范围