目录
1 前提
2 动量(Momentum) 方法
3 AdaGrad方法
4 RMSProp方法
5 Adam方法
6 总结与扩展
进一步地, 有人会说深度学习中的优化问题本身就很难, 有太多局部最优点的陷阱。 没错, 这些陷阱对随机梯度下降法和批量梯度下降法都是普遍存在的。但对随机梯度下降法来说, 可怕的不是局部最优点, 而是山谷和鞍点两类地形。
为什么随机梯度下降法最害怕遇上这两类地形呢?
想象一下蒙着双眼只凭借脚底感觉坡度, 如果坡度很明显, 那么基本能估计出下山的大致方向; 如果坡度不明显, 则很可能走错方向。 同样, 在梯度近乎为零的区域, 随机梯度下降法无法准确察觉出梯度的微小变化, 结果就停滞下来。
为了改进随机梯度下降法, 研究者都做了哪些改动? 提出了哪些变种方法?它们各有哪些特点?
随机梯度下降法本质上是采用迭代方式更新参数, 每次迭代在当前位置的基础上, 沿着某一方向迈一小步抵达下一位置, 然后在下一位置重复上述步骤。 随机梯度下降法的更新公式表示为
其中, 当前估计的负梯度表示步子的方向, 学习速率 η 控制步幅。 改造的随机梯
度下降法仍然基于这个更新公式。
为了解决随机梯度下降法山谷震荡和鞍点停滞的问题, 我们做一个简单的思维实验。 想象一下纸团在山谷和鞍点处的运动轨迹, 在山谷中纸团受重力作用沿山道滚下, 两边是不规则的山壁, 纸团不可避免地撞在山壁, 由于质量小受山壁弹力的干扰大, 从一侧山壁反弹回来撞向另一侧山壁, 结果来回震荡地滚下; 如果当纸团来到鞍点的一片平坦之地时, 还是由于质量小, 速度很快减为零。 纸团的情况和随机梯度下降法遇到的问题简直如出一辙。 直观地, 如果换成一个铁球, 当沿山谷滚下时, 不容易受到途中旁力的干扰, 轨迹会更稳更直; 当来到鞍点中心处, 在惯性作用下继续前行, 从而有机会冲出这片平坦的陷阱。 因此, 有了动量方法,模型参数的迭代公式为
具体来说, 前进步伐由两部分组成。 一是学习速率η乘以当前估计的梯度; 二是带衰减的前一次步伐。 这里, 惯性就体现在对前一次步伐信息的重利用上。类比中学物理知识, 当前梯度就好比当前时刻受力产生的加速度, 前一次步伐好比前一时刻的速度, 当前步伐好比当前时刻的速度。 为了计算当前时刻的速度,应当考虑前一时刻速度和当前加速度共同作用的结果, 因此vt直接依赖于和,而不仅仅是。 另外, 衰减系数 γ 扮演了阻力的作用。
中学物理还告诉我们, 刻画惯性的物理量是动量, 这也是算法名字的由来。沿山谷滚下的铁球, 会受到沿坡道向下的力和与左右山壁碰撞的弹力。 向下的力稳定不变, 产生的动量不断累积, 速度越来越快; 左右的弹力总是在不停切换,动量累积的结果是相互抵消, 自然减弱了球的来回震荡。 因此, 与随机梯度下降法相比, 动量方法的收敛速度更快, 收敛曲线也更稳定, 如图7.5所示。
惯性的获得是基于历史信息的, 那么, 除了从过去的步伐中获得一股子向前冲的劲儿, 还能获得什么呢? 我们还期待获得对周围环境的感知, 即使蒙上双眼, 依靠前几次迈步的感觉, 也应该能判断出一些信息, 比如这个方向总是坑坑洼洼的, 那个方向可能很平坦。
随机梯度下降法对环境的感知是指在参数空间中, 根据不同参数的一些经验性判断, 自适应地确定参数的学习速率, 不同参数的更新步幅是不同的。 例如,在文本处理中训练词嵌入模型的参数时, 有的词或词组频繁出现, 有的词或词组则极少出现。 数据的稀疏性导致相应参数的梯度的稀疏性, 不频繁出现的词或词组的参数的梯度在大多数情况下为零, 从而这些参数被更新的频率很低。 在应用中, 我们希望更新频率低的参数可以拥有较大的更新步幅, 而更新频率高的参数的步幅可以减小。 AdaGrad方法采用“历史梯度平方和”来衡量不同参数的梯度的稀疏性, 取值越小表明越稀疏, 具体的更新公式表示为
其中表示(t+1) 时刻的参数向量的第i个参数, 表示k时刻的梯度向量
的第 i 个维度(方向) 。 另外, 分母中求和的形式实现了退火过程, 这是很多优化技术中常见的策略, 意味着随着时间推移, 学习速率 越来越小, 从而保证了算法的最终收敛。
针对 AdaGrad 算法每个元素的学习率在迭代过程中一直在降低(或不变),在迭代后期由于学习率过小,可能较难找到一个有用的解。为解决这一问题,RMSProp 算法对 AdaGrad 算法做了一点小小的修改。
不同于AdaGrad算法里状态变量 是截至时间步 t 所有小批量随机梯度 按元素平方和,RMSProp算法将这些梯度按元素平方做指数加权移动平均。具体来说,给定超参数 ,RMSProp 算法在时间步 计算
和AdaGrad算法一样,RMSProp算法将目标函数自变量中每个元素的学习率通过按元素运算重新调整,然后更新自变量
其中 η 是学习率,ε 是为了维持数值稳定性而添加的常数,如 。因为 RMSProp 算法的状态变量 是对平方项 的质数加权移动平均,所以可以看作是最近 个时间步的小批量随机梯度平方项的加权平均。如此一来,自变量每个元素的学习率在迭代过程中就不再一直降低(或不变)。
Adam方法将惯性保持和环境感知这两个优点集于一身。
一阶矩和二阶矩采用类似于滑动窗口内求平均的思想进行融合, 即当前梯度和近一段时间内梯度的平均值, 时间久远的梯度对当前平均值的贡献呈指数衰减。 具体来说, 一阶矩和二阶矩采用指数衰退平均(exponential decay average) 技术, 计算公式为
如何理解一阶矩和二阶矩呢?
它们的物理意义是:
另外, Adam方法还考虑了在零初始值情况下的偏置矫正。 具体来说, Adam的更新公式为
除了上述三种随机梯度下降法变种, 研究者还提出了以下几种方法。
(1) Nesterov Accelerated Gradient。 该方法扩展了动量方法, 顺着惯性方向, 计算未来可能位置处的梯度而非当前位置的梯度, 这个“提前量”的设计让算法有了对前方环境预判的能力。
(2) AdaDelta和RMSProp。 这两个方法非常类似, 是对AdaGrad方法的改进。 AdaGrad方法采用所有历史梯度平方和的平方根做分母, 分母随时间单调递增, 产生的自适应学习速率随时间衰减的速度过于激进。 针对这个问题, AdaDelta和RMSProp采用指数衰退平均的计算方法, 用过往梯度的均值代替它们的求和。
( 3) AdaMax。 该方法是基于Adam方法的一个变种方法, 对梯度平方的处理由指数衰退平均改为指数衰退求最大值。
( 4) Nadam。 该方法可看成Nesterov Accelerated Gradient版的Adam。