且慢,请暂时忍住要骂我标题党的冲动,其实完整的标题是梯度下降 - 终极优化器! 再且慢,请暂时忍住对我是不是从1847年穿越过来的怀疑。最后开古:这是 Stanford和Facebook最近的一篇Paper: "Gradient Descent: The Ultimate Optimizer". 介绍了一种可以把“炼丹道士”,“调参侠”们从繁琐的调超参苦力中解放出来的方法,调参不再是大海捞针而是鱼缸钓鱼。idea非常有意思。既然神经网络算法可以自动调参数(权重),那为啥/毛不可以超参也一起调呢,甚至超-超参,超-超超参...... 答案是: Yes! You can.
Gradient Descent: The Ultimate Optimizer
https://arxiv.org/pdf/1909.13371.pdf
摘要:
任何基于梯度的机器学习算法都包含一个繁琐的任务,即调优化器的超参数,例如学习率。目前存在很多自动超参数优化技术,但是它们通常引入甚至更多的超参数来控制超参数优化过程。我们建议改为通过梯度下降来学习超参数本身,甚至更进一步通过梯度下降来学习超-超参数,可以无限循环下去。随着这些基于梯度的优化器层数的增长,它们对顶层超参数的选择变得越来越不敏感,从而减轻了用户搜索最佳值的负担。
1 简介
通常,我们会考虑使用梯度下降来优化权重和神经网络的其它参数。可微分编程语言保证了任意函数可微分,从而我们能够使用梯度下降来优化任何程序参数,否则这些参数只能被硬编码。因此,没有理由我们不能使用梯度下降来优化除神经网络权重以外的数量,例如梯度下降步长/学习率之类的超参数。不止于此,我们也可以学习用于优化那些超参数的超超参数,以及梯度下降优化器中出现的其他常数。
在本文中,我们证明了可微分程序使调整任意递归层高的优化器变得可行,其中每个优化器都会调整其后代的超参数。
2 微分优化器
嗯,优化优化器是什么意思呢?如图1描绘了使用随机梯度下降(SGD)优化某些损失函数f的“超优化表面”。每条细线代表给定步长超参数
当
相反,想象一下,无论我们从哪里开始,都可以利用一个SGD的变种沿该表面爬下,如橙色粗线所示。不像细线的原版SGD,初始橙线不局限于一个平面 - 尽管在非常差的
请注意,我们的方法不仅限于调整步长。例如,Adam优化器已经可以根据过去的进展智能地调整了每个参数的步长。然而,Adam仍然有自己的固定超参数:学习率
一些现有的研究试图在整个训练历史中学习单个最佳超参数,方法是对如图1中黑色虚线"U"进行梯度下降。这是低效的,因为它需要内存来存储整个展开的运行。我们的工作使用上述方法的一个随机变种:在学习过程中并行执行对超参数的增量更新。由于每个增量更新仅取决于其近期历史记录,我们可以“忘记”除部分固定量的运行信息以外的所有信息,而非随机方法则必须全部“记住”并全量微分。
3 实现
待续......