一句话定义:二阶优化器(second-order optimizer)不只使用梯度,还利用“曲率”信息决定更新方向;Shampoo 和 SOAP 是它在大模型训练里的近似实现。
原理:SGD 和 Adam 像在雾里下山,只能感受脚下坡度。二阶方法还想知道“坡会不会变陡、哪个方向更平”。理想中,牛顿法用 Hessian 矩阵(Hessian)修正梯度:θ ← θ − H⁻¹g。它把狭长的椭圆山谷“拉圆”,所以同样步长能走得更准,更新步数更少。问题是神经网络动辄上亿参数,H 是 N×N 巨矩阵,存不下也算不起。
Shampoo 怎么省:它把每层权重看成矩阵 W(m×n),不构造整个 H,而是分别统计行方向协方差 L(m×m)和列方向协方差 R(n×n),再用 L^(-1/4) 和 R^(-1/4) 夹住梯度做缩放。直觉像给大楼调温:不逐个房间建模,先按楼层调、再按朝向调。它比 Adam 的逐元素缩放更能抓住“行列方向曲率不同”的结构。代价是 L、R 要做矩阵分解和求逆根,计算量随矩阵边长三次方增长。
SOAP 做了什么:它先对 Shampoo 的 L、R 做特征分解,得到一组“自然坐标轴”,把梯度投影进去,在里面跑 Adam,再投影回来。可以理解为:先用曲率把地形拉圆,再在圆碗里用 Adam 做稳、做细。它保留了 Shampoo 的方向信息,又借了 Adam 的稳定性。具体实现与默认超参以官方代码和论文为准。
| 方法 | 主要信息 | 每步开销 | 适合场景 |
|---|---|---|---|
| SGD/Adam | 梯度、逐元素历史 | 低 | 大模型默认配置 |
| L-BFGS | 历史梯度近似曲率 | 中 | 中小规模、全批量 |
| Shampoo | 行/列协方差预条件 | 高,需矩阵分解/求逆根 | 想省更新步数 |
| SOAP | Shampoo 特征基 + Adam | 更高 | 追求稳定与收敛效率 |
和相邻概念的区别:Adam 的“二阶矩”只是每个参数自己的历史平方,不跨参数;L-BFGS 是拟牛顿法(quasi-Newton),用历史梯度差近似 Hessian 逆,随机小批量下常不稳;K-FAC 也做 Kronecker 近似,但按层近似 Fisher 信息。Shampoo/SOAP 的共同点是用梯度统计构造结构化预条件子,并尽量适配大模型并行。
实际意义:二阶优化器卖的是“样本效率”——用更少更新步数达到目标,但每步更贵、显存更高、通信更复杂。是否划算,取决于瓶颈是算力、显存、通信还是收敛速度。对普通职场人,可以把它理解成:优化器在“每步便宜但步数多”和“每步昂贵但步数少”之间做取舍。
