优化算法
动量法、AdaGrad、RMSProp、AdaDelta、Adam
在7.2节(梯度下降和随机梯度下降)中我们提到,目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向。因此,梯度下降也叫作最陡下降(steepest descent)。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量。然而,如果自变量的迭代方向 仅仅取决于自变量当前位置,这可能会带来一些问题 。
可以看到,同一位置上,目标函数在竖直方向( 轴方向)比在水平方向( 轴方向)的斜率的绝对值更大。因此,给定学习率,梯度下降迭代自变量时会使自变量在竖直方向比在水平方向移动幅度更大。那么,我们 需要一个较小的学习率 从而避免自变量在竖直方向上越过目标函数最优解。然而,这会造成自变量在水平方向上 朝最优解移动变慢 。
试着将学习率调大一点,此时自变量在竖直方向不断越过最优解并逐渐发散。
动量法的提出是为了解决梯度下降的上述问题。
其中,动量超参数 满足 。当 时,动量法等价于小批量随机梯度下降。
因此,在实际中,我们常常将 看作是最近 个时间步的 的值的加权平均。
现在,我们对动量法的速度变量做变形:
优化算法中,⽬标函数⾃变量的每⼀个元素在相同时间步都使⽤同⼀个学习率来⾃我迭代。在“动量法”⾥我们看到当x1和x2的梯度值有较⼤差别时,需要选择⾜够小的学习率使得⾃变量在梯度值较⼤的维度上不发散。但这样会导致⾃变量在梯度值较小的维度上迭代过慢。动量法依赖指数加权移动平均使得⾃变量的更新⽅向更加⼀致,从而降低发散的可能。 本节我们介绍AdaGrad算法,它根据⾃变量在每个维度的梯度值的⼤小来调整各个维度上的学习率,从而避免统⼀的学习率难以适应所有维度的问题。
AdaGrad算法会使⽤⼀个小批量随机梯度gt按元素平⽅的累加变量st。在时间步0,AdaGrad将s0中每个元素初始化为0。在时间步t,⾸先将小批量随机梯度gt按元素平⽅后累加到变量st:
其中⊙是按元素相乘。接着,我们将⽬标函数⾃变量中每个元素的学习率通过按元素运算重新调整⼀下:
其中η是学习率,ϵ是为了维持数值稳定性而添加的常数,如10的-6次方。这⾥开⽅、除法和乘法的运算都是按元素运算的。这些按元素运算使得⽬标函数⾃变量中 每个元素都分别拥有⾃⼰的学习率 。
需要强调的是,小批量随机梯度按元素平⽅的累加变量st出现在学习率的分⺟项中。因此,
然而,由于st⼀直在累加按元素平⽅的梯度,⾃变量中每个元素的学习率在迭代过程中⼀直在降低(或不变)。 所以,当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率过小,可能较难找到⼀个有⽤的解 。
当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于 学习率过小 ,可能较难找到⼀个有⽤的解。为了解决这⼀问题,RMSProp算法对AdaGrad算法做了⼀点小小的修改。
不同于AdaGrad算法⾥状态变量st是 截⾄时间步t所有小批量随机梯度gt按元素平⽅和 ,RMSProp算法将这些梯度 按元素平⽅做指数加权移动平均 。具体来说,给定超参数0 ≤ γ < 1,RMSProp算法在时间步t > 0计算:
和AdaGrad算法⼀样,RMSProp算法将⽬标函数⾃变量中每个元素的学习率通过按元素运算重新调整,然后更新⾃变量:
其中η是学习率,ϵ是为了维持数值稳定性而添加的常数,如10的-6次方。因为RMSProp算法的状态变量st是对平⽅项gt ⊙ gt的指数加权移动平均, 所以可以看作是最近1/(1 − γ)个时间步的小批量随机梯度平⽅项的加权平均。如此⼀来,⾃变量每个元素的学习率在迭代过程中就不再⼀直降低(或不变)。
除了RMSProp算法以外,另⼀个常⽤优化算法AdaDelta算法也针对AdaGrad算法在迭代后期可能较难找到有⽤解的问题做了改进。有意思的是,AdaDelta算法没有学习率这⼀超参数。
AdaDelta算法也像RMSProp算法⼀样,使⽤了小批量随机梯度gt按元素平⽅的指数加权移动平均变量st。在时间步0,它的所有元素被初始化为0。给定超参数0 ≤ ρ < 1(对应RMSProp算法中的γ),在时间步t > 0,同RMSProp算法⼀样计算:
与RMSProp算法不同的是,AdaDelta算法还维护⼀个 额外的状态变量∆xt ,其元素同样在时间步0时被初始化为0。我们使⽤∆xt−1来计算⾃变量的变化量:
最后,我们使⽤∆xt来记录⾃变量变化量 按元素平⽅的指数加权移动平均:
Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均。
Adam算法使⽤了 动量变量vt 和RMSProp算法中 小批量随机梯度按元素平⽅的指数加权移动平均变量st ,并在时间步0将它们中每个元素初始化为0。给定超参数0 ≤ β1 < 1(算法作者建议设为0.9),时间步t的动量变量vt即小批量随机梯度gt的指数加权移动平均:
接下来,Adam算法使⽤以上 偏差修正 后的变量 v ˆ t 和 s ˆ t ,将模型参数中每个元素的学习率通过按元素运算重新调整:
其中 η 是学习率, ϵ 是为了维持数值稳定性而添加的常数,如10的-8次方。和AdaGrad算法、RMSProp算法以及AdaDelta算法⼀样,⽬标函数⾃变量中每个元素都分别拥有⾃⼰的学习率。最后,使⽤ 迭代⾃变量:
2024-03-16 广告