常见的优化器
- 梯度下降(Gradient Descent, GD)
- 局部最小值、全局最小值和鞍点
- 凸函数和非凸函数
- 动量梯度下降(Momentum)
- 自适应学习率优化器
- AdaGrad(Adaptive Gradient Algorithm)
- RMSProp(Root Mean Square Propagation)
- Adam(Adaptive Moment Estimation)
- AdamW(Adam with Weight Decay)
在机器学习和深度学习中,优化器用于调整模型参数以最小化损失函数,是训练模型的关键组件。以下是一些常见的优化器:
梯度下降(Gradient Descent, GD)
梯度下降是最基础的优化算法,核心思想是:沿着损失函数梯度的反方向更新参数,即参数的更新方向是损失函数梯度的负方向。(梯度解释:【AI知识】导数,偏导,梯度的解释),梯度下降的公式为:

学习率解释: 表示模型参数更新的步长大小,控制着迭代过程中参数沿着梯度方向调整的幅度。
- 较大的学习率可以加快收敛速度,但可能导致参数更新过大,错过最优解甚至发散(模型发散是指在数值计算或优化过程中,模型的解或参数随着迭代次数的增加变得不稳定,甚至趋向于无穷大,导致计算结果失去物理意义或无法收敛到预期值)
- 较小的学习率虽然更新稳定,但收敛速度慢,可能需要更多的训练时间
梯度下降有以下几个变种:
批量梯度下降(Batch Gradient Descent, BGD):使用整个训练数据计算梯度,更新参数。收敛稳定,但计算开销大,每次迭代都需要遍历整个数据集,不适合处理超大规模数据集
随机梯度下降(Stochastic Gradient Descent, SGD):每次迭代随机选择一个训练样本计算梯度,并更新模型参数,计算效率高但收敛不稳定(由于每次更新的方向不同,参数更新过程会有较大波动,可能无法很好地收敛到最优点)
小批量梯度下降(Mini-Batch Gradient Descent):在 BGD 和 SGD 之间折中,每次使用一个小批量(一般大小为 32、64、128 等)样本计算梯度。
1)相比于 BGD,每次更新的计算量更少,适合大规模数据。
2)相比于SGD,梯度更新不会剧烈震荡,收敛更平稳。
3)小批量计算可以并行处理,提高计算效率。
4)但批量大小(Batch Size)影响训练效果,太大会导致模型训练慢,太小会导致震荡。
局部最小值、全局最小值和鞍点
1. 局部最小值: 是指函数在某个邻域内取得的最小值。局部最小值只是在某个局部范围内最小,不一定是整个函数的最小值(全局最小值)。如果函数可微分,在局部最小值点处,梯度通常为零。
2. 全局最小值: 是指函数在整个定义域内取得的最小值。全局最小值点可能不存在(例如,函数无下界),也可能不唯一(例如,常数函数)。
3.鞍点: 鞍点是指函数在某个点处梯度为零,但该点既不是局部最小值也不是局部最大值。(可以通过 Hessian 矩阵来判断一个点是否为鞍点,我也不懂T T )
鞍点在某些方向上是局部最小值,而在另一些方向上是局部最大值。
在优化问题中,鞍点通常是一个挑战,因为梯度下降算法可能会在鞍点处停滞。
凸函数和非凸函数
在数学优化和机器学习中,函数的**凸性(Convexity)**是一个非常重要的概念,凸函数和非凸函数在函数形状和优化性质上有显著区别,它直接影响梯度下降算法的收敛性和是否能找到全局最优解。
1. 凸函数(Convex Function): 函数的任意两个点连成的直线,不会低于函数曲线(即函数曲线在直线的下方或重合)。

此图参考自:凸函数与非凸函数
特征:
- 单峰(一个最低点),类似于碗的形状(开口向上)
- 任意局部最优解都是全局最优解
- 在优化问题中,凸函数通常更容易求解,因为其优化过程具有唯一性和稳定性,使用梯度下降算法能保证找到最优解
2. 非凸函数(Non-Convex Function): 如果一个函数不满足凸函数的定义,即为非凸函数。
特征:
- 多峰(多个局部最小值),类似于山谷或波浪形状
- 可能存在多个局部最优点,优化过程中可能会卡在局部最优而非全局最优
- 优化复杂,需要动量、学习率调整等策略避免陷入局部最优
由上可知,非凸函数优化问题是比较难的,其中局部最小值和鞍点可能会阻碍优化算法找到全局最小值,接下来介绍一些别的优化器算法:
动量梯度下降(Momentum)
动量梯度下降(Momentum Gradient Descent)是一种优化梯度下降的方法,它在参数更新时加入 动量(Momentum) 的概念,使得优化过程更平滑、更快,并能够有效跳过鞍点和局部最优。
梯度下降的问题:
收敛速度慢: 在椭圆形的损失函数里(损失函数在不同方向上的曲率相差很大,在某些方向上变化很快,在另一些方向上变化很慢),梯度下降的方向会不断震荡,导致收敛速度慢
容易陷入局部最优: 在非凸优化问题中,梯度下降可能会卡在局部最优,难以继续下降到更优解
鞍点问题: 在高维空间,梯度在某些方向上很小(如鞍点),优化可能会停滞
什么是动量: 模拟物理中的惯性现象,在优化过程中,不仅考虑当前的梯度的方向,还会保留一部分之前梯度的方向,这被称为“动量”,可利用过去梯度的累积信息来平滑当前更新方向,帮助梯度下降更快地收敛,并减少在某些方向上的震荡。
动量梯度下降的更新规则:

其中 β \beta β是动量因子,用于控制历史梯度的影响程度, β = 0 \beta=0 β=0相当于普通梯度下降(没有动量), β = 0.9 \beta=0.9 β=0.9是一般情况下的推荐值,更新较平滑。
优点:
- 加入“惯性”,类似于物体运动,之前的梯度会影响当前的梯度,在梯度方向变化时减少震荡,使得优化路径更稳定
- 在鞍点处不会停滞,因为动量会推动参数继续前进,使得参数能突破局部最优点
缺点:
- 需要调参:动量因子 β 和学习率 α 需要精心调节,否则可能影响收敛效果
- 可能错过最优解:由于惯性,动量法可能冲过局部最优解或全局最优解
自适应学习率优化器
这类优化器能根据梯度信息动态调整学习率,提高收敛速度,并避免学习率过大或过小导致的训练问题。
AdaGrad(Adaptive Gradient Algorithm)
AdaGrad通过累积所有梯度的平方来调整学习率。对于每个参数,学习率会根据其历史梯度的大小进行调整,使得频繁出现较大梯度的参数具有较小的学习率,而梯度较小的参数具有较大的学习率。

优点: 适合处理稀疏数据,对低频参数更新较大,对高频参数更新较小
缺点: 随着训练进行,累积梯度平方会越来越大,导致学习率逐渐减小,可能使训练过程变得非常缓慢
RMSProp(Root Mean Square Propagation)
RMSProp通过计算梯度的指数衰减平均来调整学习率,解决了AdaGrad学习率过快减小的问题,它使用一个衰减率(通常表示为 ρ)来控制历史梯度的影响。

优点: 缓解了AdaGrad学习率过快减小的问题,适合处理非平稳目标和有噪声的梯度。
缺点: 需要手动调整衰减率参数
Adam(Adaptive Moment Estimation)
Adam结合了动量法和RMSProp的优点。它不仅考虑了梯度的一阶矩(即动量),还考虑了梯度的二阶矩(即梯度平方的指数移动平均)。通过这两个矩的估计,Adam能够更有效地调整学习率。
优点: 结合了动量和自适应学习率的优点,收敛速度快,性能好
缺点: 初始学习率可能过高,导致模型发散
AdamW(Adam with Weight Decay)
AdamW 是 Adam 优化器的一个改进版本,全称为 Adam with Weight Decay。它通过将权重衰减(Weight Decay)与梯度更新过程解耦,解决了传统 Adam 优化器中权重衰减与自适应学习率机制之间的冲突问题,从而提升了模型训练的稳定性和泛化性能。
1. 这里先介绍一下什么是权重衰减?
权重衰减(Weight Decay)是 一种正则化技术,主要作用如下:
- 防止过拟合:减少模型复杂度,避免学习到过拟合的参数。
- 稳定训练:通过逐步缩小权重,使模型收敛更稳定。
- 提高泛化能力:让模型在测试集上表现更好。
在优化过程中,权重衰减会在每次参数更新时,对模型的权重施加一个额外的惩罚,使模型参数(权重)逐渐缩小,从而控制模型的复杂度。权重衰减通常是通过 L2 正则化 实现的,即在损失函数中加入 权重的平方和 作为惩罚项:

2. Adam中的权重衰减有什么问题?
传统 Adam 将权重衰减(L2 正则化项)直接添加到损失函数中,导致权重衰减与梯度更新耦合。由于 Adam 的自适应学习率机制,这种耦合会导致权重衰减的实际效果被学习率缩放,降低正则化效果


3. AdamW如何改进?
AdamW 将权重衰减从损失函数中解耦,直接在参数更新步骤中独立应用权重衰减,解决了 Adam 的错误 L2 正则化问题,避免了自适应学习率对权重衰减的干扰

4. 为什么 AdamW 更适合深度学习?
减少 L2 正则化的梯度缩放影响:在大规模深度学习模型(如 BERT、GPT、ResNet)中,Adam 的 L2 正则化可能会导致模型的某些层参数衰减过快或过慢。 AdamW 使权重衰减独立于梯度计算,提高训练稳定性。
更快收敛:由于 AdamW 避免了 L2 正则化的错误影响,使优化器能更快找到最优解。
更好的泛化能力:AdamW 在训练过程中对参数进行正确的权重衰减,减少过拟合,提高泛化能力。
总结: AdamW 通过改进权重衰减的方式,提升了模型的正则化效果和训练稳定性,是当前深度学习中的重要优化器之一