机器学习-优化器:动量SGD、AdaGrad 以及Adam

上一篇博客讲了,随机梯度下降法偶尔也会失效 ,无法给出满意的训练结果 , 并解释了原因。本文将介绍,为了改进随机梯度下降法,研究者都做了哪些改动?提出了哪些变种方法? 各有哪些特点?

动量( Momentum )方法

为了解决随机梯度下降法山谷震荡和鞍点停滞的问题,我们做一个简单的思维实验。想象一下纸团在山谷和鞍点处的运动轨迹,在山谷中纸团受重力作用沿山道滚下,两边是不规则的山壁,纸团不可避免地撞在山壁,由于质量小受山壁弹力的干扰大,从一侧山壁反弹回来撞向另一侧山壁 ,结果来回震荡地滚下 。 如果当纸团来到鞍点的一片平坦之地时,还是由于质量小,速度很快减为零。 纸团的情况和随机梯度下降法遇到的问题简直如出一辙。直观地,如果换成一个铁球,当沿山谷滚下时 不容易受到途中旁力的干扰,轨迹会更稳更重 ; 当来到鞍点中心处 ,在惯性作用下继续前行,从而有机会冲出这片平坦的陷阱。 因此,有了动量方法, 模型参数的迭代公式为
机器学习-优化器:动量SGD、AdaGrad 以及Adam_第1张图片
具体来说,前进步伐 − v t -v_t vt,由两部分组成。 一是学习速率η乘以当前估计
的梯度 g t g_t gt,二是带衰减的前一次步伐 v t − 1 v_{t-1} vt1。这里,惯性就体现在对前一次步伐信息的重利用上。类比中学物理知识,当前梯度就好比当前时刻变力产生的加速度,前一次步伐好比前一时刻的速度,当前步伐好比当前时刻的速度。 为了计算当前时刻的速度,应当考虑前一时刻速度相当前加速度共同作用的结果,因此 − v t -v_t vt直接依赖于 v t − 1 v_{t-1} vt1 g t g_t gt,,而不仅仅是 g t g_t gt。 另外,衰减系数 γ扮演了阻力的作用 。

中学物理还告诉我们,刻画惯性的物理量是动量, 这也是算法名字的由来。 沿山谷滚下的铁球,会受到沿坡道向下的力和与左右山璧碰撞的弹力 。 向下的力稳定不变,产生的动量不断累积,速度越来越快;左右的弹力总是在不停切换,动量累积的结果是相互抵消,自然减弱了球的来回震荡。 因此,与随机梯度下降法相比,动量方法的收敛速度更快,收敛曲线也更稳定,如下图所示。
机器学习-优化器:动量SGD、AdaGrad 以及Adam_第2张图片

AdaGrad

惯性的获得是基于历史信息的,那么,除了从过去的步伐中获得一股子向前冲的劲儿,还能获得什么呢?我们还期待获得对周围环境的感知,即使蒙上双眼,依靠前几次迈步的感觉,也应该能判断出一些信息,比如这个方向总是坑坑洼洼的 , 那个方向可能很平坦。

随机梯度下降法对环境的感知是指在参数空间中,根据不同参数的一些经验性判断 , 自适应地确定参数的学习速率,不同参数的更新步幅是不同的 。 例如,在文本处理中训练词嵌入模型的参数肘,有的词或词组频繁出现,有的词或词组则极少出现。 数据的稀疏性导致相应参数的梯度的稀疏性,不频繁出现的词或词组的参数的梯度在大多数情况下为零,从而这些参数被更新的频率很低。 在应用中, 我们希望更新频率低的参数可以拥有较大的更新步幅, 而更新频率高的参数的步幅可以减小 。Ada Grad 方法采用 “历史梯度平方和”来衡量不同参数的梯度的稀疏性,取值越小表明越稀疏, 具体的更新公式表示为
机器学习-优化器:动量SGD、AdaGrad 以及Adam_第3张图片

其中 θ t + 1 , i θ_{t+1,i} θt+1,i表示( t+1 z时刻的参数向量 θ t + 1 θ_{t+1} θt+1的第 i 个参数, g k , i g_{k,i} gk,i表示 k 时刻的梯度向量 g k g_k gk 的第 i 个维度(方向) 。 另外,分母中求和的形式实现了退火过程,这是很多优化技术中常见的策略,意味着随着时间推移, 学习速率越来越小,从而保证了算法的最终收敛。

Adam

Adam 方法将惯性保持和环境感知这两个优点集于一身。 一方面,Adam 记录梯度的一阶矩( first moment ),即过往梯度与当前梯度的平均,这体现了惯性保持;另一方面, Adam 还记录梯度的二阶矩( second moment ),即过往梯度平方与当前梯度平方的平均 ,这类似 AdaGrad 方法, 体现了环境感知能力,为不同参数产生自适应的学习速率。 一阶矩和二阶矩采用类似于滑动窗口内求平均的思想进行融合,即当前梯度和近一段时间内梯度的平均值,时间久远的梯度对当前平均值的贡献呈指数衰减。 具体来说 , 一阶和二阶矩采用指数衰退平均( exponential decay average)技术,计算公式为
机器学习-优化器:动量SGD、AdaGrad 以及Adam_第4张图片
其中 β 1 β_1 β1 β 2 β_2 β2 为衰减系数, m t m_t mt 是一阶矩, v t v_t vt 是二阶矩。

如f可理解一阶矩和二阶矩呢?一阶矩相当于估计E( g t g_t gt),由于当下梯度 g t g_t gt是随机采样得到的估计结果,因此更关注它在统计意义上的期望; 二阶矩相当于估计E( g t 2 g_t^2 gt2),这点与 AdaGrad 方法不同,不是 g t 2 g_t^2 gt2从开始到现在的加和 ,而是它的期望。 它们的物理意义是,当 ∣ ∣ m t ∣ ∣ ||m_t|| mt大且 v t v_t vt 大时,梯度大且稳定,这表明遇到一个明显的大坡,前进方向明确;当 ∣ ∣ m t ∣ ∣ ||m_t|| mt趋于零且 v t v_t vt 大时,梯度不稳定,表明可能遇到一个峡谷,容易引起反弹 震荡;当 ∣ ∣ m t ∣ ∣ ||m_t|| mt大且 v t v_t vt趋于零时,这种情况不可能出现;当 ∣ ∣ m t ∣ ∣ ||m_t|| mt趋于零且 v t v_t vt趋于零时,梯度趋于零,可能到这局部最低点,也可能走到一片坡 度极缓的平地 , 此时要避免陷入平原( plateau ) 。

拓展

除了上述三种随机梯度下降法变种,研究者还提出了以下几种方法。
( 1 ) Nesterov Accelerated Gradiento。该方法扩展了动量方法, 顺着惯性方向 ,计 算未来可能位置处的梯度而非当前位置的梯度,这个“提前量”的设计让算法高了对前方环境预判的能力。
( 2 ) AdaDelta 和 RMSProp 。 这两个方法非常类似,是对 AdaGrad 方法的改进。AdaGrad 方法采用所有历史梯度平方和的平方根做分母,分母随时间单调递增,产生的自适应学习速率随时间衰减的速度过于激进。 针对这个问题, AdaDelta 和 RMSProp 采用指数衰退平均的计算方法,用过往梯度的均值代替它们的求和 。
( 3) AdaMax 。 该方法是基于 Adam方法的一个变种方法, 对梯度平方的处理由指数衰退平均改为指数衰退求最大值。
( 4) Nadam 。该方法可看成 Nesterov Accelerated Gradient 版的 Adam 。

你可能感兴趣的:(机器学习,人工智能,机器学习,深度学习,算法,python)