返回介绍

10.11 优化长期依赖

发布于 2024-01-20 12:27:18 字数 3440 浏览 0 评论 0 收藏 0

我们已经在第8.2.5节和第10.7节中描述过在许多时间步上优化RNN时发生的梯度消失和爆炸的问题。

由Martens and Sutskever(2011)提出了一个有趣的想法是,二阶导数可能在一阶导数消失的同时消失。二阶优化算法可以大致被理解为将一阶导数除以二阶导数(在更高维数,由梯度乘以Hessian的逆)。如果二阶导数与一阶导数以类似的速率收缩,那么一阶和二阶导数的比率可保持相对恒定。不幸的是,二阶方法有许多缺点,包括高的计算成本、需要一个大的小批量并且倾向于被吸引到鞍点。Martens and Sutskever(2011)发现采用二阶方法的不错结果。之后,Sutskever et al.(2013)发现使用较简单的方法可以达到类似的结果,例如经过谨慎初始化的Nesterov动量法。更详细的内容参考Sutskever(2012)。应用于LSTM时,这两种方法在很大程度上会被单纯的SGD(甚至没有动量)取代。这是机器学习中一个延续的主题,设计一个易于优化模型通常比设计出更加强大的优化算法更容易。

10.11.1 截断梯度

如第8.2.4节讨论,强非线性函数(如由许多时间步计算的循环网络)往往倾向于非常大或非常小幅度的梯度。如图8.3和图10.17所示,我们可以看到,目标函数(作为参数的函数)存在一个伴随“悬崖”的“地形”:宽且相当平坦区域被目标函数变化快的小区域隔开,形成了一种悬崖。

这导致的困难是,当参数梯度非常大时,梯度下降的参数更新可以将参数抛出很远,进入目标函数较大的区域,到达当前解所做的努力变成了无用功。梯度告诉我们,围绕当前参数的无穷小区域内最速下降的方向。这个无穷小区域之外,代价函数可能开始沿曲线背面而上。更新必须被选择为足够小,以避免过分穿越向上的曲面。我们通常使用衰减速度足够慢的学习率,使连续的步骤具有大致相同的学习率。适合于一个相对线性的地形部分的步长经常在下一步进入地形中更加弯曲的部分时变得不适合,会导致上坡运动。

图10.17 梯度截断在有两个参数wb的循环网络中的效果示例。梯度截断可以使梯度下降在极陡峭的悬崖附近更合理地执行。这些陡峭的悬崖通常发生在循环网络中,位于循环网络近似线性的附近。悬崖在时间步的数量上呈指数地陡峭,因为对于每个时间步,权重矩阵都自乘一次。(左)没有梯度截断的梯度下降越过这个小峡谷的底部,然后从悬崖面接收非常大的梯度。大梯度灾难性地将参数推到图的轴外。(右)使用梯度截断的梯度下降对悬崖的反应更温和。当它上升到悬崖面时,步长受到限制,使得它不会被推出靠近解的陡峭区域。经Pascanu et al.(2013a)许可改编此图

一个简单的解决方案已被从业者使用多年:截断梯度(clipping the gradient)。此想法有不同实例(Mikolov,2012;Pascanu et al.,2013a)。一种选择是在参数更新之前,逐元素地截断小批量产生的参数梯度(Mikolov,2012)。另一种是在参数更新之前截断梯度g的范数‖g‖(Pascanu et al.,2013a):

其中ν是范数上界,g用来更新参数。因为所有参数(包括不同的参数组,如权重和偏置)的梯度被单个缩放因子联合重整化,所以后一方法具有的优点是保证了每个步骤仍然是在梯度方向上的,但实验表明两种形式类似。虽然参数更新与真实梯度具有相同的方向梯度,经过梯度范数截断,参数更新的向量范数现在变得有界。这种有界梯度能避免执行梯度爆炸时的有害一步。事实上,当梯度大小高于阈值时,即使是采取简单的随机步骤往往工作得几乎一样好。如果爆炸非常严重,梯度数值上为Inf或Nan(无穷大或不是一个数字),则可以采取大小为v的随机一步,通常会离开数值不稳定的状态。截断每小批量梯度范数不会改变单个小批量的梯度方向。然而,许多小批量使用范数截断梯度后的平均值不等同于截断真实梯度(使用所有的实例所形成的梯度)的范数。大导数范数的样本,和像这样的出现在同一小批量的样本,其对最终方向的贡献将消失。不像传统小批量梯度下降,其中真实梯度的方向是等于所有小批量梯度的平均。换句话说,传统的随机梯度下降使用梯度的无偏估计,而与使用范数截断的梯度下降引入了经验上是有用的启发式偏置。通过逐元素截断,更新的方向与真实梯度或小批量的梯度不再对齐,但是它仍然是一个下降方向。还有学者提出(Graves,2013)(相对于隐藏单元)截断反向传播梯度,但没有公布与这些变种之间的比较。我们推测,所有这些方法表现类似。

10.11.2 引导信息流的正则化

梯度截断有助于处理爆炸的梯度,但它无助于消失的梯度。为了解决消失的梯度问题并更好地捕获长期依赖,我们讨论了如下想法:在展开循环架构的计算图中,沿着与弧边相关联的梯度乘积接近1的部分创建路径。在第10.10节中已经讨论过,实现这一点的一种方法是使用LSTM以及其他自循环和门控机制。另一个想法是正则化或约束参数,以引导“信息流”。特别是即使损失函数只对序列尾部的输出做惩罚,我们也希望梯度向量在反向传播时能维持其幅度。形式上,我们要使

一样大。在这个目标下,Pascanu et al.(2013a)提出以下正则项:

计算这一梯度的正则项可能会出现困难,但Pascanu et al.(2013a)提出可以将后向传播向量考虑为恒值作为近似(为了计算正则化的目的,没有必要通过它们向后传播)。使用该正则项的实验表明,如果与标准的启发式截断(处理梯度爆炸)相结合,该正则项可以显著地增加RNN可以学习的依赖跨度。梯度截断特别重要,因为它保持了爆炸梯度边缘的RNN动态。如果没有梯度截断,梯度爆炸将阻碍学习的成功。

这种方法的一个主要弱点是,在处理数据冗余的任务时如语言模型,它并不像LSTM一样有效。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文