Adam:自适应矩估计.

本文提出了Adam,即自适应矩估计(adaptive moment estimation),是一种基于低阶矩估计的一阶随机优化方法。

1. Adam的算法流程

AdammomentumRMSProp这两种优化算法的结合。momentum使用了梯度的一阶矩估计,适用于在线学习和非平稳环境;RMSProp使用了梯度的二阶矩估计,适用于稀疏梯度的情况。

记更新参数为θθ,目标函数为f(θ),在第t轮更新中计算梯度值gt=θft(θ)Adam在更新过程中计算梯度和平方梯度的指数滑动平均值:

mt=β1mt1+(1β1)gt vt=β2vt1+(1β2)g2t

其中mt是一阶矩(均值)的估计,vt是二阶矩(未中心化的方差)的估计。由于这些滑动平均值初始化为0,因此矩估计是有偏的,在训练的初始阶段尤其是衰减率β1,β2接近1时矩估计接近0,会使更新步长很小。因此进行偏差修正:

ˆmt=mt1βt1 ˆvt=vt1βt2

参数的更新步骤为:

θt=θt1αˆmtˆvt+ϵ

该算法的计算效率可以通过改变计算顺序来提高:

αt=α1βt21βt1 θt=θt1αtmtvt+ˆϵ

Adam的算法流程如下:

2. Adam的性质

① 初始化偏差修正 Initialization Bias Correction

Adam对梯度和平方梯度的指数滑动平均值mtvt进行了偏差修正。下面以二阶矩估计vt的修正为例。

假设训练过程中的梯度序列为g1,,gT,对平方梯度的指数滑动平均值初始化为v0=0,根据vt的更新规则:

vt=β2vt1+(1β2)g2t=β2(β2vt2+(1β2)g2t1)+(1β2)g2t=βt2v0+βt12(1β2)g21+...+β2(1β2)g2t1+(1β2)g2t=(1β2)ti=1βti2g2i

我们用指数滑动平均的期望值E[vt]估计真实的二阶矩E[g2t],两者的差异如下:

E[vt]=E[(1β2)ti=1βti2g2i]=E[g2t](1β2)ti=1βti2+ζ=E[g2t](1βt2)+ζ

当真实的二阶矩E[g2t]是固定值时ζ=0,否则可以通过选择合适的β1使其保持较小的值。因此E[vt]E[g2t]之间存在(1βt2)倍数的差异,进行修正:

ˆvt=vt1βt2

② 收敛性分析 Convergence Analysis

给定一个未知的凸代价函数序列f1(θ),f2(θ),,fT(θ),在t时刻的目标是预测参数θt,并在代价函数ft上评估。由于代价函数序列是未知的,因此使用regret进行评估,即每一轮的在线预测结果ft(θt)与理论最佳参数结果ft(θ)的差值之和:

R(T)=Tt=1[ft(θt)ft(θ)]

对于Adam算法,有如下结论:

R(T)T=O(1T)

因此Adam算法具有遗憾上界O(T)。当T时,R(T)0

3. 实验结果

作者展示了在逻辑回归模型、多层感知机和卷积神经网络这三个模型上使用不同优化器的损失曲线。实验证明Adam具有和带动量的SGD相似的收敛速度,能实现更高的精度。

作者比较了不进行偏差修正(绿色曲线)和进行偏差修正(红色曲线)后损失函数的变化情况。实验证明使用偏差修正能够使训练更稳定。

4. 扩展:Adamax

Adam算法使用梯度的L2范数缩放梯度。作者将其推广到Lp范数,特别地,当p时得到一个简单而稳定的算法,称之为Adamax

Lp范数梯度的指数滑动平均值计算为:

vt=βp2vt1+(1βp2)|gt|p=(1βp2)ti=1βp(ti)2|gi|p

注意衰减率使用的是βp2。当p时:

ut=limp(vt)1/p=limp((1βp2)ti=1βp(ti)2|gi|p)1/p=limp(1βp2)1/p(ti=1βp(ti)2|gi|p)1/p=limp(ti=1(β(ti)2|gi|)p)1/p=max(β(t1)2|g1|,β(t2)2|g2|,...,β2|gt1|,|gt|)

上式也可以写成递归的形式:

ut=max(β2ut1,|gt|)