深度学习中优化器的AdaHessian算法原理与二阶优化机制
题目描述
AdaHessian是一种基于二阶导数信息的自适应优化算法,旨在通过近似Hessian矩阵(二阶导数矩阵)来调整学习率,提升深度模型训练的收敛速度和泛化性能。传统优化器如Adam仅使用一阶梯度,而AdaHessian通过引入Hessian对角线的估计,实现对不同参数方向的曲率感知优化。
解题过程
-
二阶优化的意义
- 目标函数\(J(\theta)\)的局部曲率由Hessian矩阵\(\mathbf{H}\)描述,其元素\(H_{ij} = \frac{\partial^2 J}{\partial \theta_i \partial \theta_j}\)。
- Hessian的特征值表示不同参数方向的曲率大小:大特征值对应陡峭方向(需小步长),小特征值对应平缓方向(可大步长)。
- 牛顿法等经典二阶优化因Hessian计算复杂度高(\(O(n^2)\))而不适用于深度学习。
-
Hessian近似方法
- AdaHessian采用Hutchinson估计法近似Hessian对角线:
\[ \text{diag}(\mathbf{H}) \approx \mathbb{E}_{\mathbf{z} \sim \mathcal{N}(0,1)} \left[ \mathbf{z} \odot \left( \mathbf{H} \mathbf{z} \right) \right], \]
其中$\mathbf{z}$为随机向量,$\odot$表示逐元素乘。通过一次Hessian-向量积(HVP)即可估计,计算成本降至$O(n)$。
- 自适应学习率调整
- 类似Adam的动量机制,AdaHessian维护一阶动量\(\mathbf{m}_t\)和Hessian对角动量\(\mathbf{v}_t\):
\[ \mathbf{m}_t = \beta_1 \mathbf{m}_{t-1} + (1-\beta_1) \mathbf{g}_t, \]
\[ \mathbf{v}_t = \beta_2 \mathbf{v}_{t-1} + (1-\beta_2) \left( \mathbf{z}_t \odot (\mathbf{H}_t \mathbf{z}_t) \right)^2, \]
其中$\mathbf{g}_t$为梯度,$\mathbf{H}_t$为当前Hessian,$\beta_1, \beta_2$为衰减率。
- 参数更新规则
- 修正动量偏差后,更新参数:
\[ \hat{\mathbf{m}}_t = \frac{\mathbf{m}_t}{1-\beta_1^t}, \quad \hat{\mathbf{v}}_t = \frac{\mathbf{v}_t}{1-\beta_2^t}, \]
\[ \theta_{t+1} = \theta_t - \eta \cdot \frac{\hat{\mathbf{m}}_t}{\sqrt{\hat{\mathbf{v}}_t} + \epsilon}, \]
其中$\eta$为学习率,$\epsilon$为数值稳定性常数。分母中的$\sqrt{\hat{\mathbf{v}}_t}$近似Hessian对角线,实现参数自适应的步长缩放。
- 实际实现细节
- 通过自动微分框架(如PyTorch)计算HVP:先计算梯度\(\mathbf{g}_t\),再对\(\mathbf{g}_t \cdot \mathbf{z}_t\)求梯度得到\(\mathbf{H}_t \mathbf{z}_t\)。
- 为减少方差,通常使用多个\(\mathbf{z}\)向量取期望(如每步采样1-2个向量)。
- 对大规模模型,可仅对部分层应用Hessian修正,平衡计算成本与效果。
关键优势
- 在损失函数存在不同曲率方向的场景下(如Transformer训练),AdaHessian通过二阶信息避免陡峭方向的振荡,加速收敛。
- 实验显示其在语言模型、图像分类等任务上优于Adam,尤其适用于批量较大或损失曲面复杂的场景。