assassinlike's picture
Upload folder using huggingface_hub
909636f verified
|
Raw History Blame Contribute Delete
16.5 kB
# Hindsight-Guided Momentum(HGM)优化器
这篇论文提出一个一阶优化算法 HGM,核心想法很直白:给 Adam 这类自适应优化器加一个"事后视角"的信号,用来判断当前梯度方向与过去累积动量方向是否一致,再据此动态放大或缩小学习率。下面按论文的逻辑顺序叙述,从它想解决的问题讲起。
## 问题背景与动机
一阶优化算法(SGD、Adam、RMSprop 之类)是训练深度神经网络的主力,因为神经网络的损失曲面往往高维、非凸。其中 Adam、RMSprop 这类自适应方法之所以成为默认选择,是因为它们能**按参数**去调整学习率,依据的是梯度幅值(二阶矩,即梯度平方的滑动平均)的统计量。
但论文指出这些方法有一个共同的盲区:它们只看梯度"有多大",完全不看梯度"往哪个方向指"。而实际上,更新的方向性本身携带着很有价值的信息——如果连续若干步梯度方向保持一致,通常说明优化正沿着损失曲面的一条连贯"山谷"平稳前进;反过来,如果方向频繁反转,往往意味着正在振荡、靠近鞍点、或梯度本身带噪声。现有的优化器把每一步更新孤立地看待,因此错过了利用这种时间上的结构。
HGM 的解决思路就是补上这个缺口:给动量类方法加一个"事后(hindsight)"机制,度量**当前梯度**与**已经累积起来的动量**之间的余弦相似度,用它作为"方向是否对齐"的代理量,然后用一个指数函数把学习率平滑地放大或缩小——方向一致时加大步长以加速,方向发散时缩小步长以防不稳定。论文强调这个改动几乎不带来额外内存和计算开销,却能让优化器对损失曲面的几何结构作出更细致的响应:在平坦、结构良好的区域收敛更快,在带噪声或曲率剧烈的地方更稳健。
## 相关工作
这里分两条线来梳理,HGM 正好处在两者的交界处。
**第一条线:一阶与自适应方法。** SGD 因为简单、可扩展,一直是大规模模型训练的基础,但它对学习率调度敏感、在病态缩放(ill-conditioned,指不同参数方向的最优步长差异很大)的问题上效率低。于是发展出一系列自适应变体。AdaGrad 首创了按参数设置学习率,用累积的梯度平方和来给每个参数单独缩放,在稀疏数据上效果明显;RMSprop 把这种"累积"改成指数移动平均(EMA),更适合非平稳的场景。Adam 则把动量与 RMSprop 式的方差归一化结合,因其收敛快、易用而成为深度学习默认选项,但它也被批评在部分非凸情形下泛化和收敛有问题。后续的修补包括 AMSGrad(强制学习率非增,以改进理论保证)和 AdaBound(给学习率加界,在自适应行为与 SGD 之间插值)。
**第二条线:方向性与几何感知的方法。** 大多数自适应优化器只关心梯度幅值,专门利用方向信息的很少。二阶方法与拟牛顿法能够隐式地捕捉曲率与方向对齐,但代价高昂:真正的二阶方法需要计算并求逆 Hessian,在高维深度学习里不现实、不可扩展;拟牛顿法只是近似 Hessian,收敛往往慢于真二阶方法,而且仍然涉及比一阶方法贵得多的矩阵运算,对大规模问题同样低效。更轻量的策略有 Lookahead(把参数更新在时间上做平均)和 Shampoo(以方向感知的方式调整预条件矩阵,但内存开销更大)。另一些工作把梯度方差或梯度符号翻转当作"不稳定"的代理信号,但这些通常只能驱动全局的调度或裁剪策略,做不到细粒度的步长调制。与 HGM 精神最接近的,是信任域式的机制或基于历史信号一致性的自适应步长,但它们往往依赖更复杂的启发式或元优化层。
**HGM 的定位**就是填补纯幅值适配与高开销几何感知方法之间的空白:用一个余弦相似度的调整机制,以有原则、又足够廉价的方式,把方向一致性注入学习率调度,从而更聪明地响应优化路径的结构,兼顾稳定性与收敛速度,尤其是在非凸场景下。
## 方法
记 $\theta_t$ 为第 $t$ 步的模型参数,$g_t = \nabla_\theta f_t(\theta_{t-1})$ 为损失函数对参数的梯度。HGM 保留了 Adam 的一阶矩、二阶矩两个指数移动平均,另外新增一个状态变量,用来跟踪当前梯度与先前动量之间的余弦相似度。更新流程如下。
**第一步,动量与方差(一阶矩、二阶矩)。** 与 Adam 完全一致,用指数移动平均维护:
$$
m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t,
$$
$$
v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2.
$$
这里 $g_t^2$ 是逐元素平方。$m_t$ 是梯度的滑动平均(即动量),$v_t$ 是梯度平方的滑动平均(反映梯度的幅值大小)。
**第二步,偏差校正。** 因为 $m_0 = 0$、$v_0 = 0$,这两个滑动平均在初期会系统地偏向 0(尤其前面几步)。把 $m_t$ 展开可见 $m_t = (1-\beta_1)\sum_{k=1}^t \beta_1^{t-k} g_k$,其权系数之和为 $1-\beta_1^t$,所以要除以这个和才能得到真正的加权平均:
$$
\hat m_t = \frac{m_t}{1-\beta_1^t}, \qquad \hat v_t = \frac{v_t}{1-\beta_2^t}.
$$
**第三步,事后相似度(HGM 的新增部分)。** 计算当前梯度与上一步动量之间的余弦相似度:
$$
c_t = \frac{g_t \cdot m_{t-1}}{\lVert g_t\rVert_2 \,\lVert m_{t-1}\rVert_2 + \epsilon},
$$
其中分子是两个完整参数向量(对所有参数求和)的内积,分母是两者 $\ell_2$ 范数的乘积,$\epsilon$ 是一个很小的常数,纯粹为了避免分母为零。注意这里用的是**上一步**的动量 $m_{t-1}$ 而不是本步的 $m_t$——这就是"事后"的含义:拿"你即将要去的方向"和"你之前一直在去的方向"作比较。若 $g_t$ 与 $m_{t-1}$ 同向,$c_t$ 接近 $+1$;反向则接近 $-1$;正交或不相关则接近 0。
**第四步,平滑。** 单步的相似度估计有噪声,于是再做一次指数移动平均:
$$
s_t = \rho_s\, s_{t-1} + (1-\rho_s)\, c_t,
$$
其中 $\rho_s$ 是平滑系数,作用与 $\beta_1,\beta_2$ 类似,初始 $s_0 = 0$。
**第五步,调制学习率。** 用平滑后的信号以指数方式缩放学习率:
$$
\eta_t = \eta \cdot \exp(\gamma\, s_t),
$$
其中 $\eta$ 是基础学习率,$\gamma \ge 0$ 是灵敏度参数,控制相似度对步长的作用强弱。因为 $s_t$ 是平滑后的余弦相似度,取值在 $[-1,1]$ 内,所以 $\eta_t$ 落在 $[\eta e^{-\gamma}, \eta e^{\gamma}]$ 区间:对齐时 $s_t > 0$,学习率被指数放大;发散时 $s_t < 0$,学习率被指数缩小。特别地,当 $\gamma = 0$ 时 $\eta_t = \eta$,HGM 退化为 Adam。
**第六步,参数更新。** 与 Adam 形式相同,只是把常数学习率换成了调制后的标量:
$$
\theta_{t+1} = \theta_t - \eta_t \cdot \frac{\hat m_t}{\sqrt{\hat v_t} + \epsilon},
$$
其中除法与开方都是逐元素进行的。值得强调的一点:$\hat m_t/(\sqrt{\hat v_t}+\epsilon)$ 是 Adam 的归一化方向,而 $\eta_t = \eta\exp(\gamma s_t)$ 是一个**全局标量**——所以 HGM 是在 Adam 给出的方向上整体放大或缩小一步,而不是像 Adam 那样按坐标分别用 $1/\sqrt{\hat v_{t,i}}$ 缩放。方向本身仍由 Adam 决定,HGM 只在步长上做文章。
这里需要指出论文的一处内部不一致:按上面第三步的公式,$c_t$ 是对所有参数做内积和范数运算得到的,因此 $c_t$、$s_t$ 都是**单个全局标量**,这一点第 8 节也明确确认了("$s_t$ 是由全局余弦相似度导出的单一标量")。但第 4.4 节又把 $s_t$ 说成"每个参数一个的标量统计量",与前文公式矛盾。从算法公式和实验看,应当以"全局标量"为准。
## 理论优势(定性的讨论)
在给出严格收敛分析之前,论文先用一节从直觉上说明这个机制为什么应该有效,共四点。
**对齐区域的加速。** 当梯度在连续迭代中保持方向一致(比如宽阔的山谷或高原),$c_t$ 高、$s_t$ 为正,$\exp(\gamma s_t)>1$ 使学习率指数放大,优化器得以在不依赖人工学习率调度的情况下加速穿越这类区域,缩短训练时间。
**振荡/混乱区域的阻尼。** 在损失曲面的不稳定处(鞍点附近、高度非凸地形),梯度方向来回振荡,$c_t$ 下降甚至变负,学习率指数衰减。这种内置的阻尼避免了大幅度的胡乱迈步,减少过冲,使收敛更可控。
**方向 + 幅值的双重自适应。** Adam 只依据梯度幅值的滑动统计调整步长;HGM 额外纳入方向一致性。两者结合带来更细致的行为:即使梯度幅值保持不变,HGM 也能在更新一致时加速、波动时变谨慎。这在曲率与梯度行为变化剧烈的非凸场景下尤其有价值。
**低开销与更强表达能力。** HGM 需要维护三个统计量 $m_t, v_t, s_t$(Adam 只有两个),内存略有增加,但远低于二阶或矩阵类方法的代价。事后机制带来的表达能力提升,成本极小。(再次提醒:这里"三个统计量"的表述中,$s_t$ 实际是全局标量,见上。)
## 收敛分析
严格分析放在在线凸优化(online convex optimization)框架里进行。这个框架的含义是:有一串事先未知的凸损失函数 $f_1, f_2, \dots, f_T$,每一步 $t$ 学习者先选定一个参数 $\theta_t \in \mathbb R^d$,然后才观察到当步的损失函数 $f_t$。目标是最小化**遗憾(regret)**——即实际累计损失与"事后才知道的最佳固定参数"的累计损失之差:
$$
R(T) = \sum_{t=1}^{T} \big[f_t(\theta_t) - f_t(\theta^*)\big],
\qquad
\theta^* = \arg\min_{\theta \in \mathcal X} \sum_{t=1}^{T} f_t(\theta).
$$
论文宣称 HGM 达到 $O(\sqrt T)$ 量级的遗憾上界,与 Adam 相同,但多乘一个因子 $M = \exp(\gamma)$,用来体现事后机制对学习率的指数调制。
先说明记号与假设。记 $g_t = \nabla f_t(\theta_t)$,$g_{t,i}$ 是它的第 $i$ 个坐标,并记坐标 $i$ 的梯度历史为向量 $g_{1:t,i} = [g_{1,i}, g_{2,i}, \dots, g_{t,i}] \in \mathbb R^t$。假设梯度有界:$\lVert g_t\rVert_2 \le G$、$\lVert g_t\rVert_\infty \le G_\infty$;参数域直径有界:$\lVert \theta_m - \theta_n\rVert_2 \le D$、$\lVert \theta_m - \theta_n\rVert_\infty \le D_\infty$;$\beta_1,\beta_2 \in [0,1)$,且满足 $\beta_1^2/\beta_2 < 1$(论文在分母里把这个比值也记作 $\gamma$,与第 3.3 节的灵敏度参数 $\gamma$ 撞了符号,是个令人困惑的记号混用;为清晰起见,下面我把灵敏度参数仍叫 $\gamma$,把 $\beta_1^2/\beta_2$ 这个比值直接写出来)。
定理另外要求两个与实际算法略有出入的条件:学习率按 $\eta_t = \eta/\sqrt t$ 衰减,动量系数按 $\beta_{1,t} = \beta_1 \lambda^{t-1}$ 指数衰减($\lambda\in(0,1)$ 接近 1)。这正是 Adam 收敛分析的标准做法——理论假设学习率衰减、动量衰减,而实际使用的算法(第 3 节的 $\eta_t = \eta\exp(\gamma s_t)$)并不真的带 $\sqrt t$ 衰减,Adam 自己的理论也有同样的理论与实践的落差。
**定理 5.1(HGM 遗憾上界)。** 在上述假设下,对所有 $T\ge 1$:
$$
R(T) \le M \sum_{i=1}^{d}\left[
\frac{D^2 \sqrt{T\, \hat v_{T,i}}}{2(1-\beta_1)}
+ \frac{(1+\beta_1)\, G_\infty\, \lVert g_{1:T,i}\rVert_2}{(1-\beta_1)\sqrt{1-\beta_2}\,(1-\beta_1^2/\beta_2)}
+ \frac{D^2 G_\infty^2}{2(1-\beta_1)(1-\beta_1^2/\beta_2)\sqrt{1-\beta_2}}
\right],
$$
其中 $M = \exp(\gamma)$。
(原文里这个公式排版混乱,上式是按文意还原的标准 Adam 遗憾界再乘以 $M$ 的形式。)
**对这个界的解读。** 它说明 HGM 继承了 Adam 的自适应好处,又通过事后调制多了一层灵活性。关键在于中间那项:它含 $\lVert g_{1:T,i}\rVert_2 = \sqrt{\sum_t g_{t,i}^2}$,即每个坐标梯度历史的 $\ell_2$ 范数。当梯度稀疏且有界时,这一项会远小于它的最坏上界——因为对于大多数时间都取 0 的稀疏坐标,其历史范数很小,而 $\sum_i \lVert g_{1:T,i}\rVert_2$ 对稀疏数据可以远小于 $\sqrt{dT}$。此时整个界更紧;在满足 AdaGrad 那类稀疏数据假设下,期望遗憾可以做到 $O(\log d \cdot \sqrt T)$,优于非自适应的 $O(\sqrt{dT})$。此外,让 $\beta_{1,t}$ 在训练后期衰减到接近 0 也很重要,这与其他工作中"临近训练结束时降低动量有助于收敛"的结论一致。
**推论 5.2(平均遗憾收敛)。** 在相同假设下,平均遗憾 $\frac{R(T)}{T} = O\big(\frac{1}{\sqrt T}\big)$,确认 HGM 在在线凸优化框架下满足无遗憾(no-regret)性质,即平均损失渐进地不比最优固定参数差。
**与 Adam 的对比(第 6 节)** 只是把这一差异用一张表并排列出:两者在前四步(一阶矩、二阶矩、偏差校正、参数更新)形式完全相同,唯一区别是 HGM 多算了 $c_t = \frac{g_t\cdot m_{t-1}}{\lVert g_t\rVert_2\lVert m_{t-1}\rVert_2+\epsilon}$ 和 $s_t = \rho_s s_{t-1} + (1-\rho_s)c_t$,并把更新式里的 $\eta$ 换成 $\eta\exp(\gamma s_t)$。由此归纳出三点优势:方向自适应(Adam 只看幅值,HGM 还看方向,对齐时 $s_t>0$ 加速);振荡阻尼(过冲后梯度反向、$c_t$ 变负,自动减小学习率);更聪明的步长(幅值 + 方向信息,在一致的山谷加速、需要纠偏时刹车)。这些内容与方法、理论优势两节重复,这里不再展开。
## 实验
**设置。** 在多种网络结构与任务上(凸的和非凸的都有)比较 HGM 与 Adam、RMSprop、带动量的 SGD。主要指标是训练/验证损失、训练/验证准确率、收敛行为。所有实验统一使用 $\beta_1=0.9$、$\beta_2=0.99$、$\rho_s=0.9$、$\gamma=10.0$($\gamma=10$ 意味着理论上步长最高可被放大 $e^{10}\approx 22000$ 倍,是相当激进的设置,但因为平滑后的 $s_t$ 通常接近 0,实际调制幅度远小于此)。
**多层感知机分类(非凸)。** 用一个 MLP 做分类,学习率 0.001。结果:HGM 收敛更快、最终更好,训练稳定性最高,验证准确率和参数范数也最高(作者把"更大的参数范数"解读为对损失曲面更自信的穿越)。
**逻辑回归(凸)。** 在 `make_classification` 数据集上训练逻辑回归,学习率 0.01。对比训练损失、准确率与决策边界:HGM 大约在第 50 个 epoch 就收敛,而 RMSprop 花了近 500 个 epoch,Adam 超过 1000 个。也就是说在这个凸问题上,HGM 比 RMSprop 快约 10 倍、比 Adam 快 20 倍以上。
**二维 Rosenbrock 函数(非凸)。** 目标函数 $f(x,y) = (1-x)^2 + 100(y-x^2)^2$,因其狭窄弯曲的山谷而成为鲁棒性经典测试。学习率 0.05,训练 1000 步,从相同随机初始化出发。HGM 几乎完美收敛到 0.0000(全局最小),Adam 停在 0.0100,RMSprop 停在 0.0300。HGM 的参数范数全程最大;RMSprop 在曲率处挣扎、Adam 收敛欠佳,HGM 则稳定到达全局最小。
**灵敏度分析($\gamma$ 与 $\rho_s$)。** 用 7.2 的同一问题,扫不同 $\gamma$ 与 $\rho_s$,画训练损失/准确率随 $\gamma$ 的变化以及最终准确率对 $\gamma$ 的曲线。结论是存在表现更好的 $\gamma,\rho_s$ 取值,且 $\gamma=0$ 时回到 Adam,从图上能看出引入 $\gamma$ 对训练的影响。
**讨论。** HGM 在损失、准确率、收敛行为上整体优于 Adam、RMSprop、带动量 SGD,且对超参数($\gamma$)有一定鲁棒性。
## 内存与计算开销
HGM 每参数维护 $m_t$、$v_t$、$s_t$ 三个量,Adam 只有 $m_t,v_t$。但 $m_t,v_t$ 是与 $\theta$ 同形状的逐参数向量,而 $s_t$ 是由全局余弦相似度导出的**单个标量**,所以额外内存可以忽略。计算开销主要来自每步的余弦相似度(对参数向量做一次内积和两次范数),相对于梯度计算和反向传播而言微不足道。作者坦承的局限是:HGM 的**训练耗时**(墙钟时间)略高于 Adam、RMSprop 等——但附录里补充说明,这里的"训练耗时"指的是单步计算时间,而不是到达收敛所需的步数;HGM 恰恰用更少的步数收敛。