关于《Symbolic Discovery of Optimization Algorithms》的解读

《Symbolic Discovery of Optimization Algorithms》论文解读

Abstract

文章提出一种为程序搜索(program search)的算法,将其应用在发现深度神经网络训练的优化算法。我们利用高效的搜索技术来探索无限且稀疏的程序空间。为了弥合代理任务和目标任务之间巨大的泛化差距,我们还引入了程序选择和简化策略。我们的方法发现了一种简单有效的优化算法 Lion(EvoLved Sign Momentum)。它比 Adam 更节省内存,因为它只跟踪动量。与自适应优化器不同,它的更新对于通过符号运算计算的每个参数具有相同的幅度。我们对 Lion 的分析表明,其性能增益随着训练批次大小的增加而增长。由于符号函数产生的更新范数较大,因此它还需要比 Adam 更小的学习率。此外,我们研究了 Lion 的局限性,并确定了其改进较小或统计上不显着的场景。

搜索空间:
在计算机科学中,如果处理优化问题时有许多候选解需要搜索,我们就称解的集合是“搜索空间”。搜索空间内每个特定的点就是给定问题的一个候选解。在这个搜索空间中有距离的概念,相比位置远离的解,位置彼此靠近的解更可能表现出相似的特征。为了理解这些距离在搜索空间中如何组织,请考虑下面使用二进制遗传表示的例子:

“101”与“111”只差1。这是因为只要有1个变化(0翻转到1),就能从“101”变成“111”。这意味着这些解在搜索空间中的空间距离仅为1。

另一方面,“000”与“111”是有3处不同。这就是说距离为3,在搜索空间“000”与“111”相距为3。

因为变化较少的一些解彼此较近,所以搜索空间中解的距离可以用来提供一种相似性,说明另一个解的特征相似。许多搜索算法经常将这种理解作为一种策略,以改善搜索结果。
参考:https://developer.aliyun.com/article/91606
泛化概念
机器学习(深度学习)的根本问题是优化和泛化之间的对立。
优化(optimization)是指调节模型以在训练数据上得到最佳性能(即机器学习中的学习),而泛化(generalization)是指训练好的模型在前所未见的数据上的性能好坏。
机器学习的目的当然是得到良好的泛化,但你无法控制泛化,只能基于训练数据调节模型。
对泛化能力可以从以下六个方面来理解:
1、泛化能力最直接的定义是训练数据和真实数据间的差异,训练模型的目地是要模型在完全陌生的数据上进行测试的;
2、泛化能力还可以看成模型的稀疏性。正如奥卡姆的剪刀指出的,面对不同的解释时,最简单的解释是最好的解释。在机器学习中,具有泛化能力的模型中应该有很多参数是接近0的。而在深度学习中,则是待优化的矩阵应该对稀疏性有偏好性。
3、泛化能力的第三种解释是生成模型中的高保真能力。具有泛化能力的模型应在其每个抽象层次具有重构特征的能力。
4、第四种解释是模型能够有效的忽视琐碎的特征,或者说在无关的变化下都能找到相同的特征。
5、泛化能力还可以看成模型的信息压缩能力。
  这里涉及到解释为什么深度学习有效的一种假说,信息瓶颈(information bottleneck),说的是一个模型对特征进行压缩(降维)的能力越强,其就越更大的可能性做出准确的分类。信息压缩能力可以概括上述的四种关于泛化能力的解释,稀疏的模型因其结构而完成了信息的压缩,生成能力强,泛化误差低的模型因信息压缩而可能,而忽略无关特征是信息压缩的副产品。
6、理解泛化能力的最后一种角度是风险最小化。
  这是从博弈论的角度来看,泛化能力强的模型能尽可能降低自己在真实环境中遇到意外的风险,因此会在内部产生对未知特征的预警机制,并提前做好应对预案。这是一种很抽象的也不那么精确的解释,但随着技术的进步,人们会找出在该解释下进行模型泛化能力的量化评价方法。
  参考:https://blog.csdn.net/sc2079/article/details/103090727
优化器,也叫优化算法,是神经网络中的一种算法,用于调整神经网络中的权重和偏置,从而最小化损失函数,提高模型的准确性。在训练神经网络时,优化器的主要用于:
1.更新模型参数:优化器通过计算损失函数的梯度,来确定如何更新神经网络中的参数。一般来说,优化器的目标是使损失函数最小化,从而提高模型的准确性。
2.改善学习速度:优化器可以根据损失函数的梯度来调整学习速率,以便更好地训练神经网络。如果学习速率过大,可能会导致模型在训练过程中难以收敛;如果学习速率过小,可能会导致模型训练缓慢。
3.避免过拟合:优化器可以通过正则化方法(如L1、L2正则化)来避免过拟合,从而提高模型的泛化能力。过拟合是指模型在训练数据上表现良好,但在测试数据上表现较差的现象。
常见的优化器算法包括梯度下降、随机梯度下降、Adam优化器等。这些优化器算法在调整模型参数方面各具优缺点,需要根据实际情况进行选择和调整。

优化器根据当前的权重和偏置,计算损失函数对它们的梯度。这个梯度可以告诉优化器当前的方向是往哪个方向调整参数,以便最小化损失函数。然后,优化器根据计算出的梯度,更新神经网络中的权重和偏置。更新方式可以是梯度下降法、随机梯度下降法、Adam优化器等不同的方法。
优化器再根据当前的学习进度,自动调整学习率,以便更好地训练神经网络。如果学习速率过大,可能会导致模型在训练过程中难以收敛;如果学习速率过小,可能会导致模型训练缓慢。

最后,优化器通过正则化方法来避免过拟合,从而提高模型的泛化能力。
需要注意的是,不同的优化器算法在调整模型参数方面各具优缺点,需要根据实际情况进行选择和调整。
参考:https://fuxi.163.com/database/658

Introduction

本文中我们提出一种程序搜索的方法,旨在应用于发现优化算法。主要有以下两个挑战:
1、找到高质量的 无限和稀疏程序空间中的算法。
2、进一步选择算法 这可以从小型代理任务推广到更大的、最先进的任务。
为了应对这些挑战,我们 采用一系列技术,包括具有热启动和重启的进化搜索、抽象执行、 漏斗选择和程序简化。
我们的方法发现了一种简单有效的优化算法:Lion(EvoLved Sign Momentum的缩写)。 该算法与各种自适应算法的不同之处在于仅跟踪动量并利用符号计算更新的操作,从而降低内存开销并统一更新幅度所有维度。尽管简单,但 Lion 在一系列型号中表现出出色的性能 (Transformer、MLP、ResNet、U-Net 和 Hybrid)和任务(图像分类、视觉语言对比 学习、传播、语言建模和微调)。
在这里插入图片描述
program 1:发现优化器Lion的程序。
输入(weight(权重),gradient(梯度),momentum(动量),lr(学习率))
输出(update(更新权重),momentum(更新动量))
默认 β 1 = 0.9 \beta_1=0.9 β1=0.9, β 2 = 0.99 \beta_2=0.99 β2=0.99由program 8中导出,其中

weight_decay = weight * λ
update = update + weight_decay

用于计算权重衰减,λ是衰减强度

interp函数:
interp() 函数用于计算给定 x 坐标值对应的 y 坐标值,通过对已知点进行线性插值。
interp() 函数内部使用 C 语言实现的二分搜索算法,快速查找指定 x 值所在的区间。
然后根据该区间内的两个端点值,使用线性插值公式计算出对应的 y 值。
这个过程可以理解为在已知离散点的基础上,通过线性插值来估计未知点的值。
sign函数:
sign()是的取数字符号(数字前的正负号)的函数。

在这里插入图片描述

插值

插值,它根据已知的数据序列(也可以理解为坐标中一连串离散的点),找到其中的规律;然后根据找到的这个规律,来对其中尚未有数据记录的点进行数值估计。

 基于这样一种功能,我目前知道的应用是:
 1)它可以对数据中的缺失进行合理的补偿;
 2)它可以对数据进行放大或者缩小。
 参考:https://blog.csdn.net/corleone_4ever/article/details/108266555

在这里插入图片描述

program 2:
训练循环案例,这里的优化算法优化了搜索训练函数的代码。主要输入是权重 w w w,梯度 g g g,和学习率 l r lr lr。主要输出是梯度更新, v 1 v1 v1 v 2 v2 v2是2个用于收集历史信息(动量和权重)

program 3:
adamW的偏差矫正和 ϵ \epsilon ϵ的简化。

program 4:搜索发现后程序(指食用搜索到优化器Lion后程序),

clip函数:将将数组中的元素限制在a_min, a_max之间,大于a_max的就使得它等于 a_max,小于a_min,的就使得它等于a_min
cosh函数:返回 x 的双曲余弦值,相当于 (exp(number) + exp(-number)) / 2。双曲函数是一类与常见的三角函数(也叫圆函数)类似的函数。最基本的双曲函数是双曲正弦函数 sinh 和双曲余弦函数 cosh,从它们可以导出双曲正切函数 tanh 等,其推导也类似于三角函数的推导。双曲函数的反函数称为反双曲函数。

我们分析了 Lion 的特性和局限性。用户应该知道,统一更新计算 与 SGD 和自适应生成的范数相比,使用符号函数通常会产生更大的范数方法。因此,Lion 需要较小的学习率 l r lr lr,以及较大的解耦权重衰减 λ 到保持有效的重量衰减强度。

此外实验表明,Lion 的增益随着批量大小的增加而增加,并且对不同的与 AdamW 相比的超参数选择。Lion 的优势是如果在训练期间使用强增强或小批量(<64),则较小。

Symbolic Discovery of Algorithms

本文提出程序搜索的方法,以符号形式表示程序有以下优点:

1)符合算法必须作为执行程序实现的事实;2)与神经网络等参数化模型相比,程序等符号表示更容易分析、理解和转移到新的任务中;3)程序长度可以用来估计不同程序的复杂程度,从而更容易选择更简单、通常更具通用性的程序。

这项工作主要关注深度神经网络训练的优化器,但该方法一般适用于其他任务。

Program Search Space

在设计程序搜索空间时,我们遵循以下三个标准:

(1)搜索空间应该足够灵活,以便发现新的算法;
(2)程序应易于分析并纳入机器学习工作流程;
(3)程序应注重高层次的算法设计,而不是底层的实现细节。

Input / output signature

程序定义了一个训练函数,该函数对所要搜索的优化算法进行编码,其中主要输入为当前训练步骤的模型权值( w w w)、梯度( g g g)和学习率调度值( l r lr lr)。主要输出是对权重的更新。该程序还合并了初始化为零的额外变量,以便在训练期间收集历史信息。例如,AdamW需要两个额外的变量来估计第一和第二时刻。注意,这些变量可以任意使用,我们在program 3中使用 m m m v v v只是为了更好的可读性。program 2中的简化代码片段使用与AdamW相同的标识,以确保发现的算法具有更小或相等的内存占用。

Efficient Search Techniques

Evolution with warm-start and restart

我们应用正则化进化,因为它简单、可扩展,并且在许多AutoML搜索任务上取得了成功。它保留了P种算法的集合,这些算法通过循环逐渐改进。每个循环随机选择T<P算法,并选择表现最好的算法作为父算法,即竞争选择。然后复制这个父算法并对其进行变异以产生子算法,子算法被添加到集合中,而最老的算法被删除。通常情况下,进化搜索从随机的候选者开始,但我们将初始集合作为AdamW热启动以加速搜索。默认情况下,我们使用2个竞争规选择和1K的规模。为了进一步提高搜索效率,我们采用了2种类型的重新开始:

(1)从初始程序重新开始,由于进化的随机性,可以导致不同的局部最优,并鼓励探索。这可以通过并行运行多个搜索来实现。
(2)从目前发现的最佳算法重新开始进一步优化,鼓励利用。

在这里插入图片描述
Figure2(左)显示了我们在AdamW和随机搜索上运行超参数调优,两者都需要4倍的计算,以获得作为两条基线(绿线和红线)的最佳结果。进化搜索通过五次运行计算出平均误差和标准误差,明显优于这两种方法。由于搜索适应度的高方差(蓝色曲线),从初始程序多次重新开始的使用是至关重要的,并且在300K之后从最佳程序重新开始,当原始搜索停滞时进一步提高了适应度(橙色曲线)。(右):搜索适合度、缓存命中率和冗余语句百分比的示例曲线。随着搜索的进行,缓存命中率和冗余语句百分比分别增加到~ 90%和~ 70%。

Pruning through abstract execution

我们建议从三个方面来减少程序空间中的冗余:具有语法或类型/形状错误的程序,功能等效的程序和程序中的冗余语句。在程序实际执行之前,我们执行一个抽象的执行步骤:

(1)推断变量类型和形状以检测有错误的程序,并不断改变父程序,直到生成有效的子程序;
(2)产生一个唯一标识如何从输入计算输出的哈希,允许我们缓存和查找语义重复的程序;
(3)识别在实际执行和分析过程中可以忽略的冗余语句。

Generalization: Program Selection and Simplification

搜索实验可以在代理任务上发现先进的程序。我们通过增加模型大小和训练步骤来使用比代理任务更大的元验证(meta-validation)任务的性能,以选择超越代理任务的程序,然后进一步简化它们。当搜索适应度不断增加,但元验证(meta-validation)度量下降时,会出现元过拟合(meta-overfitting)现象,表明发现的算法对代理任务存在元过拟合(meta-overfittin)。

元学习概念
元学习希望使得模型获取一种学会学习调参的能力,使其可以在获取已有知识的基础上快速学习新的任务。机器学习是先人为调参,之后直接训练特定任务下深度模型。元学习则是先通过其它的任务训练出一个较好的超参数,然后再对特定任务进行训练。
传统的机器学习模型通常针对特定任务进行训练,而在新任务上表现可能并不理想,除非重新进行大量的训练。相比之下,元学习旨在通过少量的数据或尝试来高效学习新任务,从而显著提高模型的灵活性和适用性。
元学习解决的核心问题是如何构建模型,使其能够:
1、快速适应:在面对新任务时,能够快速调整自身的参数或策略,以适应新的数据分布。
2、泛化能力强:在学习新任务的同时,保持对旧任务的记忆,避免过度专注于新任务而忘记旧知识(避免灾难性遗忘)。
3、利用过去的知识:能够将在旧任务上学到的知识迁移到新任务上,提高学习效率。
过拟合
过拟合是指训练误差和测试误差之间的差距太大。换句换说,就是模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差。模型对训练集"死记硬背"(记住了不适用于测试集的训练集性质或特点),没有理解数据背后的规律,泛化能力差。

在这里插入图片描述
左:与代理相比,两次搜索运行的元验证曲线是在一个大到500倍的元验证任务上测量的。蓝色的meta- 1过拟合在搜索进度的~ 15%,而橙色的meta- 1过拟合在~ 90%,并获得更好的度量。右图:基于50次运行发生元过拟合时的搜索进度直方图。一半的运行早期元过拟合,但长尾运行的元过拟合要晚得多。蓝叉表示在每个bin中平均的最佳元验证度量,表明稍后发生的元过拟合导致程序更好地泛化。

Large generalization gap

由于搜索过程中的代理任务与目标任务之间存在很大的差距,所发现的算法面临着很大的挑战。我们期望优化器在不同的体系结构、数据集甚至不同的领域上都能表现良好,因此发现的算法需要表现出较强的分布外泛化。进化过程中的稀疏搜索空间和固有噪声进一步加剧了这一挑战,导致不同运行之间的泛化特性不一致。我们的观察表明,元过拟合后的进化搜索实验倾向于发现更好的泛化优化算法。

Simplification

简单的程序更容易理解,我们的直觉是它们更有可能泛化,所以我们用以下步骤简化程序。首先,我们删除通过抽象执行确定的对最终输出没有贡献的冗余语句。其次,我们删除非冗余的语句,但删除时产生的差异很小。这一步也可以通过在突变过程中禁用新语句的插入来实现。最后,我们手动重新排列语句,为变量分配清晰和描述性的名称,并将程序转换为更简单的数学等效形式。

Derivation and Analysis of Lion

我们之所以选择Lion优化器,是因为它的简单性、内存效率、搜索和元验证方面的强大性能。

Derivation

在简化过程中,从program 4中删除了一些不必要的元素。cosh函数被删除,因为 m m m将在下一次迭代中被重新分配(第3行)。使用arcsin和clip的语句也被删除,因为我们观察到没有它们没有质量下降。三个红色语句转换成一个单符号函数。虽然在program 4中使用了m和v,但v只改变了动量更新的方式(两个常数为~ 0.9和~ 1.1的interp函数相当于一个常数为~ 0.99的interp函数),不需要单独跟踪。

cosh函数
双曲函数是一类与常见的三角函数(也叫圆函数)类似的函数。最基本的双曲函数是双曲正弦函数 sinh 和双曲余弦函数 cosh,从它们可以导出双曲正切函数 tanh 等,其推导也类似于三角函数的推导。双曲函数的反函数称为反双曲函数。

Analysis

Sign update and regularization

Lion算法通过进行符号操作,在所有维度上产生均匀大小的更新,这在原则上不同于各种自适应优化器。直观地说,符号操作为更新添加了噪声,这是一种正则化形式,有助于泛化。

Momentum tracking

在Lion中用于跟踪动量的默认均线因子是0.99 ( β 2 \beta_2 β2),而在AdamW和动量SGD中通常使用0.9。在应用符号操作之前,梯度和动量以0.9 ( β 1 \beta_1 β1)的因子插值。EMA因子和插值的选择使Lion能够在记住动量梯度的10倍历史和在更新中更重视当前梯度之间取得平衡。

EMA因子

EMA(Exponential Moving Average)是指数移动平均值。也叫 EXPMA 指标,它也是一种趋向类指标,指数移动平均值是以指数式递减加权的移动平均。
E M A N ( x n ) = 2 x n + ( N − 1 ) E M A N ( x n − 1 ) N + 1 EMA_N(x_n)=\frac{2x_n+(N-1)EMA_N(x_{n-1})}{N+1} EMAN(xn)=N+12xn+(N1)EMAN(xn1)
其中 x n x_n xn为当前值。

Hyperparameter and batch size choices

与adamw和Adafactor相比,Lion更简单,并且具有更少的超参数,因为它不需要和分解相关的参数。如果我们省略权重衰减项,更新是一个元素明智的二进制±1,具有比其他优化器(如SGD和自适应算法)产生的更大的范数。因此,Lion需要更小的学习率和更大的解耦权衰减才能达到相似的有效权衰减强度( l r ∗ λ lr * λ lrλ)。此外,Lion相对于AdamW的优势随着批处理规模的增加而扩大,这符合通过数据并行性扩展模型训练的常见做法。

Memory and runtime benefits

Lion只保留了动量,因此比流行的自适应优化器(如AdamW)具有更小的内存占用,这在训练大型模型和/或使用大型批处理时是有益的。在我们的实验中,由于Lion的简单性,它有更快的运行时(步数/秒),根据任务、代码库和硬件的不同,与AdamW和Adafactor相比,通常有2-15%的加速。

Evaluation of Lion

我们在各种基准上对Lion进行了评估。我们主要将其与AdamW(当内存成为瓶颈时称为Adafactor)进行比较,因为它非常流行,并且是大多数学习任务的事实上的标准优化器。SGD的动量结果只包括ResNet,因为它比其他地方的AdamW表现得更差。在第4.5节中,我们还对其他流行的优化器进行了基准测试,包括手动调整的和自动发现的。我们确保每个优化器都针对每个任务进行了良好的调优。默认情况下,学习率调度是余弦衰减与10K步热身,动量被保存为bfloat16以减少内存占用。

如有错误,肯请指正,后续会继续补充

  • 13
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值