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

循环神经网络RNN笔记

*《动手学深度学习》-RNN

0 引言

默认数据都来自于某种分布, 并且所有样本都是独立同分布的 (independently and identically distributed,i.i.d.)。 然而,大多数的数据并非如此。 例如,文章中的单词是按顺序写的,如果顺序被随机地重排,就很难理解文章原始的意思。 同样,视频中的图像帧、对话中的音频信号以及网站上的浏览行为都是有顺序的。 因此,针对此类数据而设计特定模型,可能效果会更好。

另一个问题来自这样一个事实: 我们不仅仅可以接收一个序列作为输入,而是还可能期望继续猜测这个序列的后续。 例如,一个任务可以是继续预测
。 这在时间序列分析中是相当常见的,可以用来预测股市的波动、 患者的体温曲线或者赛车所需的加速度。 同理,我们需要能够处理这些数据的特定模型。
如果说卷积神经网络可以有效地处理空间信息, 那么本章的循环神经网络(recurrent neural network,RNN)则可以更好地处理序列信息。 循环神经网络通过引入状态变量存储过去的信息和当前的输入,从而可以确定当前的输出。

卷积神经网络可以有效地处理空间信息,
循环神经网络则可以更好地处理序列信息。
(recurrent neural network,RNN)
循环神经网络通过引入状态变量存储过去的信息和当前的输入,从而可以确定当前的输出。

1 序列模型

预测明天的股价要比过去的股价更困难, 在统计学中,前者(对超出已知观测范围进行预测)称为外推法(extrapolation), 而后者(在现有观测值之间进行估计)称为内插法(interpolation)。

公式: x t ∼ P ( x t ∣ x t − 1 , … , x 1 ) x_t \sim P(x_t \mid x_{t-1}, \ldots, x_1) xtP(xtxt1,,x1)
如何有效估计 P ( x t ∣ x t − 1 , … , x 1 ) P(x_t \mid x_{t-1}, \ldots, x_1) P(xtxt1,,x1),归结为 自回归模型(autoregressive models)和 隐变量自回归模型(latent autoregressive models)两种策略。

数据存在一个自然的方向,即在时间上是前进的。 很明显,未来的事件不能影响过去。

P ( x t + 1 ∣ x t , x t − 1 ) = P ( x t + 1 ∣ x t ) P(x_{t+1} \mid x_t, x_{t-1}) = P(x_{t+1} \mid x_t) P(xt+1xt,xt1)=P(xt+1xt)
隐马尔可夫模型中的动态规划超出了本节的范围 (我们将在双向循环神经网络再次遇到), 而动态规划这些计算工具已经在控制算法和强化学习算法广泛使用。
越多步的预测,会造成误差的快速累积和预测质量的极速下降。
“通过时间反向传播”仅仅适用于反向传播在具有隐状态的序列模型。

2 GRU

门控循环神经网络可以更好地捕获时间步距离很长的序列上的依赖关系。
重置门有助于捕获序列中的短期依赖关系。
更新门有助于捕获序列中的长期依赖关系。
重置门打开时,门控循环单元包含基本循环神经网络;更新门打开时,门控循环单元可以跳过子序列。

3 LSTM

长短期记忆网络有三种类型的门:输入门、遗忘门和输出门。
长短期记忆网络的隐藏层输出包括“隐状态”和“记忆元”。只有隐状态会传递到输出层,而记忆元完全属于内部信息。
长短期记忆网络可以缓解梯度消失和梯度爆炸。

4 深度RNN

可以将多层循环神经网络堆叠在一起, 通过对几个简单层的组合,产生了一个灵活的机制。 特别是,数据可能与不同层的堆叠有关。 例如,我们可能希望保持有关金融市场状况 (熊市或牛市)的宏观数据可用, 而微观数据只记录较短期的时间动态。
在深度循环神经网络中,隐状态的信息被传递到当前层的下一时间步和下一层的当前时间步。
深度循环神经网络需要大量的调参(如学习率和修剪) 来确保合适的收敛,模型的初始化也需要谨慎。

5 编码器-解码器架构

6 序列到序列学习(seq2seq)

7 序列搜索

序列搜索策略包括贪心搜索、穷举搜索和束搜索。
贪心搜索所选取序列的计算量最小,但精度相对较低。
穷举搜索所选取序列的精度最高,但计算量最大。
束搜索通过灵活选择束宽,在正确率和计算代价之间进行权衡。

* 零散记录

pytorch中nn.LSTM和nn.LSTMCell的区别

使用 nn.LSTMCell 时,需要手动编写循环来遍历序列的每个时间步,并将前一个时间步的隐藏状态和细胞状态传递给下一个时间步的 nn.LSTMCell。因此提供了更大的灵活性,在每个时间步进行特定的操作。
nn.LSTMCell 的输入是当前时间步的输入 x t x_t xt、上一时间步的隐藏状态 h ( t − 1 ) h_(t-1) h(t1) 和细胞状态 c ( t − 1 ) c_(t-1) c(t1)。输出是当前时间步的隐藏状态 h t h_t ht和细胞状态 c t c_t ct

区别
总结
在大多数情况下,使用 nn.LSTM 就能满足需求。只有当你需要对 LSTM 的内部行为进行精细控制时,才需要使用 nn.LSTMCell

LSTM和双向LSTM的区别

LSTM(长短期记忆网络)和双向LSTM(Bidirectional LSTM)都是循环神经网络(RNN)的变体,用于处理序列数据,但它们在处理信息的方式上有所不同。简单来说,LSTM像“单行道”,而双向LSTM像“双行道”,它可以同时从两个方向理解序列信息。

  1. LSTM(长短期记忆网络):

单向处理: LSTM按时间顺序(例如从过去到现在)处理输入序列。它记住过去的信息,并利用这些信息来理解当前时刻的输入。
关注过去: LSTM擅长捕捉序列中的长期依赖关系,即当前时刻的输出可能依赖于很久之前的输入。
例子: 考虑句子“我今天很高兴,因为我昨天赢得了比赛。” LSTM在处理到“高兴”时,会记住之前看到的“我”和“今天”,但它不会“看到”后面的“因为我昨天赢得了比赛”。
2. 双向LSTM(Bidirectional LSTM):

双向处理: 双向LSTM同时从两个方向(从过去到现在,以及从现在到过去)处理输入序列。它不仅记住过去的信息,也记住未来的信息。
关注上下文: 双向LSTM可以更好地理解上下文信息,因为它同时考虑了过去和未来的输入。
结构: 双向LSTM由两个LSTM层组成:一个按时间顺序处理输入,另一个按时间逆序处理输入。这两个LSTM层的输出在每个时间步进行合并,从而得到最终的输出。
例子: 使用双向LSTM处理句子“我今天很高兴,因为我昨天赢得了比赛。”时,在处理到“高兴”时,它既会记住之前的“我”和“今天”,也会“看到”后面的“因为我昨天赢得了比赛”。因此,双向LSTM可以更好地理解“高兴”的原因。

对比表

通喻
想象你在阅读一本书。LSTM就像从书的第一页开始逐页阅读,你只能根据已经读过的内容来理解当前读到的内容。
双向LSTM就像把书页都摊开放在你面前,你可以同时看到前面的内容和后面的内容,从而更好地理解当前页的内容。
应用场景
LSTM: 适用于只需要考虑过去信息的任务,例如时间序列预测、音乐生成、语言模型等。
双向LSTM: 适用于需要理解上下文信息的任务,例如自然语言处理中的命名实体识别、词性标注、情感分析等。


http://www.mrgr.cn/news/80423.html

相关文章:

  • Ilya Sutskever发表了对AI未来发展的颠覆性看法
  • 深入探索:Unicode 与 UTF-8 的奥秘
  • 如何在繁忙的生活中找到自己的节奏?
  • STM32F405 + CubeMX - 产生互补PWM波,中心对齐模式1 + PWM模式2(FOC算法专用)
  • day3 构造数据类型,数据结构基础
  • 【多模态文档智能】OCR-free感知多模态大模型技术链路及训练数据细节
  • LeetCode1.两数之和(超简单讲解)
  • 医疗领域的网络安全预防:保障患者隐私与医疗数据安全
  • LeetCode 283.移动零(超简单讲解)
  • docker离线安装、linux 安装docker
  • 概率论得学习和整理26:EXCEL 关于plot 折线图--频度折线图的一些细节
  • 通过一个例子学习回溯算法:从方法论到实际应用
  • 课设项目十:智能手电筒(使用金沙滩51单片机)
  • Qt WORD/PDF(三)使用 QAxObject 对 Word 替换(QML)
  • 【系统分析师】-收官整理-已考过
  • Day13洛谷 2043+2042+2040+2035+2034+2033+2030+2027+2031+2029
  • selenium工作原理
  • Python 参数配置使用 XML 文件的教程 || Python打包 || 模型部署
  • 规则引擎drools(一)-技术要点
  • 【软件工程】简答题系列(一)(山东大学·软院考试专属)
  • 【爬虫一】python爬虫基础合集一
  • ubuntu下anconda装pytorch
  • 业务观测:从定义到场景化分析
  • Linux栈帧
  • DALL·E 2(内含扩散模型介绍)-生成式模型【学习笔记】
  • elasticsearch 使用enrich processor填充数据