深度学习笔记——循环神经网络RNN、LSTM、GRU、Bi-RNN

371 阅读7分钟

大家好,这里是好评笔记,本文为试读,查看全文请移步公主号:Goodnote。本文详细介绍面试过程中可能遇到的循环神经网络RNN、LSTM、GRU、Bi-RNN知识点。

6.png


@[toc]

文本特征提取的方法

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 主要做了以下改进:

  • 非线性词频缩放:通过k1k_1 控制词频TF饱和 ,避免 TF 值无限增大导致的偏差。
  • 文档长度归一化:使用参数bb调整文档长度对评分的影响,防止长文档得分偏高。
  • 改进的 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 模型可能会生成非常多的组合,计算资源消耗较大

RNN

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

RNN 参数

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

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

RNN 的特点

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

RNN 的局限性

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

前向传播的核心计算

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

隐状态更新

在这里插入图片描述

输出更新

在这里插入图片描述

RNN 的训练流程

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

详细全文请移步公主号:Goodnote。

参考:欢迎来到好评笔记(Goodnote)!