万字长文解读深度学习——循环神经网络RNN、LSTM、GRU、Bi-RNN

news2024/11/26 12:25:20

🌺历史文章列表🌺

  1. 深度学习——优化算法、激活函数、归一化、正则化
  2. 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸
  3. 深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总
  4. 万字长文解读深度学习——卷积神经网络CNN
  5. 万字长文解读深度学习——循环神经网络RNN、LSTM、GRU、Bi-RNN
  6. 万字长文解读深度学习——Transformer
  7. 万字长文解读深度学习——GPT、BERT、T5
  8. 万字长文解读深度学习——ViT、ViLT、DiT
  9. 万字长文解读深度学习——CLIP、BLIP
  10. 万字长文解读深度学习——AE、VAE
  11. 万字长文解读深度学习——GAN
  12. 万字长文解读深度学习——训练、优化、部署细节

推荐阅读

深度学习知识点全面总结
如何从RNN起步,一步一步通俗理解LSTM
深度学习之RNN(循环神经网络)
循环神经网络(RNN与LSTM)


文章目录

  • 文本特征提取的方法
    • 1. 基础方法
      • 1.1 词袋模型(Bag of Words, BOW)
        • 工作原理
        • 举例
        • 优点
        • 缺点
      • 1.2 TF-IDF(Term Frequency-Inverse Document Frequency)
        • 工作原理
        • 举例
        • 优点
        • 缺点
      • 1.3 TF-IDF的改进——BM25
        • 优化
      • 1.4 N-Gram 模型
        • 工作原理
        • 举例
        • 优点
        • 缺点
    • 2. 词向量(Word Embeddings)
      • 2.1 Word2Vec
        • 工作原理
        • 举例
        • 优点
        • 缺点
      • 2.2 FastText
        • 工作原理
        • 优点
        • 缺点
    • 3. 预训练模型:BERT(Bidirectional Encoder Representations from Transformers)
        • 工作原理
        • 优点
        • 缺点
    • 总结
  • RNN
    • RNN 参数
    • RNN 的特点
    • RNN 的局限性
    • 前向传播的核心计算
      • 隐状态更新
      • 输出更新
    • RNN 的训练流程
      • 1. 输入准备
      • 2. 前向传播(Forward Pass)
      • 3. 计算损失(Loss Calculation)
      • 4. 反向传播(Backward Pass)
      • 5. 参数更新
    • RNN 的推理流程
      • 1. 输入准备
      • 2. 前向传播
      • 3. 生成输出
      • 4. 推理结束
    • RNN参数初始化
  • LSTM(Long Short-Term Memory)
      • LSTM 的核心部件
      • LSTM 的公式和工作原理
        • (1) 遗忘门(Forget Gate)
        • (2) 输入门(Input Gate)
        • (3) 更新记忆单元状态
        • (4) 输出门(Output Gate)
      • LSTM 的流程总结
      • LSTM 的优点
      • LSTM 的局限性
  • GRU(Gated Recurrent Unit)
      • GRU 的基本结构
      • GRU 的工作原理与公式
        • (1) 更新门(Update Gate)
        • (2) 重置门(Reset Gate)
        • (3) 生成候选隐藏状态(Candidate Hidden State)
        • (4) 隐藏状态更新
      • GRU 的优点
      • GRU 的局限性
  • GRU 与 LSTM 的对比
  • Bi-RNN
      • Bi-RNN 的结构
      • Bi-RNN 的工作原理
      • Bi-RNN 的特点
  • RNN、LSTM、GRU 和 Bi-RNN 总结
  • 全连接层在各神经网络模型中的作用

文本特征提取的方法

1. 基础方法

1.1 词袋模型(Bag of Words, BOW)

词袋模型最简单的方法。它将文本表示为一个词频向量不考虑词语的顺序或上下文关系,只统计每个词在文本中出现的频率。

工作原理
  1. 构建词汇表:对整个语料库中的所有词汇建立一个词汇表(也称为词典)。每个文档中的每个词都与词汇表中的一个位置对应。
  2. 生成词频向量:对于每个文本(文档),生成一个与词汇表长度相同的向量。向量中每个元素表示该词在文档中出现的次数(或者是否出现,用二进制表示)。
举例

假设有两个句子:

  • 句子 1:猫 喜欢 鱼
  • 句子 2:狗 不 喜欢 鱼

词汇表 = [“猫”, “狗”, “喜欢”, “不”, “鱼”]

  • 句子 1 的词袋向量表示为:[1, 0, 1, 0, 1]
  • 句子 2 的词袋向量表示为:[0, 1, 1, 1, 1]
优点
  • 简单直观,易于实现,有效地表示词频信息。
缺点
  • 忽略词序:词袋模型无法捕捉词语的顺序,因此在语义表达上有局限。
  • 高维稀疏:对于大词汇表,词袋模型会生成非常长的特征向量,大多数元素为 0,容易导致稀疏矩阵,影响计算效率
  • 受到常见词的影响:常见词(如 “the”、“and” 等)可能在各类文档中频繁出现,但对语义贡献较少,词袋模型会受到这些高频词的影响,降低模型的效果。

1.2 TF-IDF(Term Frequency-Inverse Document Frequency)

TF-IDF 是对词袋模型的改进,它为词语赋予不同的权重,来衡量每个词在文档中的重要性。与词袋模型相比,TF-IDF 不仅考虑词频,还考虑词的普遍性,以避免常见词(如"the"、“and”)的影响

工作原理

在这里插入图片描述

举例

对于句子“猫 喜欢 鱼”和“狗 不 喜欢 鱼”,假设 “喜欢” 出现在所有文档中,IDF 会给它较低的权重,而像 “猫”、“狗” 这样的词会有较高的 IDF 权重,因为它们只出现在一部分文档中。

优点
  • 更准确地反映词的重要性,避免了词袋模型中常见词占主导地位的情况。尤其适用于文本分类任务。
缺点
  • 稀疏矩阵:虽然词频的权重经过调整,但词汇表的大小仍然很大,容易产生稀疏矩阵问题
  • 忽略词序:仍然无法捕捉词语之间的顺序和上下文关系

1.3 TF-IDF的改进——BM25

BM25对TF和IDF进行加权,同时考虑文档长度对相关性的影响,使得对较短和较长文档的评分更加合理

BM25 的计算公式如下:
在这里插入图片描述
TF-IDF 中的 IDF(逆文档频率)使用 图片描述来衡量词的普遍性。然而这种计算方式可能会导致在某些极端情况下(如 df(t) = 0 )出现不合理的结果。
BM25 对 IDF 进行了小改进,以提高在极端情况下的稳定性:
在这里插入图片描述
这种改进的 IDF 计算在文档数量较少或者某个词的出现频率极高时,能提供更合理的 IDF 值,增加了 BM25 的稳定性。

优化

相比于 TF-IDF,BM25 主要做了以下改进:

  • 非线性词频缩放:通过 k 1 k_1 k1 控制词频TF饱和 ,避免 TF 值无限增大导致的偏差。
  • 文档长度归一化:使用参数 b b b调整文档长度对评分的影响,防止长文档得分偏高。
  • 改进的 IDF 计算使用平滑后的 IDF 计算,保证在极端情况下的稳定性
  • 查询词频考虑:在评分中更合理地衡量查询中词频的影响,提高了对复杂查询的检索效果。

1.4 N-Gram 模型

N-Gram 模型是一种基于词袋模型扩展方法,它通过将词组作为特征,来捕捉词语的顺序信息

工作原理
  • N-Gram 是指在文本中提取连续的 n 个词组成的词组作为特征。当 n=1 时,即为 unigram(单词级别特征);当 n=2 时,即为 bigram(双词组特征);当 n=3 时,即为 trigram(词三元组特征)。

  • 在提取 N-Gram 时,模型不仅关注单个词,还捕捉到词与词之间的顺序和依赖关系。例如,2-Gram 模型会将句子分解为相邻的两词组合。

举例

对于句子“猫 喜欢 吃 鱼”,2-Gram 模型会提取出以下特征:

  • [“猫 喜欢”, “喜欢 吃”, “吃 鱼”]
优点
  • 捕捉到顺序和依赖关系,比单词级别的特征表达更丰富。n 越大,模型捕捉的上下文信息越多。
缺点
  • 维度膨胀:n 值越大,特征向量的维度会急剧增加,容易导致稀疏矩阵和计算复杂度升高。
  • 对长文本,N-Gram 模型可能会生成非常多的组合,计算资源消耗较大

2. 词向量(Word Embeddings)

词向量是现代 NLP 中的关键特征提取方法,能够捕捉词语的语义信息。常见的词向量方法包括 Word2Vec、GloVe、和 FastText。词向量的核心思想是将每个词表示为一个低维的、密集的向量,词向量之间的相似性能够反映词语的语义相似性

2.1 Word2Vec

Word2Vec 是一种使用浅层神经网络学习词向量的模型,由 Google 在 2013 年提出。它有两种模型架构:CBOW 和 Skip-gram。

工作原理
  • CBOW(Continuous Bag of Words)根据上下文中的词语来预测中心词。模型输入是上下文词语,输出是预测的中心词。
  • Skip-gram:与 CBOW 相反,它是根据中心词来预测上下文中的词语
举例

对于一个句子 “猫 喜欢 吃 鱼”,CBOW 会使用上下文 [“猫”, “吃”, “鱼”] 来预测 “喜欢”,而 Skip-gram 则会使用 “喜欢” 来预测上下文。

优点
  • 语义相似性:Word2Vec 生成的词向量能够捕捉词语之间的语义相似性。例如,“king” 和 “queen” 的词向量会非常相近。
  • 稠密向量:与词袋模型和 TF-IDF 生成的高维稀疏向量不同,Word2Vec 生成的词向量是低维的密集向量(如 100 维或 300 维),更加高效
缺点
  • 无法处理 OOV(未登录词):如果测试集中出现了训练集中未见过的词,Word2Vec 无法为其生成词向量。
  • 上下文无关:Word2Vec 生成的词向量是固定的,无法根据上下文变化来调整词向量

2.2 FastText

FastText 是 Facebook 提出的词向量方法,它是 Word2Vec 的改进版。FastText 通过将词分解为n-gram字符级别的子词,捕捉词的形态信息

工作原理
  • FastText 将词分解为多个字符 n-gram,然后对每个 n-gram 生成词向量。通过这种方式,FastText 可以捕捉到词语内部的形态信息,尤其对拼写错误或未登录词有较好的处理能力。
优点
  • 处理 OOV(未登录词):因为 FastText 基于子词生成词向量,它能够为未见过的词生成向量表示
  • 考虑词形信息:能够捕捉词的形态变化,例如词根、前缀、后缀等。
缺点
  • 计算复杂度较高:相比 Word2Vec,FastText 需要对每个词生成多个 n-gram,因此计算量更大。

3. 预训练模型:BERT(Bidirectional Encoder Representations from Transformers)

BERT 是一种基于 Transformer 架构的预训练语言模型,由 Google 于 2018 年提出。与传统的词向量方法不同,BERT 通过双向的 Transformer 网络,能够生成上下文相关的动态词向量。

工作原理
  • 双向Transformer:BERT 同时从词语的前后上下文学习词的表示,而不像传统的模型只从前向或后向学习。这样,BERT 能够捕捉到更丰富的语义信息。
  • 预训练任务
    1. 遮蔽语言模型(Masked Language Model, MLM):在训练时,BERT 会随机遮蔽部分词语,并要求模型预测这些词,从而让模型学到上下文的双向依赖关系。
    2. 下一句预测(Next Sentence Prediction, NSP):训练时,BERT 要预测两句话是否是连续的句子对,这让模型能够学习句子级别的关系。
优点
  • 上下文相关词向量:BERT 生成的词向量是上下文相关的。例如,“bank” 在句子 “I went to the bank” 和 “The river bank” 中会有不同的向量表示。
  • 强大的语义理解能力:BERT 在问答、阅读理解、文本分类等任务中表现非常好,能够捕捉到复杂的语义关系。
缺点
  • 计算资源需求大:BERT 是一个深层的 Transformer 模型,预训练和微调都需要大量的计算资源,训练时间较长。
  • 较慢的推理速度:由于模型较大,在实际应用中推理速度较慢,尤其在实时任务中。

BERT详细参考:https://lichuachua.blog.csdn.net/article/details/142980441

总结

方法工作原理优点缺点适用场景
词袋模型(BOW)将文本表示为词频向量不考虑词序和上下文简单直观,易实现,能够有效表示词频信息。忽略词序,生成高维稀疏向量。文本分类、信息检索
TF-IDF基于词袋模型考虑词在文档中的频率以及整个语料库中的普遍性,赋予不同词权重反映词的重要性,避免常见词主导影响,适用于文本分类。生成稀疏矩阵,无法捕捉词序和上下文关系文本分类、关键词提取
BM25基于 TF-IDF 的改进,考虑词频、文档长度、词重要性等因素,以计算每个词对文档匹配的相关性得分。 非线性词频缩放、 文档长度归一化改进的 IDF 计算更好地反映词在文档中的相关性,更适合信息检索,适用于长文档,计算匹配更准确。对参数敏感,适用性依赖于超参数调优,不能捕捉上下文关系。信息检索、文档排名
N-Gram捕捉连续 n 个词作为特征考虑词序信息能捕捉词语的顺序和依赖关系,n 越大捕捉的上下文信息越多。维度膨胀,计算资源消耗大。语言模型、短文本分类
Word2Vec使用浅层神经网络学习词向量,有 CBOWSkip-gram 两种架构。词向量能捕捉语义相似性,生成低维稠密向量,效率高。无法处理未登录词(OOV),词向量上下文无关。词嵌入、相似度计算、文本分类
FastText词分解为字符 n-gram,生成词向量,捕捉词的形态信息。能处理未登录词,捕捉词形信息,适合拼写错误和变形词。计算复杂度高于 Word2Vec。词嵌入、拼写纠错、文本分类
BERT基于双向 Transformer,通过预训练生成上下文相关的词向量,支持 Masked Language Model 和 Next Sentence Prediction生成上下文相关词向量,语义理解强,适用于复杂 NLP 任务。需要大量计算资源,训练和推理时间长。问答系统、文本分类、阅读理解
  • 传统方法:如词袋模型、TF-IDF 和 N-Gram 易于实现,但无法捕捉语义和上下文信息。
  • 词向量方法:如 Word2Vec 和 FastText 通过词嵌入表示词语的语义关系,适合语义相似度计算、文本分类等任务。FastText 能够处理未登录词。
  • 预训练模型:如 BERT,能够生成上下文相关的动态词向量,适用于更复杂的自然语言处理任务,但对计算资源的要求更高。

RNN

循环神经网络(RNN,Recurrent Neural Network)是一种用于处理序列数据等具有顺序关系的数据的神经网络。与传统的前馈神经网络不同,RNN 具有循环连接 ,允许信息通过隐藏状态在序列的不同时间步之间传播。这种结构使得RNN非常适合处理时间序列、文本数据、语音信号等具有顺序关系的数据

RNN 参数

在这里插入图片描述
其他相关参数:

  • 时间步(Time Steps):决定模型的循环次数,非可学习参数。
  • 损失函数(Loss Function):指导模型参数更新的依据,非可学习参数。
  • 学习率(Learning Rate):控制优化过程的步幅大小,超参数。

RNN 的特点

  1. 顺序处理:RNN 可以处理不同长度的输入序列,这是由于其内部结构允许将前一步的信息作为当前步的输入之一。
  2. 隐藏状态:RNN 具有隐藏状态,隐藏状态是前一个时间步的信息的压缩,并与当前输入一起决定下一时间步的输出。
  3. 权重共享:RNN 中每个时间步之间共享相同的网络权重( W h h W_{hh} Whh, W x h W_{xh} Wxh, W h y W_{hy} Why),减少了模型参数的数量,适合处理序列长度不同的问题。

RNN 的局限性

  1. 梯度消失与爆炸问题:在长序列处理中,由于反向传播算法在计算梯度时,RNN 容易出现梯度消失(gradient vanishing)或梯度爆炸(gradient exploding)的现象,导致模型难以学习长期依赖关系。
  2. 长时间依赖问题:RNN 处理长序列时,无法有效捕捉到前后相距较远的依赖关系,导致模型的性能下降。
  3. 并行化困难:由于 RNN 是逐时间步处理序列的,因此不容易并行化处理,这使得其训练时间较长。

前向传播的核心计算

在 RNN 中,当前时间步的输出不仅依赖于当前输入,还依赖于之前时间步的隐状态(hidden state)。隐状态是 RNN 中的一个内部存储器,它能够保存之前的时间步的信息,使得网络具备记忆能力。RNN 的计算公式如下:

隐状态更新

在这里插入图片描述

输出更新

在这里插入图片描述

RNN 的训练流程

RNN 的训练主要包括以下步骤:

1. 输入准备

在这里插入图片描述

2. 前向传播(Forward Pass)

逐个时间步执行前向传播,将输入数据逐步传递到隐藏层,计算每个时间步的隐藏状态和输出(上面的核心计算)。

  • 初始化隐藏状态:在时间步 t = 0 时,隐藏状态 h 0 h_0 h0通常初始化为 0 或随机值
  • 逐时间步的状态更新:对于每一个时间步 t ,计算当前时间步的隐藏状态和输出:
    在这里插入图片描述

3. 计算损失(Loss Calculation)

  • 损失函数:RNN 根据每个时间步的预测输出 y t y_t yt 和真实标签 y ^ t \hat{y}_t y^t计算损失。常见的损失函数包括:
    • 分类任务使用 交叉熵损失
    • 回归任务使用 均方误差(MSE)
      在这里插入图片描述

4. 反向传播(Backward Pass)

RNN 的反向传播主要通过**反向传播通过时间(Backpropagation Through Time, BPTT)**来更新权重。BPTT 是对标准反向传播算法的扩展,沿着时间轴进行梯度传递。

  • 反向传播的核心步骤
    在这里插入图片描述
  • 梯度消失问题:BPTT 在长时间序列上可能出现梯度消失或爆炸问题,尤其是当梯度逐步传递时,这限制了 RNN 捕捉长时依赖的能力。

5. 参数更新

  • 根据反向传播得到的梯度更新网络中的权重参数,如 W x h W_{xh} Wxh, W h h W_{hh} Whh, W h y W_{hy} Why,完成当前批次的训练。
  • 继续执行下一个批次的训练,直至完成所有训练数据的迭代。

RNN 的推理流程

RNN 的推理(inference)过程与训练过程中的前向传播类似,但没有反向传播和参数更新,主要是用于生成输出或进行预测。

1. 输入准备

  • 输入序列数据 X = [ x 1 , x 2 , . . . , x T ] X = [x_1, x_2, ..., x_T] X=[x1,x2,...,xT]
  • 不需要提供标签数据,因为推理阶段是无监督的,RNN 根据输入数据生成输出。

2. 前向传播

推理阶段执行与训练相同的前向传播过程:

  1. 初始化隐藏状态

    • 与训练时一样,隐藏状态 h 0 h_0 h0初始化为 0 或随机值。
  2. 逐时间步的状态更新
    在这里插入图片描述

3. 生成输出

  • 推理过程中,RNN 根据输入数据在每个时间步生成相应的输出 y t y_t yt
  • 在序列生成任务(如文本生成)中,RNN 的输出 y t y_t yt 可以作为下一个时间步的输入 x t + 1 x_{t+1} xt+1,从而生成一个完整的输出序列。

4. 推理结束

  • 推理结束时,RNN 已经生成了完整的输出序列或预测结果。

RNN参数初始化

RNN 的参数初始化策略会影响训练过程的稳定性和收敛速度,以下是不同参数的初始化方法概述:

参数初始化方法适用场景
输入权重 ( W x h W_{xh} Wxh )Xavier 初始化、He 初始化、标准正态分布用于将输入映射到隐藏状态,适合不同激活函数场景
隐藏状态权重 ( W h h W_{hh} Whh )正交初始化、Xavier 初始化、He 初始化隐藏状态循环权重,正交初始化适合处理梯度问题
输出权重 ( W h y W_{hy} Why )Xavier 初始化、He 初始化用于将隐藏状态映射到输出层,取决于任务类型
偏置项 ( b h , b y b_h, b_y bh,by )零初始化、小随机数、遗忘门的偏置可初始化为较大正值(LSTM/GRU)偏置项通常为零初始化,特殊情况下设定固定值

通过使用合适的初始化方法,可以显著提高 RNN 的收敛性和模型的训练效果,尤其在处理长序列时,正交初始化Xavier 初始化能帮助缓解梯度消失和梯度爆炸问题。

LSTM(Long Short-Term Memory)

LSTM 是 RNN 的一种改进版本,旨在解决 RNN 的长时间依赖问题。LSTM 通过引入记忆单元(cell state)门控机制(gates) 来有效地控制信息流动,使得它在长序列建模中表现优异。

LSTM 的核心部件

在这里插入图片描述
LSTM 的核心结构由以下几部分组成:

  • 记忆单元(Cell State):贯穿整个序列的数据流【图中的C】,能够存储序列中的重要信息,允许网络长时间保留重要的信息。
  • 隐藏状态(Hidden State):每个时间步的输出,LSTM 通过它来决定当前的输出和对下一时间步的传递信息。【RNN中就有】
  • 三个门控机制(Forget Gate、Input Gate、Output Gate):通过这些门控机制,LSTM 可以选择性地遗忘、存储、或者输出信息(具体在图中的结构参考下面具体介绍)。

LSTM 中最重要的概念是记忆单元状态和门控机制,它们帮助网络在长时间序列中保留重要的历史信息。

在 LSTM 中,隐藏状态是对当前时间步的即时记忆(短期记忆),而记忆单元是对整个序列中长期信息的存储(长期记忆)。

  1. 遗忘门(Forget Gate):根据当前输入和前一个时间步的隐藏状态,决定记忆单元哪些信息需要被遗忘
  2. 输入门(Input Gate):根据当前输入和前一时间步的隐藏状态,决定当前时间步输入对记忆单元的影响
  3. 输出门(Output Gate):根据当前的输入和前一时间步的隐藏状态以及记忆单元状态,决定当前时间步隐藏状态的输出/影响;(输出内容是从记忆单元中提取的信息);

LSTM 的公式和工作原理

在 LSTM 中,每个时间步 ( t ) 的计算分为以下几步:
图像参考:LSTM(长短期记忆网络)

(1) 遗忘门(Forget Gate)

在这里插入图片描述
在这里插入图片描述

遗忘门的作用:它根据当前输入前一个时间步的隐藏状态,选择哪些来自过去的记忆单元信息需要被遗忘

(2) 输入门(Input Gate)

在这里插入图片描述
在这里插入图片描述
输入门的作用:输入门通过 sigmoid 激活函数决定当前输入 ( x t x_t xt ) 和前一时间步的隐藏状态 ( h t − 1 h_{t-1} ht1 ) 对记忆单元的影响。结合候选记忆 ( C ~ t \tilde{C}_t C~t),输入门决定是否将当前输入的信息入到记忆单元中

(3) 更新记忆单元状态

在这里插入图片描述
在这里插入图片描述

记忆单元的作用:记忆单元 ( C t C_t Ct ) 根据遗忘门输入门的输出,保留了来自过去的长期信息,使得重要的历史信息能够长时间存储。

(4) 输出门(Output Gate)

在这里插入图片描述

输出门控制从记忆单元中提取多少信息作为当前时间步的隐藏状态 ( h_t ) 并输出。
在这里插入图片描述

输出门的作用:输出门根据当前的输入前一时间步的隐藏状态以及记忆单元状态决定当前的隐藏状态 ( h t h_t ht ) 的值,它不仅作为当前时间步的输出,还会传递到下一时间步。

LSTM 的流程总结

在每个时间步 ( t t t ),LSTM 会执行以下步骤:

  1. 遗忘门:根据当前输入和前一个时间步的隐藏状态,控制哪些来自上一个时间步的记忆单元信息需要被保留或遗忘。
  2. 输入门:根据当前输入和前一时间步的隐藏状态,决定当前输入信息是否更新到记忆单元中,通过候选记忆生成新的信息。
  3. 记忆单元状态更新:根据遗忘门和输入门的输出,更新当前时间步的记忆单元状态 ( C t C_t Ct )。
  4. 输出门:根据当前的输入和记忆单元状态,控制当前时间步的隐藏状态 ( h t h_t ht ) 的输出,隐藏状态会传递到下一时间步,作为当前的输出结果。

LSTM 的优点

LSTM 通过引入门控机制,可以选择性地控制信息的流动;记忆单元可以有效地保留长期信息避免了传统 RNN 中的梯度消失问题。因此,LSTM 能够同时处理短期和长期的依赖关系,尤其在需要保留较长时间跨度信息的任务中表现优异。

LSTM 的局限性

LSTM 的门控机制使得它的结构复杂,训练时间较长,需要更多的计算资源,尤其是在处理大规模数据时。依赖于序列数据的时间步信息,必须按顺序处理每个时间步,难以并行化处理序列数据。

GRU(Gated Recurrent Unit)

在这里插入图片描述

GRU 的基本结构

相比于 LSTM,GRU 的结构更为简洁:

  • 少了一个门控:GRU 合并 LSTM 中的遗忘门输入门,变为一个更新门来实现。
  • 没有单独的记忆单元状态:GRU 将 LSTM 中的记忆单元状态(Cell State)合并到隐藏状态(Hidden State) 中,隐藏状态既用于存储当前时间步的信息,也用于在时间步之间传递长期信息。

这种简化使得 GRU 具有更少的参数,训练速度更快,并且在某些任务上,GRU 的性能和 LSTM 相当甚至更优。

GRU 主要由两个门组成:
更新门

  • 输入前一时间步的隐藏状态 ( h t − 1 h_{t-1} ht1 )当前时间步的输入 ( x t x_t xt )
  • 作用:决定当前时间步的隐藏状态 多少旧的信息需要保留 ( h t − 1 h_{t-1} ht1 ) ,以及多少新的信息需要加入 ( x t x_t xt )

重置门

  • 输入前一时间步的隐藏状态 ( h t − 1 h_{t-1} ht1 )当前时间步的输入 ( x t x_t xt )
  • 作用:控制生成新的候选隐藏状态时,前一时间步的隐藏状态 ( h t − 1 h_{t-1} ht1 ) 被遗忘或保留的程度

这两个门决定了每个时间步的信息如何被保留、更新或丢弃。通过这两个门,GRU 能够高效地捕捉短期和长期的依赖关系。

GRU 的工作原理与公式

在 GRU 中,给定一个输入序列 ( x 1 , x 2 , . . . . . . , x T x_1, x_2, ......, x_T x1,x2,......,xT),每个时间步 ( t t t ) 的计算过程分为以下几个步骤:

(1) 更新门(Update Gate)

更新门 Z t Z_t Zt 控制着当前时间步的隐藏状态前一时间步的隐藏状态之间的融合。它决定了多少旧的信息 h t − 1 h_{t-1} ht1需要保留,以及多少新的信息 x t x_t xt需要加入,从而控制隐藏状态的更新。

在这里插入图片描述

(2) 重置门(Reset Gate)

重置门 r t r_t rt决定如何将前一时间步的隐藏状态( h t − 1 h_{t-1} ht1 ) 当前输入 ( x t x_t xt ) 结合生成新的候选隐藏状态。它控制前一时间步的隐藏状态 ( h t − 1 h_{t-1} ht1 ) 在多大程度上被遗忘
在这里插入图片描述

(3) 生成候选隐藏状态(Candidate Hidden State)

结合当前输入 ( x t x_t xt ) 和部分前一时刻隐藏状态信息和重置门的输出 ( r t ∗ h t − 1 r_t * h_{t-1} rtht1 ) 生成的候选隐藏状态 ( h ~ t \tilde{h}_t h~t )
在这里插入图片描述

(4) 隐藏状态更新

最终的隐藏状态 ( h t h_t ht ) 是根据更新门 ( z t z_t zt ) 的输出来决定的。更新门 ( z t z_t zt ) 控制了当前隐藏状态 ( h t h_t ht ) 是更依赖于上一时刻的隐藏状态 ( h t − 1 h_{t-1} ht1 ) 还是新计算的候选隐藏状态 ( h ~ t \tilde{h}_t h~t )。
在这里插入图片描述

GRU 的优点

  • GRU 和 LSTM 一样,通过门控机制可以有效地缓解梯度消失问题。
  • 由于 GRU 的结构比 LSTM 简单,没有记忆单元状态,门的数量也较少,因此 GRU 的训练速度更快,计算效率高
  • 在许多任务中,GRU 的表现与 LSTM 相当,尤其在较短的序列数据上,GRU 甚至表现得更好

GRU 的局限性

  • 灵活性稍低:由于缺少独立的记忆单元状态,GRU 对非常长的依赖关系和复杂序列的处理能力可能不如 LSTM 强大。
  • 统一的隐藏状态:在 GRU 中,隐藏状态既负责短期信息的存储,也负责长期信息的传递。无法更好地分离短期和长期信息。

GRU 与 LSTM 的对比

特性GRULSTM
门控机制2 个门:更新门、重置门3 个门:输入门、遗忘门、输出门
记忆状态没有单独的记忆单元状态,只有隐藏状态有记忆单元状态和隐藏状态
结构复杂性结构较简单,参数较少结构复杂,参数较多
处理长依赖表现较好,能捕捉长期依赖更适合处理复杂的长时间依赖
计算效率相对较高,训练时间更快计算开销较大,训练时间较长
  • 序列较短时:在处理较短的序列时,GRU 的表现通常与 LSTM 相当甚至更好,由于 GRU 的结构更简单、计算效率更高,通常优先选择 GRU。
  • 序列较长或依赖关系复杂时:在处理较长序列或有复杂长期依赖关系的任务时,LSTM 的表现通常更优,因为 LSTM 能够更灵活地通过记忆单元状态存储和传递长期信息。
  • 计算资源有限时:如果对计算资源或训练时间有较高要求,GRU 是更好的选择,因为它参数更少、计算效率更高。

Bi-RNN

Bi-RNN 通过引入双向信息流,使网络能够同时考虑从左到右(前向)和从右到左(后向)的信息流动。计算每个时间步的输出时,Bi-RNN 不仅考虑当前时间步之前的信息,还考虑之后的信息,从而提升了模型对时间序列依赖的捕捉能力。

Bi-RNN 的结构

Bi-RNN 的结构与传统 RNN 不同的是,它由两个独立的 RNN 层组成:一个是处理输入序列的前向 RNN,另一个是处理输入序列的后向 RNN。这两个 RNN 层分别处理序列的正向和反向信息流,然后将它们的输出进行组合,生成最终的输出。

Bi-RNN 的工作原理

Bi-RNN 的基本工作流程如下:

  1. 输入序列:网络接收一个输入序列 ( x_1, x_2, …, x_T ),并同时将序列传递给前向 RNN 和后向 RNN。
  2. 前向 RNN:前向 RNN 从序列的第一个时间步开始,逐步处理输入序列,并生成每个时间步的前向隐藏状态 ( \overrightarrow{h_t} )。
  3. 后向 RNN:后向 RNN 从序列的最后一个时间步开始,逐步反向处理输入序列,并生成每个时间步的后向隐藏状态 ( \overleftarrow{h_t} )。
  4. 组合输出:在每个时间步 ( t ),将前向隐藏状态和后向隐藏状态进行组合,生成最终的输出 ( y_t )。
  5. 输出序列:最终输出的序列 ( y_1, y_2, …, y_T ) 同时考虑了输入序列的前后信息。

Bi-RNN 的特点

  1. 前后信息的整合:双向 RNN 能够同时利用序列的前后信息,因此在处理像语音、文本等需要上下文信息的任务中表现更好。
  2. 适合全局依赖任务:Bi-RNN 通过从两个方向处理数据,可以捕捉到更全局的依赖关系。
  3. 双倍计算量:由于需要处理两个方向的序列,因此计算复杂度比单向 RNN 高。

RNN、LSTM、GRU 和 Bi-RNN 总结

特性RNNLSTMGRUBi-RNN
结构单向循环结构,只有隐藏状态有记忆单元状态和隐藏状态,三门控制信息流只有隐藏状态,合并了输入门和遗忘门双向结构,有前向和后向两个独立的 RNN
记忆能力适合处理短期依赖,长序列时有梯度消失问题能有效处理长时依赖,解决梯度消失问题简化的版本,参数更少,能处理长短期依赖能同时捕捉序列的前后信息,适合上下文相关任务
门机制无门控机制有输入门、遗忘门和输出门有更新门和重置门,控制信息的保留和更新没有门机制,双向结构通过前向和后向的组合增强
计算复杂度低,参数少,计算速度快复杂度较高,三门结构增加计算量相对简单,参数和计算量比 LSTM 少计算量大,需两次遍历输入序列,较高开销
优点结构简单,适合短序列建模能捕捉长短期依赖,解决梯度消失问题训练效率高,能捕捉长短期依赖能同时利用历史和未来信息,捕捉前后文依赖
缺点难以捕捉长时间依赖,容易梯度消失或爆炸训练时间较长,计算资源需求大虽然简化了结构,但对复杂依赖建模较弱需要双向处理,实时性差,计算开销大
适用场景短期时间序列预测、简单的文本处理任务长时间序列任务,如机器翻译、文本生成适合资源受限、需要较快训练的任务自然语言处理、语音识别、视频分析等上下文任务
应用示例基本序列预测、时间序列分类机器翻译、语言模型、文本分类、对话系统语音识别、时间序列预测、情感分析命名实体识别、语义角色标注、情感分类、语音识别
  • RNN:适合处理短期依赖的简单任务,结构较为简单,但在处理长序列时容易出现梯度消失问题。
  • LSTM:通过记忆单元和门控机制解决了梯度消失问题,擅长处理长时依赖任务,适合复杂的时间序列建模。
  • GRU:LSTM 的简化版本,具有较少的参数和更高的计算效率,适合在需要较快训练的任务中使用,性能上通常与 LSTM 相当。
  • Bi-RNN:双向结构能够同时捕捉序列中的前向和后向信息,非常适合自然语言处理和语音处理等需要利用上下文信息的任务。

这些网络结构都是处理序列数据的基础工具,选择哪一种网络通常取决于任务的复杂性和计算资源。

全连接层在各神经网络模型中的作用

全连接层(Fully Connected Layer, FC Layer)广泛应用于分类任务或回归任务的最后阶段。全连接层的主要作用是将上层提取的特征转换为具体的决策结果或输出。它在不同类型的神经网络模型中具有不同的作用。以下是全连接层在各类神经网络模型中的作用详细解释:

  1. MLP中,全连接层是主要计算单元,完成输入到输出的映射
  2. CNN中,全连接层主要用于整合局部特征并生成分类结果
  3. RNNLSTM中,全连接层将时间序列特征映射为输出结果
  4. Transformer模型中,全连接层参与注意力机制和输出映射
  5. GAN中,全连接层用于潜在空间和图像特征之间的映射
  6. 自编码器中,全连接层用于特征压缩和重构
  7. 注意力机制中,全连接层用于计算注意力得分并变换上下文向量

无论在哪种神经网络中,全连接层的核心作用都是将前一层的特征进一步映射到目标空间,形成最后的输出或决策。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2237551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文了解什么是腾讯云开发

关于云开发的猜想 说到云开发,作为开发者的大家是否大概就有了想法。比如说过去的开发工作都是在自己本地电脑的开发工具,比如IDEA开发工具进行开发的,开发完成后再部署到服务器测试以及上线。那么腾讯云开发,是不是就是不用本地…

双指针算法的妙用:提高代码效率的秘密(2)

双指针算法的妙用:提高代码效率的秘密(2) 前言: 小编在前几日讲述了有关双指针算法两道题目的讲解,今天小编继续进行有关双指针算法习题的讲解,老规矩,今天还是两道题目的讲解,希望…

【Python】从入门开始抓取你想要的电影,一周可掌握基础,附完整源码

Python学习很简单,只是你走进了误区。 为什么你一定要先掌握枯燥的基础点后,再去做实际操作呢? 其实,你根本坚持不了那么长时间,但实际上你可以直接去做python项目。 不信?看看我做这个项目的思路&#x…

逐梦代码深林:Linux编译之舞,链接之诗——自举、动静态库的浪漫旅程

文章目录 问题引入,为什么要进行编译->汇编?一、详细解释编译器自举1. 从最初的二进制编程到汇编2. 第一代汇编编译器的诞生3. 编译器自举的出现:从汇编到更高级的编译器4. 自举的延续:从汇编到高级编程语言5. 为什么要进行编译器自举&am…

AI 写作(六):核心技术与多元应用(6/10)

一、AI 写作的核心技术概述 AI 写作在当今数字化时代正发挥着越来越重要的作用。它不仅极大地提高了写作效率,还为不同领域带来了创新的可能性。 AI 写作的核心技术主要包括基于模板的文本生成和基于深度学习的文本生成。基于模板的文本生成通常依赖预先设定的模板…

米家通过HomeAssistant控制笔记本电脑开关机

米家通过HomeAssistant控制笔记本电脑开关机 配置HomeAssistant配置EMQX mqtt自动化配置电脑关机实现电脑开机实现(网络唤醒WOL包) 环境准备: HomeAssistant:能配置接入米家的设备,我这里采用fnos安装MQTT服务器&…

QT信号和槽与自定义的信号和槽

QT信号和槽与自定义的信号和槽 1.概述 这篇文章介绍下QT信号和槽的入门知识,通过一个案例介绍如何创建信号和槽,并调用他们。 2.信号和槽使用 下面通过点击按钮关闭窗口的案例介绍如何使用信号和槽。 创建按钮 在widget.cpp文件中创建按钮代码如下 …

环境背景文本到语音转换

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月9日23点20分 点击开启你的论文编程之旅https://www.aspiringcode.com/content?id100000000027&uida9ecaa6323844415b87…

MySQL初学之旅(1)配置与基础操作

目录 1.前言 2.正文 2.1数据库的发展历程 2.2数据库的基础操作 2.2.1启动服务 2.2.2创建与删除数据库 2.2.3数据类型 2.2.4创建表与删除表 2.3MySQL Workbench基础使用简介 3.小结 1.前言 哈喽大家好吖,今天博主正式开始为大家分享数据库的学习&#xff…

【环境搭建】使用Dockerfile构建容器搭建Kylin特定版本

Kylin的有些版本官方已经下架了,Docker Hub上也没镜像了,所以需要自己搭建以下,为了以后更方便快捷地使用,就编写了一个更轻量级的Dockerfile。 准备工作 本次搭建使用的源码包来自华为云镜像站,里面有Kylin各个版本…

【图】图学习

0 回顾数据结构逻辑 1 图的定义和基本术语 必须有顶点,可以没有边。 Cn2和2*Cn2(数学上的,n个顶点取2个顶点) 概念有些多。。。。。。 2 图的定义 3 图的存储结构 无向图的邻接矩阵 有向图的邻接矩阵 网(有权图&#…

基于RMD算法模型的信号传输统计特性的matlab模拟仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于RMD算法模型的信号传输统计特性的matlab模拟仿真。参考的文献如下: 即通过RMD随机中点位置模型算法,实现上述文献的几个仿真图。 2.…

【React】React 生命周期完全指南

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 React 生命周期完全指南一、生命周期概述二、生命周期的三个阶段2.1 挂载阶段&a…

软件工程 软考

开发大型软件系统适用螺旋模型或者RUP模型 螺旋模型强调了风险分析,特别适用于庞大而复杂的、高风险的管理信息系统的开发。喷泉模型是一种以用户需求为动力,以对象为为驱动的模型,主要用于描述面向对象的软件开发过程。该模型的各个阶段没有…

C++20 概念与约束(2)—— 初识概念与约束

1、概念 C20 中引入新的编译期关键字 concept 用于创建概念。个人认为将其翻译为“构思”更为贴切。直接使用时,它更像一个只能用于模板的布尔类型关键字。 而如果用于模板中,他会将模板类型先带入自身,当自身条件为 true 才会实例化模板&…

Everything软件实现FTP功能

Windows的文件共享和ftp实在难用,这里介绍一种新的局域网内共享文件的方法 下载 Everything 选择想要共享的文件,选择包含到数据库,注意:要在对应的分卷设置,共享文件夹名称不要包含中文字符,因为Windows底…

系统管理与规划师

综合 工业化、信息化两化融合:战略、资源、经济、设备和技术的融合 诺兰6时期:(初普控,整数成)初始、普及、控制、整合、数据管理、成熟期;技术转型期介于控制和整合间 IT战略规划 IT战略制定:使…

初始MQ(安装使用RabbitMQ,了解交换机)

目录 初识MQ一:同步调用二:异步调用三:技术选型 RabbitMQ一:安装部署二:快速入门三:数据隔离 java客户端一:快速入门二:workqueues三:Fanout交换机四:Direct交…

[C++11] 类中新特性的添加

默认的移动构造和移动赋值 在 C11 之前,编译器会为每个类自动生成默认的构造函数、析构函数、拷贝构造函数、拷贝赋值运算符等函数,以实现对象的创建、销毁和拷贝操作。但拷贝操作会复制整个对象的数据,效率低,尤其是在处理大对象…

emr上使用sparkrunner运行beam数据流水线

参考资料 https://time.geekbang.org/column/intro/167?tabcatalog Apache Beam和其他开源项目不太一样,它并不是一个数据处理平台,本身也无法对数据进行处理。Beam所提供的是一个统一的编程模型思想,而我们可以通过这个统一出来的接口来编…