自学内容网 自学内容网

【深度学习】序列模型——RNN、LSTM、GRU

        序列模型(Sequence Models)是用于处理序列数据的模型,序列数据是指具有顺序性的观测数据,其中每一个数据点不仅受到自身特征的影响,还与前后数据点之间存在依赖关系。序列模型的概念源自于对这种顺序依赖关系的建模,广泛应用于自然语言处理、语音识别、时间序列分析等领域。

        序列模型的出现和发展主要是为了应对处理序列数据的挑战。传统的机器学习模型(如线性回归、支持向量机等)大多假设数据点之间是独立的,但现实世界中的许多数据(如文本、语音、视频等)往往具有强烈的时间或顺序依赖关系。因此,如何建模和捕捉这些依赖关系成为了一个重要问题。

一、早期假设

       序列模型在处理序列数据时,通常会依赖于某些假设来简化问题并提高模型的可解释性和可操作性。马尔可夫模型潜变量模型是两种常见的假设,它们分别从不同角度解释序列数据的生成过程。

1. 马尔可夫模型(Markov Model)

        马尔可夫模型基于马尔可夫假设,通常用于描述序列数据中状态的转移过程。马尔可夫假设指出:当前状态仅依赖于前一个状态,而与更早的状态无关。这种假设能够有效地简化序列建模的复杂度。马尔可夫模型常用于语音识别、自然语言处理、时间序列分析等任务。

马尔可夫假设

  • 一阶马尔可夫假设(First-order Markov assumption):当前状态(S_t)的概率仅依赖于前一时刻的状态(S_{t-1}),即:

    P(S_t | S_1, S_2, \dots, S_{t-1}) = P(S_t | S_{t-1})
  • 二阶马尔可夫假设(Higher-order Markov assumptions):当前状态依赖于前n个状态,但通常我们简化为只依赖于一个前状态(即一阶马尔可夫假设),以降低计算复杂度。

马尔可夫链

        在马尔可夫模型中,序列由一系列的状态组成,每个状态之间有一定的转移概率。这些转移概率满足马尔可夫性质,即。可以通过马尔可夫链的状态转移矩阵来描述这些转移概率。给定当前状态,未来的状态是独立于过去状态的。

        例如,在隐马尔可夫模型(HMM)中,状态序列(隐状态)与观测序列(观测值)之间存在转移概率和发射概率,而这些概率完全由当前时刻的状态来决定。

2. 潜变量模型(Latent Variable Model)

        潜变量模型假设序列中的数据是由一些不可观察(潜在)的隐藏变量观察变量(观测数据)共同生成的。潜变量模型假设存在一些隐藏的因素或状态,这些因素通过某些机制影响观察到的序列数据。

潜变量的定义

        潜变量是指在数据生成过程中影响观测结果,但在实际问题中无法直接观测到的变量。潜变量模型的目标是通过观测到的数据推断潜变量的分布,并进而推断整个数据的结构。

潜变量模型的基本框架

        潜变量模型通常通过以下方式来建模:

  • 潜变量与观测变量的关系:假设潜变量通过某种概率分布(如高斯分布)生成观测数据。
  • 推断潜变量:基于观测数据,推断出潜在变量的分布或值。

在机器学习中,潜变量模型通常用于表示数据中的未观察到的结构或模式,并使用方法如变分推断EM算法(期望最大化算法)来进行参数估计和推断。

  • 时序模型中,当前数据跟之前观察到的数据相关

  • 自回归模型使用自身过去数据来预测未来
  • 马尔可夫模型假设当前只跟最近少数数据相关,从而简化模型
  • 潜变量模型使用潜变量来概括历史信息

二、经典网络

        随着神经网络的兴起,传统的统计方法逐渐被神经网络模型所替代。神经网络能够自动学习特征表示,并且能够捕捉复杂的非线性关系。序列数据建模中,神经网络的引入带来了更强的表达能力,尤其是在自然语言处理和语音识别等任务中。

1. RNN循环神经网络

        RNN(Recurrent Neural Network)能够捕捉时间序列中的依赖关系,其核心特点是通过循环连接使得每个时刻的输出不仅依赖于当前输入,还依赖于先前的状态(即记忆)。这一设计使得RNN能够处理变长的序列数据,广泛应用于语音、语言模型等任务中。RNN通过关联不同时刻,建立了某种记忆关系。

        RNN的核心思想是在神经网络的结构中引入了“记忆”功能。通过循环连接,RNN能够利用当前输入以及前一个时刻的输出(即隐藏状态)来计算当前时刻的输出。这使得RNN能够捕捉序列中的时间依赖关系或顺序信息。具体来说,在RNN中,隐藏层不仅接收当前时刻的输入,还接收前一时刻的隐藏层输出(记忆),因此可以记住先前的信息并根据此信息生成当前输出。在普通的神经网络中,输出为S=f(W_{in}X+b),在RNN中,输出为S_t=f(W_{in}X+W_SS_{t-1}+b)

        RNN的网络结构图也可以简化为下图: 

        RNN的训练过程跟普通的神经网络一样,也是采用反向传播梯度下降算法,只不过在计算隐层的时候需要引入之前的数据。 

        由于时序上的层级结构,使得RNN在输入输出关系上具备了更大的灵活性,能够解决不同的问题。比如单入多出的结构,输入可以是一张图片,输出是一段话或音乐,利用它可以实现看图说话、放音乐等。

        这种N to 1的情况,输入可以是一段话,输出可以是一种情感类别的判定或者是一张图片。

        第三种是N to N的情况,输入输出是等长的,这种RNN可以用来生成文章、诗歌甚至代码。

        最后一种是N to M的情况,也被称Encoder-Decoder模型/Seq2Seq模型, 它先将输入数据编码成上下文向量,然后通过它来输出预测的序列。这种RNN在机器翻译、文本摘要、阅读理解、对话生成等很多领域都有着极为广泛的应用。

RNN的优缺点

优点:

  • 能够处理变长序列:RNN的核心优势在于其能够处理不同长度的序列数据,无论是文本、语音还是时间序列数据。
  • 序列信息的捕捉能力:RNN通过循环结构能够有效地捕捉前后数据点之间的依赖关系,适合于需要考虑上下文信息的任务。
  • 应用广泛:RNN被广泛应用于自然语言处理、语音识别、时间序列预测等任务中。

缺点:

  • 梯度消失与爆炸问题:在训练过程中,由于梯度需要通过多层的链式法则进行反向传播,RNN容易遇到梯度消失或梯度爆炸的问题,导致难以捕捉长序列的依赖关系。
  • 训练效率低:RNN的计算过程是逐步进行的,这使得其训练速度相对较慢,且在长序列时训练更加困难。

2. LSTM 长短期记忆

       长短期记忆网络(LSTM,Long Short-Term Memory) 是一种特别设计用于解决传统递归神经网络(RNN)在处理长序列时面临的梯度消失问题的模型。它在标准RNN的基础上引入了门控机制,通过这种“记忆单元”有效地控制信息的流动,使得LSTM能够捕捉更长时间范围的依赖关系。 LSTM能记住并忘记不相关的信息,因此可以避免梯度消失问题。

        RNN只能记住上一时刻的输出,而LSTM可以进行“选择性记忆”,记住重要的事情,对不重要的事情选择性遗忘,在RNN的基础上多了一条支路,如图中粉色球所示。

        LSTM的核心在于其“记忆单元”结构,其中:

  • 输入门(Input Gate):决定当前输入的信息是否更新到记忆单元中。输入门包含两个部分:一个是 Sigmoid 激活函数,决定哪些信息要更新;另一个是 tanh 激活函数,生成新的候选值(可能被加入到记忆单元中)。

  • 遗忘门(Forget Gate):决定遗忘多少先前的记忆。它的作用是过滤掉不需要的信息。遗忘门的输入是当前的输入 x_t 和上一时刻的隐藏状态 h_{t-1},通过一个 Sigmoid 激活函数输出一个介于 0 到 1 之间的值,表示每个记忆单元的遗忘程度。

  • 更新记忆单元(Memory Cell Update):通过遗忘门和输入门来更新记忆单元 C_t: 

  • 输出门(Output Gate):决定记忆单元中的信息有多少需要输出。它通过 Sigmoid 函数生成输出门的控制值,然后将更新后的记忆单元 C_t 通过 tanh 激活函数映射到一个输出范围,最后与输出门的控制值相乘,得到最终的输出 h_t

LSTM的优缺点

优点:

  • 解决梯度消失问题:LSTM通过引入门控机制,允许模型保留长期信息,从而避免了传统RNN中的梯度消失问题。它能够有效地捕捉长时间依赖关系。

  • 长序列建模:由于LSTM的门控结构,模型可以有效地记住重要的信息,并能够忽略不相关的信息。因此,LSTM特别适用于长序列数据的处理。

  • 灵活性:LSTM能够处理各种类型的序列任务,如自然语言处理(NLP)、语音识别、时间序列预测等。

缺点:

  • 计算复杂度较高:相比传统的RNN,LSTM在每个时间步需要进行更多的计算,导致训练和推理的时间开销更大。

  • 难以捕捉超长时间的依赖:尽管LSTM比传统RNN能有效捕捉长时间依赖关系,但在处理非常长的序列时,它仍然可能面临记忆溢出的问题。为了解决这个问题,一些改进的模型(如 GRU、Attention、Transformer)被提出。

3. GRU 门控循环单元

        GRU(Gated Recurrent Unit)是一种与LSTM类似的递归神经网络(RNN)变种,旨在通过引入门控机制来缓解传统RNN和LSTM在长序列学习中的梯度消失问题。GRU相较于LSTM更加简洁,具有更少的参数,因此计算开销较低,但在许多任务中,它的性能与LSTM相当。

     

                GRU通过两个主要的门控机制来控制信息流:重置门(Reset Gate) 更新门(Update Gate)。这两个门决定了哪些信息应该被忘记,哪些信息应该被保留或更新。与LSTM相比,GRU没有单独的记忆单元,而是直接通过隐藏状态来维护长期记忆。

  • 重置门(Reset Gate):重置门控制着如何使用过去的隐藏状态来计算当前时刻的候选状态。如果重置门的值接近0,则表示忽略过去的隐藏状态,仅依赖当前输入。

  • 更新门(Update Gate):更新门决定了当前的隐藏状态有多少来自于上一时刻的隐藏状态,多少来自于当前的候选状态。更新门使得GRU能够在每个时刻保持对历史信息的控制。

 

  • 候选隐藏状态(Candidate Hidden State):在计算候选隐藏状态时,GRU会根据重置门的输出来决定如何结合当前输入和前一时刻的隐藏状态。 

  • 最终隐藏状态(Hidden State):最终的隐藏状态由上一时刻的隐藏状态和当前候选隐藏状态通过更新门加权平均得到。

GRU的优缺点

优点:

  • 参数较少,计算效率高:与LSTM相比,GRU的结构更简洁,只有两个门(更新门和重置门),因此比LSTM少了一个门(输入门)和一个记忆单元。这使得GRU模型的参数更少,计算效率更高。

  • 较好的性能:尽管GRU的结构简化了很多,但它通常在许多任务中与LSTM性能相似,甚至在某些任务中表现得更好。

  • 训练速度更快:由于GRU模型的计算图更小,训练速度通常比LSTM快,特别是在数据集较大时。

缺点:

  • 性能可能不如LSTM在某些任务中:虽然GRU在许多任务中表现得和LSTM差不多,但在一些复杂的任务(如需要极长时间依赖关系的任务)中,LSTM可能会更具优势,因为它的结构更为精细。

4. 深度RNN

        深层RNN(Deep Recurrent Neural Network) 是通过在传统的单层RNN基础上叠加多个循环层(即多层RNN)来构建的神经网络。深层RNN的主要目标是通过增加网络的层数,提升其学习和表示能力,尤其是在处理复杂的时序数据时,能够捕捉到更加复杂的模式和特征。

5. 双向RNN

        双向RNN(Bidirectional Recurrent Neural Network) 是一种特殊类型的RNN,旨在通过考虑序列的前后上下文信息来改进传统RNN的性能。与标准的单向RNN不同,双向RNN同时使用两个RNN层:一个按照正序(从前到后)处理输入序列,另一个按照反序(从后到前)处理输入序列。

        双向RNN的结构在标准RNN的基础上有所扩展:

  • 前向RNN:处理输入序列的正序(从左到右),依赖于当前时刻及之前时刻的信息。
  • 反向RNN:处理输入序列的反序(从右到左),依赖于当前时刻及之后时刻的信息。
  • 双向连接:正向RNN和反向RNN的输出会结合起来,通常是通过拼接(concatenation)或加权求和的方式。

6. Transformer模型

        Transformer通过自注意力机制捕捉序列中各个元素之间的关系,并通过多层堆叠的编码器和解码器进行信息处理。与RNN和CNN相比,Transformer可以更好地并行计算并处理长程依赖。

参考资料:

【循环神经网络】5分钟搞懂RNN,3D动画深入浅出_哔哩哔哩_bilibili

【GRU 模型】三招让你对她念念不忘_哔哩哔哩_bilibili

【官方双语】编码、解码神经网络,一个视频讲清楚,seq2seq模型_哔哩哔哩_bilibili

59 双向循环神经网络【动手学深度学习v2】_哔哩哔哩_bilibili

54 循环神经网络 RNN【动手学深度学习v2】_哔哩哔哩_bilibili

https://www.bilibili.com/video/BV1c54y1E7YP/?spm_id_from=333.1391.0.0&p=2

58 深层循环神经网络【动手学深度学习v2】_哔哩哔哩_bilibili

57 长短期记忆网络(LSTM)【动手学深度学习v2】_哔哩哔哩_bilibili

56 门控循环单元(GRU)【动手学深度学习v2】_哔哩哔哩_bilibili

【LSTM长短期记忆网络】3D模型一目了然,带你领略算法背后的逻辑_哔哩哔哩_bilibili


原文地址:https://blog.csdn.net/weixin_62403234/article/details/144278120

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!