optimizer(三) Adam 系列
学习记录,如有错误请指出,感谢大家指导建议。
基础版Adam
Adam是我们现在用的最多的优化器,他是将adaptive 和momentum结合在一起。ada部分参考了RMSProp,momentum就是我们熟知的动量法了。对于RMSProp有疑问的同学可以参考我上一篇的文章。
optimizer(二) RMSProp_黑野桥的博客-CSDN博客学习记录,如有错误请指出,感谢大家指导建议。上一篇讲了Adamgrad优化器,如果下文中对于矩阵或者向量的计算形式有疑问可以参考上一篇文章,上一篇文章详细描述了Adamgrad的计算过程,而RMSProp和Adamgad是几乎一摸一样的。Optimizer (一)Adagrad 矩阵形式公式理解_黑野桥的博客-CSDN博客学习记录,如有错误请指出,感谢大家指导谢大家指导建议。本篇记录来自medium原网址Adagrad的特点在于对于每一个参数的学习率是不同的,除了公共学习率 之外,每一个参数的学习.https://blog.csdn.net/wuhao1205/article/details/124753516?spm=1001.2014.3001.5502先来看看Adam的公式群
mt是结合了动量的梯度信息,St和RMSProp中的St定义相同,以指数平滑的方式保留了历史梯度平方信息。Adam会在迭代过程中逐渐将m和S趋于稳定。理解了RMSProp之后,Adam的数学运算过程并不难理解。从个人的经验来看 Adam的训练结果通常较SGD来的更好,因为他对每个参数的学习率更新速度是不同的,而SGD是相同的,所以Adam经过细心调参一般能获得比SGD更好的结果。
接下来结合pytorh代码观察一下Adam。
这是pytorch中Adam的源码参数列表,params是需要训练的参数,beta就是我们的 构成的向量,一般值分别为0.9和0.999。eps为极小值防止分母为0,weight_decay为权重衰减系数,默认为0(目前pytorch中的adam的weight decay实现方式还是有些问题,如要使用weight decay,直接使用adamW)。
amsgrad在这里表示是否启用amsgrad计算方法。在下文ADamW中解释了这一行为。
def __init__(self, params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0, amsgrad=False)
AdamW
结合pytrch官方手册关于函数的定义和数学公式
torch.optim.AdamW(params, lr=0.001, betas=(0.9, 0.999),
eps=1e-08, weight_decay=0.01, amsgrad=False, *, maximize=False)
maximize是一个flag表示优化的方向,其他参数和上面是一致的。AdamW默认带有系数衰减权重,实现的是‘Adam+’的方式,只不过实现的时候和常规机器学习实现方式并不相同。pytorch实现weight decay的方式似乎和常规所想的不太一致?
都9102年了,别再用Adam + L2 regularization了 - 知乎
Adamax
torch.optim.Adamax(params, lr=0.002, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)
Adamax是adam的一个延申,可以简单理解为在权重衰减上比Adam更加猛烈
NAdam
torch.optim.NAdam(params, lr=0.002, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, momentum_decay=0.004)
在动量法中,有一个算法名词叫Nesterov。
比Momentum更快:揭开Nesterov Accelerated Gradient的真面目 - 知乎
这个版本的Adam就是将类似这个元素加入了Adam的处理框架中。NAdam的收敛速度更快。
RAdam
torch.optim.RAdam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0)
RAdam通过方差自动控制自适应学习率的打开和关闭。RAdam的效果一般来说较Adam要好一些。
总结
Adam系列的优化器,核心都在于通过自适应的方法调节每个参数的学习率达到快速收敛的效果。在较大学习率的情况下,Adam可以达到比SGD要好的效果,但是Adam容易陷入局部最优。这也很容易理解,因为每个参数的学习率都是自适应的,一旦卡在鞍点就没有其他的动力可以把它带出来。
关于Adam的调参经验可以参考以下知乎。
你有哪些deep learning(rnn、cnn)调参的经验? - 知乎
optimizer(三) Adam 系列相关推荐
- jQuery 1.3 for Asp.Net、 CSLA.Net 3.6 for Windows 及 MOSS/WSS 一步一步从入门到精通三个系列的目录...
jQuery for Asp.Net 一步一步从入门到精通(附 jQuery API 彩色大图) CSLA.Net 3.6 for Windows (C# 2008)一步一步从入门到精通 MOSS/W ...
- 在英特尔硬件上部署深度学习模型的无代码方法 关于OpenVINO深度学习工作台的三部分系列 第二部
作者 Taylor, Mary, 翻译 李翊玮 关于 OpenVINO™ 深度学习工作台的三部分系列文章 关于该系列 了解如何转换.微调和打包 推理就绪的 TensorFlow 模型,该模型针对英特尔 ...
- 输出以下图案菱形7行_“三月三”民俗系列报道7|民族服饰篇(下):相约美丽广西 共赏绚丽民服——壮锦、壮族刺绣...
自古以来,广西地区各族织锦刺绣工艺品众多,组成了一个五彩斑斓的世界.抚今忆昔,作为非遗文化的重要组成部分,聪慧的壮族人民将大自然中所见事物进行大胆的想象,"绘"于壮锦和刺绣中.通过 ...
- ARM Cortex 三个系列
ARM12更改命名为ARM-Cortex ARM公司将ARM11以后的产品命名为Cortex,并分为A.R和M三个系列.Cortex系列属于ARMv7架构,是ARM公司最新的指令架构. ARM7:AR ...
- 认识ARM Cortex 的三个系列
ARM12更改命名为ARM-Cortex ARM公司将ARM11以后的产品命名为Cortex,并分为A.R和M三个系列.Cortex系列属于ARMv7架构,是ARM公司最新的指令架构. ARM7:AR ...
- 国产的“三剑”系列登顶了热销榜的榜首?有你喜欢的吗?
在主机游戏日益发展的今日,有很多的游戏受到了玩家的肯定.但是有很多游戏都是国外的大厂商制作出来的.其实在我们国产主机游戏行列之中也不乏有很多精心制作并且得到了广大玩家们认可的作品,那就是国产的&quo ...
- struts2 ognl 判断数据类型_新华三攻防系列之防护篇从防护角度看Struts2历史漏洞...
前言 Struts2漏洞是一个经典的漏洞系列,根源在于Struts2引入了OGNL表达式使得框架具有灵活的动态性.随着整体框架的补丁完善,现在想挖掘新的Struts2漏洞会比以前困难很多,从实际了解的 ...
- 华三h3c系列交换机ACL实践
学习目标: 认识华三h3c的两种ACL:basic acl . advanced acl 如何区分acl中的source ip或destination ip在接口下调用时inbound/outboun ...
- 在英特尔硬件上部署深度学习模型的无代码方法 OpenVINO 深度学习工作台的三部分系列 - CPU AI 第二部
作者 Taylor, Mary, 翻译 李翊玮 关于该系列 了解如何转换.微调和打包 推理就绪的 TensorFlow 模型,该模型针对英特尔®硬件进行了优化,仅使用 Web 浏览器.每一步都在云中使 ...
最新文章
- 天梯赛 L1-039 古风排版 (20 分)
- 图片懒加载解决方案 lazyload.js
- Ruby与Google 2009编程之夏
- CodeForces 1396E Distance Matching(构造+树的重心+dfs+set)
- 城市大轰炸(洛谷P1830题题解,Java语言描述)
- 构建Docker镜像指南,含实战案例
- Qt 中获取三种坐标类型
- android打造一个简单的欢迎界面
- pytorch visdom可视化工具学习—1—详细使用-3-Generic Plots和Others
- 怎么用手机当电脑摄像头?安卓苹果都可以,巨简单的N种方案任君挑选
- 根号智能计算机在线,科学计算器在线的多次根号怎么用?
- 如何计算加权和及矩阵乘法运算回顾
- matlab波形叠加,matlab程序两列波相向传播叠加波形图和动画.doc
- 1万元左右理财方法有那些
- vue项目中扫码枪收款
- solr dih有子查询时速度慢
- 什么是RC高通滤波电路
- TensorFlow2.0保存模型
- Java实现手写数字的识别(BP神经网络的运用)
- JDBC连接oracle11g——socket read timed out