【pytorch优化器】Adam优化算法详解

转载自:https://blog.csdn.net/weixin_39228381/article/details/108548413
仅作学习记录

一、说明

模型每次反向传导 都会给各个可学习参数p 计算出一个偏导数g_t,用于更新对应的参数p。通常偏导数g_t 不会直接作用到对应的可学习参数p上,而是通过优化器做一下处理,得到一个新的值 \widehat{g}_t,处理过程用函数F表示(不同的优化器对应的F的内容不同),即\widehat{g}_t=F(g_t),然后和学习率lr一起用于更新可学习参数p,即p=p-\widehat{g}_t*lr

Adam是在RMSProp和AdaGrad的基础上改进的。先掌握RMSProp的原理,就很容易明白Adam了。
关于 Adagrad、RMSProp优化算法详解 可阅读此blog

二、Adam原理

在RMSProp的基础上,做两个改进:梯度滑动平均偏差纠正

1. 梯度滑动平均

在RMSProp中,梯度的平方是通过平滑常数平滑得到的,即在这里插入图片描述(根据论文,梯度平方的滑动均值用v表示;根据pytorch源码,Adam中平滑常数用的是β,RMSProp中用的是α),但是并没有对梯度本身做平滑处理。

在Adam中,对梯度也做了平滑,平滑后的滑动均值用m表示,即在这里插入图片描述,在Adam中有两个β

2. 偏差纠正

上述m的滑动均值的计算,当t=1时,m_1=\beta*m_0+(1-\beta)*g_1,由于m_0的初始是0,且β接近1,因此t较小时,m的值是偏向于0的v也是一样。这里通过除以在这里插入图片描述来进行偏差纠正,即\widehat{m}_t=\frac{m_t}{1-\beta^t}

3. Adam计算过程

为方便理解,以下伪代码和论文略有差异,其中蓝色部分是比RMSProp多出来的
在这里插入图片描述

三、pytorch Adam参数

torch.optim.Adam(params,
                lr=0.001,
                betas=(0.9, 0.999),
                eps=1e-08,
                weight_decay=0,
                amsgrad=False)

1. params

模型里需要被更新的可学习参数

2. lr

学习率

3. betas

平滑常数\beta_1\beta_2

4. eps

在这里插入图片描述,加在分母上防止除0

5. weight_decay

weight_decay的作用是用当前可学习参数p的值修改偏导数,即:g_t=g_t+(p*weight_decay),这里待更新的可学习参数p的偏导数就是g_t

weight_decay的作用是L2正则化和Adam并无直接关系

6. amsgrad

如果amsgrad为True,则在上述伪代码中的基础上,保留历史最大的,记为v_{max},每次计算都是用最大的v_{max},否则是用当前v_t

amsgrad和Adam并无直接关系。

  • 6
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyTorch中,使用Adam优化器的代码通常如下所示: ```python import torch import torch.optim as optim # 定义模型 model = YourModel() # 定义优化器 optimizer = optim.Adam(model.parameters(), lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False) # 在训练循环中使用优化器 for epoch in range(num_epochs): # 前向传播和计算损失 loss = model.forward() # 梯度清零 optimizer.zero_grad() # 反向传播和更新参数 loss.backward() optimizer.step() ``` 在这个例子中,我们首先导入了torch和torch.optim模块。然后,我们定义了一个模型对象,并将其参数传递给Adam优化器的构造函数。构造函数中的参数包括学习率(lr)、动量项(betas)、epsilon(eps)、权重衰减(weight_decay)和amsgrad标志(amsgrad)。接下来,在训练循环中,我们首先进行前向传播和计算损失,然后将梯度清零,接着进行反向传播和更新参数。最后,我们重复这个过程直到训练结束。 这是一个简单的使用Adam优化器的示例,你可以根据自己的需求进行调整和修改。 #### 引用[.reference_title] - *1* *3* [pytorch中troch.optim.Adam优化算法](https://blog.csdn.net/weixin_38145317/article/details/104775536)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [pytorchAdam优化器源码解读](https://blog.csdn.net/angel_hben/article/details/104640192)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值