序列建模之循环和递归网络 - 优化长期依赖篇

2024-08-23 07:28

本文主要是介绍序列建模之循环和递归网络 - 优化长期依赖篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

序言

在序列建模领域,循环神经网络( RNN \text{RNN} RNN)及其变体,如长短期记忆网络( LSTM \text{LSTM} LSTM)和递归神经网络( Recursive Neural Network \text{Recursive Neural Network} Recursive Neural Network),凭借其捕捉序列数据时间依赖性的能力,成为处理复杂序列数据的关键工具。然而,尽管这些网络在处理短期依赖方面表现出色,但在处理长期依赖时却面临严峻挑战。长期依赖问题主要源于梯度在反向传播过程中的消失或爆炸现象,这限制了 RNN \text{RNN} RNN在处理需要长期记忆的任务(如自然语言处理中的长文本理解)时的性能。

优化长期依赖

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

截断梯度

  • 如在神经网络优化中的挑战篇 - 悬崖和梯度爆炸中讨论,强非线性函数(如由许多时间步计算的循环网络)往往倾向于非常大或非常小幅度的梯度。如神经网络优化中的挑战篇中 - 图例3图例1所示,我们可以看到,目标函数(作为参数的函数)存在一个伴随 ‘‘悬崖’’ 的 ‘‘地形’’:宽且相当平坦区域被目标函数变化快的小区域隔开,形成了一种悬崖。
  • 这导致的困难是,当参数梯度非常大时,梯度下降的参数更新可以将参数抛出很远,进入目标函数较大的区域,到达当前解所作的努力变成了无用功。
    • 梯度告诉我们,围绕当前参数的无穷小区域内最速下降的方向。
    • 这个无穷小区域之外,代价函数可能开始沿曲线背面而上。
    • 更新必须被选择为足够小,以避免过分穿越向上的曲面。
    • 我们通常使用衰减速度足够慢的学习率,使连续的步骤具有大致相同的学习率。
    • 适合于一个相对线性的地形部分的步长经常在下一步进入地形中更加弯曲的部分时变得不适合,会导致上坡运动。
  • 一个简单的解决方案也被从业者使用多年:截断梯度 clipping the gradient \text{clipping the gradient} clipping the gradient)此想法有不同实例 ( Mikolov, 2012; Pascanu et al., 2013a \text{Mikolov, 2012; Pascanu et al., 2013a} Mikolov, 2012; Pascanu et al., 2013a)。
    • 一种选择是在参数更新之前,逐元素地截断 minibatch \text{minibatch} minibatch产生的参数梯度( Mikolov, 2012 \text{Mikolov, 2012} Mikolov, 2012)。
    • 另一种是在参数更新之前截断梯度 g \boldsymbol{g} g 的范数 ∥ g ∥ \Vert\boldsymbol{g}\Vert g( Pascanu et al., 2013a \text{Pascanu et al., 2013a} Pascanu et al., 2013a):
      { if ∥ g ∥ > v — 公式1 g ← g v ∥ g ∥ — 公式2 \begin{cases}\begin{aligned}\text{if} \Vert\boldsymbol{g}\Vert&>v &\quad\textbf{---\footnotesize{公式1}}\\ \boldsymbol{g}&\gets\frac{\boldsymbol{g}v}{\Vert g\Vert}&\quad\textbf{---\footnotesize{公式2}} \end{aligned}\end{cases} ifgg>vggv公式1公式2
      • 其中 v v v 是范数上界, g \boldsymbol{g} g 用来更新参数。
      • 因为所有参数(包括不同的参数组,如权重和偏置)的梯度被单个缩放因子联合重整化,所以后一方法具有的优点是保证了每个步骤仍然是在梯度方向上的,但实验表明两种形式类似。
    • 虽然参数更新与真实梯度具有相同的方向梯度,经过梯度范数截断,参数更新的向量范数现在变得有界。
    • 这种有界梯度能避免执行梯度爆炸时的有害一步。
    • 事实上,当梯度大小高于阈值时,即使是采取简单的随机步骤往往工作得几乎一样好。
    • 如果爆炸非常严重,梯度数值上为 Inf \text{Inf} Inf Nan \text{Nan} Nan(无穷大或不是一个数字),则可以采取大小为 v v v 的随机一步,通常会离开数值不稳定的状态。
    • 截断每 minibatch \text{minibatch} minibatch梯度范数不会改变单个 minibatch \text{minibatch} minibatch的梯度方向。
    • 然而,许多 minibatch \text{minibatch} minibatch使用范数截断梯度后的平均值不等同于截断真实梯度(使用所有的实例所形成的梯度)的范数。
    • 大导数范数的样本,和像这样的出现在同一 minibatch \text{minibatch} minibatch的样本,其对最终方向的贡献将消失。
    • 不像传统 minibatch \text{minibatch} minibatch梯度下降,其中真实梯度的方向是等于所有 minibatch \text{minibatch} minibatch梯度的平均。
    • 换句话说,传统的随机梯度下降使用梯度的无偏估计,而与使用范数截断的梯度下降引入了经验上是有用的启发式偏置。
    • 通过逐元素截断,更新的方向与真实梯度或 minibatch \text{minibatch} minibatch的梯度不再对齐,但是它仍然是一个下降方向。
    • 还有学者提出 ( Graves, 2013 \text{Graves, 2013} Graves, 2013)(相对于隐藏单元)截断反向传播梯度,但没有发布与这些变种之间的比较; 我们推测,所有这些方法表现类似。

引导信息流的正则化


  • 图例1:梯度截断在有两个参数 w \boldsymbol{w} w b \boldsymbol{b} b 的循环网络中的效果示例。
    • 梯度截断在有两个参数 w \boldsymbol{w} w b \boldsymbol{b} b 的循环网络中的效果示例。
      在这里插入图片描述

    • 说明:

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

总结

  • 为了优化循环和递归网络中的长期依赖问题,研究者们提出了多种解决方案。其中, LSTM \text{LSTM} LSTM通过引入遗忘门、输入门和输出门等机制,有效缓解了梯度消失和爆炸问题,显著提升了模型处理长序列数据的能力。
  • 此外,深度循环网络( DRNN \text{DRNN} DRNN)通过堆叠多个 RNN \text{RNN} RNN层,增强了模型对序列数据的非线性变换能力,进一步提升了捕捉长期依赖关系的能力。尽管这些改进在一定程度上解决了长期依赖问题,但未来的研究仍需不断探索更有效的方法,以进一步提升循环和递归网络在序列建模任务中的性能。随着深度学习技术的不断发展,我们有理由相信,这些网络将在更多领域发挥重要作用,推动人工智能技术的持续进步与发展。

往期内容回顾

深度模型中的优化 - 神经网络优化中的挑战篇
序列建模之循环和递归网络 - 长期依赖的挑战篇
序列建模之循环和递归网络 - 长短期记忆和其他门控RNN篇

这篇关于序列建模之循环和递归网络 - 优化长期依赖篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098729

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

uva 10131 最长子序列

题意: 给大象的体重和智商,求体重按从大到小,智商从高到低的最长子序列,并输出路径。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vect

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~