RNN & LSTM

这篇具有很好参考价值的文章主要介绍了RNN & LSTM。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考资料:

  • 《机器学习2022》李宏毅
  • 史上最详细循环神经网络讲解(RNN/LSTM/GRU) - 知乎 (zhihu.com)
  • LSTM如何来避免梯度弥散和梯度爆炸? - 知乎 (zhihu.com)

1 RNN 的结构

首先考虑这样一个 slot filling 问题:

注意到,上图中 Taipei 的输出为 destination。如果我们只是单纯地将每个词向量输入到一个神经网络中,那么对于"leave Taipei on …" 这句话,模型对 Taipei 的输出也会是 destination,但我们希望它是 departure。要实现这一目的,必须要引入当前向量与上下文的关系,于是就有了循环神经网络(RNN):

注意到,RNN 与一般的神经网络的主要区别在与将隐层的上一次输出保存并作为本次的输入,即:
O t = g ( V ⋅ S t ) S t = f ( U ⋅ X t + W ⋅ S t − 1 ) \begin{align} O_t&=g(V\cdot S_t)\notag\\ S_t&=f(U\cdot X_t+W\cdot S_{t-1})\notag \end{align} OtSt=g(VSt)=f(UXt+WSt1)

矩阵 U , W , V U,W,V U,W,V 即为 RNN 的参数,与 t t t 无关。

引入时间这一维度,RNN 可以表示为如下结构:

如果采用双向 RNN ,则每个向量都可以充分地考虑到上下文。

2 RNN 的梯度消失与梯度爆炸

考虑这样一个简单的 RNN 结构:

RNN & LSTM,深度学习,rnn,lstm,人工智能

假设神经元没有激活函数(激活函数的导数一般是恒 < 1 <1 <1 的),则有:
S 1 = W x X 1 + W s S 0 + b 1 O 1 = W o S 1 + b 2 S 2 = W x X 2 + W s S 1 + b 1 O 2 = W o S 2 + b 2 S 3 = W x X 3 + W s S 2 + b 1 O 3 = W o S 3 + b 2 \begin{align} S_1&=W_xX_1+W_sS_0+b_1\quad&O_1=W_oS_1+b_2\notag\\ S_2&=W_xX_2+W_sS_1+b_1\quad&O_2=W_oS_2+b_2\notag\\ S_3&=W_xX_3+W_sS_2+b_1\quad&O_3=W_oS_3+b_2\notag\\ \end{align} S1S2S3=WxX1+WsS0+b1=WxX2+WsS1+b1=WxX3+WsS2+b1O1=WoS1+b2O2=WoS2+b2O3=WoS3+b2
t 3 t_3 t3 时刻的损失函数为 L 3 L_3 L3 ,则有:
∂ L 3 ∂ W o = ∂ L 3 ∂ O 3 ∂ O 3 ∂ W o ∂ L 3 ∂ W x = ∂ L 3 ∂ O 3 ∂ O 3 ∂ S 3 ( X 3 + W s ( X 2 + W s X 1 ) ) ∂ L 3 ∂ W s = ∂ L 3 ∂ O 3 ∂ O 3 ∂ S 3 ( S 2 + W s ( S 1 + W s S 0 ) ) \begin{align} \frac{\partial L_3}{\partial W_o}&=\frac{\partial L_3}{\partial O_3}\frac{\partial O_3}{\partial W_o}\notag\\ \frac{\partial L_3}{\partial W_x}&=\frac{\partial L_3}{\partial O_3}\frac{\partial O_3}{\partial S_3}\bigg(X_3+W_s\Big(X_2+W_sX_1\Big)\bigg)\notag\\ \frac{\partial L_3}{\partial W_s}&=\frac{\partial L_3}{\partial O_3}\frac{\partial O_3}{\partial S_3}\bigg(S_2+W_s\Big(S_1+W_sS_0\Big)\bigg)\notag\\ \end{align} WoL3WxL3WsL3=O3L3WoO3=O3L3S3O3(X3+Ws(X2+WsX1))=O3L3S3O3(S2+Ws(S1+WsS0))

这部分的公式和参考资料里的不太一样,但我感觉参考资料里的公式不太严格吧?

所以,任意时刻损失函数对 W x , W s W_x,W_s Wx,Ws 的偏导为:
∂ L t ∂ W x = ∂ L 3 ∂ O 3 ∂ O 3 ∂ S 3 ∑ k = 1 t W s t − k X k ∂ L t ∂ W s = ∂ L 3 ∂ O 3 ∂ O 3 ∂ S 3 ∑ k = 1 t W s t − k S k − 1 \begin{align} \frac{\partial L_t}{\partial W_x}&=\frac{\partial L_3}{\partial O_3}\frac{\partial O_3}{\partial S_3}\sum\limits_{k=1}^{t}W_s^{t-k}X_k\notag\\ \frac{\partial L_t}{\partial W_s}&=\frac{\partial L_3}{\partial O_3}\frac{\partial O_3}{\partial S_3}\sum\limits_{k=1}^{t}W_s^{t-k}S_{k-1}\notag\\ \end{align} WxLtWsLt=O3L3S3O3k=1tWstkXk=O3L3S3O3k=1tWstkSk1
W s ∈ ( 0 , 1 ) W_s\in(0,1) Ws(0,1) 时,损失函数对 W x , W s W_x,W_s Wx,Ws 的偏导会逐渐“遗忘”距离较远的梯度,所以模型很难学习到距离较远的依赖关系。

W s > 1 W_s>1 Ws>1 时,前面的梯度对当前的影响会随着距离增加而指数级增大,甚至变成 NaN.

3 LSTM

LSTM(Long Short-term Memory) 是 RNN 的变体,并且已经逐渐成为了 RNN 的代名词,其基本结构如下图所示:

相比普通的 RNN ,LSTM增加了输入门、输出门和遗忘门。

上图中, z f , z i , z , z o z_f,z_i,z,z_o zf,zi,z,zo 均有相应的权值矩阵乘上拼接后的输入向量得到。

LSTM 可以解决 RNN 梯度消失的问题,因为如果不考虑遗忘门,距离再远的梯度也可以通过 c i → ⋯ → c t − 1 → c t c_{i}\rightarrow\cdots\rightarrow c_{t-1}\rightarrow c_t cict1ct 这条路径无损地传递到到当前的梯度。文章来源地址https://www.toymoban.com/news/detail-566855.html

到了这里,关于RNN & LSTM的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python深度学习026:基于Pytorch的典型循环神经网络模型RNN、LSTM、GRU的公式及简洁案例实现(官方)

    循环神经网络(也有翻译为递归神经网络)最典型的三种网络结构是: RNN(Recurrent Neural Network,循环神经网络) LSTM(Long Short-Term Memory,长短期记忆网络) GRU(Gate Recurrent Unit,门控循环单元) 理解参数的含义非常重要,否则,你不知道准备什么维度的输入数据送入模型 先

    2023年04月22日
    浏览(29)
  • Pytorch 对比TensorFlow 学习:Day 17-18: 循环神经网络(RNN)和LSTM

    Day 17-18: 循环神经网络(RNN)和LSTM 在这两天的学习中,我专注于理解循环神经网络(RNN)和长短期记忆网络(LSTM)的基本概念,并学习了它们在处理序列数据时的应用。 1.RNN和LSTM基础: RNN:了解了RNN是如何处理序列数据的,特别是它的循环结构可以用于处理时间序列或连续

    2024年01月20日
    浏览(50)
  • RNN & LSTM

    参考资料: 《机器学习2022》李宏毅 史上最详细循环神经网络讲解(RNN/LSTM/GRU) - 知乎 (zhihu.com) LSTM如何来避免梯度弥散和梯度爆炸? - 知乎 (zhihu.com) 首先考虑这样一个 slot filling 问题: 注意到,上图中 Taipei 的输出为 destination。如果我们只是单纯地将每个词向量输入到一个

    2024年02月16日
    浏览(28)
  • RNN&LSTM

    LSTM——起源、思想、结构 与“门” 完全图解RNN、RNN变体、Seq2Seq、Attention机制 完全解析RNN, Seq2Seq, Attention注意力机制 Sequence to sequence入门详解:从RNN, LSTM到Encoder-Decoder, Attention, transformer 从RNN到Attention到Transformer系列-Attention介绍及代码实现 提示:这里可以添加本文要记录的大概

    2024年02月16日
    浏览(27)
  • LSTM已死,Transformer永生(面试问答RNN/LSTM/Transformer)

    计算机视觉面试题-Transformer相关问题总结 :https://zhuanlan.zhihu.com/p/554814230 计算机视觉面试31题 CV面试考点,精准详尽解析 :https://zhuanlan.zhihu.com/p/257883797 RNN的出现是为了解决输入输出没有严格对应关系的问题,该模型的输入和输出长度不需固定。 RNN的框架结构如下, X0, X1

    2024年02月12日
    浏览(32)
  • Pytorch的CNN,RNN&LSTM

    拿二维卷积举例,我们先来看参数 卷积的基本原理,默认你已经知道了,然后我们来解释pytorch的各个参数,以及其背后的计算过程。 首先我们先来看卷积过后图片的形状的计算: 参数: kernel_size :卷积核的大小,可以是一个元组,也就是(行大小,列大小) stride : 移动步长

    2024年02月04日
    浏览(39)
  • RNN和LSTM的区别是什么?

    RNN(循环神经网络)和LSTM(长短时记忆网络)都是处理序列数据(如时间序列或文本)的神经网络类型,但它们在结构和功能上有一些关键区别: 1. 基本结构: RNN: RNN的核心是一个循环单元,它在序列的每个时间步上执行相同的任务,同时保留一些关于之前步骤的信息。RNN的

    2024年01月21日
    浏览(25)
  • 相比于rnn, lstm有什么优势

    相对于常规的循环神经网络(RNN),长短期记忆网络(LSTM)具有以下优势: 处理长期依赖性:LSTM通过引入记忆单元和门控机制来解决传统RNN中的梯度消失和梯度爆炸问题。LSTM能够更好地捕捉时间序列数据中的长期依赖关系,使其在处理长序列和长期依赖性任务时表现更出色

    2024年01月20日
    浏览(28)
  • RNN 单元:分析 GRU 方程与 LSTM,以及何时选择 RNN 而不是变压器

            深度学习往往感觉像是在雪山上找到自己的道路。拥有坚实的原则会让你对做出决定更有信心。我们都去过那里         在上一篇文章中,我们彻底介绍并检查了 LSTM 单元的各个方面。有人

    2024年02月10日
    浏览(34)
  • 10分钟理解RNN、LSTM、Transformer结构原理!

    RNN 即循环神经网路,是NLP、语言识别等时间序列数据处理的基本网络框架。与图像数据不同,时间序列数据是指在不同时刻采集到的数据,这类数据的状态一般与时间有关。对于一句话,通过单个单词是难以理解整体意思的,只有通过处理这些词连接起来的整个序列,才能更

    2024年02月17日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包