import torch
torch.optim.Adam(params,
lr=0.001,
betas=(0.9,0.999),
eps=1e-8,
weight_decay=0,
amsgrad=False,
*,
foreach=None,
maximize=False,
capturable=False,
differentiable=False,
fused=None)
- 类torch.optim.Adam实现Adam算法
Adam算法描述
- 输入:
![\gamma(lr),\beta_1,\beta_2(betas),\theta_0(params),f(\theta)(objective),\lambda(weight decay),](https://latex.csdn.net/eq?%5Cgamma%28lr%29%2C%5Cbeta_1%2C%5Cbeta_2%28betas%29%2C%5Ctheta_0%28params%29%2Cf%28%5Ctheta%29%28objective%29%2C%5Clambda%28weight%20decay%29%2C)
![amsgrad,maximize](https://latex.csdn.net/eq?amsgrad%2Cmaximize)
- 初始化:
![m0\leftarrow 0(first- moment),v0\leftarrow0(second-moment),\widehat{v0}^{max}\leftarrow 0](https://latex.csdn.net/eq?m0%5Cleftarrow%200%28first-%20moment%29%2Cv0%5Cleftarrow0%28second-moment%29%2C%5Cwidehat%7Bv0%7D%5E%7Bmax%7D%5Cleftarrow%200)
for t=1 to ...do
- if maximize:
- else
- if
![m_t \leftarrow \beta_1m_{t-1}+(1-\beta_1)g_t](https://latex.csdn.net/eq?m_t%20%5Cleftarrow%20%5Cbeta_1m_%7Bt-1%7D+%281-%5Cbeta_1%29g_t)
![v_t\leftarrow\beta_2v_{t-1}+(1-\beta_2)g_t^2](https://latex.csdn.net/eq?v_t%5Cleftarrow%5Cbeta_2v_%7Bt-1%7D+%281-%5Cbeta_2%29g_t%5E2)
![\widehat{m_t}\leftarrow m_t/(1-\beta_1^t)](https://latex.csdn.net/eq?%5Cwidehat%7Bm_t%7D%5Cleftarrow%20m_t/%281-%5Cbeta_1%5Et%29)
![\widehat{v_t}\leftarrow v_t/(1-\beta_2^t)](https://latex.csdn.net/eq?%5Cwidehat%7Bv_t%7D%5Cleftarrow%20v_t/%281-%5Cbeta_2%5Et%29)
- if amsgrad
- else
- return
![\theta_t](https://latex.csdn.net/eq?%5Ctheta_t)
参数
- params(iterable)-- 可迭代的优化参数或者定义参数组的字典;
- lr(float,Tensor,optional)---学习率(默认1e-3),张量LR还没有被所有的算法实现所支持;如果没有指定fused为True或者capturable为True的情况下请使用一个浮点型LR;
- betas(Tuple[float,float],optional)---用于计算运行中的梯度均值和他的平方的系数,默认为(0.9,0.999);
- eps(float,optional)---加和到分母上的项以提高数值稳定性(默认为1e-8);
- weight_decay(float,optional)---权重衰减(L2惩罚)(默认0);
- amsgrad(bool,optional)---该算法是否使用AMSGrad变量;
- foreach(bool,optional)---是否使用foreach实现的优化器;如果未设置,在CUDA上将使用foreach的实现而不是for-loop的实现,因为foreach的实现具有更优化的性能;注意由于张量列表而不是张量的原因,foreach的实现较for-loop实现使用更多的峰值内存;如果内存被限制,优化器一次批处理更少的参数或者将此项设置为False(默认为None);
- maximize(bool,optional)---最大化相对于参数的目标而不是最小化(默认:False);
- capturable(bool,optional)---在CUDA图中捕捉此实例是否安全,设置为True可以损坏未绘图的性能,所以如果不打算图形捕捉实例,将其设置为False(默认为False);
- differentiable(bool,optional)---训练中,优化器迭代步中是否自动梯度,如果不使用,在上下文中step()函数以torch.no_grad()运行;设置为True可能损害性能,因此在训练中如果不想使用自动梯度,将其设置为False(默认False);
- fused(bool,optional)---是否使用fused实现(仅支持CUDA),当前torch.float64,torch.float32,torch.float16,torch.bfloat16被支持(默认None);