认识深度学习中的循环神经网络(RNN、LSTM、GRU)相关知识

      大家好,我是带我去滑雪!

        循环神经网络(Recurrent Neural Network, RNN)是一种用于处理序列数据的神经网络。它的主要特点在于,在处理每个序列输入时,它会维护一个状态,这个状态会被保存下来并传入到下一个输入。 RNN将输入序列分解成时间步长序列,每个时间步长都会将当前的输入和前一个时间步的隐藏状态(如果存在的话)一起输入到神经网络中。这个隐藏状态可以认为是存储了过去的信息的“记忆”,它会随着时间步的递进被更新和传递。 该网络的结构是在时间轴方向上,每个时间步使用相同的结构参数,这使得网络能够处理任意长度的序列。此外,RNN还包括反向传播算法中的反向传播时间(Back Propagation Through Time, BPTT)算法,用于在训练数据上反向传播误差。 RNN的主要优势是能够对时间序列数据进行建模,特别还包括具有长期依赖关系的序列数据。例如,对于自然语言处理任务,RNN可以捕捉到词汇之间的依赖关系,这使得它能够自然地处理语音和文本数据。通常,RNN的变种如LSTM、GRU等,被应用于众多自然语言处理和语音处理任务,成为了这些领域的基础建模工具。

目录

1、认识序列数据

2、认识自然语言处理

3、基础循环神经网络

(1)循环神经网络的结构

(2)循环神经网络的种类

(3)循环神经网络的梯度消失问题

4、长短期记忆神经网络(LSTM)

5、门控循环单元神经网络(GRU)

6、文字数据向量化

(1)文字数据的One-hot编码

(2)词向量和词嵌入


1、认识序列数据

     序列数据是一种有顺序的向量数据(不一定是时间顺序),序列数据是指数据前后有关联性,例如DNA序列。序列数据也可能与时间顺序相关的序列数据,例如股市股价,如果是一种固定时间间隔的序列数据,则称为时间序列数据。

2、认识自然语言处理

     自然语言处理是指处理人类语言和文字的序列数据,其目的是让计算机能够了解语言,并能够使用语言进行对话。

      深度学习在自然语言处理中的应用:

  •  语言模型:语言模型(Language Model,LM)是自然语言处理中的重要模型,深度学习中的递归神经网络(Recurrent Neural Networks,RNN)以及其变种(比如LSTM和GRU)被广泛应用于语言模型的建模中;
  • 词向量:深度学习中的词向量模型常用的有Word2Vec、GloVe和FastText等模型,它们将词汇映射到低维向量空间中,使相似的词汇在向量空间中也更接近;
  • 文本分类:深度学习已经在文本分类任务中取得了成功,比如情感分析、新闻分类、垃圾邮件过滤等领域;
  • 机器翻译:机器翻译是指将一种语言的文本转换为另一种语言的文本。深度学习在机器翻译中也得到了广泛应用,比如Seq2Seq模型、Transformer模型等;
  •  命名实体识别(Named Entity Recognition,NER):命名实体识别任务是将文本中的实体识别出来,常用的深度学习模型包括LSTM-CRF等;
  • 知识图谱:深度学习在知识图谱中的应用也得到了广泛探索,比如使用图卷积网络作为知识图谱的学习模型,从而挖掘出更多的知识。

3、基础循环神经网络

(1)循环神经网络的结构

       循环神经网络(Recurrent Neural Network,RNN)是一种特殊的神经网络结构,可以应用于序列数据的建模,比如自然语言处理、语音识别、时间序列预测等领域。与前馈神经网络不同,RNN 中的神经元之间存在“时间依赖”关系。它的基本结构是一个由多个相同的神经网络层组成的序列,每个网络层都有一个“循环神经元”(Recurrent Neuron),代表着相邻时间步之间的信息传递和状态记录。在 RNN 中,当前时刻的输出不仅取决于当前输入,还取决于所有之前时刻的输入。

(2)循环神经网络的种类

        循环神经网络因为输出和输入的不同,可以分成多种类型的循环神经网络:

  • 一对多:一对多神经网络有一个输入和序列数据的输出,最类神经网络的目的是产生序列数据。例如,一张图片的输入可以产生图片文字说明或者产生音乐等;
  • 多对一:多对一循环神经网络是序列数据的输入,但只产生一个输出,这类网络的主要目的是分析情绪。例如,输入电影评论,可以输出正面情绪或者负面情绪的结果;
  • 多对多:多对多循环神经网络的输入与输出都是序列数据,按输入与输出的长度是否相同分成下面两种:等长时,每一个输入都有对应的输出,类似二元分类,例如判断一个位置的单词是否为一个人名。不等长时,常用于机器学习,例如将中文句子翻译成英文。

(3)循环神经网络的梯度消失问题

       循环神经网络(RNN)在处理序列数据时存在一种梯度消失的问题。这个问题是由于序列长度较长时,导致反向传播过程中梯度逐步缩小,最终趋近于零,从而无法更新网络的权重。具体来说,RNN 的反向传播算法会将上一时刻的梯度与当前时刻的梯度相乘,由于梯度通常是小于或等于一的数,多次相乘后会逐渐缩小到零。针对这个问题,有几种解决方案:

  • 梯度剪裁(Gradient Clipping):当梯度的范数超过一个设定的阈值时,将其强制截断到该阈值。这可以保持梯度大小的稳定性,从而防止梯度爆炸问题。

  • 长短时记忆循环神经网络(LSTM):LSTM 可以通过门(Gate)结构来控制信息的流动和保留,从而有效地解决了梯度消失的问题。

  • 简单循环神经网络(Simple RNN)的参数初始化:如果将循环神经网络的参数按照一定的规则初始化,可以在一定程度上缓解梯度消失的问题。例如,在使用 tanh 激活函数时,将输入权重矩阵初始化为小的随机数,可以使得神经元输出更接近于 0,从而避免了梯度消失问题。

  • 双向循环神经网络(Bidirectional RNN):双向循环神经网络能够同时考虑前向和后向的信息,从而能够更好地解决梯度消失问题。

4、长短期记忆神经网络(LSTM)

        长短期记忆网络(Long Short-Term Memory,LSTM)改良自循环神经网络(Recurrent Neural Network, RNN),它在解决序列数据处理中的长期依赖性问题方面取得了很好的效果。 LSTM 网络通过引入门控制机制,能够有效地学习并记忆长序列的信息。

       LSTM 组成部分包括:

  • 记忆单元(Memory Cell):负责存储和更新信息。
  • 输入门(Input Gate):决定加入新信息的数量,以及如何加入。
  • 遗忘门(Forget Gate):控制哪些信息应该被遗忘。
  • 输出门(Output Gate):决定将哪些信息传递到下一层。

     在每个时间步,LSTM 网络会根据上一个时间步的输出、上一个时间步的记忆状态以及当前时间步的输入来计算新的信息,同时更新记忆状态并输出结果。门控制机制的引入,使得 LSTM 网络能够自动学习长序列中的长期依赖关系,从而在多个应用场景中取得了出色的效果,例如语言建模、机器翻译、语音识别等。 需要注意的是,LSTM 网络本身也有一些变体,例如可分离式 LSTM、拓扑感知 LSTM、忆阻更新神经元 LSTM 等。这些变体在不同的任务中具有不同的优势和适用性。

    在循环神经网络中,它没有记忆能力区分哪些是长期记忆,哪些是短期记忆,对于时步间隔太久的数据,就会遗忘。而LSTM是改进的循环神经网络,它具有记忆能力,能够自动学习哪些数据需要保留久一点,哪些数据可以删除,能够保留面对现在问题所需的长期记忆数据。

5、门控循环单元神经网络(GRU)

     门控循环单元神经网络(GRU)是LSTM的改良版,它比LSTM结构更加简单,可以提供更快的执行速度并减少内存的使用。

     与LSTM相对应的记忆单元和门(输入门、遗忘门和输出门),GRU只有一个称为"更新门"的控制器。这个更新门决定了当前时刻应该把多少先前时刻的信息保留下来,同时也会忽略掉不必要的信息。同时,GRU还具有一个reset门,用来控制当前时刻的输入应该如何融入之前的隐藏层状态。 GRU网络的计算逻辑非常简单,它可以通过简单的线性变换和可微分的逻辑函数来实现。不同于LSTM网络,GRU网络并不使用记忆单元去掌管所有的信息,而是采用更新门和重置门来处理历史状态和当前输入之间的关系。该设计使得GRU网络参数更少,训练和预测速度更快,同时在一些时间序列预测、情感分析等任务中也能够取得很好的效果。

6、文字数据向量化

         文字数据向量化是指将声音、图片、文字数据转换成数值数据的张量。

(1)文字数据的One-hot编码

        文字数据的One-hot编码可以将每个词或字符表示成一个长度为词汇量的二进制向量,其流程如下:

  • 构建词典:首先需要对所有的文字(词或字符)进行编号,将每个文字映射为唯一的整数。通常使用出现频率较高的前N个文字作为词典。

  • 创建索引序列:在将每个文字编码为整数之后,需要将文本中的每个文字替换为在词典中的对应整数,形成一个整数序列。

  • One-hot编码:对于每个整数,需要将其表示成一个独热向量。具体实现是针对整数进行一维数组的切片,将切片对应的值设置为1,其余的为0。这样可以得到一个长度为词汇量的二进制向量作为每个文字的编码。

  • 序列合并:将所有的文字对应的独热向量按顺序排列,并将它们合并成一个二维矩阵,作为文本对应的One-hot编码表示。

(2)词向量和词嵌入

       词向量是一种常见的词嵌入方法,它将每个单词表示为一个实数向量。其中,每个单词都对应一个固定长度的实数向量,这个向量可以被视为该单词在一个高维度的向量空间中的位置。通常,这些向量会在预训练阶段使用较大量的语料库生成,训练好以后可以应用在下游的自然语言处理任务中。

       词嵌入是更广义的概念,包括了所有的将语言单元映射到向量空间的技术。除了词向量外,还有词袋模型、主题模型、隐含狄利克雷分配等词嵌入方法。


更多优质内容持续发布中,请移步主页查看。

若有问题可邮箱联系:1736732074@qq.com 

博主的WeChat:TCB1736732074

   点赞+关注,下次不迷路!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

带我去滑雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值