大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本笔记介绍深度学习中常见的优化算法。
热门专栏
机器学习
深度学习
优化算法
在深度学习中,优化算法用于调整模型的参数(如权重和偏置)以最小化损失函数。
方法
梯度下降 (Gradient Descent, GD)
简介:
梯度下降是最基本的优化算法,通过计算损失函数相对于模型参数的梯度,沿着梯度下降的方向更新参数,以最小化损失函数。
- 批量梯度下降(Batch Gradient Descent):在每次迭代中使用整个训练集计算梯度,计算开销大但收敛稳定。
- 随机梯度下降(Stochastic Gradient Descent, SGD):每次迭代只使用一个样本计算梯度,效率高,但容易在训练中产生波动。
- 小批量梯度下降(Mini-batch Gradient Descent):在每次迭代中使用一小部分训练集进行梯度计算,平衡了批量梯度下降和随机梯度下降的优缺点。
公式:
θ
t
+
1
=
θ
t
−
η
∇
θ
J
(
θ
t
)
\theta_{t + 1}=\theta_{t}-\eta \nabla_{\theta} J(\theta_{t})
θt+1=θt−η∇θJ(θt)
- 其中:
- θ t \theta_{t} θt表示当前模型的参数,
- η \eta η是学习率(也称为步长),
- ∇ θ J ( θ t ) \nabla_{\theta} J(\theta_{t}) ∇θJ(θt)是参数 θ t \theta_{t} θt对于损失函数 J ( θ t ) J(\theta_{t}) J(θt)的梯度。
优点:
-
简单直观:梯度下降的原理简单,计算损失函数的梯度,沿着梯度最速下降方向进行优化。
-
广泛适用:梯度下降可以应用于各种类型的机器学习问题,包括线性回归、逻辑回归和神经网络等。在许多优化问题中,梯度下降是基本的选择,适用范围广泛。
-
可扩展性强:梯度下降可以在不同的规模和复杂度下使用。通过调整批量大小(如批量梯度下降、随机梯度下降、小批量梯度下降),可以适应不同数据集的规模。
-
良好的收敛性:对于凸优化问题,梯度下降可以保证收敛到全局最优解。而在非凸问题中,梯度下降也能找到局部最优解,具有良好的泛化能力。
缺点:
-
收敛速度慢:梯度下降尤其是批量梯度下降(Batch Gradient Descent),收敛速度慢。在大型数据集上,批量梯度下降的效率较低。
-
容易陷入局部最优:在非凸优化问题中,梯度下降容易陷入局部最优解。
-
对学习率敏感:梯度下降依赖于超参数学习率(learning rate) 的选择。如果学习率太小,收敛速度非常慢;如果学习率太大,梯度下降可能无法收敛,甚至在训练过程中发散。
-
梯度消失或梯度爆炸问题:在深层神经网络中,由于链式法则,梯度值会在反向传播时逐层累积,容易导致梯度消失或梯度爆炸问题,导致网络训练不稳定或无法更新参数。
适用场景:
- 适用于数据量较大的场景,如深度学习中的大规模数据训练。
动量法 (Momentum)
简介:
动量法是对GD的改进,它在更新参数时不仅考虑当前的梯度还考虑前几次的梯度。这样就像给参数加上“惯性” ,从而避免震荡。
公式:
v
t
+
1
=
β
v
t
+
(
1
−
β
)
∇
θ
J
(
θ
t
)
v_{t + 1}=\beta v_{t}+(1 - \beta)\nabla_{\theta} J(\theta_{t})
vt+1=βvt+(1−β)∇θJ(θt)
θ
t
+
1
=
θ
t
−
η
v
t
+
1
\theta_{t + 1}=\theta_{t}-\eta v_{t + 1}
θt+1=θt−ηvt+1
- 其中:
- v t v_{t} vt 是动量,表示历史梯度的加权平均,
- β \beta β 是动量系数,通常设定为接近1(例如0.9),
- η \eta η 是学习率,控制更新步长。
优点:
- 更快的收敛速度:由于动量的存在,它可以在损失函数的谷底处快速收敛。
- 减少震荡:动量法在梯度方向上能够更稳健,减少梯度震荡现象。
缺点:
- 需要调节动量系数:动量的超参数(通常设为0.9左右)需要精心调节,使用不当可能导致训练失效。
适用场景:
- 适用于数据噪声较多或梯度震荡较大的场景,如深度神经网络中使用的卷积层。
AdaGrad (Adaptive Gradient Algorithm)
简介:
AdaGrad是一种自适应学习率的方法。它为每个参数独立调整学习率,学习率的调整取决于历史梯度的平方和,这使得频繁更新的参数学习率逐渐减小,而较少更新的参数学习率保持较大。这种方式防止了步长过大导致的震荡,也避免了步长过小导致的收敛速度慢。
公式:
g
t
=
∇
θ
J
(
θ
t
)
g_{t}=\nabla_{\theta}J(\theta_{t})
gt=∇θJ(θt)
G
t
=
G
t
−
1
+
g
t
2
G_{t}=G_{t - 1}+g_{t}^{2}
Gt=Gt−1+gt2
θ
t
+
1
=
θ
t
−
η
G
t
+
ϵ
g
t
\theta_{t + 1}=\theta_{t}-\frac{\eta}{\sqrt{G_{t}+\epsilon}}g_{t}
θt+1=θt−Gt+ϵηgt
- 其中:
- g t g_{t} gt是在第 t t t次迭代中的梯度,
- G t G_{t} Gt是累积的历史梯度平方和,
- η \eta η是全局学习率,
- ϵ \epsilon ϵ是为了避免除以零的小常数(通常取 1 0 − 8 10^{-8} 10−8)。
优点:
- 自适应学习率:不需要手动调整学习率,适应稀疏数据场景。
- 适合稀疏数据:对于稀疏数据(如NLP任务中的词嵌入学习),AdaGrad表现很好。
缺点:
- 学习率过快衰减:随着训练的进行,累积的梯度会导致学习率快速减小,最终学习率趋近于0,难以继续学习。
适用场景:
- 适合于稀疏特征的场景,如自然语言处理中的词嵌入或推荐系统中的高维特征。
RMSProp (Root Mean Square Propagation)
简介:
RMSProp 是为了解决 AdaGrad 中学习率过快衰减的问题。它引入了指数加权移动平均(梯度的二阶矩)来平滑历史梯度的平方,使得学习率不会迅速下降。
公式:
g
t
=
∇
θ
J
(
θ
t
)
g_{t}=\nabla_{\theta} J(\theta_{t})
gt=∇θJ(θt)
E [ g t 2 ] t = γ E [ g t − 1 2 ] + ( 1 − γ ) g t 2 E[g_{t}^{2}]_{t}=\gamma E[g_{t - 1}^{2}]+(1 - \gamma)g_{t}^{2} E[gt2]t=γE[gt−12]+(1−γ)gt2
θ t + 1 = θ t − η E [ g t 2 ] t + ϵ g t \theta_{t + 1}=\theta_{t}-\frac{\eta}{\sqrt{E[g_{t}^{2}]_{t}+ \epsilon}}g_{t} θt+1=θt−E[gt2]t+ϵηgt
- 其中:
- E [ g t 2 ] t E[g_{t}^{2}]_{t} E[gt2]t 是梯度平方的指数加权移动平均,
- γ \gamma γ 是平滑系数,通常设为0.9,
- η \eta η 是学习率,控制更新幅度。
优点:
- 学习率调整更稳健:通过指数加权平均处理梯度,RMSProp 可以更好地适应复杂且多变的损失面。
- 解决AdaGrad的衰减问题:与AdaGrad相比,它能够维持适当的学习率,使得训练能持续有效进行。
缺点:
- 需要调节超参数:RMSProp中的超参数,如移动平均系数,可能需要手动调整以取得最佳效果。
适用场景:
- 适用于非平稳目标或在线学习场景,如强化学习中的Q-Learning。
Adam (Adaptive Moment Estimation)
简介:
Adam 结合了动量法和RMSProp的优点 ,既使用动量法来考虑历史梯度,也通过RMSProp来自适应调整学习率。它既利用了梯度的一阶矩(动量),又利用了梯度的二阶矩(RMSprop)。
- 一阶矩(First Moment):通常指梯度的均值,即梯度的期望值。它反映了梯度的方向和大小。
- 二阶矩(Second Moment):通常指梯度的方差“ 或 “平方均值”,即梯度的平方的均值/期望值。它反映了梯度变化的幅度或不确定性。
公式:
Adam同时结合了动量法和RMSProp的思想,使用了梯度的一阶矩和二阶矩的移动平均。
- 计算梯度: g t = ∇ θ J ( θ t ) g_{t}=\nabla_{\theta} J(\theta_{t}) gt=∇θJ(θt)
- 计算梯度的一阶矩估计(动量)和二阶矩估计:
- m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_{t}=\beta_{1} m_{t - 1}+(1 - \beta_{1})g_{t} mt=β1mt−1+(1−β1)gt
-
v
t
=
β
2
v
t
−
1
+
(
1
−
β
2
)
g
t
2
v_{t}=\beta_{2} v_{t - 1}+(1 - \beta_{2})g_{t}^{2}
vt=β2vt−1+(1−β2)gt2
- 其中, β 1 \beta_{1} β1和 β 2 \beta_{2} β2是控制一阶和二阶矩的衰减率,通常取0.9和0.999。
- 进行偏差修正:
- m ^ t = m t 1 − β 1 t \hat{m}_{t}=\frac{m_{t}}{1-\beta_{1}^{t}} m^t=1−β1tmt
- v ^ t = v t 1 − β 2 t \hat{v}_{t}=\frac{v_{t}}{1-\beta_{2}^{t}} v^t=1−β2tvt
- 更新参数: θ t + 1 = θ t − η v ^ t + ϵ m ^ t \theta_{t + 1}=\theta_{t}-\frac{\eta}{\sqrt{\hat{v}_{t}+ \epsilon}}\hat{m}_{t} θt+1=θt−v^t+ϵηm^t
优点:
- 收敛速度快:Adam在大多数情况下表现出良好的收敛性,能够加速模型的训练。
- 自适应学习率:每个参数都有独立的学习率,不需要太多的手动调参。
- 鲁棒性:在各种问题上都表现良好,适用于大多数深度学习任务。
缺点:
- 可能过早收敛:Adam在某些场景下可能会收敛到亚最优解。
- 需要额外的超参数:Adam的β1、β2以及学习率等超参数需要调整,可能影响训练效果。
适用场景:
- 适用于大多数深度学习任务,尤其是在梯度更新频繁且噪声较大的场景,如图像分类、语言模型训练等。
AdamW 优化算法
简介:
Adam 优化算法的改进版本,专门针对优化正则化过程中的权重衰减问题。传统的 Adam 将权重衰减作为正则化的一部分,而 AdamW 通过将权重衰减与梯度更新过程分离,提供了更准确的正则化效果。
权重衰减(Weight Decay) 是一种用于正则化的技术,主要目的是防止模型过拟合。它通过在损失函数中添加一个与参数大小相关的惩罚项,来限制模型参数的大小,使得模型的权重不能无限增大。
流程:
- 计算梯度: g t = ∇ θ J ( θ t ) g_{t}=\nabla_{\theta} J(\theta_{t}) gt=∇θJ(θt)
- 计算一阶矩动量和二阶矩:
- m t = β 1 ⋅ m t − 1 + ( 1 − β 1 ) ⋅ g t m_{t}=\beta_{1} \cdot m_{t - 1}+(1 - \beta_{1}) \cdot g_{t} mt=β1⋅mt−1+(1−β1)⋅gt
- v t = β 2 ⋅ v t − 1 + ( 1 − β 2 ) ⋅ g t 2 v_{t}=\beta_{2} \cdot v_{t - 1}+(1 - \beta_{2}) \cdot g_{t}^{2} vt=β2⋅vt−1+(1−β2)⋅gt2
- 偏差修正:
- m ^ t = m t 1 − β 1 t \hat{m}_{t}=\frac{m_{t}}{1 - \beta_{1}^{t}} m^t=1−β1tmt
- v ^ t = v t 1 − β 2 t \hat{v}_{t}=\frac{v_{t}}{1 - \beta_{2}^{t}} v^t=1−β2tvt
- 更新参数(带权重衰减项):
- θ t + 1 = θ t − η ⋅ ( m ^ t v ^ t + ϵ + λ ⋅ θ t ) \theta_{t + 1}=\theta_{t}-\eta \cdot\left(\frac{\hat{m}_{t}}{\sqrt{\hat{v}_{t}+\epsilon}}+\lambda \cdot \theta_{t}\right) θt+1=θt−η⋅(v^t+ϵm^t+λ⋅θt)
这就是AdamW的完整公式,它在Adam的基础上通过引入权重衰减项,增强了正则化效果。
AdamW 的公式与 Adam 的主要区别就在于第四步的参数更新。因此,只需要在第四步添加权重衰减项 λ ⋅ θ t \lambda \cdot \theta_t λ⋅θt 即可。AdamW 的其他部分,如梯度计算、一阶矩、二阶矩和偏差修正,和 Adam 是完全相同的。
优点
- 更好的正则化效果:AdamW 将权重衰减与梯度更新 分离,能够实现更精确的正则化,减少过拟合。
- 与 Adam 兼容:保留了 Adam 的所有优势,如自适应学习率和动量计算,同时修正了正则化问题。
- 更快的收敛:由于正则化效果更准确,模型能够更好地收敛,尤其是在复杂网络中。
- 广泛适用:适用于许多深度学习任务,特别是需要进行正则化的任务,如计算机视觉、自然语言处理等领域。
缺点
- 超参数更多:与 Adam 相比,AdamW 增加了一个权重衰减超参数( λ \lambda λ ),因此需要调试的超参数更多,调参复杂度增加。
- 计算复杂度略高:与 Adam 相比,虽然整体计算复杂度没有显著增加,但在包含权重衰减的场景下,其计算量稍有增加。
使用场景
- 深度神经网络中的正则化:适用于在深度学习模型中加入正则化以避免过拟合的场景,例如在大规模数据集上进行训练时,AdamW 能更好地控制权重更新。
- 计算机视觉任务:如图像分类、目标检测等任务,AdamW 可以通过有效的正则化提升模型的泛化能力。
- 自然语言处理(NLP):在语言模型、文本分类等任务中,AdamW 的正则化效果能使模型在复杂数据集上更好地训练。
- 需要长时间训练的任务:AdamW 在长时间训练任务中的表现通常比 Adam 更好,因为其优化的正则化可以避免模型随着时间过拟合。
总结
算法 | 原理 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
GD | 梯度下降算法,通过每次使用整个训练集, 或者SGD和MGD。 计算损失函数相对于模型参数的梯度,沿着梯度下降的方向更新参数,以最小化损失函数。 | 理论稳定,易于实现 | 计算成本高,特别是在大数据集上更新缓慢 | 小规模数据集或批量处理场景 |
Momentum | 在 SGD 基础上增加动量,不仅考虑当前的梯度,还利用过去的梯度积累,加入惯性来加速收敛并减少震荡。 | 提升收敛速度、减少震荡 | 需调节动量系数 | 数据噪声较多的场景 |
AdaGrad | 对每个参数采用不同的学习率,自适应学习率,并根据历史梯度的平方和自动调整每个参数的学习率。 | 自适应学习率,适合稀疏数据 | 学习率快速衰减 | 稀疏特征数据场景 |
RMSProp | 在 AdaGrad 基础上,通过引入梯度的二阶矩来平衡学习率的更新,解决了 AdaGrad 学习率快速衰减的问题。 | 学习率调整更稳健,解决 AdaGrad 衰减问题 | 需调节超参数 | 非平稳目标、强化学习 |
Adam | 结合了 Momentum 和 RMSProp,采用自适应学习率和动量来更新参数,适应性强,收敛速度快。 利用了梯度的一阶矩(动量),又利用了梯度的二阶矩(RMSprop)。 | 收敛快,适应性强,鲁棒性好 | 可能过早收敛,需调整多个超参数 | 大多数深度学习任务,图像分类、语言模型 |
AdamW | 改进的 Adam 算法,结合权重衰减正则化,将权重衰减与梯度更新过程分离,解决过拟合。 | 改进的正则化,避免权重衰减导致的过拟合问题 | 增加超参数调试复杂度 | 正则化场景,如图像分类、NLP任务 |
- GD(Gradient Descent,梯度下降):每次迭代使用整个数据集计算梯度,并更新模型参数,确保模型稳步收敛,但在大数据集上计算成本高且更新缓慢。
- SGD(Stochastic Gradient Descent):每次参数更新只使用一个或小批量样本进行计算,虽然计算效率高,但更新不稳定,容易出现震荡。
- Momentum:通过在每次梯度更新时引入动量,动量会积累之前梯度的方向,帮助加速收敛,减少震荡。适合噪声较多的数据。
- AdaGrad:自适应调整学习率,梯度较大的参数学习率变小,适合处理稀疏数据,但学习率在训练后期可能过小,导致收敛缓慢。
- RMSProp:在 AdaGrad 基础上引入滑动平均(梯度的二阶矩)的机制,使学习率更新更加稳健,避免学习率过快衰减。常用于强化学习或非平稳目标。
- Adam:结合了 Momentum 和 RMSProp 的优势,采用自适应学习率和动量机制,使其在大多数深度学习任务中表现良好,收敛快且鲁棒性好。
- AdamW:在 Adam 的基础上,改进了权重衰减的方式,通过权重衰减的正则化防止模型过拟合,特别适用于需要正则化的任务,如图像分类和 NLP。
这使得每种优化算法在处理不同的任务时,能够根据具体的需要选择合适的优化方式。
经验和实践建议
训练模型时,结合不同优化方法和策略来提高模型性能的常见做法。接下来,我会详细解释每个策略和概念背后的原理及其作用。
使用 Adam 进行初始训练,之后用 SGD 进行微调
作用:
- 结合了 Adam 的快速收敛能力 和 SGD 的精细调整能力,Adam 用于快速收敛,而 SGD 用于微调,能够快速训练模型并进一步优化模型,使其参数更接近全局最优。
解释:
-
Adam 是一种自适应学习率优化算法,能够在早期阶段快速收敛。由于 Adam 能够自适应地调整每个参数的学习率,这使得 Adam 能够帮助模型尽快接近局部最优解。
-
SGD 则被认为在局部微调时表现得更为稳定。尽管收敛速度较慢,但在接近最优解时,SGD 具有更好的优化全局性能的能力。使用 SGD 可以细致地调整模型参数,使其更加接近全局最优。
其他:
- RMSProp + SGD:自适应学习率算法RMSProp 可以迅速找到损失函数的低谷(能很好地处理非平稳数据),可以用于在线学习或强化学习中。然后通过 SGD 进一步优化模型参数。
冷启动策略(Cold Start Strategy)
作用:
- 帮助模型快速找到一个初始的较好参数,避免一开始陷入局部最优,进而提高后续优化阶段的效果。
解释:
-
冷启动策略主要解决的是训练初期时,如何合理地设置参数、超参数以及模型结构,确保训练能够顺利进行,并尽快进入有效的学习阶段。
-
初始模型参数初始化或者初始优化器选择错误 ,导致模型一开始的训练进展缓慢,甚至收敛到较差的局部最优解。采用冷启动策略,即开始时使用较大批量、较高学习率或者自适应学习率优化算法(如 Adam)进行初始训练,以帮助模型快速找到一个可行的参数区域。
-
然后,再使用更稳健的优化方法(如 SGD)以及更小的学习率来进行进一步的训练,从而细化参数并找到更接近全局最优的解。
大批量与小批量交替训练
作用:
- 交替使用大批量和小批量训练,可以在一定程度上结合两者的优势:用小批量训练来加速模型的训练,同时用大批量训练来稳定模型,并帮助模型在更广的参数空间探索。
解释:
-
小批量(mini-batch) 对数据集的一部分进行更新来避免计算整个数据集的梯度,从而加速模型的训练。然而,小批量训练有时可能会陷入局部最优解。
-
大批量训练 则能够更稳定地更新梯度,因为它使用更多的数据,减小了梯度中的噪声。但大批量训练的缺点是训练速度较慢。
学习率逐步衰减(Learning Rate Decay)
作用:
- 学习率衰减 可以让模型在训练初期,使用较高的学习率进行快速探索,在后期逐渐减小学习率进行更精细的调整,从而帮助模型更加稳定地收敛到全局最优解。
解释
- 小学习率的优缺点
- 优点:
精细调整、避免震荡、适合后期微调:小学习率能够使模型在接近最优解时进行更细致的参数调整。能避免震荡,使模型更加平稳地优化。在模型训练的后期,小学习率能够帮助模型更精确地逼近全局最优。 - 缺点:
收敛速度慢、可能陷入局部最优:小学习率会导致参数更新幅度较小,因此模型的收敛速度较慢,特别是在训练初期时。由于更新幅度较小,模型可能会陷入局部最优解,难以跳出并探索更优的解。
- 优点:
- 大学习率的优缺点
-
优点:
收敛速度快、跳出局部最优:大学习率可以使模型在训练初期迅速调整参数,快速探索参数空间,帮助模型尽快接近局部最优解。较大的参数更新幅度有助于模型摆脱局部最优,探索更优的解。 -
缺点:
容易震荡或发散、难以精细调整:在接近最优解时,大学习率可能导致参数更新幅度过大,导致模型在局部区域内反复跳跃,甚至发散,无法收敛。大学习率使模型的参数更新过于粗糙,难以在训练后期进行精细优化。
-
总结
- 小学习率:适合训练的后期,帮助模型精细调整参数、稳定收敛。更容易过拟合。
- 大学习率:适合训练初期,帮助模型快速探索参数空间、提高收敛速度。更容易欠拟合。
常见的学习率衰减策略包括:
- 指数衰减:学习率按照某个指数函数衰减;
- 阶梯衰减:在训练的某些阶段手动减小学习率;
- 自适应衰减:当模型的损失停止下降时,自动减小学习率。
总结
将 Adam 和 SGD 结合使用,以及通过 冷启动策略、大批量与小批量交替训练 和 学习率逐步衰减,能够有效提升深度学习模型的训练效率和性能。Adam 初期的快速收敛可以节省时间和资源,而 SGD 的精细优化能力可以确保最终结果更接近全局最优。让模型在训练初期,使用较高的学习率进行快速探索,在后期逐渐减小学习率进行更精细的调整,从而帮助模型更加稳定地收敛到全局最优解。
主要考虑的参数
以下是选择优化器时需要重点关注的几个关键参数:
学习率(Learning Rate, η \eta η)
描述:
- 学习率决定了每次更新参数的步长,是最重要的超参数之一。学习率过大可能导致模型在训练过程中发散,无法收敛,更容易欠拟合;学习率过小则会导致模型训练速度缓慢,甚至陷入局部最优,更容易过拟合。
选择标准:
- 对于大多数优化器,学习率是必调的参数。常见的做法是从较大的学习率开始逐步衰减,或者使用自适应学习率算法(如 Adam)。学习率也可以与学习率衰减机制结合使用,在训练过程中逐步降低。
影响:
- 大学习率通常加快收敛速度,但可能不稳定,可能导致欠拟合;
- 小学习率则更稳定,但速度较慢,可能导致过拟合。
- 使用太高或太低的学习率都可能导致模型性能不佳。
动量(Momentum, β \beta β)
描述:
- 动量是用来加速梯度下降方向并减少更新抖动的参数,通常用于动量法。它通过引入梯度的历史信息,使得模型参数更新方向更平滑,减少震荡。
选择标准:
- 动量的典型取值范围在0.9到0.99之间。这个参数决定了历史梯度对当前梯度的影响,值越大,历史梯度的影响越大。
影响:
- 动量能够提高模型收敛速度,特别是在损失函数面比较复杂时有助于跳出局部极小值。但如果动量参数过大,可能导致模型更新过程中的震荡。
自适应学习率参数(如 Adam 的 β 1 \beta_1 β1, β 2 \beta_2 β2)
描述:
- 自适应优化器(如 Adam、RMSProp)会对每个参数动态调整学习率。这些优化器通常有两个主要的超参数
β
1
\beta_1
β1 和
β
2
\beta_2
β2 ,分别控制一阶和二阶矩估计的衰减率。
- β 1 \beta_1 β1:控制梯度的动量,一般取 0.9;
- β 2 \beta_2 β2:控制梯度平方的动量,通常取 0.999。
选择标准:
- 默认情况下, β 1 = 0.9 \beta_1 = 0.9 β1=0.9 和 β 2 = 0.999 \beta_2 = 0.999 β2=0.999 通常是一个不错的起点,适合大多数任务。但是在特殊任务中,可能需要调节这些参数以更好地控制学习率调整过程。
影响:
- β 1 \beta_1 β1 和 β 2 \beta_2 β2 主要影响 Adam 等优化器的稳定性和自适应能力。
- β 1 \beta_1 β1 过大:动量积累过强,模型更新滞后。
- β 1 \beta_1 β1 过小:动量作用弱化,导致更新震荡。
- β 2 \beta_2 β2 过大:自适应学习率变化过慢,优化器调整迟缓。
- β 2 \beta_2 β2 过小:自适应学习率波动大,优化过程不稳定。
批量大小(Batch Size)
描述:
- 批量大小决定了每次参数更新时使用的数据样本数量。小批量(mini-batch)能引入噪声,帮助模型跳出局部最优;大批量训练能让模型更稳定地收敛。
选择标准:
- 通常情况下,批量大小与优化器配合使用。小批量训练能使模型在参数空间中更充分地探索,而大批量训练有助于加速收敛过程。常见的批量大小在32、64、128等,根据计算资源和模型大小进行调整。
影响:
- 较小的批量大小能够帮助模型避免陷入局部最优解,但训练速度较慢,可能导致欠拟合;
- 较大的批量大小会使梯度估计更精确,从而使模型稳定,但可能收敛到局部最优,可能导致过拟合。
梯度裁剪(Gradient Clipping)
描述:
- 在某些任务(如序列生成任务、循环神经网络中),梯度爆炸问题会导致参数更新幅度过大。梯度裁剪是一种控制梯度最大值的方法,避免梯度爆炸。
选择标准:
- 在梯度可能会爆炸的场景(如长序列建模、循环神经网络中),通常会设置梯度裁剪的阈值,如5.0 或1.0,以防止梯度过大。裁剪后,梯度的 L2 范数会限制在指定的阈值内。
影响:
- 梯度裁剪可以防止梯度更新过大,导致模型参数发散,尤其适合用于梯度不稳定的任务中。
权重衰减(Weight Decay, λ \lambda λ)
描述:
- 权重衰减是一种正则化技术,通过在每次梯度更新时直接对权重参数乘以一个小于 1 的因子,从而限制权重的增长。从而减少参数的值,避免过拟合。
选择标准:
- λ \lambda λ(权重衰减系数)的典型取值通常是 1 0 − 4 10^{-4} 10−4到 1 0 − 6 10 ^{-6} 10−6之间。权重衰减的选择主要依赖于数据集的规模、模型复杂度以及是否存在过拟合。
影响:
- 适度的权重衰减可以有效防止模型过拟合,但过大的权重衰减会导致模型欠拟合。
说明:
- SGD 优化器中:可以直接使用 L2 正则化或者权重衰减,两者效果几乎相同。
- Adam 优化器中:建议使用 AdamW,因为它将权重衰减与正则化分离,使得模型训练更稳定、优化过程更合理。
初始化参数(Weight Initialization)
描述:
- 权重初始化对优化过程至关重要,因为不恰当的初始化会导致训练速度变慢,甚至无法收敛。常见的初始化方法包括:
- 随机初始化
- Xavier 初始化
- He 初始化
- 常数初始化。
影响:
- 良好的初始化 能加速模型的收敛,并使得梯度在前向传播和反向传播时不会过快缩小或膨胀,尤其是在深层神经网络中非常重要。
- 不当的初始化 可能会导致训练过程中出现梯度消失或梯度爆炸现象,从而导致网络收敛困难或训练时间极长。
在选择优化器的过程中,参数初始化的策略至关重要。以下是一些常见的选择方案:
- Xavier 初始化:适用于 Sigmoid 和 Tanh 激活函数,防止梯度爆炸或消失。
- He 初始化:适用于 ReLU 和其变种激活函数的网络,如深度卷积神经网络(CNN)。
- LeCun 初始化:适用于 SELU 激活函数,尤其是在自归一化神经网络中效果良好。
- Orthogonal 初始化:特别适用于 RNNs 和深层神经网络。
- 常数初始化:所有权重被设置为相同的值,常用于偏置项的初始化。
总结
在选择优化器的过程中,关键是根据具体任务的需求来确定 学习率、动量、自适应参数、批量大小 等参数。同时,诸如 权重衰减、梯度裁剪 和 计算开销 等因素也必须纳入考量,以确保模型能够在有效的计算资源和时间范围内实现最佳性能。
最常见的策略是先使用自适应学习率优化器(如 Adam)快速收敛,然后用 SGD 进一步微调参数,以达到更好的全局优化效果。同时合理设置学习率衰减等机制,进一步提高训练效果。