Adam和AdaGrad的区别是什么?

Adam和AdaGrad的区别是什么?深度学习的优化算法经历了(从左往右):SGD——SGDM——NAG——AdaGrad——AdaDelta——Adam——Nadam优化算法的流程:首先定义:待优化参数www,目标函数f(w)f(w)f(w),初始学习

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

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

优化算法的流程:

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

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=1tgT2 统计的是该维度上,迄今为止所有梯度值的平方和

问题:

虽然在稀疏场景下表现的非常好,单由于 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=β1mt1+(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=β2Vt1+(1β2)gt2避免二阶动量累积,导致训练过程提前结束。出现了优化算法中最常见的 β 1 , β 2 β_1,β_2 β1β2超参数,分别控制一阶、二阶变量。

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

今天的文章Adam和AdaGrad的区别是什么?分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/65974.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注