本文对深度学习中的优化算法进行了梳理首先,介绍了整个优化算法的基本框架。然后我们将解释当前使用的主流优化算法,并引导大家理解优化算法从SGD到Adam和Nadam的转换。
基本框架为什么这些算法可以在系列中讨论?因为这些算法都是相互关联的。为什么它们是相互联系的?因为所有优化算法都基于以下优化算法的基本框架
,其中一阶动量和二阶动量分别是历史梯度的一阶函数和二阶函数
SGD随机梯度下降算法首先,让我们谈谈最基本的SGD算法:
缺点:容易陷入局部优化由于SGD只考虑当前时刻的梯度,因此具有最佳局部优势的当前梯度为0从计算公式可以看出,此时参数没有更新,因此处于局部优化状态。
改进策略和算法
引入了历史梯度的一阶动量,代表性算法有:动量和NAG引入了历史梯度的二阶动量,代表性算法有:AdaGrad、RMSProp和AdaDelta同时引入了历史梯度的一阶动量和二阶动量。代表性算法包括:亚当和纳达姆改进策略1:引入一阶动量动量
改进思想:为了抑制SGD振荡,动量认为惯性可以加入到梯度下降过程中,即在SGD的基础上引入一阶运动
,其中历史梯度的一阶动量的计算基于指数加权移动平均的思想。具体计算步骤见PPT或视频说明
NAG
改进思路:除了惯性跳出局部沟壑,我们还可以尝试向前迈一步。也就是说,基于动量对历史梯度的考虑,当前梯度被转换成未来梯度。
改进策略2:引入二阶动量二阶运动意味着“自适应学习率”优化算法时代的到来在SGD及其引入一阶动量的改进算法中,参数以相同的学习速率更新。然而,以同样的学习速度改变往往是不合理的。
在神经网络中,需要以不同的学习速率更新参数对于经常出现的新参数,我们已经积累了相关的知识。我们希望单一样本会有太大的影响,学习速度会慢一些。对于偶尔出现的新参数,我们知道的信息太少。我们希望我们能从每个偶然的样本中学到更多,也就是说,学习率更高。
以神经网络中的W和B为例。下图是损失函数图像,W是X轴,B是Y轴。发现每次b变化很大,而w每次只更新一小步然而,从整个损失函数来看,我们发现W实际上可以向前移动,而B可以跳得更少
,因此,出现了对于不同维度中的不同参数具有不同学习率的二阶动量改进算法
自适应梯度
的改进思想:从数学角度来看,对于新振幅较大的参数,历史累积梯度的平方和通常较大;相反,新振幅小的参数的累积历史梯度的平方和通常很小。
的缺点:随着时间步长的延长,历史梯度的累积平方和将变得越来越大,这将降低所有维度参数的学习速率(单调递减),而不管新的幅度如何。
rms prop/ada delta
改进思路:累加所有历史梯度,只关注过去时间窗的下降梯度,在动量上采用指数加权移动平均的思路
改进策略3:同时引入一阶动量和二阶动量Adam
改进思路:增加动量的一阶动态计算方法和AdaGrad的二阶动态计算方法
纳达
改进想法:纳达=内斯特罗夫+亚当核心是在计算当前时间的梯度时使用未来梯度。
-10 - 11-