写点什么

最强深度学习优化器 Ranger 开源:RAdam+LookAhead 强强结合,性能更优速度更快

  • 2019-09-09
  • 本文字数:4166 字

    阅读完需:约 14 分钟

最强深度学习优化器Ranger开源:RAdam+LookAhead强强结合,性能更优速度更快

Ranger 优化器将 RAdam 与 Lookahead 这两大新兴成果加以结合,共同构建起一套用于深度学习的优化器。为了证明其功效,我们团队最近利用 Ranger 优化器捕捉了 FastAI 全球排行榜上的 8 项上榜记录(详情见此处)。


作为 Ranger 优化器的组成部分,Lookahead 由 Geoffrey Hinton 在 2019 年 7 月的《LookAhead 优化器:前进 k 步,后退一步(LookAhead optimizer: k steps forward, 1 step back)》论文中首次提出。Lookahead 的灵感来自对神经网络损失面的最新理解进展,其提出了一种稳定深度学习训练与收敛速度的全新方法。基于 RAdam(Rectified Adam)实现的深度学习方差管理的突破,我发现将 RAdam 与 Lookahead 结合在一起,Ranger 足以成为一支充满活力的 “梦之队”,甚至比 RAdam 自身的优化水平更高。


我已经将二者结合成单一 Ranger 优化器代码库,旨在降低使用难度并整合至 FastAI 当中。目前,大家可以立即获取 Ranger 源代码。



Vanilla Adam、SGD 以及 Look Ahead + Adam/SGD 在 LSTM 上的对比结果(来自 LookAhead 论文)

RAdam 与 LookAhead 为什么能够实现互补

RAdam 可以说是优化器在开始训练时的最佳基础。RAdam 利用动态整流器根据方差调整 Adam 的自适应动量,并有效提供能够根据当前数据集定制的自动预热机制,能够确保训练以扎实的基础顺利迈出第一步。


LookAhead 则受到深度神经网络损失面的最新理解进展启发,能够在整个训练期间提供健壮且稳定的突破。


引用 LookAhead 团队的说法——LookAhead“减少了对广泛超参数调整的需求”,同时实现了“以最小计算开销确保不同深度学习任务实现更快收敛速度。”


因此,二者都在深度学习优化的不同方面带来了突破,而且这种组合具有高度协同性,有望为大家的深度学习结果提供两项最佳改进。如此一来,通过将两项最新突破(RAdam + LookAhead)加以结合,Ranger 的整合成果有望为深度学习带来新的发展驱动力,帮助我们进一步追求更稳定且强大的优化方法。


Hinton 等人曾表示:“我们凭经验证明,Lookahead 能够显著提高 SGD 与 Adam 的性能,包括在 ImageNet、CIFAR-10/100、神经机器翻译以及 Penn Treebank 上的默认超参数设置场景之下。”



Lookahead 在实际应用中与 SGD 的前瞻性对比——Lookahead 凭借其双重探索设置成功给出更紧密的最小值结果。(来自 Lookahead 论文)


本文将基于之前的 RAdam 介绍,解释 Lookahead 究竟是什么,又是如何通过将 RAdam 与 Lookahead 结合至单一优化器 Ranger 当中,从而获得更高准确率的。这里先简单总结一下,我运行了 20 轮测试,个人得到了更高的准确率百分比,比目前 FastAI 排行榜记录高 1%:



Ranger 首次测试的准确率为 93%



FastAI 排行榜的 20 轮测试准确率为 92%


更重要的是,任何人都可以利用源代码与相关信息使用 Ranger,并检测其是否能够在稳定性与准确率方面为你的深度学习成果带来改善!


下面,我们将深入研究驱动 Ranger 的两大组件——RAdam 与 Lookahead:

RAdam (Rectified Adam)是什么

简单对 RAdam 作个总结:该项目的研究人员调查了自适应动量优化器(Adam、RMSProp 等)的机制,发现所有项目都需要进行预热,否则往往会在训练开始时带来糟糕的局部优化状态。



当优化器没有足够的数据来做出准确的自适应动量决策时,我们就会看到这些在训练初始阶段出现的糟糕表现。因此,预热有助于降低训练起步阶段时的差异……但即使已经确定了预热量需求,我们仍然需要手动调整并根据具体数据集的不同进行微调。


因此,Rectified Adam 应运而生,旨在利用基于所遇到的实际方差的整流函数确定“预热启发式”。整流器会以动态形式对自适应动量进行关闭及“压实”,确保其不会全速跳跃,直到数据的方差稳定下来。


通过这种方式,我们就顺利摆脱了手动预热的需求并能够使训练过程自动实现稳定。


一旦方差稳定下来,RAdam 在余下的训练过程中基本上充当着 Adam 甚至是 SGD 的作用。因此,可以看到 RAdam 的贡献主要在于训练的开始阶段。


读者朋友可能会在结果部分注意到,虽然 RAdam 在很长一段时间内的表现优于 Adam……但 SGD 最终仍会迎头赶上,并在准确率方面成功超越 RAdam 与 Adam。


在这方面,是时候请出 LookAhead 了,我们将其整合至一种新的探索机制当中,最终能够在超高轮数(甚至上千轮)的情况下继续保持对 SGD 的准确率优势。


Lookahead:探索损失面的辅助系统,带来更快且更稳定的探索与收敛效果


根据 Lookahead 的研究人员们所言,目前大多数成功的优化器都建立在 SGD 基础之上,同时加入:自适应动量(Adam、AdaGrad)或者一种加速形式(Nesterov 动量或者 Polyak Heavy Ball)以改善探索与训练过程,并最终收敛。


但是,Lookahead 是一种新型开发成果,其会保留两组权重而后在二者之间进行插值,从而推动更快权重集的“前瞻”或者探索,同时让较慢的权重集留在后面以维持长期稳定性。


结果就是,训练期间的方差有所降低,对次优超参数的敏感性下降,同时减少了对广泛超参数调整的需求。这种作法能够在多种深度学习任务之上实现更快收敛。换言之,这为我们带来了令人印象深刻的重大突破。



通过简单的类比,相信大家能够更好地理解 Lookahead 的作用。想象一下,我们身处山脉的顶端,而周边的峰峦则各有高低。其中一座最终延至山脚下构成了成功的通道,但其它则只是绕来绕去,无法帮助我们走到山脚。


亲自进行探索当然非常困难,因为我们在选定一条路线的同时,总会同时放弃其它路线,直到最终找到正确的通路。


但是,我们在山顶或者靠近山顶的位置留下一位伙伴,其会在情况看起来不妙时及时把我们唤回。这能帮助我们在寻找出路的时候快速取得进展,因为全部地形的探索速度将更快,而且被卡在死路中的可能性也更低。


Lookahead 的意义基本上就是这样。它会保留一个额外的权重副本,而后让内化得“更快”的优化器(在 Ragner 中,即 RAdam)进行 5 或 6 轮探索。轮处理间隔通过 k 参数进行指定。


LookAhead 随后,一旦 k 间隔触发,Lookahead 就会在其保存的权重与 RAdam 的最新权重之间进行差值相乘,并在每 k 个轮次乘以 alpha 参数(默认情况下为.5),同时更新 RAdam 的权重。



Ranger 代码显示,Lookahead 会更新 RAdam 的参数


结果实际上来自内部优化器(在本示例中为 RAdam)的快速移动平均值以及通过 Lookahead 的慢速移动平均值。快速平均值进行探索,慢速平均值则作为回撤或者稳定机制——一般来说,慢速平均值负责垫后,但有时候也会将快速平均值“压实”为正确概率更高的结果。


凭借 Lookahead 提供的安全性保障,优化器能够充分探索下山路径,而不再需要担心卡在死胡同中进退两难。


这种方法与目前的两种主流机制完全不同——即自适应动量以及“重球(heavy ball)”Nesterov 型动量。


因此,由于训练稳定性提到显著提高,Lookahead 能够更快结束探索并实现“压实”,最终获得超越 SGD 的准确率结果。

Ranger:一套利用 RAdam 与 Lookahead 的单一优化器整合代码库

Lookahead 能够与任意优化器共同运行以获取“快速”权重——论文当中使用的是初版 Adam,因为 RAdam 在一个月前才刚刚诞生。



LookAhead 的 PyTorch 集成 (lonePatient实现)


然而,为了便于同 FastAI 进行代码集成并实现更为广泛的应用,我进一步将二者合并为一款名为 Ranger 的单一优化器(Ranger 中的 RA 是为了致敬 Rectified Adam;而之所以选择 Ranger,是因为 LookAhead 的作用就像是在迷途时探索出路,如同「游侠」一般)。



上图为我个人在 ImageNette 上得到的 20 轮测试最高分数——这实际上也是我第一次使用 Ranger。(目前的排行榜为 92%。)另外需要注意,训练过程的稳定性也有所改善。

马上使用 Ranger!

目前 GitHub 上已经有多种 Lookahead 实现,我从 LonePatient 开始,因为我喜欢它简洁的代码风格,并以此为基础进行构建。至于 Radam,当然使用了来自官方的 RAdam GitHub 代码库。


Ranger 的源文件如下:


https://github.com/lessw2020/Ranger-Deep-Learning-Optimizer


使用指南:


1 — 将 ranger.py 复制至你的项目目录。


2 — 导入 Ranger:



导入 Ranger 即可使用。


3 — 在 FastAI 当中创建一个分区以供 Ranger 使用,而后将学习方的 opt_func 指定该分区。



4 — 开始测试!




LookAhead 参数:


  • k parameter :— 用于控制在合并 Lookahead 权重之前需要运行的轮次数。常见的默认值为 5 或 6,我认为论文当中可能使用了 20 轮。

  • alpha = 用于控制更新所使用的 Lookahead 方差的百分比。默认值为.5。Hinton 等人对.5 的合理性做出了强证明,但可能还需要进行简单测试。


论文中还提到了后续的猜测,即可能可以根据训练进展的程度将 k 或 alpha 纳入调整范畴。


根据此前 RAdam 文章的反馈,我打算尽快发布一份 notebook,帮助大家快速将 Ranger 与 ImageNet 或者其它数据集配合使用,从而进一步降低 Ranger/RAdam/Lookahead 的使用门槛。

总结

两支彼此独立的研究团队,为实现深度学习的快速稳定优化算法做出了新的突破性贡献。我发现通过将 RAdam 与 Lookaheaad 加以结合,能够打造出协同优化器 Ranger,并最终在 ImageNet 的 20 轮测试中取得新的最高分。


后续,我还需要进一步测试以优化 Lookahead 与 RAdam 的 k 参数与学习率。不过即使着眼于当下,Lookahead 与 RAdam 已经足以减少手动超参数调整量,因此应该能够为大家提供新的训练结果优化途径。


Ranger 源代码目前已经正式发布,大家可以点击此处体验 RAdam 加 Lookahead 这个新组合能否进一步提升你的深度学习效果!


进一步测试表明,使用 Ranger 加上新的 Mish 激活函数(而非 ReLU)能够产生更好的结果。关于 Mish 的细节信息请参阅:


https://medium.com/@lessw/meet-mish-new-state-of-the-art-ai-activation-function-the-successor-to-relu-846a6d93471f


相关链接:


本示例中使用的 Lookahead 实现来自 LonePatient:


https://github.com/lonePatient/lookahead_pytorch/blob/master/optimizer.py


RAdam 代码(PyTorch):


https://github.com/LiyuanLucasLiu/RAdam


相关论文链接:


LookAhead (Zhang, Lucas, Hinton, Ba ) — “Lookahead Optimizer: k steps forward, 1 step back


RAdam (Liu, Jiang, He, Chen, Liu, Gao, Han) — “On the Variance of the Adaptive Learning Rate and Beyond


原文链接:


https://medium.com/@lessw/new-deep-learning-optimizer-ranger-synergistic-combination-of-radam-lookahead-for-the-best-of-2dc83f79a48d


2019-09-09 07:009175

评论

发布
暂无评论
发现更多内容

【每日学点HarmonyOS Next知识】动图循环播放、监听tab切换、富文本上下滚动、tab默认居中、a标签唤起拨号

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】tabs切换卡顿、输入框焦点、打开全新web、输入框密码类型、非法变量值

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】Web上传文件、监听上下左右区域连续点击、折叠悬停、字符串相关、播放沙盒视频

轻口味

HarmonyOS HarmonyOS NEXT

AI大模型本地化部署的优势

北京木奇移动技术有限公司

AI大模型 私有化部署 软件外包公司

AI大模型本地化部署的关键技术

北京木奇移动技术有限公司

AI大模型 本地化部署 软件外包公司

【每日学点HarmonyOS Next知识】双向传值问题、子组件半径、VIdeo标签下载隐藏、字符串替换、路由问题

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】输入框自动获取焦点、JS桥实现方式、Popup设置全屏蒙版、鼠标事件适配、Web跨域

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】Tab切换声明周期、复杂Json组装、scroll最大高度、引用传递报错、Web性能

轻口味

HarmonyOS HarmonyOS NEXT

企业身份安全管理面临的问题

芯盾时代

身份安全 iam 统一身份管理平台

1:1复刻真实形象!华为云Flexus数字人门槛更低、效果更佳

平平无奇爱好科技

2分钟生成数字人视频!华为云Flexus数字人助力中小企业高效创作

平平无奇爱好科技

签约!中国煤炭地质总局携手用友打造央企财务数智化建设标杆

用友BIP

数据 智能体 数智化 用友BIP 财务管理

淘宝店铺所有商品数据接口详解

tbapi

淘宝API接口 淘宝店铺所有商品接口

“千元级”分身数字人来了!华为云Flexus助力中小企业探索营销新方式

平平无奇爱好科技

签约!中国煤炭地质总局携手用友打造央企财务数智化建设标杆

用友智能财务

财经 会计

中小企业的高性价比之选!华为云Flexus数字人引领内容产出新潮流

平平无奇爱好科技

INFINI Labs 产品更新 | Easysearch 增加异步搜索等新特性

极限实验室

console Gateway easysearch CocoAI

【每日学点HarmonyOS Next知识】输入法光标控制、Text部分圆角、Web组件缓存、Grid问题、Web出现PC效果

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】输入框限制小数位数、列表偏移计算、web请求header问题、对话框宽度、Web权限

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】JSBridge通信、输入框提示文字大小、读书翻页效果、Web回调函数、翻页自动轮播

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】Web跨域资源、Web长按菜单、Web拦截请求、禁止录屏、Base64图片宽高

轻口味

HarmonyOS HarmonyOS NEXT

AI大模型的本地化部署

北京木奇移动技术有限公司

AI大模型 私有化部署 软件外包公司

7B 开源模型性能超越 LLaVA,DeepSeek Janus Pro 论文详解

Baihai IDP

人工智能 AI LLMs DeepSeek Janus Pro

HarmonyOS SDK让小红书鸿蒙用户尽享相机的拍摄之美

HarmonyOS SDK

harmoyos

AI大模型本地化部署的工具和框架

北京木奇移动技术有限公司

AI大模型 本地化部署 软件外包公司

【每日学点HarmonyOS Next知识】对话框回调问题、输入区域最大行数、web自定义节点、icon图标库、软键盘开关

轻口味

HarmonyOS HarmonyOS NEXT

反向海淘反向代购独立站系统的终极神器?Hoobuy+电商API,让独立站躺着“搬砖”

代码忍者

LED显示屏:点亮商场与零售的“吸睛”密码

Dylan

LED显示屏 全彩LED显示屏 户外LED显示屏 led显示屏厂家 户内led显示屏

智能制造:企业运营的核心——PMC

积木链小链

数字化转型 企业管理 智能制造 PMC

AI大模型本地化部署的技术

北京木奇移动技术有限公司

AI大模型 私有化部署 软件外包公司

CST超材料光子晶体和禁带分析实例

思茂信息

cst cst操作 CST软件

最强深度学习优化器Ranger开源:RAdam+LookAhead强强结合,性能更优速度更快_AI&大模型_Less Wright_InfoQ精选文章