Decoupled Weight Decay Regularization

在很多任务中,SGD 训练的模型的泛化能力比 Adam 训练的更好。

这篇论文 (3) 发现:在学习率适当缩放的情况下,标准 SGD 中的 \(L_{2}\) 与 weight decay 之间是等效的。最初的 weight decay 如下:

\[\theta_{t+1}=(1-\lambda)\theta_t-\eta\nabla_\mathbf{\theta}\ell\left(y_{i_t},h(\mathbf{\theta}_t,x_{i_t})\right)\]

其中 \(\lambda\) 定义了每步权重衰减的权重。但在具体的实现中都是用 \(L_{2}\) 正则来实现:

\[\mathcal{L}_\lambda(\mathbf{\theta}):=\mathcal{L}(\mathbf{\theta})+\frac{\lambda^{'}}{2}{\left\|\mathbf{\theta}\right\|}^2, \quad \mathbf{\theta}_{t+1}=\mathbf{\theta}_t-\eta\nabla_\mathbf{\theta}\ell\left(y_{i_t},h(\mathbf{\theta}_t,x_{i_t})\right)-\eta\lambda^{'}\mathbf{\theta}_t\]

但 \(\lambda^{'} =\frac{\lambda}{\eta}\) 时,这二者是等同的。但这在自适应优化算法 (Adam 等) 上却不成立。目前的自适应算法的实现都忽略了这一点,所以才导致上面的现象。

下面是论文中的一些重要观察:

  1. \(L_{2}\) 与 weight decay 并不等同。
  2. \(L_{2}\) 在 Adam 中并不有效。
  3. Weight decaySGDAdam 同样有效。
  4. 最佳权重衰减取决于批处理过程运行的时间和次数。

他们提出了一个简单的修改,将权重衰减从损失函数的优化步骤中解耦,来恢复 weight decay 的原始公式。下面是改进的算法:

20250118152804_sgdw.png

下面是论文中实验部分值得注意的点:


魔鬼藏在细节里,被忽略的细节加上简单的改进就带来如此巨大的性能提升,推荐阅读。我在阅读这篇论文时参考了下面两篇文章来帮自己回顾随机梯度优化算法上的一些记忆模糊的概念,也一并推荐:

1. 文献简述

1.1. Stochastic Gradient Descent with Warm Restarts (SGDR)

文中指出当前 (2016) 最好的模型都是用 SGD 训练的,但其收敛速度相当感人。 所以这篇论文 (4) 借用了一个在 gradient-free optimization 领域常见的“重启技巧”来加速 SGD 算法的收敛(速率、泛化)。

简单来说,SGDR 每经过 \(T_{i}\) 个 epochs 就对网络的训练进行一次热重启,具体方法是用下面的余弦模拟退火 (cosine annealing) 学习率调整策略来实现的。

\[\eta_t=\eta_{min}^i+\frac{1}{2}(\eta_{max}^i-\eta_{min}^i)(1+\cos(\frac{T_{cur}}{T_i}\pi)),\]

其中 \(\eta_{min}\) 和 \(\eta_{max}\) 是学习率的区间边界。该方法简单有效,比固定学习率方法和周期递减学习率方法有很大的优势。

该文与当年的另一篇论文 (5) 的方法大同小异,自己的一篇知乎博文 (Cyclical Learning Rates) 有专门介绍。

1.2. Adam: A Method for Stochastic Optimization

这篇论文 (2) 的引用高得出奇。它结合了 RMSProp 和 AdaGrad 两种优化器的优势,其用指数加权移动平均方法估算梯度动量和二阶动量,并以此计算不同参数的自适应学习率。

20250120050336_adam.png

文中还指出 Adam 有两个重要性质。其一是在参数空间中采取的有效步长 (effective step) 是有界的。这可以理解为在当前参数值周围建立一个信任区域 (true region),在信任区域外,当前梯度估计值无法提供足够的信息。其二是有效步长对梯度的缩放具有不变性。这使得采用 Adam 的训练会比较稳定。

原文很精彩也有很多细节,我在理解时参考了这本网络深度学习书籍:DIVE INTO DEEP LEARNING: 优化算法

1.3. On The Convergence Of Adam And Beyond (AMSGrad)

这篇文中是 ICLR 2018 的最佳论文。其发现目前的基于指数移动平均 (exponential moving average) 类的算法 (Adam, RMSprop, AdaDelta, NAdam) 存在收敛性的问题。甚至在作者人工设计的一个简单的凸优化问题上都无法保证收敛。原因是一些稀疏却很重要的历史梯度信息在指数平均的作用下被淹没。

论文中提供了一个自适应方法框架,用来深入了解不同自适应方法之间的差异,并帮助大家理解一些流行的自适应方法中的缺陷。

20250120060516_gams.png

其中 \(\phi\) 和 \(\psi\) 是“平均函数”。对于 Adam,对应如下“平均函数”:

\[\phi_t(g_1,\ldots,g_t)=(1-\beta_1)\sum_{i=1}^t\beta_1^{t-i}g_i\mathrm, \quad \psi_t(g_1,\ldots,g_t)=(1-\beta_2)\mathrm{diag}(\sum_{i=1}^t\beta_2^{t-i}g_i^2).\]

在上述一般自适应方法框架下,作者发现 Adam 不收敛取决于下面这个量的值:

\[\Gamma_{t+1}=\left(\frac{\sqrt{V_{t+1}}}{\alpha_{t+1}}-\frac{\sqrt{V_t}}{\alpha_t}\right).\]

且可以证明:在 \(\Gamma\) 的值是不定的情况下上述一般自适应方法收敛得不到保障。在主流的深度学习优化算法中,SGD 和 AdaGrad 的 \(\Gamma\) 值是正定的 (\(\Gamma_t\succeq0\)),Adam 和 RMSProp 等指数移动平均类算法的 \(\Gamma\) 是不定的。

基于上述理论分析,作者提出如下的 AMSGrad 算法:

20250120063412_amsgrad.png

其与 Adam 的主要区别在于其保存 \(\mu_{t}\) 的历史最大值 \(\hat{\mu_{t}}\) 来准化梯度的运行平均值,而不是 Adam 中的 \(\nu_{t}\)。

论文的写作思路清晰读起来有种爽感,对理解当前优化算法很有帮助,推荐阅读。

1.4. Why Do We Need Weight Decay for Overparameterized Deep Networks?

这篇论文 (1) 不太容易读。其结论是:在学习率足够大的情况下,权重衰减会把网络权重的范数约束在一个小的区间里,将 SGD 的噪声保持在一定的尺度上。这种隐含的正则化会影响最终模型的泛化性。

这里梯度的噪声定义如下:

\[g_t = \nabla_\mathbf{w}\mathcal{L}(\mathbf{w}_t)-\nabla_\mathbf{w}\ell\left(y_{i_t},h(\mathbf{w}_t,x_{i_t})\right)\]

论文中关于梯度噪声尺度的定理很有意思:在合理的近似值下,SGD 的梯度噪声在尺度上与训练的交叉熵损失成正比。数学表述如下:

\[c_1\mathcal{L}(\mathbf{w})\leq\mathbb{E}\left[\left\|g(\mathbf{w})\right\|^2\right]\leq c_2\mathcal{L}(\mathbf{w}).\]

其中 \(c_{1}\) 和 \(c_{2}\) 是常数。

2. 参考文献

[1] D’Angelo, Francesco and Varre, Aditya and Andriushchenko, Maksym and Flammarion, Nicolas, Why {{Do We Need Weight Decay}} for {{Overparameterized Deep Networks}}?, 2023.

[2] Kingma, Diederik P. and Ba, Jimmy, Adam: {{A Method}} for {{Stochastic Optimization}}, 2017.

[3] Loshchilov, Ilya and Hutter, Frank, Decoupled {{Weight Decay Regularization}}, 2018.

[4] Loshchilov, Ilya and Hutter, Frank, {{SGDR}}: {{Stochastic Gradient Descent}} with {{Warm Restarts}}, 2017.

[5] Smith, Leslie N., Cyclical {{Learning Rates}} for {{Training Neural Networks}}, 2017.


Created with Emacs 29.4 (Org mode 9.6.15) by YangXue
Updated: 2025-01-24 Fri 12:25