高级优化器

目录

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优化器,观察不同优化器对于收敛速度和优化结果的影响。

相关推荐
Shockang7 小时前
AI Slop 治理实战
人工智能
寒霜雨刃8 小时前
【原创】海光Z100 DCU适配vLLM实录(二):W4A16大M Prefill结构重写、GDN融合与长上下文HIP Attention
深度学习·神经网络·amd·rocm·ai infra·海光z100·gfx906
Mr数据杨8 小时前
医学影像分类实战复盘 从 Kaggle 竞赛到可落地建模流程
人工智能·数据分析·kaggle竞赛
AI情绪识别开源9 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
ZGIAI10 小时前
ZGI 迭代节点:批量资料的逐项处理
人工智能·架构
ZGIAI10 小时前
ZGI 知识检索:让业务回答有据可查
人工智能·架构
Asize10 小时前
框架的说明书是写给 AI 看的:我用 Next.js 搭了个博客
人工智能·代码规范·next.js
2601_9556624610 小时前
AI 配音工具 7 款实测:短视频、影视解说、小说推文音质横向对比
人工智能·音视频·语音识别·视频
AI创界者10 小时前
PinkCherry-MiniMax-H3 全能AI视频整合包:8G显存开箱即用,支持首尾帧/超分补帧/自动提示词
人工智能·aigc