SWATS算法剖析(自动切换adam与sgd)

搬砖、码砖、代查水表....
27 人赞同了该文章

SWATS是ICLR在2018的高分论文,提出的一种自动由Adam切换为SGD而实现更好的泛化性能的方法。

论文名为Improving Generalization Performance by Switching from Adam to SGD,下载地址为:https://arxiv.org/abs/1712.07628

作者指出,基于历史梯度平方的滑动平均值的如adam等算法并不能收敛到最优解,因此在泛化误差上可能要比SGD等方法差,因此提出了一种转换机制,试图让算法自动在经过一定轮次的adam学习后,转而由SGD去执行接下来的操作。

算法本身思想很简单,就是采用adam这种无需操心learning rate的方法,在开始阶段进行梯度下降,但是在学习到一定阶段后,由SGD接管。这里前面的部分与常规的adam实现区别不大,重要的是在切换到sgd后,这个更新的learning rate如何计算。 整个算法步骤流程如下:

熟悉adam的应该能熟悉蓝色的部分,这个就是adam的原生实现过程。

作者比较trick的地方就是14行到24行这一部分。这一部分作者做了部分推导,作为最后的切换learning rate。

算法的整个实现逻辑并不复杂,这里列出自己实现时遇到的一些问题。

填坑 & 问题

  1. 在上面的算法流程第12行,有个,这个在整个流程中未介绍如何实现,本人阅读论文后,发现应该是学习率衰减的设计。一如很多深度学习策略一样,这里可以设置经过若干轮迭代后,学习率降为原来的1/N。在论文中,作者使用了在150轮后,将学习速率减少10倍。即
  2. 上面说了的更新,我们通过公式推导,其实能发现有一定的关系,自己代码实现的版本,发现切换的时机很大程度上和有关,因为切换涉及到第17行的一个比较过程,本身都与相关,当降一个量级时,|本身也会更接近。其有些类似正比关系,因此一般都是在经过一定轮次的衰减后,才能触发SGD切换时机。这一点目前本人实现验证是这样,未深入推理。
  3. 这个还有个坑,就是实现该算法,开始不太清楚这个k到底指的是epoch,还是指的经历的batch数量。最后按照常规学习率衰减应该是按照epoch来算的,因此推测其k应该为epoch。
  4. 还有和大坑是作为学习率,在切换到SGD后应一直不变,该值为标量,因此应该如常用eta等学习率一样,为正值,因此需要在17行加个约束,即。(该场景难以复现,之前有次更新发现不设置为正值时,导致切换sgd后准确度大减)

总结

通过若干的对比,该论文变相增加了一些超参数,所以实际使用有待商榷。自己的数据集上经常就在还未满足切换条件就已经收敛了。 目前已做了相应的实现,放在scalaML中,位置为https://github.com/sloth2012/scalaML/blob/master/src/main/scala/com/lx/algos/ml/optim/GradientDescent/SWATS.scala,使用见https://github.com/sloth2012/scalaML/blob/master/src/test/scala/com/lx/algos/ml/GradientDescentTest.scala。最后想要查看切换过程的话,建议将early_stop设置为false,然后将学习率衰减系数设置低一点。 代码目前仅支持二分类。

SWATS算法剖析(自动切换adam与sgd)的更多相关文章

  1. 神经网络优化算法如何选择Adam,SGD

    之前在tensorflow上和caffe上都折腾过CNN用来做视频处理,在学习tensorflow例子的时候代码里面给的优化方案默认很多情况下都是直接用的AdamOptimizer优化算法,如下: o ...

  2. Nginx+Keepalived主从双机热备+自动切换

    1 安装配置nginx 参考: http://www.cnblogs.com/jager/p/4388202.html 2 安装配置keepalived tar xvf keepalived-1.2. ...

  3. nginx+keepalive主从双机热备+自动切换解决方案

    环境采集cenots 6.3 64位迷你安装,因为安装前,你需要做一些工作 yum install -y make wget 如果你愿意可以更新下系统,更换下yum源. 1.安装keepalive 官 ...

  4. 协程:gevent模块,遇到i/o自动切换任务 038

    协程 : gevent模块,遇到io自动切换任务 from gevent import monkey;monkey.patch_all() # 写在最上面 这样后面的所有阻塞就全部能够识别了 impo ...

  5. 【机器学习详解】SMO算法剖析(转载)

    [机器学习详解]SMO算法剖析 转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51227754 CSDN−勿在浮沙筑高台 本文力 ...

  6. 原生js+css3实现图片自动切换,图片轮播

    运用CSS3transition及opacity属性 制作图片轮播动画 自己这两天根据用js来控制触发CSS3中transition属性,从而写出来的以CSS3动画为基础,js控制过程的图片轮播 运用 ...

  7. 获取bing.com的图片并在gnome3中设置自动切换

    发现 bing.com 上的图片很好看,因此打算每天把 bing.com 的图片下载下来,用作桌面. 需要做的是两个部分,爬取图片到目录和设置目录图片为桌面背景并可以自动切换. 第一部分,下载图片,使 ...

  8. 在 Visual Studio 等编辑器/IDE中自动切换输入法,不需要手动的有没有?

    使用Visual Studio写代码,经常遇到的一个问题就是切换中文输入法麻烦,输入完注释//,要切换到中文,输入完引号,要输入中文,然后还需要切换回来,有没有? 有时候中文输入法忽然失效有没有?明明 ...

  9. jquery背景自动切换特效

    查看效果网址:http://keleyi.com/a/bjad/4kwkql05.htm 本特效的jquery版本只支持1.9.0以下. 代码如下: <!DOCTYPE html PUBLIC ...

随机推荐

  1. slax linux的定制

    由于数据结构教学的需要,需要用到linux,要求就是小,启动快,可定制性强,恰好slax正好满足要求,以下就是定制slax linux的过程记录: 什么是Slax Slax是一个基于Linux的Liv ...

  2. 方阵转置(c++)

    #include #include using namespace std; int main(int argc,char* argv[]) { int a[4][4]={ {0,1,2,3}, {4 ...

  3. 走进JavaWeb技术世界开篇:JavaWeb技术汇总

    微信公众号[Java技术江湖]一位阿里 Java 工程师的技术小站.(关注公众号后回复”Java“即可领取 Java基础.进阶.项目和架构师等免费学习资料,更有数据库.分布式.微服务等热门技术学习视频 ...

  4. 20182332 实验四《Java Socket编程 》实验报告

    20182332 实验肆<数据结构与面向对象程序设计>实验报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 盛国榕 学号:20182332 实验教师:王志强 实验日 ...

  5. Vagrant 如何调整虚拟机的内存大小?

    https://docs.vagrantup.com/v2/virtualbox/configuration.html 最下面 config.vm.provider "virtualbox& ...

  6. 关于Java 8新引入语法特性的简要说明

    Java 8在语法上的主要改进就是新增了Lambda Expression以及Method Reference.由于官方网站的介绍稍显罗嗦,而且例子也有些复杂.我这里将提供一些更为浅显.直观的例子来帮 ...

  7. 007-springboot 控制台中文乱码

    处理方式 1.FIle encoding 设置为UTF-8 2.-Dfile.encoding=UTF-8 配置tomcat 的的VM启动参数:-Dfile.encoding=UTF-8 3.idea ...

  8. for-update与for-update nowait

    1.for update 和 for update nowait 的区别: 首先一点,如果只是select 的话,Oracle是不会加任何锁的,也就是Oracle对 select 读到的数据不会有任何 ...

  9. [maven]maven插件 tomcat7-maven-plugin 的使用

    使用 tomcat7-maven-plugin,可以将tomcat内嵌到web项目中,直接运行webapp项目. 第一步.pom.xml的配置: <build> <plugins&g ...

  10. 【ARTS】01_24_左耳听风-201900422~2019004028

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...