39

Adam优化器杂谈

 4 years ago
source link: https://segmentfault.com/a/1190000023456730
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

文章来自:微信公众号【机器学习炼丹术】

最常用的Adam优化器,有着收敛速度快、调参容易等优点,但是也存在经常被人吐槽的泛化性问题和收敛问题。

因此,在很多大佬的代码中,依然会使用传统的SGD+momentum的优化器。

关于两个优化器的比较,仁者见仁智者见智,可以看一下这篇文章,有简单的关于这两个优化器的代码实现和效果比较:

Pytorch的SGD,SGDM,Adam,RAdam的代码实现

这篇文章就随便的谈一谈下面的问题,来让大家扩展一下知识:

  • Adam被攻击的泛化问题和收敛问题;

Adam是什么

对机器学习有了解的朋友,应该对Adam优化器不陌生了。大体来说就是 Momentum + Adagrad + RMSProp 的结合。

2qMFFzE.jpg!web

【如果需要的话,之后可以简单易懂的通俗讲讲各种类型的优化器的算法】

从Adam和SGDM中就可以得知,Momentum是一个很好的设计。

Adam的两个吐槽

泛化问题

在讨论模型泛化问题的时候, 我们会希望模型找到的极小值(收敛位置),是一个比较平缓、不陡峭的位置! ,原因看下图:

![]( http://helloworld2020.net/wp-...

左边的那个收敛点是一个比较平缓的点,而右边的是一个非常陡峭非常sharp的收敛点。而训练集和测试集虽然要求同分布,但是其实还是会有微小的差别。

对于陡峭的收敛点,训练集的损失可能会很小,但是测试集的损失很可能就很大。而平坦的收敛点就不会这样。这就是泛化问题,有的时候也被看成过拟合现象。

但是我们是也无法直接证明Adam总是找到sharp的极小值。不过很多很论或多或少都只指出了Adam在测试的时候error会较大。

7zim2eJ.jpg!web

这里有一张图,可以看到,虽然Adam在训练集中收敛速度最快,但是测试集的效果并不是非常的好。

收敛问题

Adam在某些情况下会出现无法收敛的情况,最著名的关于这个问题的Adam的吐槽就是这个论文:

2018 ICLR的best paper:On the Convergence of Adam and Beyond

但是这个问题其实并不是我们这种人经常会遇到的,反而泛化问题是一个真正的困扰。

改进Adam

learning rate scheduling

大佬们经常用的一个learning rate scheduling方案就是warn-up+decay。

【warn-up】

是指不要一开始用高的learning-rate,应该要从低的慢慢增大到base-learning rate。学习率从小到大。

【decay】

随着optimization的步数的增长,逐渐降低learning rate。

Decay的部分其实很常见,所有的人都会用,但是warn-up其实就有点诡异了,在ResNet的论文中其实可以看到这个。

RAdam

Radam 是在warm up的时候提出了一些有效的策略。


Recommend

  • 22

    在上一篇文章中,我们挖了一个坑:在大部分情况下,HashJoin 都是表现最优的,那为什么还需要去支持其他 Join 比如 SortMergeJoin 或者 NestLoopJoin 的算子实现呢?因为不同表的大小,是否有索引支持,以及查询语句是否对某些 column 需...

  • 40
    • zhuanlan.zhihu.com 4 years ago
    • Cache

    游戏性能优化杂谈(一)

    最近一年一直在为PS5发售进行软件方面的准备,所以文章写得很少了,大部分时候都只是在知乎上灌水调剂一下心情。 其实日常工作当中,除了诸多杂事之外,比较整块的主要是两部分: 向国内签约厂商宣讲最新的...

  • 26
    • zhuanlan.zhihu.com 4 years ago
    • Cache

    游戏性能优化杂谈(二)

    上一篇提到优化的第二个标准:CPU执行周期,但是没有解释什么是CPU执行周期。 其实CPU执行周期就是游戏主循环循环一次。往往,对于当今大部分游戏引擎,这也代表读入了一次用户输入,执行了一遍游戏逻辑,输出了一帧游戏画面。 ...

  • 27
    • zhuanlan.zhihu.com 4 years ago
    • Cache

    游戏性能优化杂谈(三)

    在一个CPU周期当中,通常诸如读取用户输入、执行引擎内部逻辑这些引擎固有的功能,开销一般是非常稳定的。而诸如执行游戏逻辑(脚本)、调度资源、网络通信、生成渲染命令这些,是容易发生变化的。 其中,资源的调度和网...

  • 31
    • zhuanlan.zhihu.com 4 years ago
    • Cache

    游戏性能优化杂谈(四)

    对于当代游戏,尤其是大制作来说,IO往往是一个非常主要的性能瓶颈。不仅仅是CPU读取游戏资源的方式,游戏资源的打包方式本身也会极大地影响CPU性能。 常规的文件操作,是一个多个步骤连锁的过程:需要按层级遍历目录,需要对比文件名,...

  • 29
    • zhuanlan.zhihu.com 4 years ago
    • Cache

    游戏性能优化杂谈(五)

    在当代游戏引擎当中,CPU负责生成GPU命令队列,并提交给GPU执行。因为这个命令队列是生成在内存空间当中然后提交给GPU的,所以无论对于CPU还是GPU来说,这其实也是一种IO操作。 特别是,在PC等通用环境下,为了提高系统的鲁棒性和兼容性...

  • 17
    • zhuanlan.zhihu.com 4 years ago
    • Cache

    游戏性能优化杂谈(六)

    游戏逻辑的执行,也是CPU端性能瓶颈的常见原因之一。 当代游戏引擎的一大进步,是将游戏逻辑的制作从程序员手中解放出来。WYSIWYG的可视化编辑,基于脚本语言甚至是节点连线的二次开发,都大大降低了编写游戏逻辑的技术门槛。但是正如老...

  • 25
    • zhuanlan.zhihu.com 4 years ago
    • Cache

    游戏性能优化杂谈(八)

    我认为性能优化可以分为宏观层面的优化,与微观层面的优化。前者多与开发技术及流程的选型有关,因此应该在项目的前期就开始考虑,而且是越早考虑费用效益比越好。而后者则是对于成品性能热点区域针对性的优化,通常在项目的中后期进行,且效果...

  • 45
    • zhuanlan.zhihu.com 4 years ago
    • Cache

    游戏性能优化杂谈(十)

    GPU管线的最前端通常是一个指令获取与译码单元。这个单元从内存取出CPU传递过来的指令,将其进行译码。一些命令发送给后面的微核心进行执行,比如DMA数据传输、和CPU之间的通信同步等等;另外一些命令则对GPU内的数百个状态寄存器...

  • 18
    • zyun.360.cn 3 years ago
    • Cache

    ADAM与二阶优化算法的联系

    ADAM与二阶优化算法的联系 – 智汇云技术社区 ADAM与二阶优化算法的联系 2022-3-28 9:53 人...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK