论文解读1——Adam: A Method For Stochastic Optimization

第一次阅读英文文献,可能解读的不太到位。前些天看了一位作者写的“学生为什么要写博客”感触很深,于是想重新开始记录学习的点滴,如有理解不当的地方,欢迎各位大佬批评指正。

1、优化算法到底是个啥

可以说是通过不断地训练来最小化或最大化目标函数,在前向传播的时候去得到损失函数,然后在反向传播的时候找到合适的参数来使我们的损失函数达到最小。

一般来说优化算法可分为两类:

一阶优化算法:
采用一阶导数进行优化,比如最经典的梯度下降

二阶优化算法:
采用二阶导数进行优化,但由于二阶导计算量较大,用的比较少

2、几种经典的优化算法

2.1 梯度下降(GD)

曾经对梯度下降一个直观的理解是关于一个人下山的例子,然而山上雾太大,他只好朝当前位置最陡峭的地方往底下走,但很多时候这座山不一定都是凸的,就容易陷入局部最优。

在梯度下降这个家族中有以下三种方法,分别是BGD、SGD和SBGD

2.1.1 批量梯度下降(BGD)

每次训练采取的是数据集中的全部数据
优点: 对全局参数求偏导,得到的是全局最优解
缺点: 当数据量很大的时候,训练耗时长

2.1.2 随机梯度下降(SGD)

于是出现了一个较为极端的方法进行改进

每次训练采取的是数据集中的一个样本
优点: 计算量少,有效解决速度和内存问题
缺点: 容易受噪声影响;仅考虑单个样本的梯度,易陷入局部最优;易振荡不稳定,学习率难选择

2.1.3 小批量梯度下降(SBGD)

BGD和SGD方法的一种折中,结合了前两者的优点

每次训练采取的数据量在1和全部数据之间
关于如何选batch_size有这么个原则:
1、当数据量<2000,则可用BGD
2、当数据量>2000,则SBGD的batch_size可选用2的次方(考虑电脑内存运行更快)

2.2 动量(momentum)

后来为了抑制SGD左右的振荡,加速收敛,出现了动量的概念进行改进。
动量的作用可以理解为从山顶滚一小球,在向山底的过程中由于受到重力的作用小球会越滚越快,从而能减少左右的振荡,加速收敛。

动量的原理其实是对梯度进行指数加权移动平均,不仅考虑了当前位置的梯度,还综合考虑前面时刻的梯度。其中通式中的β是指数衰减率,一般取0.9,将通式展开即每一项实际值前面的系数会随着时间的远近呈指数衰减。

2.3 Nesterov动量(NAG)

还是前面那个小球,在快要滚到山底的时候由于仍有较快的速度,不会停在最低点,反而会滚向另一个山坡,为了解决这一问题,Nesterov就提出了NAG算法,即快要到山底的时候先做一个预演,利用之前的梯度方向获得未来的更新参数,从而在加速的同时增加稳定性。

2.4 AdaGrad

上述的梯度下降法在更新参数的时候使用的是固定的学习率,然而对于模型中不同性质的参数来说显得不太合适,于是就出现了自适应学习率的方法进行改进,可以根据情况不同而自动调节。

AdaGrad 在处理稀疏问题上表现很好,原因是它更新参数的时候分母用的是梯度平方的累加和,当梯度较稀疏时分母的累加和较小,倒数可以进行调解,但缺点是越到后期分母的梯度累加和越来越大,容易出现梯度消失的问题。
在这里插入图片描述

2.5 RMSprop

关于 AdaGrad 在后期易出现梯度消失的问题上 RMSprop 有所改进,因为它更新参数时分母只跟当前时间的动量有关,有效避免了这一问题。然而 RMSprop 并没有进行偏差修正,尤其在稀疏梯度的时候,易导致训练不稳定。
在这里插入图片描述

当然还有其他一些优化方法,在这里就先不介绍了,以下进入文章正题

3、文章贡献

这篇文章主要在以往几种经典算法的基础上提出了一种基于低阶矩自适应估计的随机目标函数优化算法Adam,它结合了两种经典的算法:AdaGrad中处理稀疏梯度的优势以及RMSprop中处理非平稳目标的优势,广泛适用于机器学习中的非凸优化问题。

4、Adam优点

摘要中有提到Adam有以下优点:易于实现、计算效率高、内存需求少、参数更新大小不随梯度的对角缩放而变化、适合解决数据或参数较大的问题、适合非平稳目标和包含噪声或稀疏梯度的问题、超参数有直观解释通常无需调整等等。

5、Adam算法

Adam综合考虑了一阶矩估计和二阶矩估计,且进行了偏差修正。其中作者给出最后三行的替换式,可通过改变计算顺序来提高效率(二者在算式上是等同的)。

算法中对一阶和二阶矩估计都进行了一个偏差修正,文章后节会进行原因推导,主要是因为m0和v0都是初始化为0的,在最初几个时间步算出来的矩估计比实际梯度值会偏小,所以要进行修正。而到了后期t越来越大的时候,因β都是小于1的,1减去β的t次就会趋向于1,所以偏差修正对于后期是没有太大作用的。

最后在更新参数时分母多了一项epsilon是为了防止分母为0,epsilon通常取10的-8次

6、Adam更新规则

一个重要的属性是谨慎选择步长

7、初始化偏差修正

上述算法中简要说明了初始化偏差修正的原因,主要是初始化为0,下面对一阶矩估计和二阶矩估计进行一个实际的推导。

8、收敛性分析

论文中使用了一种在线学习框架来分析Adam的收敛性能,给定任意未知序列凸成本函数 f1(θ),f2(θ),……fT(θ),目标是预测参数 θt 和评估未知的成本函数 ft,由于事先对未知序列的属性是未知的,采用 regret 算法进行评估,表达式如下:

论文中给出了以下定理和推论,并且附录中有好几页关于该收敛性的证明

9、实验分析

论文中采取了不同的机器学习模型,包括逻辑回归、多层全连接神经网络和深层卷积神经网络,使用大规模数据集和相同的参数初始化来对比不同的优化算法。

1、逻辑回归:使用MNIST数据集,对28*28维图像进行分类,其中minibatch大小选用128,并进行了学习率衰减。

  • 左图中Adam 收敛速度与带动量的SGD相似,都比AdaGrad快。
  • 右图中使用IMDB影评数据集来分析稀疏特征,结果发现Adam 和AdaGrad在处理稀疏问题上收敛速度比带动量的SGD更快。

2、多层神经网络:使用两个全连接隐藏层(神经元各1000)和RELU激活函数,并将Adam与在多层神经网络上表现较好的SFO拟牛顿法进行对比.

  • 图中Adam在处理非凸问题上表现更好。

3、卷积神经网络:使用三个交替的5x5卷积滤波器和步长为2的3x3最大池化以及最后包含1000个隐藏神经元的全连接层。

  • 左图早期前3次迭代中Adam下降较快,加了动量的SGD在早期收敛的比较慢
  • 右图训练后期Adagrad收敛速度明显慢下去,Adam和加了动量的SGD收敛都较优

4、训练一个含有500个隐藏单元的单隐藏层和50维球形高斯潜变量的变分自编码器VAE,通过改变衰减率β对比有偏差修正的 Adam 和没有偏差修正的 RMSprop 收敛性能。

  • 图中绿色无偏差修正会导致训练不稳定。

10、扩展:Adamax

Adamax 是 Adam 的一种变体,是将 Adam 中权重基于L2范数的更新规则扩展到基于Lp范数的更新规则中,算法流程如下:

11、总结

Adam 结合了以往经典算法的优势,可用于处理稀疏梯度、非平稳目标以及非凸优化问题等,然而论文中并没有给出Adam 算法的局限,比如像Adam 这些自适应学习率的算法在训练早期是会有较大的方差的,导致易收敛到局部最优,移步下一篇看对 Adam 自适应学习率方差项进行修正的 RAdam 算法。

  • 19
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值