当前位置: 首页 > news >正文

深度学习笔记——循环神经网络RNN

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的循环神经网络RNN知识点。

在这里插入图片描述


文章目录

  • 文本特征提取的方法
    • 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参数初始化
  • 全连接层在各神经网络模型中的作用
  • 历史文章
    • 机器学习
    • 深度学习

大家好,这里是Goodnote(好评笔记)。本文详细介绍面试过程中可能遇到的循环神经网络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”)的影响

工作原理
  1. TF(词频):计算某个词在文档中出现的频率。
    T F ( t , d ) = 词 t 在文档 d 中的出现次数 文档 d 的总词数 TF(t,d)=\frac{词t在文档d中的出现次数}{文档d的总词数} TF(t,d)=文档d的总词数t在文档d中的出现次数
  2. IDF(逆文档频率):衡量词在整个语料库中的普遍性,出现频率越低的词权重越高。
    I D F ( t ) = log ⁡ ( N 1 + D F ( t ) ) IDF(t)=\log\left(\frac{N}{1 + DF(t)}\right) IDF(t)=log(1+DF(t)N)
    • 其中 N N N是文档总数, D F ( t ) DF(t) DF(t)是包含词 t t t的文档数。
  3. TF - IDF:将 T F TF TF I D F IDF IDF相乘,得到词在特定文档中的权重:
    T F − I D F ( t , d ) = T F ( t , d ) × I D F ( t ) TF - IDF(t,d)=TF(t,d)\times IDF(t) TFIDF(t,d)=TF(t,d)×IDF(t)
举例

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

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

1.3 TF-IDF的改进——BM25

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

BM25 的计算公式如下:

B M 25 ( q , d ) = ∑ t ∈ q I D F ( t ) ⋅ T F ( t , d ) ⋅ ( k 1 + 1 ) T F ( t , d ) + k 1 ⋅ ( 1 − b + b ⋅ ∣ d ∣ a v g d l ) BM25(q,d)=\sum_{t\in q}IDF(t)\cdot\frac{TF(t,d)\cdot(k_1 + 1)}{TF(t,d)+k_1\cdot(1 - b + b\cdot\frac{|d|}{avgdl})} BM25(q,d)=tqIDF(t)TF(t,d)+k1(1b+bavgdld)TF(t,d)(k1+1)
其中:

  • q q q 是查询, d d d 是文档, t t t 是查询中的词。
  • I D F IDF IDF是与 T F − I D F TF - IDF TFIDF相似的逆文档频率。
  • T F TF TF是词频。
  • k 1 k_1 k1 是调节词频饱和度的参数,通常取值范围为 [ 1.2 , 2.0 ] [1.2,2.0] [1.2,2.0]
  • b b b 是调节文档长度的参数,通常取值范围为 [ 0.0 , 1.0 ] [0.0,1.0] [0.0,1.0] b = 0.75 b = 0.75 b=0.75是一个常用的设置。
  • ∣ d ∣ |d| d是文档的长度(词数), a v g d l avgdl avgdl是语料库中文档的平均长度。

TF-IDF 中的 IDF(逆文档频率)使用 log ⁡ N d f ( t ) \log\frac{N}{df(t)} logdf(t)N来衡量词的普遍性。然而这种计算方式可能会导致在某些极端情况下(如 df(t) = 0 )出现不合理的结果。
BM25 对 IDF 进行了小改进,以提高在极端情况下的稳定性:

I D F ( t ) = log ⁡ N − d f ( t ) + 0.5 d f ( t ) + 0.5 IDF(t)=\log\frac{N - df(t)+ 0.5}{df(t)+ 0.5} IDF(t)=logdf(t)+0.5Ndf(t)+0.5

这种改进的 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详细参考历史/后续文章:[深度学习笔记——GPT、BERT、T5]

总结

方法工作原理优点缺点适用场景
词袋模型(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 参数

参数维度作用
输入权重矩阵 W x h W_{x h} Wxh ( d h i d d e n × d i n p u t ) (d_{hidden}\times d_{input}) (dhidden×dinput)将输入 x t x_t xt映射到隐藏状态,确定当前输入对隐藏层状态的影响。
隐藏状态权重矩阵 W h h W_{h h} Whh ( d h i d d e n × d h i d d e n ) (d_{hidden}\times d_{hidden}) (dhidden×dhidden)将前一时间步的隐藏状态 h t − 1 h_{t - 1} ht1传递到当前时间步 h t h_t ht,捕捉时间依赖关系。
输出权重矩阵 W h y W_{h y} Why ( d o u t p u t × d h i d d e n ) (d_{output}\times d_{hidden}) (doutput×dhidden)将隐藏状态 h t h_t ht映射为输出 y t y_t yt
隐藏层偏置向量 b h b_{h} bh ( d h i d d e n ) (d_{hidden}) (dhidden)增强隐藏层的灵活性,通过加偏置调整隐藏层的激活函数输出。
输出层偏置向量 b y b_{y} by ( d o u t p u t ) (d_{output}) (doutput)增强输出层的灵活性,通过加偏置调整输出层的结果。
激活函数用于隐藏层状态的非线性变换,常用 t a n h tanh tanh R e L U ReLU ReLU

其他相关参数:

  • 时间步(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 的计算公式如下:

隐状态更新

h t = f ( W h h h t − 1 + W x h x t + b h ) h_t=f(W_{h h}h_{t - 1}+W_{x h}x_t + b_{h}) ht=f(Whhht1+Wxhxt+bh)

  • h t h_t ht:时间步 t t t的隐藏状态,是通过上一时间步 t − 1 t - 1 t1的隐藏状态 h t − 1 h_{t - 1} ht1和当前的输入 x t x_t xt计算得到的。
  • W h h W_{h h} Whh:隐藏状态到隐藏状态的权重矩阵,用于表示时间步之间的状态传递。
  • W x h W_{x h} Wxh:输入到隐藏状态的权重矩阵,负责将当前输入 x t x_t xt映射到隐藏层。
  • b h b_{h} bh:隐藏层的偏置向量。
  • f f f:激活函数,通常使用 t a n h tanh tanh R e L U ReLU ReLU

输出更新

y t = g ( W h y h t + b y ) y_t = g(W_{hy}h_t + b_y) yt=g(Whyht+by)

  • y t y_t yt:时间步 t t t的输出。
  • W h y W_{hy} Why:隐藏状态到输出的权重矩阵。
  • b y b_y by:输出层的偏置。
  • g g g:输出层的激活函数,取决于具体的任务,如分类任务常用Softmax。

RNN 的训练流程

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

1. 输入准备

  • 输入数据:RNN处理的是序列数据,输入可以是时间序列、文本、语音等。输入通常表示为 X = [ x 1 , x 2 , … , x T ] X = [x_1, x_2, \ldots, x_T] X=[x1,x2,,xT],其中 x t x_t xt代表时间步 t t t时的输入。
  • 标签数据(监督学习):如果是监督学习任务,训练数据通常带有标签 Y = [ y 1 , y 2 , … , y T ] Y = [y_1, y_2, \ldots, y_T] Y=[y1,y2,,yT],表示每个时间步 t t t的目标输出。

2. 前向传播(Forward Pass)

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

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

(1). 隐藏状态更新:
h t = f ( W h h h t − 1 + W x h x t + b h ) h_t = f(W_{hh}h_{t - 1}+W_{xh}x_t + b_h) ht=f(Whhht1+Wxhxt+bh)

  • h t h_t ht:时间步 t t t的隐藏状态,是通过上一时间步 t − 1 t - 1 t1的隐藏状态 h t − 1 h_{t - 1} ht1和当前的输入 x t x_t xt计算得到的。
  • W h h W_{hh} Whh:隐藏状态到隐藏状态的权重矩阵,用于表示时间步之间的状态传递。
  • W x h W_{xh} Wxh:输入到隐藏状态的权重矩阵,负责将当前输入 x t x_t xt映射到隐藏层。
  • b h b_h bh:隐藏层的偏置向量。
  • f f f:激活函数,通常使用tanh或ReLU。

(2). 输出更新:
y t = g ( W h y h t + b y ) y_t = g(W_{hy}h_t + b_y) yt=g(Whyht+by)

  • y t y_t yt:时间步 t t t的输出。
  • W h y W_{hy} Why:隐藏状态到输出的权重矩阵。
  • b y b_y by:输出层的偏置。
  • g g g:输出层的激活函数,取决于具体的任务,如分类任务常用Softmax。

3. 计算损失(Loss Calculation)

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

总的损失是各个时间步损失的累加:
L = ∑ t = 1 T L o s s ( y t , y ^ t ) L=\sum_{t = 1}^{T}L_{oss}(y_t, \hat{y}_t) L=t=1TLoss(yt,y^t)

4. 反向传播(Backward Pass)

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

反向传播的核心步骤

  • 从时间步 T T T开始,逐步向前计算各个时间步的梯度,直至第一个时间步。
  • 在每个时间步,计算损失相对于输出 y t y_t yt、隐藏状态 h t h_t ht以及参数(权重和偏置)的梯度。
    • 对损失函数 L L L进行求导,得到每个时间步的梯度,并依次更新参数:
      W x h ← W x h − α ∂ L ∂ W x h W_{xh}\leftarrow W_{xh}-\alpha\frac{\partial L}{\partial W_{xh}} WxhWxhαWxhL
      W h h ← W h h − α ∂ L ∂ W h h W_{hh}\leftarrow W_{hh}-\alpha\frac{\partial L}{\partial W_{hh}} WhhWhhαWhhL
      W h y ← W h y − α ∂ L ∂ W h y W_{hy}\leftarrow W_{hy}-\alpha\frac{\partial L}{\partial W_{hy}} WhyWhyαWhyL
    • 其中 α \alpha α是学习率。
  • 梯度消失问题: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. 逐时间步的状态更新
  • 对每个时间步 t t t执行前向传播,计算隐藏状态 h t h_t ht和输出 y t y_t yt
    h t = f ( W x h x t + W h h h t − 1 + b h ) h_t = f(W_{xh}x_t + W_{hh}h_{t - 1}+b_h) ht=f(Wxhxt+Whhht1+bh)
    y t = g ( W h y h t + b y ) y_t = g(W_{hy}h_t + b_y) yt=g(Whyht+by)

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 初始化能帮助缓解梯度消失和梯度爆炸问题。

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

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

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

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

历史文章

机器学习

机器学习笔记——损失函数、代价函数和KL散度
机器学习笔记——特征工程、正则化、强化学习
机器学习笔记——30种常见机器学习算法简要汇总
机器学习笔记——感知机、多层感知机(MLP)、支持向量机(SVM)
机器学习笔记——KNN(K-Nearest Neighbors,K 近邻算法)
机器学习笔记——朴素贝叶斯算法
机器学习笔记——决策树
机器学习笔记——集成学习、Bagging(随机森林)、Boosting(AdaBoost、GBDT、XGBoost、LightGBM)、Stacking
机器学习笔记——Boosting中常用算法(GBDT、XGBoost、LightGBM)迭代路径
机器学习笔记——聚类算法(Kmeans、GMM-使用EM优化)
机器学习笔记——降维

深度学习

深度学习笔记——优化算法、激活函数
深度学习——归一化、正则化
深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总
深度学习笔记——卷积神经网络CNN

相关文章:

深度学习笔记——循环神经网络RNN

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的循环神经网络RNN知识点。 文章目录 文本特征提取的方法1. 基础方法1.1 词袋模型(Bag of Words, BOW)工作原…...

【Linux系统编程】—— 深度解析进程等待与终止:系统高效运行的关键

文章目录 进程创建再次认识fork()函数fork()函数返回值 写时拷贝fork常规⽤法以及调用失败的原因 进程终⽌进程终止对应的三种情况进程常⻅退出⽅法_exit函数exit函数return退出 进程等待进程等待的必要性进程等待的⽅法 进程创建 再次认识fork()函数 fork函数初识&#xff1…...

EPSANet2021笔记

来源: EPSANet: An Efficient Pyramid Squeeze Attention Block on Convolutional Neural Network 相关工作: #注意力机制 #多尺度特征表示 创新点: 贡献: 建立了长距离通道依赖关系有效获取利用不同尺度特征图的空间信息 问…...

CTTSHOW-WEB入门-信息搜集11-20

web11 1. 题目: 2. 解题步骤及思路:本题的flag已经给出,主要考点是考察域名的查询,通过查询有时候也可以得到一些有用的信息。 3. 相关知识点:查询域名可以使用nslookup命令使用方法如下:(windo…...

2025年1月19日(理论力学动静法)

动静法(Dynamic-Static Method)是理论力学中常用的一种分析方法,用来求解多自由度系统的平衡问题,尤其适用于静力学分析和动力学分析之间的转化。动静法通过引入虚拟的动力学效应,将静力学问题转化为一个动力学问题&am…...

iOS 性能优化:实战案例分享

摘要: 本文将深入探讨 iOS 性能优化的重要性,并通过一系列实际开发案例,展示如何解决常见的性能问题,包括内存管理、CPU 性能、网络性能、UI 性能和启动性能等方面的优化,帮助 iOS 开发者打造更流畅、高效的应用程序。…...

基于本地消息表实现分布式事务

假设我们有一个电商系统,包含订单服务和库存服务。当用户下单时,需要在订单服务中创建订单,同时在库存服务中扣减库存。这是一个典型的分布式事务场景,我们需要保证这两个操作要么都成功,要么都失败,以保证数据的最终一致性。 项目结构: 订单服务(Order Service)库存服务(Inv…...

select函数

系统调用 select()可用于执行 I/O 多路复用操作&#xff0c;调用 select()会一直阻塞&#xff0c;直到某一个或多个文件描述符成为就绪态&#xff08;可以读或写&#xff09;。其函数原型如下所示&#xff1a; #include <sys/select.h> int select(int nfds, fd_set *re…...

自然语言处理——自注意力机制

一、文字表示方法 在自然语言处理中&#xff0c;如何用数据表示文字是基础问题。独热编码&#xff08;One-hot Encoding &#xff09;是一种简单的方法&#xff0c;例如对于 “我”“你”“他”“猫”“狗” 等字&#xff0c;会将其编码为如 “我 [1 0 0 0 0 ……]”“你 [0 …...

C语言初阶--函数

目录 1. 函数是什么&#xff1f; 2. C语言中函数的分类 2.1 库函数 2.2 自定义函数 3. 函数的参数 3.1 实际参数&#xff08;实参&#xff09; 3.2 形式参数&#xff08;形参&#xff09; 4. 函数调用 4.1 传值调用 4.2 传址调用 练习&#xff1a;写一个函数判断一个…...

探索基于机器学习的信用评分:从数据到洞察

友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...

Ubuntu 24.04 LTS 通过 docker desktop 安装 seafile 搭建个人网盘

准备 Ubuntu 24.04 LTSUbuntu 空闲硬盘挂载Ubuntu 安装 Docker Desktop [我的Ubuntu服务器折腾集](https://blog.csdn.net/jh1513/article/details/145222679。 安装 seafile 参考资料 Docker安装 Seafile OnlyOffice 并配置OnlyOffice到Seafile&#xff0c;实现在线编辑…...

【Golang 面试题】每日 3 题(三十六)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…...

Linux虚拟机安装与FinalShell使用:探索Linux世界的便捷之旅

文章目录 软件准备安装 VMware 虚拟机下载CentOS 光盘镜像文件选择适合的 CentOS 版本选择合适的镜像文件 本教程工具版本 第一部分&#xff1a;安装 Linux 虚拟机1. 启动 VMware 并创建新虚拟机2. 默认硬件兼容性设置3. 安装操作系统的设置4. 选择操作系统类型与版本5. 为虚拟…...

leetcode19-删除链表的第n结点

leetcode 19 思路 要删除倒数第n个元素&#xff0c;那么就要找到倒数第n1个元素&#xff0c;那么我们需要两个指针来记录&#xff0c;首先快指针需要先走n1步&#xff0c;然后快慢指针一起进行移动&#xff0c;直到快指针为null的时候&#xff0c;此时慢指针恰好走到倒数第n…...

多学科视角下探索开源Github、Git初步学习

​ Think 1.Github 作为现今最主流的代码托管平台、协作平台甚至是“社交平台”&#xff0c;本身是闭源的。一方面&#xff0c;它是和大多数开发者连接最紧密的开源阵地&#xff0c;另一方面&#xff0c;拥有传统“黑客精神”的人认为将用户身份绑定这样一个闭源平台上恰恰与…...

新星杯-ESP32智能硬件开发--ESP32的I/O组成-系统中断矩阵

本博文内容导读&#x1f4d5;&#x1f389;&#x1f525; ESP32开发板的中断矩阵、功能描述与实现、相关API和示例程序进行介绍 ESP32中断矩阵将任一外部中断源单独分配到每个CPU的任一外部中断上&#xff0c;提供了强大的灵活性&#xff0c;能适应不同的应用需求。 ESP32中断主…...

Android 右键后无Java class创建

Android studio 创建java class &#xff1a; 最近几个月用Android studio 开发&#xff0c;因为电脑设置了一个新的用户使用&#xff0c;原来的android studio,打开之前的正常的项目总是报一些奇奇怪怪的错误&#xff0c;就重新安装了最新的版本 问题描述 但是新的android s…...

leetcode-买卖股票问题

309. 买卖股票的最佳时机含冷冻期 - 力扣&#xff08;LeetCode&#xff09; 动态规划解题思路&#xff1a; 1、暴力递归&#xff08;难点如何定义递归函数&#xff09; 2、记忆化搜索-傻缓存法&#xff08;根据暴力递归可变参数确定缓存数组维度&#xff09; 3、严格表结构依…...

如何通过 Apache Airflow 将数据导入 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 了解如何通过 Apache Airflow 将数据导入 Elasticsearch。 Apache Airflow Apache Airflow 是一个旨在创建、安排&#xff08;schedule&#xff09;和监控工作流的平台。它用于编排 ETL&#xff08;Extract-Transform-Load&#xff0…...

LDPC (Low-Density Parity-Check) 码min_sum、n_0、block_length 和 rate参数

1. min_sum 1; min_sum 是与 最小和解码算法&#xff08;Min-Sum Decoding Algorithm&#xff09;相关的参数。最小和解码算法是 LDPC 码的一种常用解码方法&#xff0c;主要通过传递信号的信息在接收端进行解码。此参数表示最小和算法中的缩放因子。 在 LDPC 解码过程中&am…...

基于javaweb的SpringBoot景区旅游管理系统设计和实现(源码+文档+部署讲解)

个人名片 &#x1f525; 源码获取 | 毕设定制| 商务合作&#xff1a;《个人名片》 ⛺️心若有所向往,何惧道阻且长 文章目录 个人名片运行环境技术栈适用功能说明使用说明 运行环境 Java≥8、MySQL≥5.7 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台…...

(二)afsim第三方库编译(qt编译)

注意&#xff1a;源码编译的路径不能有中文否则报错&#xff0c;压缩包必须用官网下载的xz格式解压的才可以&#xff0c;否则sudo ./configure命令找不到 先编译openssl3.1.1软件包&#xff0c;否则编译的qt库将不支持network&#xff0c;相关库的编译(上文&#xff08;一&…...

重学SpringBoot3-Spring Retry实践

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞??收藏评论 重学SpringBoot3-Spring Retry实践 1. 简介2. 环境准备3. 使用方式 3.1 注解方式 基础使用自定义重试策略失败恢复机制重试和失败恢复效果注意事项 3.2 编程式使用3.3 监听重试过程 监…...

极域电子教室破解(JiyuTrainer)

JiyuTrainer下载 byebye极域电脑安装包也可以使用 如果只玩单机游戏最简单的办法就是拔网线 另一种办法安装360卫士通过360卫安全卫士上网设置来进行禁用JiyuTrainer网络跟拔网线一样...

Oracle数据库传统审计怎么用

Oracle数据库传统审计怎么用 审计功能开启与关闭By Session还是By AccessWhenever Successful数据库语句审计数据库对象审计查看审计策略和记录Oracle数据库审计功能分为传统审计(Traditional Auditing)和统一审计(Unified Auditing)。统一审计是从Oracle 12c版本开始引入的…...

windows 搭建flutter环境,开发windows程序

环境安装配置&#xff1a; 下载flutter sdk https://docs.flutter.dev/get-started/install/windows 下载到本地后&#xff0c;随便找个地方解压&#xff0c;然后配置下系统环境变量 编译windows程序本地需要安装vs2019或更新的开发环境 主要就这2步安装后就可以了&#xff0…...

基于SpringBoot的健身房管理系统【源码+文档+部署讲解】

系统介绍 基于SpringBootVue实现的健身房管理系统采用前后端分离架构方式&#xff0c;系统设计了管理员、会员、员工三种角色&#xff0c;系统实现了用户登录与注册、个人中心、会员管理、员工管理、会员卡管理、会员卡类型管理、教练信息管理、解聘管理、健身项目管理、指导项…...

2.slf4j入口

文章目录 一、故事引入二、原理探究三、SLF4JServiceProvider四、总结 一、故事引入 故事要从下面这段代码说起 public class App {private static final Logger logger LoggerFactory.getLogger(App.class);public static void main( String[] args ) throws Exception {lo…...

sql_实用查询语句模版

1. 查询某个字段是否为必填项 SQL 查询模板 SELECT COLUMN_NAME,IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME YourTableNameAND COLUMN_NAME YourColumnName;说明&#xff1a; INFORMATION_SCHEMA.COLUMNS 表包含了所有数据库中表的列信息。IS_NULLABL…...

Nginx反向代理架构介绍

Nginx反向代理架构是一种强大的服务器架构模式&#xff0c;它位于用户和原始服务器之间&#xff0c;接收用户的请求并将其转发到一个或多个后端服务器&#xff0c;然后将从后端服务器获取的响应返回给用户&#xff0c;就好像这些内容都是由代理服务器本身直接提供的一样。以下是…...

Mysql MVCC

MVCC 什么是MVCC MVCC&#xff08;多版本并发控制&#xff0c;Multi-Version Concurrency Control&#xff09; 是一种用于数据库管理系统&#xff08;DBMS&#xff09;中的并发控制机制&#xff0c;它允许多个事务同时执行而不互相阻塞&#xff0c;并通过创建数据的多个版本…...

JavaEE之CAS

上文我们认识了许许多多的锁&#xff0c;此篇我们的CAS就是从上文的锁策略开展的新概念&#xff0c;我们来一探究竟吧 1. 什么是CAS&#xff1f; CAS: 全称Compare and swap&#xff0c;字⾯意思:“比较并交换”&#xff0c;⼀个CAS涉及到以下操作&#xff1a; 我们假设内存中…...

Flink CDC 使用实践以及遇到的问题

背景 最近公司在做一些业务上的架构调整&#xff0c;有一部分是数据从mysql采集到Starrocks&#xff0c;之前的一套方法是走 debezium 到 puslar 到 starrocks,这一套下来比较需要配置很多东西&#xff0c;而且出现问题以后&#xff0c;需要修改很多配置&#xff0c;而且现阶段…...

idea上git log面板的使用

文章目录 各种颜色含义具体的文件的颜色标签颜色&#x1f3f7;️ 节点和路线 各种颜色含义 具体的文件的颜色 红色&#xff1a;表示还没有 git add 提交到暂存区绿色&#xff1a;表示已经 git add 过&#xff0c;但是从来没有 commit 过蓝色&#xff1a;表示文件有过改动 标…...

03.选择排序

一、题目思路 选择排序是一种简单直观的排序算法。它的工作原理是&#xff1a;首先在未排序序列中找到最小&#xff08;或最大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&#xff08;或最大&#xff…...

麒麟V10系统上安装Oracle

以下是在麒麟V10系统上安装Oracle数据库的详细步骤&#xff1a; 安装前准备 检查系统版本&#xff1a;使用uname -a、cat /etc/os-release等命令检查服务器是麒麟V10系统。 配置固定IP和本地yum源&#xff1a; 挂载麒麟V10的iso文件到/mnt目录&#xff0c;如mount -o loop Ky…...

PyTorch 神经协同过滤 (NCF) 推荐系统教程

目录 教程概述1. 神经协同过滤模型概述NCF 模型的主要组成部分&#xff1a; 2. 数据加载与预处理3. 定义神经协同过滤模型4. 训练模型5. 模型评估6. 推荐物品7. 完整示例8. 总结 在本教程中&#xff0c;我们将使用 PyTorch 实现一个神经协同过滤&#xff08;Neural Collaborat…...

日志收集Day001

1.ElasticSearch 作用&#xff1a;日志存储和检索 2.单点部署Elasticsearch与基础配置 rpm -ivh elasticsearch-7.17.5-x86_64.rpm 查看配置文件yy /etc/elasticsearch/elasticsearch.yml&#xff08;这里yy做了别名&#xff0c;过滤掉空行和注释行&#xff09; yy /etc/el…...

【氮化镓】香港科技大学陈Kevin-单片集成GaN比较器

一、引言(Introduction) GaN HEMT的重要性 文章开篇便强调了氮化镓(GaN)高电子迁移率晶体管(HEMT)在下一代功率转换系统中的巨大潜力。GaN HEMT具备高开关频率、低导通电阻、高击穿电压以及宽工作温度范围等优势,使其成为功率电子领域的热门研究对象。这些特性使得GaN…...

LDD3学习9--数据类型和定时器

这部分对应的是第七章和第十一章&#xff0c;因为内容也不是很多&#xff0c;就一起写了。里面的内容基本上就是一个个的点&#xff0c;所以也就一个个点简单总结一下。 1 数据类型 1.1 数据长度 不同操作系统类型长度可能不一样&#xff0c;看图的话最好用u8&#xff0c;u16&…...

性价比1.2V电压基准替代

前言&#xff1a; 小于2V的电压基准比较少&#xff0c;且价格稍贵&#xff0c;对于要求不高的场合&#xff0c;1117可以替代使用&#xff0c;温度系数低于 100ppm/C, 价格便宜。 1117是线性稳压器的一种&#xff0c;一般情况下&#xff0c;输出电压可调。 如下述的1117&#xf…...

【青蛙过河——思维】

题目 图解 代码 #include <bits/stdc.h> using namespace std; const int N 1e510; int n, x; int h[N]; bool check(int mid) {for(int i 1; i mid - 1 < n; i)if(h[i mid - 1] - h[i - 1] < 2 * x) return false;return true; } int main() {cin >> …...

【数据库】MySQL数据库SQL语句汇总

目录 1.SQL 通用语法 2.SQL 分类 2.1.DDL 2.2.DML 2.3.DQL 2.4.DCL 3.DDL 3.1.数据库操作 3.1.1.查询 3.1.2.创建 3.1.3.删除 3.1.4.使用 3.2.表操作 3.2.1.查询 3.2.2.创建 3.2.3.数据类型 3.2.3.1.数值类型 3.2.3.2.字符串类型 3.2.3.3.日期时间类型 3.2…...

Vue3 Element-Plus el-tree 右键菜单组件

参考代码&#xff1a;实现Vue3Element-Plus(tree、table)右键菜单组件 这篇文章的代码确实能用&#xff0c;但是存在错误&#xff0c;修正后的代码&#xff1a; <template><div style"text-align: right"><el-icon size"12" color"#…...

学成在线_内容管理模块_创建模块工程

学成在线模块工程 1.各个微服务依赖基础工程2.每个微服务都是一个前后端分离的项目3.xuecheng-plus-content&#xff1a;内容管理模块工程xuecheng-plus-content-modelxuecheng-plus-content-servicexuecheng-plus-content-api 1.各个微服务依赖基础工程 2.每个微服务都是一个前…...

Swift 专题二 语法速查

一 、变量 let, var 变量是可变的&#xff0c;使用 var 修饰&#xff0c;常量是不可变的&#xff0c;使用 let 修饰。类、结构体和枚举里的变量是属性。 var v1:String "hi" // 标注类型 var v2 "类型推导" let l1 "标题" // 常量class a {…...

vue2配置跨域后请求的是本机

这个我来说明一下&#xff0c;因为我们公司的后端设置解决了跨域问题&#xff0c;所以我有很久没有看相关的内容了&#xff0c;然后昨天请求了需要跨域的接口&#xff0c;请求半天一直不对&#xff0c;浏览器显示的是本机地址&#xff0c;我以为是自己配置错了&#xff0c;后面…...

Linux 音视频入门到实战专栏(视频篇)视频编解码 MPP

文章目录 一、MPP 介绍二、获取和编译RKMPP库三、视频解码四、视频编码 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; &#x1f4e2;本篇将介绍如何调用alsa api来进行音频数据的播放和录制。 一、MPP 介绍 瑞芯微提供的媒体处理软件平台…...

IT程序设计文档,软件需求设计文档,详细设计模板(Word原件)

1引言 1.1编写目的 1.2项目背景 1.3参考材料 2系统总体设计 2.1整体架构 2.2整体功能架构 2.3整体技术架构 2.4设计目标 2.5.1总体原则 2.5.2实用性和先进性 2.5.3标准化、开放性、兼容性 2.5.4高可靠性、稳定性 2.5.5易用性 2.5.6灵活性和可扩展性 2.5.7经济性…...