梯度下降
梯度
一维
前向差分
中心差分(更常用)
高维
梯度下降的基本思想是先设定一个学习率 ,让参数沿梯度的反方向移动。假设第 次迭代时的参数为 ,梯度为 ,则更新策略为:
记号约定
后文统一采用以下记号:
- :第 次迭代时的参数
- :当前 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(动量法)
核心思想:使参数更新具有惯性。每一步更新由历史梯度的累积项 和当前梯度 共同决定,从而减少震荡并加快收敛。
更新公式
累计梯度更新:
参数更新:
参数说明
- 为第 次迭代时的参数
- 为当前梯度
- 为一阶动量(梯度的指数加权平均)
- 为动量系数
- 为学习率
优点
- 可以加快收敛,帮助参数在正确方向上加速前进
- 有助于减小震荡
- 在某些情况下可以帮助跳出局部最小值
Adagrad
核心思想
Adagrad 被称为 自适应学习率优化算法。
在普通随机梯度下降中,所有参数通常使用相同且固定的学习率进行优化。但不同参数的梯度差异可能很大,使用相同学习率时,效果往往不够理想。
示例
假设损失函数为:
参数的初始值分别为:
其梯度为:
可以看出, 的梯度远大于 的梯度。因此如果使用相同学习率, 的更新步长会远大于 ,从而导致优化效果不佳。
更新公式
Adagrad 的思路是:对于不同参数,设置不同的学习率。
对于每个参数,初始化累计平方梯度变量 ,然后每次将该参数的梯度平方累加到 上:
在更新该参数时,学习率变为:
因此,权重更新公式为:
参数说明
- 为第 次迭代时的参数
- 为当前梯度
- 为累计平方梯度,初始值为
- 为全局学习率
- 为一个很小的常数,用于避免分母为 ,通常可取
总结
Adagrad 的核心思想是:
- 如果某个参数的梯度长期较大,那么其对应的累计平方梯度 会更大,从而其学习率会自动变小
- 如果某个参数的梯度长期较小,那么其对应的学习率会相对更大
因此,Adagrad 实现了 对不同参数采用不同学习率 的自适应更新策略。
RMSProp
核心思想
RMSProp(Root Mean Square Propagation)通常译为 均方根传播。
RMSProp 是在 Adagrad 的基础上,对学习率进一步改进的一种优化算法。Adagrad 会不断累积历史梯度平方,导致分母持续增大、学习率不断减小;而 RMSProp 使用 指数加权平均 来替代简单累加,从而缓解学习率过快衰减的问题。
更新公式
累计平方梯度更新:
权重更新:
参数说明
- 为第 次迭代时的参数
- 为当前梯度
- 为梯度平方的指数加权平均,初始值通常为
- 为衰减系数
- 为学习率
- 为一个很小的常数,用于避免分母为
理解
- 当某个参数的梯度长期较大时,对应的 会变大,更新步长会变小
- 当某个参数的梯度较小时,对应的更新步长会相对变大
因此,RMSProp 可以为不同参数自适应地调整学习率,同时避免 Adagrad 后期学习率过小的问题。
Adam
核心思想
Adam(Adaptive Moment Estimation)是在 Gradient Descent 的基础上提出的一种优化算法,结合了 Momentum 和 RMSProp 两种方法的优点。
主要步骤
Adam 的改进主要体现在以下几个方面:
- 引入一阶矩估计(Momentum),对梯度做指数加权平均:
- 引入二阶矩估计(类似 RMSProp),对梯度平方做指数加权平均:
- 进行偏差校正(Bias Correction):
- 参数更新公式:
参数说明
- 为第 次迭代时的参数
- 为当前梯度
- 为梯度的一阶矩估计
- 为梯度平方的二阶矩估计
- 为偏差校正后的一阶矩估计
- 为偏差校正后的二阶矩估计
- 为一阶矩的衰减系数
- 为二阶矩的衰减系数
- 为学习率
- 为很小的常数,用于避免分母为
- 为当前迭代次数
理解
- 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 + 正则” 更合理的选择。