首页 > 编程知识 正文

adam和adams区别,adam d

时间:2023-05-05 01:56:27 阅读:264537 作者:1877

深度学习的优化算法经历了:

SGD→SGDM→NAG→AdaGrad→AdaDelta→Adam→Nadam

优化算法的流程:

首先定义:待优化参数 w w w,目标函数 f ( w ) f(w) f(w),初始学习速率 α α α
而后,开始进行迭代优化,在每个 e p o c h ( t ) epoch(t) epoch(t):

1.计算目标函数关于当前参数的梯度: g t = ▽ f ( w t ) g_t=▽f(w_t) gt​=▽f(wt​)
2.根据历史梯度计算一阶动量二阶动量: m t = Φ ( g 1 , g 2 , g 3 . . . , g t ) m_t=Φ(g_1,g_2,g_3...,g_t) mt​=Φ(g1​,g2​,g3​...,gt​) V t = ψ ( g 1 , g 2 , g 3 . . . , g t ) V _t=ψ(g_1,g_2,g_3...,g_t) Vt​=ψ(g1​,g2​,g3​...,gt​)
3.计算当前时刻的下降梯度: η t = α ⋅ m t / V t η_t=α·m_t/ sqrt{V_t} ηt​=α⋅mt​/Vt​ ​
4.根据下降梯度进行更新: w t + 1 = w t − η t w_{t+1}=w_t-η_t wt+1​=wt​−ηt​

步骤3,4对于各个算法都是一致的,主要差别在1和2

1.对于AdaGrad:

在SGD的基础上增加了二阶动量,二阶动量的首次出现,意味着“自适应学习率”时代的到来。 V t = ∑ T = 1 t g T 2 V_t=sum_{T=1}^tg_T ^2 Vt​=T=1∑t​gT2​ 统计的是该维度上,迄今为止所有梯度值的平方和

问题:

虽然在稀疏场景下表现的非常好,单由于 V t sqrt{V_t} Vt​ ​是单调递增的,就会使得实际学习率 α / V t α/sqrt{V_t} α/Vt​ ​递减至0,训练提前结束。

2.对于Adam:

把一阶动量和二阶动量全部都用起来。
使用Momentum的一阶动量: m t = β 1 ⋅ m t − 1 + ( 1 − β 1 ) ⋅ g t m_t=β_1·m_{t-1}+(1-β_1)·g_t mt​=β1​⋅mt−1​+(1−β1​)⋅gt​
以及AdaDelta的二阶动量: V t = β 2 ∗ V t − 1 + ( 1 − β 2 ) ⋅ g t 2 V_t=β_2*V_{t-1}+(1-β_2)·g_t^2 Vt​=β2​∗Vt−1​+(1−β2​)⋅gt2​避免二阶动量累积,导致训练过程提前结束。出现了优化算法中最常见的 β 1 , β 2 β_1,β_2 β1​,β2​超参数,分别控制一阶、二阶变量。

参考:https://zhuanlan.zhihu.com/p/32230623

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。