写点什么

最强深度学习优化器 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:008563

评论

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

直击火山引擎V-Tech峰会!仅需简单登录,即可极速体验数据引擎ByteHouse

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号9月PK榜

VUE模块化开发是如何实现的?

FN0

Vue

M3E/OpenAi+vearch内容查重实践 | 京东云技术团队

京东科技开发者

数据库 openai 企业号9月PK榜 内容查重 vearch

GLTF编辑器如何合并相同材质的Mesh

3D建模设计

编辑器 GLTF 模型材质合批

鞍钢集团∣共和国钢铁工业长子的财务转型之路

用友BIP

财务数智化

PopClip for Mac(剪切板复制粘贴工具) v2023.9中文激活版

mac

苹果mac Windows软件 PopClip 文本操作工具

末流院校24届秋招逆袭之路!

王磊

Java java面试

功能强大的 PostgreSQL 没有 MySQL 流行的 10 个原因

NineData

MySQL postgresql 架构 品牌

当敏捷开发遇上固定交付……

敏捷开发

项目管理 敏捷开发 Scrum Master 固定交付

别再纠结线程池池大小、线程数量了,哪有什么固定公式 | 京东云技术团队

京东科技开发者

cpu 线程池 企业号9月PK榜

专家观点∣基于数据驱动的设备预测性维护

用友BIP

数据驱动 设备维护

什么是IoT数字孪生?

3D建模设计

IoT 数字孪生

GLTF编辑器如何快速重置模型原点

3D建模设计

编辑器 GLTF 模型原点

苹果电脑效率提升:Alfred 5 for Mac直装版 附Alfred5汉化包 支持M1

南屿

Alfred 5 Mac Alfred 5破解版 Mac效率办公软件

创新传媒行业的未来发展

百度开发者中心

#人工智能 生成式AI 千帆大模型平台

Affinity Photo 2 for Mac(专业修图软件) 2.2.0永久激活版

mac

修图软件 苹果mac Windows软件 Affinity Photo

探析ElasticSearch Kibana在测试工作中的实践应用 | 京东物流技术团队

京东科技开发者

测试 Kibana ES 企业号9月PK榜

覆盖8大领域,云投集团财务数智化管理平台全面上线!

用友BIP

财务数智化

平台运营,让数智底座更安全更稳定更高效

用友BIP

数智底座 2023全球商业创新大会

Studio One 6 Pro永久许可证 附Studio One for Mac安装教程

南屿

Studio One 许可证 音乐制作软件 Studio One 6下载 Studio One 6破解

Appilot发布:打造面向DevOps场景的开源AI助手

SEAL安全

AI DevOps 企业号9月PK榜 Appilot

后端开发需要安装哪些软件/插件?

小齐写代码

2023-09-20:用go语言,保证一定是n*n的正方形,实现从里到外转圈打印的功能 如果n是奇数,中心点唯一,比如 a b c d e f g h i e是中心点,依次打印 : e f i h g

福大大架构师每日一题

福大大架构师每日一题

赋能企业:释放加密货币代币开发的潜力

区块链软件开发推广运营

数字藏品开发 dapp开发 区块链开发 链游开发 NFT开发

逻辑漏洞挖掘之XSS漏洞原理分析及实战演练 | 京东物流技术团队

京东科技开发者

信息安全 漏洞分析 xss攻击 逻辑漏洞 企业号9月PK榜

HTTP代理IP在什么情况下会请求超时?

巨量HTTP

代理IP http代理

权威认证!用友再获全球企业级应用软件市场10强

用友BIP

企业级应用软件

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