优化方法(随机梯度下降的改进方法)

目录

1 前提

2 动量(Momentum) 方法

3 AdaGrad方法

4 RMSProp方法

5 Adam方法

6 总结与扩展


1 前提

进一步地, 有人会说深度学习中的优化问题本身就很难, 有太多局部最优点的陷阱。 没错, 这些陷阱对随机梯度下降法和批量梯度下降法都是普遍存在的。但对随机梯度下降法来说, 可怕的不是局部最优点, 而是山谷鞍点两类地形。

  • 山谷顾名思义就是狭长的山间小道, 左右两边是峭壁;
  • 鞍点的形状像是一个马鞍, 一个方向上两头翘, 另一个方向上两头垂, 而中心区域是一片近乎水平的平地。

为什么随机梯度下降法最害怕遇上这两类地形呢?

  • 在山谷中, 准确的梯度方向是沿山道向下, 稍有偏离就会撞向山壁, 而粗糙的梯度估计使得它在两山壁间来回反弹震荡, 不能沿山道方向迅速下降, 导致收敛不稳定和收敛速度慢。
  • 在鞍点处, 随机梯度下降法会走入一片平坦之地( 此时离最低点还很远, 故也称plateau) 。

想象一下蒙着双眼只凭借脚底感觉坡度, 如果坡度很明显, 那么基本能估计出下山的大致方向; 如果坡度不明显, 则很可能走错方向。 同样, 在梯度近乎为零的区域, 随机梯度下降法无法准确察觉出梯度的微小变化, 结果就停滞下来。

        为了改进随机梯度下降法, 研究者都做了哪些改动? 提出了哪些变种方法?它们各有哪些特点?

        随机梯度下降法本质上是采用迭代方式更新参数, 每次迭代在当前位置的基础上, 沿着某一方向迈一小步抵达下一位置, 然后在下一位置重复上述步骤。 随机梯度下降法的更新公式表示为

        

        其中, 当前估计的负梯度表示步子的方向, 学习速率 η 控制步幅。 改造的随机梯
度下降法仍然基于这个更新公式。 

2 动量(Momentum) 方法

         为了解决随机梯度下降法山谷震荡和鞍点停滞的问题, 我们做一个简单的思维实验。 想象一下纸团在山谷和鞍点处的运动轨迹, 在山谷中纸团受重力作用沿山道滚下, 两边是不规则的山壁, 纸团不可避免地撞在山壁, 由于质量小受山壁弹力的干扰大, 从一侧山壁反弹回来撞向另一侧山壁, 结果来回震荡地滚下; 如果当纸团来到鞍点的一片平坦之地时, 还是由于质量小, 速度很快减为零。 纸团的情况和随机梯度下降法遇到的问题简直如出一辙。 直观地, 如果换成一个铁球, 当沿山谷滚下时, 不容易受到途中旁力的干扰, 轨迹会更稳更直; 当来到鞍点中心处, 在惯性作用下继续前行, 从而有机会冲出这片平坦的陷阱。 因此, 有了动量方法,模型参数的迭代公式为

        

        

        具体来说, 前进步伐由两部分组成。 一是学习速率η乘以当前估计的梯度; 二是带衰减的前一次步伐。 这里, 惯性就体现在对前一次步伐信息的重利用上。类比中学物理知识, 当前梯度就好比当前时刻受力产生的加速度, 前一次步伐好比前一时刻的速度, 当前步伐好比当前时刻的速度。 为了计算当前时刻的速度,应当考虑前一时刻速度和当前加速度共同作用的结果, 因此vt直接依赖于,而不仅仅是。 另外, 衰减系数 γ 扮演了阻力的作用。

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

 优化方法(随机梯度下降的改进方法)_第1张图片

3 AdaGrad方法

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

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

优化方法(随机梯度下降的改进方法)_第2张图片

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

4 RMSProp方法

        针对 AdaGrad 算法每个元素的学习率在迭代过程中一直在降低(或不变),在迭代后期由于学习率过小,可能较难找到一个有用的解。为解决这一问题,RMSProp 算法对 AdaGrad 算法做了一点小小的修改。

        不同于AdaGrad算法里状态变量 是截至时间步 t 所有小批量随机梯度  按元素平方和,RMSProp算法将这些梯度按元素平方做指数加权移动平均。具体来说,给定超参数 ,RMSProp 算法在时间步  计算

       

        和AdaGrad算法一样,RMSProp算法将目标函数自变量中每个元素的学习率通过按元素运算重新调整,然后更新自变量 

        

         其中 η 是学习率,ε 是为了维持数值稳定性而添加的常数,如 。因为 RMSProp 算法的状态变量  是对平方项  的质数加权移动平均,所以可以看作是最近  个时间步的小批量随机梯度平方项的加权平均。如此一来,自变量每个元素的学习率在迭代过程中就不再一直降低(或不变)。

5 Adam方法

        Adam方法将惯性保持和环境感知这两个优点集于一身。

  • 一方面, Adam记录梯度的一阶矩(first moment) , 即过往梯度与当前梯度的平均, 这体现了惯性保持;
  • 另一方面, Adam还记录梯度的二阶矩(second moment) , 即过往梯度平方与当前梯度平方的平均, 这类似AdaGrad方法, 体现了环境感知能力, 为不同参数产生自适应的学习速率。

        一阶矩和二阶矩采用类似于滑动窗口内求平均的思想进行融合, 即当前梯度和近一段时间内梯度的平均值, 时间久远的梯度对当前平均值的贡献呈指数衰减。 具体来说, 一阶矩和二阶矩采用指数衰退平均(exponential decay average) 技术, 计算公式为

         

         

         其中β1, β2为衰减系数, 是一阶矩, 是二阶矩。

         如何理解一阶矩和二阶矩呢?

  • 一阶矩相当于估计 : 由于当下梯度是随机采样得到的估计结果, 因此更关注它在统计意义上的期望;
  • 二阶矩相当于估计, 这AdaGrad方法不同, 不是从开始到现在的加和, 而是它的期望。

        它们的物理意义是:

  • 大且大时, 梯度大且稳定, 这表明遇到一个明显的大坡, 前进方向明确;
  • 趋于零且大时, 梯度不稳定, 表明可能遇到一个峡谷, 容易引起反弹震荡;
  • 大且趋于零时, 这种情况不可能出现;
  • 趋于零且趋于零时, 梯度趋于零, 可能到达局部最低点, 也可能走到一片坡度极缓的平地, 此时要避免陷入平原(plateau) 。

        另外, Adam方法还考虑了在零初始值情况下的偏置矫正。 具体来说, Adam的更新公式为

      优化方法(随机梯度下降的改进方法)_第4张图片 

 优化方法(随机梯度下降的改进方法)_第5张图片

6 总结与扩展

        除了上述三种随机梯度下降法变种, 研究者还提出了以下几种方法。

(1) Nesterov Accelerated Gradient。 该方法扩展了动量方法, 顺着惯性方向, 计算未来可能位置处的梯度而非当前位置的梯度, 这个“提前量”的设计让算法有了对前方环境预判的能力。

(2) AdaDelta和RMSProp。 这两个方法非常类似, 是对AdaGrad方法的改进。 AdaGrad方法采用所有历史梯度平方和的平方根做分母, 分母随时间单调递增, 产生的自适应学习速率随时间衰减的速度过于激进。 针对这个问题, AdaDelta和RMSProp采用指数衰退平均的计算方法, 用过往梯度的均值代替它们的求和。

( 3) AdaMax。 该方法是基于Adam方法的一个变种方法, 对梯度平方的处理由指数衰退平均改为指数衰退求最大值。

( 4) Nadam。 该方法可看成Nesterov Accelerated Gradient版的Adam。

你可能感兴趣的:(机器学习,机器学习)