本系列前面八篇文章,都是在围绕SGD及其学习率讨论。而从本文开始,我们将正式进入自适应梯度算法的世界。可以说,现在所有的自适应梯度算法,都有一个共同的源头,那就是2011年的经典之作《Adaptive Subgradient Methods for Online Learning and Stochastic Optimization》——也就是著名的AdaGrad论文。

这篇论文将SGD的经典收敛结论推广到一般的预条件矩阵形式,继而推导出最优的预条件矩阵正是梯度的二阶矩(的$-1/2$次幂),然后取对角线近似得到AdaGrad。虽然AdaGrad本身不算太流行,其启发的后续工作如RMSProp、Adam等,是当之无愧的主流优化器。不仅如此,后续的Shampoo、KL-Shampoo等优化器,都还算是它的传承。

本文就让我们一起来重温这篇经典作品。

困难分析 #

其实在前文中,我们也算简单讨论过自适应学习率的思路,比如《让炼丹更科学一些(五):基于梯度精调学习率》,但那仍是在SGD框架下调一个标量学习率。这次我们考虑一般的更新规则
\begin{equation}\boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta_t \boldsymbol{H}_t^{-1}\boldsymbol{g}(\boldsymbol{x}_t,\boldsymbol{\theta}_t) \label{eq:H-g}\end{equation}
其中$\boldsymbol{H}_t$是正定对称矩阵,$\boldsymbol{H}_t^{-1}$通常也称为“预条件子(Preconditioner)”,我们可以将它看成一个矩阵版的学习率,显然$\boldsymbol{H}_t=\boldsymbol{I}$时就退化为SGD。

为什么要拓展成矩阵学习率呢?单从输入输出来看,我们希望输入一个梯度向量,输出一个更新向量,向量与向量之间的最一般的线性变换就是矩阵乘法,所以矩阵学习率是最极致的推广。至于正定性的限制,则是为了保证$\boldsymbol{g}^{\top}\boldsymbol{H}_t^{-1}\boldsymbol{g}\geq 0$对任意$\boldsymbol{g}$成立,从而$-\boldsymbol{H}_t^{-1}\boldsymbol{g}$依然是能让损失下降的方向。

这一节我们先简单分析一下,如果直接套用SGD的证明过程,对于一般的$\boldsymbol{H}_t$会面临什么困难。前面所有证明的出发点,是如下恒等式
\begin{equation}\begin{aligned}
\Vert\boldsymbol{\theta}_{t+1} - \boldsymbol{\varphi}\Vert^2=&\, \Vert\boldsymbol{\theta}_t - \eta_t \boldsymbol{g}(\boldsymbol{x}_t,\boldsymbol{\theta}_t)- \boldsymbol{\varphi}\Vert^2 \\
=&\, \Vert\boldsymbol{\theta}_t - \boldsymbol{\varphi}\Vert^2 - 2\eta_t (\boldsymbol{\theta}_t- \boldsymbol{\varphi})\cdot\boldsymbol{g}(\boldsymbol{x}_t,\boldsymbol{\theta}_t) + \eta_t^2\Vert\boldsymbol{g}(\boldsymbol{x}_t,\boldsymbol{\theta}_t)\Vert^2
\end{aligned}\end{equation}
然后我们设法将$(\boldsymbol{\theta}_t- \boldsymbol{\varphi})\cdot\boldsymbol{g}(\boldsymbol{x}_t,\boldsymbol{\theta}_t)$分离到一边,再通过凸性假设将它跟损失值联系起来:
\begin{equation}L(\boldsymbol{x}_t,\boldsymbol{\theta}_t) - L(\boldsymbol{x}_t,\boldsymbol{\varphi}) \leq (\boldsymbol{\theta}_t- \boldsymbol{\varphi})\cdot\boldsymbol{g}(\boldsymbol{x}_t,\boldsymbol{\theta}_t)\label{leq:convex}\end{equation}
然而,当我们考虑一般的更新规则$\eqref{eq:H-g}$时,如果依旧采用相同的恒等式,那么就会出现$(\boldsymbol{\theta}_t- \boldsymbol{\varphi})\cdot \boldsymbol{H}_t^{-1}\boldsymbol{g}(\boldsymbol{x}_t,\boldsymbol{\theta}_t)$,由于多了$\boldsymbol{H}_t^{-1}$,即便我们假设损失函数的凸性,也无法将这一项跟损失函数联系起来了——凸性不等式$\eqref{leq:convex}$右端只能是干净的$(\boldsymbol{\theta}_t- \boldsymbol{\varphi})\cdot\boldsymbol{g}(\boldsymbol{x}_t,\boldsymbol{\theta}_t)$,中间夹个$\boldsymbol{H}_t^{-1}$就不能套用了。

推广等式 #

所以,我们必须同时推广这个恒等式。推广的思路是利用恒等式$\newcommand{tr}{\mathop{\text{tr}}}\boldsymbol{x}\cdot \boldsymbol{y} = \boldsymbol{x}^{\top}\boldsymbol{y} = \tr(\boldsymbol{y}\boldsymbol{x}^{\top})$,注意$\boldsymbol{y}\boldsymbol{x}^{\top}$是向量外积,结果是一个矩阵,这意味着我们可以先在外积层面建立一个矩阵版的恒等式,然后在适当时机两边取$\tr$,就可以恢复标量形式。而在矩阵版恒等式中,$\boldsymbol{H}_t^{-1}$就可以顺利挪出去了。

具体来说,我们有(简单起见,后面将$\boldsymbol{g}(\boldsymbol{x}_t,\boldsymbol{\theta}_t)$记为$\boldsymbol{g}_t$):
\begin{equation}\begin{aligned}
&\,(\boldsymbol{\theta}_{t+1} - \boldsymbol{\varphi})(\boldsymbol{\theta}_{t+1} - \boldsymbol{\varphi})^{\top} \\
=&\, (\boldsymbol{\theta}_t - \eta_t \boldsymbol{H}_t^{-1}\boldsymbol{g}_t - \boldsymbol{\varphi})(\boldsymbol{\theta}_t - \eta_t \boldsymbol{H}_t^{-1}\boldsymbol{g}_t - \boldsymbol{\varphi})^{\top} \\
=&\, (\boldsymbol{\theta}_t - \boldsymbol{\varphi})(\boldsymbol{\theta}_t - \boldsymbol{\varphi})^{\top} - \eta_t (\boldsymbol{\theta}_t- \boldsymbol{\varphi})\boldsymbol{g}_t^{\top} \boldsymbol{H}_t^{-1} - \eta_t \boldsymbol{H}_t^{-1}\boldsymbol{g}_t(\boldsymbol{\theta}_t- \boldsymbol{\varphi})^{\top} + \eta_t^2 \boldsymbol{H}_t^{-1}\boldsymbol{g}_t\boldsymbol{g}_t^{\top}\boldsymbol{H}_t^{-1}
\end{aligned}\end{equation}
两端右乘$\boldsymbol{H}_t$,整理得
\begin{equation}\begin{aligned}
&\,\eta_t (\boldsymbol{\theta}_t- \boldsymbol{\varphi})\boldsymbol{g}_t^{\top} + \eta_t \boldsymbol{H}_t^{-1}\boldsymbol{g}_t(\boldsymbol{\theta}_t- \boldsymbol{\varphi})^{\top} \boldsymbol{H}_t \\
=&\, (\boldsymbol{\theta}_t - \boldsymbol{\varphi})(\boldsymbol{\theta}_t - \boldsymbol{\varphi})^{\top}\boldsymbol{H}_t - (\boldsymbol{\theta}_{t+1} - \boldsymbol{\varphi})(\boldsymbol{\theta}_{t+1} - \boldsymbol{\varphi})^{\top}\boldsymbol{H}_t + \eta_t^2 \boldsymbol{H}_t^{-1}\boldsymbol{g}_t\boldsymbol{g}_t^{\top}
\end{aligned}\end{equation}
两端取$\tr$,然后反复利用$\tr(\boldsymbol{A}\boldsymbol{B}) = \tr(\boldsymbol{B}\boldsymbol{A})$得
\begin{equation}2\eta_t (\boldsymbol{\theta}_t- \boldsymbol{\varphi})\cdot\boldsymbol{g}_t = \Vert\boldsymbol{\theta}_t - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_t}^2 - \Vert\boldsymbol{\theta}_{t+1} - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_t}^2 + \eta_t^2 \Vert\boldsymbol{g}_t\Vert_{\boldsymbol{H}_t^{-1}}^2\end{equation}
这便是我们期望的恒等式,其中$\Vert\boldsymbol{x}\Vert_{\boldsymbol{H}} \triangleq \sqrt{\boldsymbol{x}^{\top}\boldsymbol{H}\boldsymbol{x}}$,我们称为“Mahalanobis范数”,欧氏范数即$\Vert\boldsymbol{x}\Vert_{\boldsymbol{I}}$,我们简记为$\Vert\boldsymbol{x}\Vert$。现在左端恢复了$(\boldsymbol{\theta}_t- \boldsymbol{\varphi})\cdot\boldsymbol{g}_t$,允许我们将它跟凸性不等式$\eqref{leq:convex}$联系起来,代价是右端的距离度量从欧氏范数换成了随时间变化的Mahalanobis范数。

经典放缩 #

接下来的步骤就跟《让炼丹更科学一些(一):SGD的平均损失收敛》《让炼丹更科学一些(二):将结论推广到无界域》大同小异了。左端我们同样利用不等式$\eqref{leq:convex}$将它跟损失联系起来,然后对$t=1,2,\cdots,T$求和,得
\begin{equation}2\sum_{t=1}^T \eta_t [L(\boldsymbol{x}_t,\boldsymbol{\theta}_t) - L(\boldsymbol{x}_t,\boldsymbol{\varphi})] \leq \sum_{t=1}^T (\Vert\boldsymbol{\theta}_t - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_t}^2 - \Vert\boldsymbol{\theta}_{t+1} - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_t}^2) + \sum_{t=1}^T \eta_t^2 \Vert\boldsymbol{g}_t\Vert_{\boldsymbol{H}_t^{-1}}^2\label{leq:mid-1}\end{equation}
然而,由于右端第一项求和中的$\Vert\boldsymbol{\theta}_{t+1} - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_t}^2$不是$\Vert\boldsymbol{\theta}_{t+1} - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_{t+1}}^2$,求和无法抵消。这里我们要用到《让炼丹更科学一些(一):SGD的平均损失收敛》的一个经典技巧:
\begin{equation}\begin{aligned}
&\,\sum_{t=1}^T (\Vert\boldsymbol{\theta}_t - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_t}^2 - \Vert\boldsymbol{\theta}_{t+1} - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_t}^2) \\
=&\, \Vert\boldsymbol{\theta}_1 - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_1}^2 - \Vert\boldsymbol{\theta}_{T+1} - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_T}^2 + \sum_{t=2}^T (\Vert\boldsymbol{\theta}_t - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_t}^2 - \Vert\boldsymbol{\theta}_t - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_{t-1}}^2) \\
=&\, \Vert\boldsymbol{\theta}_1 - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_1}^2 - \Vert\boldsymbol{\theta}_{T+1} - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_T}^2 + \sum_{t=2}^T \Vert\boldsymbol{\theta}_t - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_t - \boldsymbol{H}_{t-1}}^2 \\
\end{aligned}\end{equation}
为了继续放缩,我们还需要给$\boldsymbol{H}_t$加一个假设:对任意$t$,$\boldsymbol{H}_t - \boldsymbol{H}_{t-1}$都是半正定的,简记为$\boldsymbol{H}_t \succeq \boldsymbol{H}_{t-1}$,这相当于之前的学习率非增假设。此外,对于任意半正定矩阵$\boldsymbol{H}$,还成立$\boldsymbol{H} \preceq \tr(\boldsymbol{H})\boldsymbol{I}$,所以$\Vert\boldsymbol{x}\Vert_{\boldsymbol{H}}\leq \sqrt{\tr(\boldsymbol{H})}\Vert\boldsymbol{x}\Vert$,这个放缩其实很松,但对于定性结论来说够用了。

利用上述假设和放缩,并舍去非正的$-\Vert\boldsymbol{\theta}_{T+1} - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_T}^2$,我们有
\begin{equation}\begin{aligned}\require{cancel}
&\,\sum_{t=1}^T (\Vert\boldsymbol{\theta}_t - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_t}^2 - \Vert\boldsymbol{\theta}_{t+1} - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_t}^2) \\
\leq&\, \Vert\boldsymbol{\theta}_1 - \boldsymbol{\varphi}\Vert^2 \tr(\boldsymbol{H}_1) \cancel{- \Vert\boldsymbol{\theta}_{T+1} - \boldsymbol{\varphi}\Vert_{\boldsymbol{H}_T}^2} + \sum_{t=2}^T \Vert\boldsymbol{\theta}_t - \boldsymbol{\varphi}\Vert^2 \tr(\boldsymbol{H}_t - \boldsymbol{H}_{t-1}) \\
\leq&\, R^2 \tr(\boldsymbol{H}_T)
\end{aligned}\end{equation}
这里$R = \max(\Vert\boldsymbol{\theta}_1 - \boldsymbol{\varphi}\Vert,\cdots,\Vert\boldsymbol{\theta}_T - \boldsymbol{\varphi}\Vert)$,即所有$\Vert\boldsymbol{\theta}_t - \boldsymbol{\varphi}\Vert$的共同上界。如果对这一步有疑惑,我们干脆可以像《让炼丹更科学一些(一):SGD的平均损失收敛》一样,假设优化在一个有界域内进行,那么全体$\Vert\boldsymbol{\theta}_t - \boldsymbol{\varphi}\Vert$就天然有一个共同的上界$R$。

结果初现 #

将上一节的放缩代回式$\eqref{leq:mid-1}$,并取$\boldsymbol{\varphi}$为理论最优点$\boldsymbol{\theta}^*$,我们得到
\begin{equation}2\sum_{t=1}^T \eta_t [L(\boldsymbol{x}_t,\boldsymbol{\theta}_t) - L(\boldsymbol{x}_t,\boldsymbol{\theta}^*)] \leq R^2 \tr(\boldsymbol{H}_T) + \sum_{t=1}^T \eta_t^2 \Vert\boldsymbol{g}_t\Vert_{\boldsymbol{H}_t^{-1}}^2\end{equation}
简单起见,先考虑$\eta_t$是常数的情况,整理得
\begin{equation}\frac{1}{T}\sum_{t=1}^T L(\boldsymbol{x}_t,\boldsymbol{\theta}_t) - L(\boldsymbol{x}_t,\boldsymbol{\theta}^*) \leq \frac{R^2}{2T\eta}\tr(\boldsymbol{H}_T) + \frac{\eta}{2T} \sum_{t=1}^T \Vert\boldsymbol{g}_t\Vert_{\boldsymbol{H}_t^{-1}}^2 \label{leq:const-lr-ada}\end{equation}
这便是$\boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta \boldsymbol{H}_t^{-1}\boldsymbol{g}_t$的一般收敛结论。现在我们反过来想,一个好的优化器,上式右端应尽可能小,因此最小化上界或许可以找到更好的优化器,这跟《让炼丹更科学一些(五):基于梯度精调学习率》的思想一致。为此,我们先利用假设$\boldsymbol{H}_1\preceq \boldsymbol{H}_2 \preceq \cdots\preceq \boldsymbol{H}_T$得$\Vert\boldsymbol{g}_t\Vert_{\boldsymbol{H}_t^{-1}}^2\geq \Vert\boldsymbol{g}_t\Vert_{\boldsymbol{H}_T^{-1}}^2$,于是
\begin{equation}\frac{R^2}{2T\eta}\tr(\boldsymbol{H}_T) + \frac{\eta}{2T} \sum_{t=1}^T \Vert\boldsymbol{g}_t\Vert_{\boldsymbol{H}_t^{-1}}^2\geq \frac{R^2}{2T\eta}\tr(\boldsymbol{H}_T) + \frac{\eta}{2T} \sum_{t=1}^T \Vert\boldsymbol{g}_t\Vert_{\boldsymbol{H}_T^{-1}}^2\end{equation}
也就是说,全体$\boldsymbol{H}_t$取同一个$\boldsymbol{H}$时能达到更小上界。接着,我们将上式右端改写成
\begin{equation}\frac{R^2}{2T\eta}\tr(\boldsymbol{H}) + \frac{\eta}{2T} \sum_{t=1}^T \Vert\boldsymbol{g}_t\Vert_{\boldsymbol{H}^{-1}}^2 = \frac{R^2}{2T\eta}\tr(\boldsymbol{H}) + \frac{\eta}{2T} \tr(\boldsymbol{\Sigma}\boldsymbol{H}^{-1}) \end{equation}
其中$\boldsymbol{\Sigma}=\sum_{t=1}^T \boldsymbol{g}_t\boldsymbol{g}_t^{\top}$为(未归一化的)二阶矩矩阵。不难看出$\eta$其实是冗余参数,真正的独立变量是$\boldsymbol{H}/\eta$,这告诉我们$\eta$随便取一个正数都行。简单起见,我们取$\eta=R$,这使得$\frac{R^2}{2T\eta}=\frac{\eta}{2T}$,于是最小化上界等价于
\begin{equation}\min_{\boldsymbol{H} \succeq \boldsymbol{0}} \tr(\boldsymbol{H}) + \tr(\boldsymbol{\Sigma}\boldsymbol{H}^{-1}) \end{equation}
有趣的是,这本质上就是PSGD的优化目标!

目标求解 #

为了求解上述目标,我们再次利用迹的轮换性,将两项分别改写成
\begin{equation}\begin{aligned}
\tr(\boldsymbol{H}) =&\, \tr(\boldsymbol{H}^{1/2}\boldsymbol{H}^{1/2}) = \Vert\boldsymbol{H}^{1/2}\Vert_F^2 \\[4pt]
\tr(\boldsymbol{\Sigma} \boldsymbol{H}^{-1}) =&\, \tr(\boldsymbol{\Sigma}^{1/2}\boldsymbol{H}^{-1/2}\boldsymbol{H}^{-1/2}\boldsymbol{\Sigma}^{1/2}) = \Vert\boldsymbol{\Sigma}^{1/2}\boldsymbol{H}^{-1/2}\Vert_F^2
\end{aligned}\end{equation}
于是利用均值不等式得
\begin{equation}\tr(\boldsymbol{H}) + \tr(\boldsymbol{\Sigma} \boldsymbol{H}^{-1}) = \Vert\boldsymbol{H}^{1/2}\Vert_F^2 + \Vert\boldsymbol{\Sigma}^{1/2}\boldsymbol{H}^{-1/2}\Vert_F^2
\geq 2\,\Vert\boldsymbol{H}^{1/2}\Vert_F\,\Vert\boldsymbol{\Sigma}^{1/2}\boldsymbol{H}^{-1/2}\Vert_F\end{equation}
然后利用柯西不等式得
\begin{equation}\Vert\boldsymbol{H}^{1/2}\Vert_F\,\Vert\boldsymbol{\Sigma}^{1/2}\boldsymbol{H}^{-1/2}\Vert_F\geq \tr(\boldsymbol{H}^{1/2}\boldsymbol{\Sigma}^{1/2}\boldsymbol{H}^{-1/2}) = \tr(\boldsymbol{\Sigma}^{1/2})\end{equation}
柯西不等式等号成立的条件是存在$\lambda\geq 0$,使得$\boldsymbol{H}^{1/2}=\lambda\boldsymbol{\Sigma}^{1/2}\boldsymbol{H}^{-1/2}$,即$\boldsymbol{H}=\lambda\boldsymbol{\Sigma}^{1/2}$,均值不等式成立的条件是$\Vert\boldsymbol{H}^{1/2}\Vert_F = \Vert\boldsymbol{\Sigma}^{1/2}\boldsymbol{H}^{-1/2}\Vert_F$,代入后进一步确定$\lambda=1$,所以最优解是
\begin{equation}\boldsymbol{H}^* = \boldsymbol{\Sigma}^{1/2} = \left(\sum_{t=1}^T \boldsymbol{g}_t\boldsymbol{g}_t^{\top}\right)^{1/2}\end{equation}
这就是AdaGrad论文最经典的结果,它可谓是基于二阶矩的自适应学习率优化器的“老祖宗”。由此可见,基于二阶矩来调节学习率,并不是一个拍脑袋的启发式技巧,而是“最小化收敛上界”这一原则的自然产物。当$\boldsymbol{\Sigma}$不可逆时,我们可以给它加个$\kappa \boldsymbol{I}$,这属于实现细节了,理论推导中不做展开。

直观来看,$\boldsymbol{H}^{-1}\boldsymbol{g}_t=\boldsymbol{\Sigma}^{-1/2}\boldsymbol{g}_t$就是对梯度做了个“白化”操作,使得更新更为各向同性,这跟现在Muon优化器的思想也如出一辙。

各种变体 #

然而,$\boldsymbol{H}^* = \boldsymbol{\Sigma}^{1/2}$虽然理论最优,但它是违反因果律的,因为它假设我们一开始就预知所有时刻的梯度。这一集我们应该不陌生,在《让炼丹更科学一些(五):基于梯度精调学习率》我们已经遇到过,解决办法是将求和截断到当前时刻:
\begin{equation}\boldsymbol{\Sigma}_t = \sum_{\tau=1}^t \boldsymbol{g}_{\tau}\boldsymbol{g}_{\tau}^{\top},\qquad \boldsymbol{H}_t = \boldsymbol{\Sigma}_t^{1/2}\end{equation}
值得指出的是,这样定义的$\boldsymbol{H}_t$仍满足$\boldsymbol{H}_t\succeq\boldsymbol{H}_{t-1}$,所以直到$\eqref{leq:const-lr-ada}$的收敛结论依然成立。不过,要是保留完整的矩阵$\boldsymbol{H}_t$,不论是存储成本还是计算成本都极其昂贵,并不现实。一个朴素的解决办法就是考虑对角近似,即只取$\boldsymbol{\Sigma}_t$对角线部分然后再开方:
\begin{equation}\newcommand{diag}{\mathop{\text{diag}}}\boldsymbol{H}_t \approx \diag(\boldsymbol{\Sigma}_t)^{1/2}\qquad\Rightarrow\qquad \boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta \frac{\boldsymbol{g}_t}{\sqrt{\sum_{\tau=1}^t \boldsymbol{g}_{\tau}\odot\boldsymbol{g}_{\tau}}}\end{equation}
这便是我们所说的AdaGrad优化器,其中$\odot$代表Hadamard积,两个向量除法也是Hadamard意义下的逐分量相除。注意到AdaGrad各分量学习率是单调递减的,这在实际训练中通常被视为不好的性质(训练后期容易“学不动”),所以RMSProp将求和换成了滑动平均(EMA):
\begin{equation}\boldsymbol{v}_t = \beta \boldsymbol{v}_{t-1} + (1 - \beta) \boldsymbol{g}_t\odot\boldsymbol{g}_t,\qquad\boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta \frac{\boldsymbol{g}_t}{\sqrt{\boldsymbol{v}_t}}\end{equation}
注意,换成EMA后实践效果往往更好,但无法保证$\boldsymbol{H}_t\succeq\boldsymbol{H}_{t-1}$了,这是理论与实践“分道扬镳”的开始。如果再补上动量,那就是经典中的经典——Adam优化器(简单起见,Bias Correction没写出来):
\begin{equation}\begin{aligned}
\boldsymbol{m}_t =&\, \beta_1 \boldsymbol{m}_{t-1} + (1 - \beta_1) \boldsymbol{g}_t \\
\boldsymbol{v}_t =&\, \beta_2 \boldsymbol{v}_{t-1} + (1 - \beta_2) \boldsymbol{g}_t\odot\boldsymbol{g}_t\end{aligned},\qquad\boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t - \eta \frac{\boldsymbol{m}_t}{\sqrt{\boldsymbol{v}_t}}
\end{equation}
在Muon之前,Adam一直是最主流的优化器,没有之一;即便有了Muon,Adam仍然是主流优化器的重要组成部分(对于Embedding、LM Head等),至于RMSProp通常用于生成模型尤其是GAN模型的训练,因为对于这类模型来说,动量的加入容易造成模式坍缩(Mode Collapse)。

除了这些经典优化器外,像PSGDShampooKL-ShampooAdaBK等新式优化器,其实也不过是$\boldsymbol{\Sigma}$或$\boldsymbol{\Sigma}^{-1/2}$针对矩阵乘法参数的另一种结构化近似。换句话说,直至今日,AdaGrad推导出来的预条件矩阵$\boldsymbol{\Sigma}^{-1/2}$,依然是优化器的重要指导原理之一。

文章小结 #

本文回顾了自适应梯度算法的奠基之作——AdaGrad,并沿着“收敛性分析→最小化上界→最优预条件矩阵”的路线,复现了它的完整推导。可以说,AdaGrad所提的“基于梯度二阶矩调节学习率”,几乎是所有后续的自适应学习率优化器共同的底层原理。

转载到请包括本文地址:https://kexue.fm/archives/11882

更详细的转载事宜请参考:《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

如果您需要引用本文,请参考:

苏剑林. (Sep. 05, 2026). 《让炼丹更科学一些(九):经典自适应梯度算法 》[Blog post]. Retrieved from https://kexue.fm/archives/11882

@online{kexuefm-11882,
        title={让炼丹更科学一些(九):经典自适应梯度算法},
        author={苏剑林},
        year={2026},
        month={Sep},
        url={\url{https://kexue.fm/archives/11882}},
}