深度学习中优化器的Ranger(RAdam + Lookahead)算法原理与实现细节
Ranger是一种组合优化器,它无缝集成了RAdam(Rectified Adam)和Lookahead两种优化技术,旨在结合两者的优势,以实现更稳定、更快速的收敛,并提升模型的泛化性能。下面我将逐步拆解其原理和实现细节。
题目描述
在深度学习训练中,优化器的选择对模型性能有重大影响。Ranger优化器通过将RAdam的自适应动量校正机制与Lookahead的权重外推平均策略相结合,试图解决传统自适应优化器(如Adam)在训练早期可能因方差较大导致的不稳定收敛问题,同时利用Lookahead平滑优化路径、逃离尖锐极小值。我们需要理解RAdam如何修正自适应学习率,Lookahead如何进行权重平均,以及两者如何协同工作。
解题过程
步骤1:理解组件一:RAdam(Rectified Adam)的核心思想
RAdam是对Adam优化器的改进,主要解决了Adam在训练初期由于动量方差估计不准确可能导致的不稳定问题。
- 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 \]
\[ \hat{m}_t = m_t / (1-\beta_1^t) \]
\[ \hat{v}_t = v_t / (1-\beta_2^t) \]
\[ \theta_t = \theta_{t-1} - \alpha \cdot \hat{m}_t / (\sqrt{\hat{v}_t} + \epsilon) \]
其中 $g_t$ 是梯度,$\alpha$ 是学习率,$\beta_1, \beta_2$ 是衰减率。
-
Adam的问题:在训练初始阶段(t 很小时),偏差校正项 \(1-\beta_2^t\) 非常小,导致校正后的二阶矩估计 \(\hat{v}_t\) 方差很大。这会使自适应学习率 \(\alpha / \sqrt{\hat{v}_t}\) 不稳定,可能损害模型性能。
-
RAdam的修正:RAdam引入了一个“方差修正项”。它计算了一个用于衡量二阶矩估计方差的量 \(\rho_\infty = 2/(1-\beta_2) - 1\) 和一个随时间变化的 \(\rho_t\)。当估计的方差太大(即 \(\rho_t < 4\) 时),RAdam会退化为一个带动量的SGD,使用固定的学习率,而不是不稳定的自适应学习率。其更新规则变为一个混合形式:
- 当 \(\rho_t > 4\) 时,使用完整自适应学习率(类似Adam)。
- 当 \(\rho_t \le 4\) 时,使用简单的动量更新(退化为SGD with momentum),学习率是一个固定的值。
这种方法在训练早期提供了更稳定、方差更小的更新,避免了自适应学习率初始不稳定性带来的潜在风险。
步骤2:理解组件二:Lookahead的“快慢权重”机制
Lookahead是一个与内循环优化器无关的包装器,它通过维护两套参数——“快权重”和“慢权重”——来实现更平滑的更新轨迹。
- 快权重(Fast Weights):由内层优化器(如RAdam)直接更新。它快速探索参数空间,响应当前的梯度信号。
- 慢权重(Slow Weights):是快权重的指数移动平均(EMA)。每隔 k 步(例如 k=5),Lookahead执行一次“同步”操作:将慢权重沿着从慢权重指向当前快权重的方向进行线性插值外推。
\[ \theta_{\text{slow}, t+k} = \theta_{\text{slow}, t} + \phi (\theta_{\text{fast}, t+k} - \theta_{\text{slow}, t}) \]
其中 $\phi$ 是慢权重的步长因子(例如0.5),$k$ 是同步周期。然后,将更新后的慢权重复制给快权重,作为下一轮内层优化的起点。
- Lookahead的作用:
- 平滑优化轨迹:慢权重的平均效应减少了训练过程中的震荡,使优化路径更平滑。
- 逃离尖锐极小值:通过周期性的外推,它有助于模型跳出尖锐的局部极小值,向更平坦的区域移动,这通常与更好的泛化能力相关。
- 对超参数更鲁棒:在一定程度上降低了对内层优化器学习率等超参数的敏感性。
步骤3:Ranger的组合策略与工作流程
Ranger = RAdam (内层优化器) + Lookahead (外层包装器)。其训练过程在一个迭代周期内如下:
- 内层循环(RAdam更新):在连续的 k 步中,使用RAdam算法更新“快权重”参数。RAdam负责计算自适应的参数更新,并在早期提供稳定的梯度方向。
- 外层同步(Lookahead更新):每经过 k 步后:
a. 计算快权重与慢权重之间的差值向量。
b. 将慢权重沿该差值方向移动一小步(步长为 \(\phi\))。
c. 用更新后的慢权重覆盖当前的快权重。 - 重复步骤1和2,直到训练结束。
协同优势:
- RAdam在微观上(内层循环)提供了稳定且高效的自适应更新,尤其在训练初期避免了方差爆炸。
- Lookahead在宏观上(外层同步)对优化路径进行平滑和正则化,提升了收敛稳定性和最终性能。
- 两者结合,使得Ranger在多种任务上表现出了比单独使用RAdam或Lookahead更优的收敛速度和泛化能力。
步骤4:关键实现细节
- 超参数设置:
- RAdam部分:通常使用默认的 \(\beta_1=0.9, \beta_2=0.999, \epsilon=10^{-8}\)。学习率 \(\alpha\) 通常可以设得比原始Adam稍大。
- Lookahead部分:同步周期 \(k\)(通常为5或6)和慢权重步长 \(\phi\)(通常为0.5)。这两个参数相对鲁棒。
- 内存与计算开销:Lookahead需要额外存储一套“慢权重”参数,因此内存占用约为原来的两倍。但计算开销增加不大,因为同步操作是稀疏的(每k步一次)且计算简单。
- 代码结构:实现时,通常先实现RAdam优化器,然后将其作为“内层优化器”传入一个Lookahead包装器。在训练循环中,每步调用Lookahead的
step方法,它在内部管理RAdam的更新和周期性的同步操作。
总结
Ranger优化器通过将RAdam早期训练的稳定性与Lookahead的路径平滑与外推能力相结合,提供了一种强大的深度学习优化方案。其核心在于:内层RAdam确保每一步更新是可靠且自适应的,而外层Lookahead则周期性地“拉回”并平均这些更新,引导优化朝向更平坦的极小值区域。这种设计使其在多种网络架构和任务中,往往能实现更快、更稳定的收敛,并获得更好的测试精度。