深度学习中的优化器之Yogi算法原理与自适应学习率机制
题目描述
Yogi优化器是Adam类自适应学习率算法的一个改进变体,专门针对Adam在某些情况下可能出现的收敛问题而设计。它通过修改二阶矩估计的更新方式,在梯度稀疏或噪声较大的场景下表现更稳定。需要你理解Yogi的核心思想、数学更新规则、与Adam的区别,以及其自适应学习率机制如何提升训练稳定性。
解题过程
第一步:回顾Adam优化器的基本框架
Adam结合了动量(一阶矩估计)和自适应学习率(二阶矩估计)两大思想:
- 一阶矩估计(动量):
\(m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t\)
其中 \(g_t\) 为当前梯度,\(\beta_1\) 通常取0.9,用于平滑梯度方向。 - 二阶矩估计(自适应学习率):
\(v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2\)
其中 \(\beta_2\) 通常取0.999,用于估计梯度的平方(即方差)。 - 偏差校正:
由于初始时刻 \(m_0 = 0, v_0 = 0\),需要校正:
\(\hat{m}_t = \frac{m_t}{1-\beta_1^t}\), \(\hat{v}_t = \frac{v_t}{1-\beta_2^t}\)。 - 参数更新:
\(\theta_t = \theta_{t-1} - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t\)
其中 \(\eta\) 为学习率,\(\epsilon\) 为小常数(如1e-8)防止除零。
Adam的问题在于:当梯度 \(g_t\) 突然变大时,二阶矩估计 \(v_t\) 可能急剧增加,导致学习率过度下降,使得参数更新停滞。
第二步:理解Yogi对二阶矩估计的改进
Yogi的核心创新是修改二阶矩估计的更新公式,将Adam中的“指数移动平均”改为“自适应增量更新”。原始Adam的二阶矩更新为:
\(v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2\)
Yogi将其替换为:
\(v_t = v_{t-1} - (1-\beta_2) \cdot \text{sign}(v_{t-1} - g_t^2) \cdot g_t^2\)
更常用的等价写法(论文中形式):
\(v_t = v_{t-1} - (1-\beta_2) \cdot v_{t-1} + (1-\beta_2) \cdot g_t^2 \quad \text{(当 \( g_t^2 < v_{t-1}\) 时)} \)
\(v_t = v_{t-1} \quad \text{(当 \( g_t^2 \ge v_{t-1}\) 时)} \)
实际简化后的统一公式为:
\(v_t = v_{t-1} + (1-\beta_2) \cdot (g_t^2 - v_{t-1} \cdot \text{sign}(g_t^2 - v_{t-1}))\)
物理意义:
- 当 \(g_t^2\)(当前梯度平方)大于历史估计 \(v_{t-1}\) 时,Yogi仅增加少量到 \(v_t\)(更新幅度受限)。
- 当 \(g_t^2\) 小于历史估计时,Yogi会减少 \(v_t\),但减少幅度也受限制。
这样,Yogi避免了Adam中因 \(g_t^2\) 突增导致 \(v_t\) 剧增的问题,使学习率变化更平缓。
第三步:Yogi的完整算法步骤
- 初始化:参数 \(\theta_0\),一阶矩 \(m_0 = 0\),二阶矩 \(v_0 = 0\),超参数 \(\beta_1, \beta_2 \in (0,1)\),学习率 \(\eta\),常数 \(\epsilon\)。
- 循环迭代(对于第 \(t\) 步):
a. 计算当前梯度 \(g_t = \nabla_\theta L(\theta_{t-1})\)。
b. 更新一阶矩(与Adam相同):
\(m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t\)。
c. 更新二阶矩(Yogi特有):
\(v_t = v_{t-1} + (1-\beta_2) \cdot (g_t^2 - v_{t-1} \cdot \text{sign}(g_t^2 - v_{t-1}))\)。
d. 偏差校正:
\(\hat{m}_t = \frac{m_t}{1-\beta_1^t}\), \(\hat{v}_t = \frac{v_t}{1-\beta_2^t}\)。
e. 参数更新:
\(\theta_t = \theta_{t-1} - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t\)。
第四步:分析Yogi的自适应学习率机制
- 学习率调整:更新步长为 \(\frac{\eta}{\sqrt{\hat{v}_t} + \epsilon}\)。由于Yogi限制了 \(v_t\) 的突变,使得 \(\sqrt{\hat{v}_t}\) 变化更平滑,从而学习率不会因单个大梯度而骤降。
- 与Adam对比:
- Adam中,\(v_t\) 可能因 \(g_t^2\) 突增而快速上升,导致后续学习率过小,收敛变慢。
- Yogi通过 \(\text{sign}(g_t^2 - v_{t-1})\) 控制更新方向,当 \(g_t^2\) 大于 \(v_{t-1}\) 时仅增加少量,防止 \(v_t\) 膨胀过快。
- 适用场景:Yogi在梯度稀疏(如自然语言处理任务)或噪声较大的优化问题中表现更好,因为其能稳定学习率调整。
第五步:总结Yogi的优势与局限
优势:
- 对异常梯度更鲁棒,避免学习率过早衰减。
- 在非凸优化中常达到比Adam更稳定的收敛。
- 超参数设置与Adam相似(通常 \(\beta_1=0.9, \beta_2=0.999\)),易于使用。
局限:
- 计算稍复杂于Adam,但实际开销可忽略。
- 在某些平滑梯度问题上,性能与Adam相当,优势不明显。
实践建议:当使用Adam出现训练不稳定或收敛缓慢时,可尝试替换为Yogi,尤其适用于推荐系统、Transformer等梯度分布不均匀的模型。