建模之常见优化器(Keras)
发布日期:2022-02-14 23:02:57
浏览次数:19
分类:技术文章
本文共 3942 字,大约阅读时间需要 13 分钟。
g t = ∇ θ t − 1 f ( θ − 1 ) g_t = \nabla_{\theta_{t-1}} f(\theta - 1) gt=∇θt−1f(θ−1)
序号 | 优化函数 | 概述 | 表达式 | 场景 | 优点 | 缺点 | |
---|---|---|---|---|---|---|---|
1 | SGD | θ t + 1 = θ t − η × g t \theta_{t+1} = \theta_t - \eta \times g_t θt+1=θt−η×gt | 训练速度快 | 容易陷于局部最优解 | keras.optimizers.SGD:可设置动量和nesterov参数sgd | ||
2 | Adagrad(自适应学习率) | 前期 g g g较小的时候, 正则项较大,能够放大梯度;后期 g g g较大的时候,正则项较小,能够约束梯度 | θ t + 1 = θ t − η ∑ i = 0 t ( g i 2 ) + ε × g t \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\sum_{i=0}^t(g_i^2)} + \varepsilon} \times g_t θt+1=θt−∑i=0t(gi2)+εη×gt | 适用于数据稀疏或者分布不平衡的数据集中收敛速度快 | 自动调整学习率 | 1、对均匀样本适用性不强2、累计 g 2 g^2 g2过大造成梯度趋向于0而停止训练3、需要自己手动指定初始学习率 | keras.optimizers.Adagrad |
3 | RMSprop(自适应学习率) | 修改了AdaGrad的梯度积累为指数加权的移动平均,使得其在非凸设定下效果更好。避免了学习率越来越低的的问题,而且能自适应地调节学习率RMSprop是Adagrad的一种发展,和Adadelta的变体,效果趋于二者之间 | E [ g 2 ] t = 0.5 × E [ g 2 ] t − 1 + 0.5 × g t 2 E[g^2]_t = 0.5 \times E[g^2]_{t-1} + 0.5 \times g_t^2 E[g2]t=0.5×E[g2]t−1+0.5×gt2 x t + 1 = x t − η E [ g 2 ] t + ε × g t x_{t+1} = x_t - \frac{\eta}{\sqrt{E[g^2]_t} + \varepsilon} \times g_t xt+1=xt−E[g2]t+εη×gtAdadelta的特殊情况: ρ = 0.5 \rho=0.5 ρ=0.5 | 深度神经网络优化.适合处理非平稳目标(RNN) | 自动调整学习率 | keras.optimizers.RMSprop | |
4 | Adam(自适应学习率) | RMSprop with momentum。结合了Adagrad善于处理稀疏梯度和RMSprop善于处理非平稳目标的优点 | E [ g 2 ] t = ρ × E [ g 2 ] t − 1 + ( 1 − ρ ) × g t 2 E[g^2]_t = \rho \times E[g^2]_{t-1} + (1 - \rho) \times g_t^2 E[g2]t=ρ×E[g2]t−1+(1−ρ)×gt2动量: m t = μ × m t − 1 + ( 1 − μ ) × g t m_t =\mu \times m_{t-1} + (1 - \mu) \times g_t mt=μ×mt−1+(1−μ)×gt, μ \mu μ默认值 0.9 0.9 0.9 E [ g 2 ] t ^ = E [ g 2 ] t 1 − ρ t \hat{E[g^2]_t} = \frac{E[g^2]_t}{1 - \rho^t} E[g2]t^=1−ρtE[g2]t m t ^ = m t 1 − μ 2 \hat{m_t}=\frac{m_t}{1 - \mu^2} mt^=1−μ2mt x t + 1 = x t − m t ^ E [ g 2 ] t ^ + ε x_{t+1} = x_t - \frac{\hat{m_t}}{\sqrt{\hat{E[g^2]_t}} + \varepsilon} xt+1=xt−E[g2]t^+εmt^ | 适用于大多非凸优化 - 适用于大数据集和高维空间 | 1、为不同的参数计算不同的自适应学习率;2、对超参数的选择鲁棒行强3、对内存需求较小 | keras.optimizers.Adam | |
5 | Adadelta(自适应学习率) | Adadelta是对Adagrad的扩展,最初方案依然是对学习率进行自适应约束,但是进行了计算上的简化。 Adagrad会累加之前所有的梯度平方,而Adadelta只累加固定大小的项,并且也不直接存储这些项,仅仅是近似计算对应的平均值 | E [ g 2 ] t = ρ × E [ g 2 ] t − 1 + ( 1 − ρ ) × g t 2 E[g^2]_t = \rho \times E[g^2]_{t-1} + (1 - \rho) \times g_t^2 E[g2]t=ρ×E[g2]t−1+(1−ρ)×gt2 x t + 1 = x t − η E [ g 2 ] t + ε × g t = x t − 1 ∂ 2 f ∂ x 2 × g t x_{t+1} = x_t - \frac{\eta}{\sqrt{E[g^2]_t} + \varepsilon} \times g_t = x_t - \frac{1}{\frac{\partial^2{f}}{\partial{x^2}}} \times g_t xt+1=xt−E[g2]t+εη×gt=xt−∂x2∂2f1×gt | 结合RMSprop和Adagrad,不需要设置一个默认的全局学习率 | 中早期速度快,效果好。后期会在局部最小值附近抖动 | keras.optimizers.Adadelta | |
6 | Adamax(自适应学习率) | 基于无穷范数的Adam的变体。 | E [ g 2 ] t = max ( ρ × E [ g 2 ] t − 1 , ∣ g t ∣ ) E[g^2]_t = \text{max}(\rho \times E[g^2]_{t-1} , \mid g_t \mid) E[g2]t=max(ρ×E[g2]t−1,∣gt∣)动量: m t = μ × m t − 1 + ( 1 − μ ) × g t m_t =\mu \times m_{t-1} + (1 - \mu) \times g_t mt=μ×mt−1+(1−μ)×gt, μ \mu μ默认值 0.9 0.9 0.9 x t + 1 = x t − m t ^ E [ g 2 ] t + ε x_{t+1} = x_t - \frac{\hat{m_t}}{E[g^2]_t + \varepsilon} xt+1=xt−E[g2]t+εmt^ | 在带embedding的模型中,该优化算法优于Adam | keras.optimizers.Adamax | ||
7 | Nadam(自适应学习率) | Adam with Nesterov momentum | g t ^ = g t 1 − ∏ i = 1 t μ i \hat{g_t} =\frac{g_t}{1 - \prod_{i=1}^{t}{\mu_i}} gt^=1−∏i=1tμigt E [ g 2 ] t = ρ × E [ g 2 ] t − 1 + ( 1 − ρ ) × g t 2 E[g^2]_t = \rho \times E[g^2]_{t-1} + (1 - \rho) \times g_t^2 E[g2]t=ρ×E[g2]t−1+(1−ρ)×gt2动量: m t = μ × m t − 1 + ( 1 − μ ) × g t m_t =\mu \times m_{t-1} + (1 - \mu) \times g_t mt=μ×mt−1+(1−μ)×gt E [ g 2 ] t ^ = E [ g 2 ] t 1 − ρ t × m t ˉ = ( 1 − μ t ) × g t ^ + μ t + 1 × m t ^ \hat{E[g^2]_t} = \frac{E[g^2]_t}{1 - \rho^t} \times \bar{m_t} =(1 - \mu_t) \times \hat{g_t} + \mu_{t+1} \times \hat{m_t} E[g2]t^=1−ρtE[g2]t×mtˉ=(1−μt)×gt^+μt+1×mt^ m t ^ = m t 1 − ∏ i = 1 t + 1 μ i \hat{m_t}=\frac{m_t}{1 - \prod_{i=1}^{t+1}{\mu_i}} mt^=1−∏i=1t+1μimt x t + 1 = x t − η × m t ˉ E [ g 2 ] t ^ + ε x_{t+1} = x_t - \frac{\eta \times \bar{m_t}}{\sqrt{\hat{E[g^2]_t}} + \varepsilon} xt+1=xt−E[g2]t^+εη×mtˉ | 自动调整学习率 | keras.optimizers.Nadam | ||
8 | Ftrl(自适应学习率) | 同时支持在线L2和收缩类型L2 | keras.optimizers.Ftrl |
- Online Learnin
-
- FOBOS
- RDA
- FTRL
- 在线Bayesian
- 基于内容的在线矩阵分解算法
-
转载地址:https://blog.csdn.net/fish2009122/article/details/108087465 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年03月25日 19时54分34秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
干掉 GuavaCache:Caffeine 才是本地缓存的王
2019-04-26
Spring Boot 2.x基础教程:EhCache缓存的使用
2019-04-26
如何让你的Nginx 提升10倍性能?
2019-04-26
神奇的 SQL,Group By 真扎心,原来是这样!
2019-04-26
我们常用的 Integer 内部为什么会去实现 Comparable 接口?
2019-04-26
Serverless:为我们到底带来了什么
2019-04-26
每日一皮:地铁上打瞌睡的程序员...
2019-04-26
每日一皮:996标配工位原来是这样的!
2019-04-26
Apache Shiro 1.6.0 发布!修复绕过授权高危漏洞
2019-04-26
创业公司这三年,Java老本都快吃完了!
2019-04-26
ES 在数据量很大的情况下(数十亿级别)如何提高查询效率?
2019-04-26
Mybatis是如何实现SQL语句复用功能的?
2019-04-26
每日一皮:公司来了个程序员鼓励师...
2019-04-26
短 URL 服务,怎么设计与实现?
2019-04-26
阿里六年,思辨成长
2019-04-26
如果MySQL事务中发生了网络异常?
2019-04-26
每日一皮:入职新公司第一周的感受...
2019-04-26
Flink再度霸榜,还不上车?
2019-04-26
解决Maven依赖冲突的好帮手,这款IDEA插件了解一下?
2019-04-26
你的 Redis 为什么变慢了?
2019-04-26