梯度下降

梯度

一维

前向差分

中心差分(更常用)

高维

梯度下降的基本思想是先设定一个学习率 ,让参数沿梯度的反方向移动。假设第 次迭代时的参数为 ,梯度为 ,则更新策略为:

记号约定

后文统一采用以下记号:

  • :第 次迭代时的参数
  • :当前 batch 上的目标函数
  • :第 个样本的损失
  • :当前梯度

若参数为向量,则平方、开方和除法都按元素进行;必要时用 表示按元素乘法。

梯度下降法

梯度下降有三种常见形式:

  • BGD(Batch Gradient Descent):批量梯度下降,每次参数更新使用 所有样本
  • SGD(Stochastic Gradient Descent):随机梯度下降,每次参数更新只使用 1 个样本
  • MBGD(Mini-Batch Gradient Descent):小批量梯度下降,每次参数更新使用 一小部分数据样本(mini-batch)

这三种优化算法虽然每次使用的数据量不同,但参数优化的基本思路是一致的。

Step 1:计算梯度

Step 2:求梯度的平均值

对于一个 batch 中的 个样本,其平均梯度可写为:

其中:

  • 当使用 BGD 时, 为全部训练样本数
  • 当使用 SGD 时,
  • 当使用 MBGD 时, 为一个 mini-batch 中的样本数

Step 3:更新权重

优缺点

传统梯度下降法通常指 BGD(Batch Gradient Descent)

优点

  • 每次都基于全部样本计算梯度,更新方向更稳定
  • 更容易收敛到较优解,损失函数下降过程通常更平滑

缺点

  • 每次更新都要遍历整个训练集,计算开销大、速度慢
  • 数据量很大时训练效率低,占用内存也更高
  • 遇到复杂非凸问题时,也可能陷入局部最优或鞍点附近

动量

Momentum(动量法)

核心思想:使参数更新具有惯性。每一步更新由历史梯度的累积项 和当前梯度 共同决定,从而减少震荡并加快收敛。

更新公式

累计梯度更新:

参数更新:

参数说明

  • 为第 次迭代时的参数
  • 为当前梯度
  • 为一阶动量(梯度的指数加权平均)
  • 为动量系数
  • 为学习率

优点

  1. 可以加快收敛,帮助参数在正确方向上加速前进
  2. 有助于减小震荡
  3. 在某些情况下可以帮助跳出局部最小值

Adagrad

核心思想

Adagrad 被称为 自适应学习率优化算法

在普通随机梯度下降中,所有参数通常使用相同且固定的学习率进行优化。但不同参数的梯度差异可能很大,使用相同学习率时,效果往往不够理想。

示例

假设损失函数为:

参数的初始值分别为:

其梯度为:

可以看出, 的梯度远大于 的梯度。因此如果使用相同学习率, 的更新步长会远大于 ,从而导致优化效果不佳。

更新公式

Adagrad 的思路是:对于不同参数,设置不同的学习率。

对于每个参数,初始化累计平方梯度变量 ,然后每次将该参数的梯度平方累加到 上:

在更新该参数时,学习率变为:

因此,权重更新公式为:

参数说明

  • 为第 次迭代时的参数
  • 为当前梯度
  • 为累计平方梯度,初始值为
  • 为全局学习率
  • 为一个很小的常数,用于避免分母为 ,通常可取

总结

Adagrad 的核心思想是:

  • 如果某个参数的梯度长期较大,那么其对应的累计平方梯度 会更大,从而其学习率会自动变小
  • 如果某个参数的梯度长期较小,那么其对应的学习率会相对更大

因此,Adagrad 实现了 对不同参数采用不同学习率 的自适应更新策略。

RMSProp

核心思想

RMSProp(Root Mean Square Propagation)通常译为 均方根传播

RMSProp 是在 Adagrad 的基础上,对学习率进一步改进的一种优化算法。Adagrad 会不断累积历史梯度平方,导致分母持续增大、学习率不断减小;而 RMSProp 使用 指数加权平均 来替代简单累加,从而缓解学习率过快衰减的问题。

更新公式

累计平方梯度更新:

权重更新:

参数说明

  • 为第 次迭代时的参数
  • 为当前梯度
  • 为梯度平方的指数加权平均,初始值通常为
  • 为衰减系数
  • 为学习率
  • 为一个很小的常数,用于避免分母为

理解

  • 当某个参数的梯度长期较大时,对应的 会变大,更新步长会变小
  • 当某个参数的梯度较小时,对应的更新步长会相对变大

因此,RMSProp 可以为不同参数自适应地调整学习率,同时避免 Adagrad 后期学习率过小的问题。

Adam

核心思想

Adam(Adaptive Moment Estimation)是在 Gradient Descent 的基础上提出的一种优化算法,结合了 MomentumRMSProp 两种方法的优点。

主要步骤

Adam 的改进主要体现在以下几个方面:

  1. 引入一阶矩估计(Momentum),对梯度做指数加权平均:
  1. 引入二阶矩估计(类似 RMSProp),对梯度平方做指数加权平均:
  1. 进行偏差校正(Bias Correction)
  1. 参数更新公式

参数说明

  • 为第 次迭代时的参数
  • 为当前梯度
  • 为梯度的一阶矩估计
  • 为梯度平方的二阶矩估计
  • 为偏差校正后的一阶矩估计
  • 为偏差校正后的二阶矩估计
  • 为一阶矩的衰减系数
  • 为二阶矩的衰减系数
  • 为学习率
  • 为很小的常数,用于避免分母为
  • 为当前迭代次数

理解

  • Momentum 让优化过程具有“惯性”,能够减少震荡并加快收敛
  • RMSProp 让不同参数具有不同的自适应学习率
  • 偏差校正用于修正训练初期由于 初始化为 而带来的估计偏小问题

因此,Adam 同时具有 收敛较快自适应调整学习率 的优点,是深度学习中非常常用的优化算法。

AdamW

核心思想

AdamW(Adam with decoupled Weight Decay)是在 Adam 的基础上做出的改进。它的关键点不是改变 Adam 的一阶矩、二阶矩估计方式,而是将 权重衰减(Weight Decay)梯度更新 分开处理。

在普通 Adam 中,如果直接把 正则项加到损失函数里,那么梯度会变成:

这样一来,正则项 也会进入 的估计,并受到自适应学习率的影响。因此,在 Adam 中, 正则并不等价于真正意义上的 weight decay

AdamW 的做法是:

  • 梯度部分仍然按照 Adam 的方式更新
  • 权重衰减部分直接作用在参数上,不进入动量和二阶矩估计

更新公式

先计算当前损失函数对参数的梯度:

一阶矩估计:

二阶矩估计:

偏差校正:

参数更新公式:

这里额外的 表示 与梯度更新解耦的权重衰减(decoupled weight decay),而不是把 正则项直接加到梯度里;因此它不会进入 的估计。

也可以写成等价形式:

参数说明

  • 为第 次迭代时的参数
  • 为当前梯度,这里不包含权重衰减项
  • 为梯度的一阶矩估计
  • 为梯度平方的二阶矩估计
  • 为偏差校正后的一阶矩估计
  • 为偏差校正后的二阶矩估计
  • 为一阶矩的衰减系数
  • 为二阶矩的衰减系数
  • 为学习率
  • 为权重衰减系数
  • 为很小的常数,用于避免分母为
  • 为当前迭代次数

理解

  • AdamW 保留了 Adam 的优点:收敛较快,并且能够自适应地调整学习率
  • 权重衰减项不再进入 ,因此不会被自适应学习率机制“混进去”
  • 相比于 Adam 中直接加入 正则,AdamW 对参数衰减的控制更直接,也更符合 weight decay 的本意
  • 如果训练时已经使用 AdamW 提供的 weight decay,一般不再对同一组参数额外加入 正则,否则相当于重复约束同一批参数

因此,AdamW 可以理解为:Adam 的自适应更新 + 与梯度解耦的权重衰减。在很多深度学习训练任务中,它通常是比 “Adam + 正则” 更合理的选择。