Adam和AdamW

Adam可以看作是RMSprob和动量SGD的结合

目的在于抑制震荡加速收敛

Adam

\(while \theta_t 不收敛\)

计算损失函数关于\(\theta\)的梯度\(g_{\theta}\)

\(t = t + 1\)

计算一阶动量项

\(s_t=\alpha_1s_{t-1} + (1 - \alpha_1)g_{\theta}\)

计算二阶动量项

\(v_t=\alpha_2v_{t-1} + (1-\alpha_2)g_{\theta}^2\)

动量项修正

\(\hat s_t = \frac{s_t}{1 - \alpha_1^t}\)

\(\hat v_t = \frac{v_t}{1 - \alpha_2^t}\)

更新

\(\theta_t = \theta_{t-1}-\alpha \frac{\hat s_t}{\sqrt{\hat v_t}+\epsilon}\)

Adamw

带正则项的损失函数为

$$L=loss + \frac{1}{2}||\theta||^2$$

在实际更新参数时是按照权重衰减的方式进行更新的具体如下式

$$\theta_t = \theta_{t-1} - \alpha \frac{\partial loss}{\partial \theta}|_{\theta=\theta_{t-1}} - \alpha \theta_{t-1}$$

其中后面一项对应L2正则项的导数。

在实际计算时往往是直接更新未加正则项的损失函数的梯度然后减去一个权重衰减项,这只在SGD中与直接计算整体损失函数的梯度等价,而在带动量的SGD或者Adam中均不等价,比如计算带动量的SGD更新时,采用两种方式更新的方式分别为

\(v_t = \alpha v_{t-1} + (1 - \alpha)\frac{\partial loss}{\partial \theta}\)

1.\(\theta_t = \theta_{t-1} - \epsilon v_t - \epsilon \theta_{t-1}\)

2.\(\theta_t = \theta_{t-1} - \epsilon v_t - \epsilon (1 - \alpha) \theta_{t-1}\)

在Adam中的差别将会更大,Adamw则是在Adam的更新策略中采用了计算整体损失函数的梯度来进行更新而不是只计算不带正则项部分的梯度进行更新之后再进行权重衰减。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值