写点什么

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

评论

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

.NET Dump 中的 Linux信号机制

秃头小帅oi

AI对低代码技术的影响

不在线第一只蜗牛

AI 低代码

StarRocks x Iceberg:云原生湖仓分析技术揭秘与最佳实践

StarRocks

数据仓库 数据湖 StarRocks 物化视图 lceberg

1688商品详情API接口指南

tbapi

1688商品详情接口 1688数据采集 1688商品详情API

IP地址交换如何让车联网效率翻倍?

郑州埃文科技

Java面试八股文(精简、纯手打)

Geek_Yin

Java 程序员 java面试 Java面试题 Java面试八股文

AKOOL 实时摄像头:实时 AI 语音翻译和换脸;SpAItial 融资 1300 万美元,打造 3D 生成和理解平台丨日报

RTE开发者社区

《算法导论(第4版)》阅读笔记:p164-p172

codists

算法

大模型落地企业研发的正确姿势——暨《DevData25研发效能基准报告》核心数据发布

思码逸研发效能

人工智能 研发效能 API 测试 研发效能管理

基于YOLOv8的路面缺陷(路面裂缝、井盖、坑洼路面)识别项目【完整源码数据集+PyQt5界面+完整训练流程+开箱即用!】

申公豹

yolov8

VL 中间语言:进化之路,如何在效率与深度间架起桥梁?

代码制造者

全网最全的Java面试八股文合集!【附答案】

Geek_Yin

Java 程序员 java面试 Java面试题 Java面试八股文

AJax(XHR+Get和Post+AJax的封装)

刘大猫

ajax 人工智能 算法 post GET

精彩回顾丨Altair携手汽车工程学会举办主题网络研讨会,共探AI与无网格技术助力汽车行业智能未来

Altair RapidMiner

机器学习 AI SimSolid 汽车工程 无网格仿真

重磅!SpringBoot4发布,11项重大变更全解析!

电子尖叫食人鱼

springboot

秒杀系统—架构设计和方案简介

量贩潮汐·WholesaleTide

架构

【拥抱鸿蒙】Flutter+Cursor轻松打造HarmonyOS应用(一)

郑知鱼

flutter 移动端开发 AI编程 harmoyos cursor

Github霸榜的SpringBoot全套学习教程,从入门到实战,内容超详细!

程序员高级码农

程序员 springboot

HarmonyOS NEXT开发教程:全局悬浮窗

幽蓝计划

数据仓库分层 4 层模型是什么?

镜舟科技

数据仓库 数据处理 StarRocks 物化视图 分层 4 层模型

【拥抱鸿蒙】HarmonyOS之构建一个自定义弹框

郑知鱼

华为 鸿蒙 HarmonyOS 移动端 HarmonyOS NEXT

更快速度、更省空间、灵活恢复!YMatrix 增量备份功能重磅发布!

YMatrix 超融合数据库

数据资产 超融合数据库 YMatrix 增量备份

湖仓一体,不只是技术升级,更是企业决策力再造

Databend

Spring AI 使用教程

知识浅谈

AI SPringAI

爬虫到智能数据分析:Bright Data × Kimi 智能洞察亚马逊电商产品销售潜力

不觉心动

NFT 市场或在 BTC 达到周期顶峰之后卷土重来

PowerVerse

代币 区块链+ BTC NFT DePIN

闲鱼打定金,满意后收货打尾款,你能接受吗

程序员郭顺发

前端使用正则表达式提取经纬度 度分秒值

刘大猫

正则表达式 人工智能 度分秒 度数 经纬度

【拥抱鸿蒙】Flutter+Cursor轻松打造HarmonyOS应用(二)

郑知鱼

flutter 鸿蒙 HarmonyOS 移动端开发 cursor

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