一. 前置知识
1.1 Hessian矩阵
函数:维度映射
一阶偏导则为Jacobian矩阵
二阶偏导则为Hessian矩阵
- Hessian的正对角线的几何含义
【参考】Hessian矩阵 - 知乎 (zhihu.com)
1.2 损失函数和优化器的关系
有一个函数需要到达一个谷点,必须要让梯度下降,也就是不断迭代x,每一次更换一次x的值,来促使梯度的值不断变小。
1.3 局部曲率
局部曲率是指在函数曲线上某一点附近的曲率值。
- 对于一维函数,局部曲率可以通过计算函数的二阶导数(也称为二阶导数)来获得。
- 对于多维函数,局部曲率可以通过计算函数的海森矩阵来获得。海森矩阵是由函数的二阶偏导数组成的矩阵,可以描述函数在多个方向上的曲率。
- 局部曲率的正负值反映了函数曲线或曲面在该点附近的凸凹性质。正的局部曲率表示函数在该点附近是凸的,而负的局部曲率表示函数在该点附近是凹的。局部曲率的大小表示了曲线或曲面的弯曲程度,较大的曲率值意味着更强的弯曲。
二. 方法
以两个维度为例,更新的过程其实就是沿着两个维度下降的方向进行下降直到收敛
2.1 其他优化方法的局限性
2.1.1 GD and SignGD (Adam)的局限性
但是adam等会在多个维度同时下降的时候相互拮抗:尖锐维度会较快到达山谷之后学习率随震荡过程逐渐减小进而抑制了平缓维度的收敛
2.1.2 Newton牛顿法的局限性
牛顿方法很快收敛到鞍点,而不是局部极小值。
对于非凸函数,当局部曲率为负时,vanilla-Newton方法会收敛到全局最大值。
2.2 Sophia原理
ρ是控制最坏情况下更新大小的常数,ε是一个非常小的常数(例如,1e-12),避免了除以0。
当某个维度的曲率快速变化或为负,因此二阶信息具有误导性,并可能导致剪切前的巨大更新时,剪切机制会启动,优化器默认为SignGD(尽管这对于良性情况来说是次优的)
三. Sophia:二阶截断随机优化
3.1 对角Hessian估计的EMA
- 只估计每k步的Hessian
- 用跨迭代的EMA对对角Hessian估计进行了去噪。
3.2 预坐标剪裁
- 只考虑对角线Hessian的正项,并在更新中引入逐坐标裁剪
只考虑正项的原因:(1)在非凸函数上,使用Hessian作为预条件的vanilla Newton方法可能收敛到局部最大值而不是局部最小值。(2)且对角线Hessian负元素表示函数在该变量方向上是凹的
3.3 对角Hessian估计
引入对角线Hessian估计器
(1)Hutchinson无偏估计
使用与小批量梯度具有相同运行时间的Hessian向量乘积,直到常数因子
(2) Gauss-Newton-Bartlett (GNB)估计
使用用重采样标签计算的一个小批量梯度
【具体内容】感兴趣的话直接去看论文吧
四. 代码
Liuhong99/Sophia:“Sophia:语言模型预训练的可扩展随机二阶优化器”的正式实现 (github.com)