高级优化器

目录

1.Momentum(动量)

2.自适应学习率

3.Adam和AdamW


神经网络的基础优化算法是随机梯度下降 (SGD)。SGD是一种迭代型的算法,在训练开始的时候,模型参数被随机初始化,记为,然后依次更新为。在每个迭代时刻t,随机从训练集中选择一小批样本计算损失函数,以及参数的梯度:

则参数更新的公式为:

基础的SGD算法容易遇到以下问题:

(1)训练被卡在不理想的梯度为0的点 (全局极小点或鞍点)。虽然随机梯度下降具有一定的逃离能力,但当微批的大小较大 (为了提高训练效率) 或者"平原"的范围较大时,训练仍然有可能被卡在不理想的优化点。

(2)不同参数方向上的梯度幅度可能相差较大,梯度大的参数可能会来回振荡,而梯度小的参数迭代速度又过慢。

1.Momentum(动量)

带动量的SGD,不仅会利用当前时刻的梯度,同时会用到历史梯度信息:

其中,为梯度,。则参数更新的公式为:

可以按时刻逐步展开一下动量的计算公式:

......

ps:

动量的效果类似给梯度增加了"惯性",梯度较大但是来回振荡的方向会互相抵消,从而加速收敛。

在同一圈的loss一样,越往中心loss越小。

同时,动量的累积效果可以得优化过程在损失函数的平坦区域或局部极小点附近能够"冲过"这些区域,从而找到更好的极小值点。

2.自适应学习率

在优化过程中,不同的参数方向上所需要的学习率可能会有所不同:

(1)由于神经网络的稀疏性,每个参数被激活 (即对应的输入不为零) 的频率不同,因此激活频率低的参数方向需要较大的学习率以加快收敛。

(2)即使进行了数据归一化,不同参数方向上梯度的幅度仍然存在差异。梯度幅度大的方向需要较小的学习率以防止振荡甚至发散,梯度幅度小的方向需要较大的学习率以加快收敛。

参数更新的公式如下:

3.Adam和AdamW

Adam优化算法集成了动量和自适应学习率,算法如下:

在Adam算法中,L2正则项的梯度是直接计入在中的 (权重为),也被包含在一阶矩 ()和二阶矩 ()的计算中。但在一些训练任务中(例如BERT微调),这种做法的效果不好,此时应该使用如下的AdamW算法:

此时在梯度中没有计入L2正则项的影响,因此对于一阶矩和二阶矩的计算没有影响,只是在参数更新的时候加入了weight decay的影响。

Adam和AdamW优化器的PyTorch文档链接如下:

Adam --- PyTorch 2.13 documentationhttps://docs.pytorch.org/docs/2.13/generated/torch.optim.Adam.html#torch.optim.AdamAdamW --- PyTorch 2.13 documentationhttps://docs.pytorch.org/docs/2.13/generated/torch.optim.AdamW.html#torch.optim.AdamW在模型训练中,绝大部分时候使用的都是AdamW优化器,一般情况下使用默认的超参数即可达到理想的效果。

👇尝试一下在MNIST实验中使用Adam/AdamW优化器,观察不同优化器对于收敛速度和优化结果的影响。

相关推荐
MobotStone3 分钟前
AI 现状:哪怕只回答一个“是”或“否”,大模型背后的“算力”也一点没省
人工智能
是翎17 分钟前
深度长文|2026产品经理AI实践手册
人工智能·深度学习·学习·自然语言处理·数据挖掘
AlbertZein29 分钟前
不只看跑分,Step 5 Preview 两个真实编程任务实测
人工智能·ai编程
kyriewen32 分钟前
我扒了 10,221 条 JD:腾讯技术岗 75% 在要 AI
前端·人工智能·ai编程
AIGC小尼38 分钟前
本地AI漫剧部署|低配8G显存实战部署MiniMax-H3|4步极速采样+低显存优化完整方案(可角色替换/视频魔改)
人工智能·stable diffusion·comfyui·ai漫剧
宿州派大星1 小时前
[NLP实战] 基于PyTorch实现N-gram词嵌入模型:输入4个词预测第5个词
人工智能·pytorch·深度学习·nlp
qq_199886872 小时前
第8板块·第2节:统一内存的高级特性与性能调优
c++·人工智能·gpu算力·cuda
ting94520002 小时前
深度拆解Enter Pro AI原生开发平台:从底层架构到企业级落地技术实践
人工智能·架构·ai-native
lisw052 小时前
人工智能辅助科学的快与慢!
人工智能
9呀2 小时前
vscode如何打开多个codex标签页
人工智能