当前位置: 主页 > 资讯中心 > 公司新闻 » 【科研喂饭】深度学习算法收敛性证明之Adam
这是我“科研喂饭”系列的第三篇文章,希望它能为正在从事算法研发以及对算法研发感兴趣的小伙伴带来帮助。我写这个专栏的目的是希望能尽力降低科研的门槛,让大家更好地享受科研的乐趣。
文章中会涉及到论文的细节,以数学推导过程为主。限于篇幅以及讲解的便利性,我将会对原文作出调整和删减。如果大家在阅读本文时感到困惑,可以进一步参阅文献,看一看原作者的讲解。
由于本文篇幅较长,大家可以根据实际情况挑选自己感兴趣的部分来读:
1.1 SGD和Adagrad
在上两篇文章里我们详细介绍了最朴素的SGD算法和Adagrad算法的收敛性证明(SGD:【科研喂饭】深度学习算法收敛性证明之SGD;Adagrad:【科研喂饭】深度学习算法收敛性证明之Adagrad),我们做一个简单的回顾:
? SGD的变量迭代表达式:
其中 是学习率, 是 时刻目标函数 在 处的梯度。
? Adagrad的变量迭代表达式:
其中 ,与SGD相同; 为两个向量在对应位置做乘积(哈达玛积); 从标量变成了向量:
向量的数值运算(加减乘除、乘方开方、指数对数)是指对向量的各个元素做数值运算。标量除以向量的运算是指让标量除以向量的各个元素,最终输出向量的运算。
它们的收敛性证明基于以下前提假设(来自参考文献[1, 第2.1节]):
或者对于变量的任意一维
或者对于变量的任意一维
判定收敛的指标为统计量 (Regret):
若当 , 的均摊值 ,我们认为这样的算法是收敛的,并且一般认为 随着 增长得越慢,算法收敛越快。这些的前提假设与判定收敛指标将在Adam算法的收敛性证明中继续沿用。
Adam算法的参考文献是[2]。本文中的证明步骤将参考[2],然而由于其Lemma 10.3和Lemma 10.4存在错误,因此本文将作出调整和删改。 Adam的变量迭代式比SGD和Adagrad更复杂些:( 、 初始化为 , 随机初始化)
其中 。在深度学习框架TensorFlow中,我们通过调用优化器API的形式来实现Adam算法:
Adam对比Agadrad有以下这些亮点:
? 引进了动量(momentum):
? 改进了Adagrad的分母:
2.1 算法细节:均值校正
我们可以根据 和 的迭代式算出它们的闭式解,我们以 为例:
其中(a)处因为 。同理,
我们观察 和 :
为了使 , ,我们需要作出以下校正:
Adam 改进了Adagrad的分母,具体表现为:
? Adagrad:所有的梯度分配相同的权重,新梯度的影响力越来越弱;分母的数值越来越大,数值计算不稳定,引发数值溢出;
? Adam:旧梯度分配的权重越来越小,例如 的权重 随 的增大呈指数衰减;分母的数值始终可控,如果对任意 , ,那么
2.2 收敛性证明
基本假设与判定指标与SGD、Adagrad完全一致,不做赘述,我们直接进入证明环节。由于基本假设与判定指标没变,我们可以复用SGD、Adagrad证明中的一些结论。
2.2.1 从统计量 开始
在Adagrad证明中(大厂推荐算法:【科研喂饭】深度学习算法收敛性证明之Adagrad),我们将 的上界具体拆分到每一维变量上,以双重求和的形式呈现
2.2.2 建立联系:从 迭代式到
仿照Adagrad证明,我们需要分离出 。首先从Adam的迭代表达式出发:对于变量的任意一维
根据文献[2],当 取值为常数时算法收敛性难以证明,于是我们令 ,即让 随迭代次数的增加而变化,且 单调不增,即 ,也就是说动量将逐渐消失,最终 将趋近于 。此时 变成了
从 到 依然是加性的更新。由于形式较为复杂,我们考虑换元,令
于是
接下来我们进行分离 的工作:
由于 ,
接下来我们将对(1)、(2)、(3)三项分别放缩。
2.2.3 对 的上界做放缩
在Adam算法中,对 上界的放缩即对上述(1)、(2)、(3)三项的放缩。
关于(1),我们有
随即错位重组求和
我们重点看第三项 ,这一项的放缩时常为人诟病,因为它是有条件的,当 对任意 恒成立时:
其中用到了变量有界假设。需要注意的是,Adam算法不能使 对任意 恒成立,于是有人提出Amsgrad[3],补上了这一漏洞。最后还剩下些扫尾的工作,因为 , ,于是(1)放缩到
接下来我们关注 以便进一步放缩,前面我们有提到 ,我们借此机会来探索 和 的有界性:运用梯度有界假设
那么最终(1)放缩到
我们保留 以便后续设计最优学习率。
关于(2),我们首先运用运用变量有界假设
接着我们关注 :
其中(a)处因为 。此时我们运用梯度有界假设, 对任意 都有
这样我们就能放缩(2)式了:
关于(3),我们重点研究 ,分别看分子和分母:
在充分考虑 和 的形式后,我们对 做如下变换
这样的变换方便我们应用柯西不等式:
这样我们就能处理(3)式了
最后一步放缩利用了 的有界性。
在整理出 的上界之前,我们做个小小的总结:对于(1),当 对任意 恒成立时,
对于(2),
对于(3),
最后我们整理出 的上界
2.2.4 设计最优超参数
本节我们关注超参数 、 、 的设计。首先是 和
根据 和 ,我们继续放缩:关于(1),保持不变
关于(2),
关于(3),
其中(a)处根据假设 。
至此, 上界的数量级仅与 、 、 有关。根据SGD中的结论,如果 , , ;当 时,取到最优上界 ,这意味着 的最优上界不会低于 。如果我们希望 衰减尽可能慢(动量项衰减尽可能慢),可使
这样 , 的数量级也就维持在最优状态 。
至此我们做个总结:
? 当目标函数 对任意 均为convex函数时,SGD、Adagrad、Adam的 上界最优数量级均为 ,算法均收敛。
? 从理论上来看,三者的收敛速率相同;在工程实际中,Adam的收敛速率一般最快。
? 在工程实践中, 为convex函数的情形十分少见,以推荐系统的场景为例,仅有逻辑回归符合要求。
? 在现有证明框架下,Adam算法的动量项必须衰减,并且至少以平方根的速率衰减;然而在工程实践中,动量项的超参数 一般设置为常数,不影响算法的实际收敛性。若要证明 时Adam算法依旧收敛,可考虑修改算法的前提假设、评价指标、证明框架等。
为克服Adam算法收敛性证明中的缺陷,Reddi et al.[3]提出Amsgrad,旨在对Adam做的改进:从 改进为
TensorFlow 2.0版本的Adam优化器可以很方便地实现Amsgrad:
参数amsgrad的默认值为False,amsgrad=False对应Adam算法。文献[3]中Amsgrad未做均值校正,为了最大限度复用Adam的证明,我们补充均值校正的操作。均值校正操作不影响算法收敛性。
Amsgrad收敛性证明以复用Adam证明为主,仍然成立的核心结论有:
我们依然是对(1)、(2)、(3)三项分别放缩,由于(2)不涉及 ,结论可以全部复用,我们只需关注(1)和(3)。关于(1),我们可以复用 展开前的所有结论:当 对任意 恒成立时,
我们接下来验证 对任意 恒成立。 , 在单调不增的情况下: ,即 ,因此 对任意 恒成立。我们还需要重新审视 和 的有界性:
若 ,
于是 和 的有界性与Adam中一致,因此第一项的结论可以直接复用。
关于(3),我们通过观察发现
即 依然成立,因此第三项的结论也可以直接复用,Amsgrad收敛性证毕。
最后我们简单评价一下Amsgrad:Amsgrad改进了 ,给Adam算法从收敛性证明的角度打了补丁;但在工程实践中,Amsgrad的性能未必会比Adam更胜一筹,时至今日,Adam依然是使用最广泛的优化器。
[1]M. Zinkevich, “Online convex programming and generalized infinitesimal gradient ascent,” in Proceedings of the 20th international conference on machine learning (ICML-03), 2003, pp. 928– 936.
[2]D. P. Kingma and J. Ba, "Adam: A method for stochastic optimization," arXiv preprint arXiv:1412.6980, 2014.
[3]S. J. Reddi, S. Kale, and S. Kumar, "On the convergence of adam and beyond," arXiv preprint arXiv:1904.09237, 2019.