rnn 订阅
循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network) [1]  。对循环神经网络的研究始于二十世纪80-90年代,并在二十一世纪初发展为深度学习(deep learning)算法之一 [2]  ,其中双向循环神经网络(Bidirectional RNN, Bi-RNN)和长短期记忆网络(Long Short-Term Memory networks,LSTM)是常见的的循环神经网络 [3]  。循环神经网络具有记忆性、参数共享并且图灵完备(Turing completeness),因此在对序列的非线性特征进行学习时具有一定优势 [4]  。循环神经网络在自然语言处理(Natural Language Processing, NLP),例如语音识别、语言建模、机器翻译等领域有应用,也被用于各类时间序列预报。引入了卷积神经网络(Convoutional Neural Network,CNN)构筑的循环神经网络可以处理包含序列输入的计算机视觉问题。 展开全文
循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network) [1]  。对循环神经网络的研究始于二十世纪80-90年代,并在二十一世纪初发展为深度学习(deep learning)算法之一 [2]  ,其中双向循环神经网络(Bidirectional RNN, Bi-RNN)和长短期记忆网络(Long Short-Term Memory networks,LSTM)是常见的的循环神经网络 [3]  。循环神经网络具有记忆性、参数共享并且图灵完备(Turing completeness),因此在对序列的非线性特征进行学习时具有一定优势 [4]  。循环神经网络在自然语言处理(Natural Language Processing, NLP),例如语音识别、语言建模、机器翻译等领域有应用,也被用于各类时间序列预报。引入了卷积神经网络(Convoutional Neural Network,CNN)构筑的循环神经网络可以处理包含序列输入的计算机视觉问题。
信息
外文名
Recurrent Neural Network, RNN
提出时间
1986-1990年
提出者
M. I. Jordan,Jeffrey Elman
类    型
机器学习算法,神经网络算法
中文名
循环神经网络
应    用
自然语言处理,计算机视觉
所属学科
人工智能
循环神经网络历史
1933年,西班牙神经生物学家Rafael Lorente de Nó发现大脑皮层(cerebral cortex)的解剖结构允许刺激在神经回路中循环传递,并由此提出反响回路假设(reverberating circuit hypothesis) [5]  。该假说在同时期的一系列研究中得到认可,被认为是生物拥有短期记忆的原因 [6-7]  。随后神经生物学的进一步研究发现,反响回路的兴奋和抑制受大脑阿尔法节律(α-rhythm)调控,并在α-运动神经(α-motoneurones )中形成循环反馈系统(recurrent feedback system) [8-9]  。在二十世纪70-80年代,为模拟循环反馈系统而建立的一些数学模型为RNN带来了启发 [10-12]  。1982年,美国学者John Hopfield基于Little (1974) [12]  的神经数学模型使用二元节点建立了具有结合存储(content-addressable memory)能力的神经网络,即Hopfield神经网络 [13]  。Hopfield网络是一个包含递归计算和外部记忆(external memory)的神经网络,其内部所有节点都相互连接,并使用能量函数进行非监督学习 [14]  。1986年,Michael I. Jordan在分布式并行处理(parallel distributed processing)理论下提出了Jordan网络 [15]  。Jordan网络的每个隐含层节点都与一个状态单元(state units)相连以实现延时输入,并使用logistic函数作为激励函数 [15]  。Jordan网络使用反向传播算法(Back-Probagation, BP)进行学习,并在测试中提取了给定音节的语音学特征 [15]  。之后在1990年,Jeffrey Elman提出了第一个全连接的RNN,即Elman网络 [16]  。Jordan网络和Elman网络都从单层前馈神经网络出发构建递归连接,因此也被称为简单循环网络(Simple Recurrent Network, SRN) [4]  。在SRN出现的同一时期,RNN的学习理论也得到发展。在反向传播算法被提出后 [17]  ,学界开始尝试在BP框架下对循环神经网络进行训练 [15]  [2]  [18]  。1989年,Ronald Williams和David Zipser提出了RNN的实时循环学习(Real-Time Recurrent Learning, RTRL) [19]  。随后Paul Werbos在1990年提出了随时间反向传播算法(BP Through Time,BPTT) [20]  。1991年,Sepp Hochreiter发现了循环神经网络的长期依赖问题(long-term dependencies problem),即在对长序列进行学习时,循环神经网络会出现梯度消失(gradient vanishing)和梯度爆炸(gradient explosion)现象,无法掌握长时间跨度的非线性关系 [21-22]  。为解决长期依赖问题,RNN的改进不断出现,较重要的包括Jurgen Schmidhuber及其合作者在1992和1997年提出的神经历史压缩器(Neural History Compressor, NHC) [23]  和长短期记忆网络(Long Short-Term Memory networks, LSTM) [24]  ,其中包含门控的LSTM受到了关注。同在1997年,M. Schuster和K. Paliwal提出了具有深度结构的双向循环神经网络(Bidirectional RNN, BRNN),并对其进行了语音识别试验 [25]  。双向和门控构架的出现提升了RNN的学习表现,在一些综述性研究中,被认为是RNN具有代表性的研究成果 [2]  。十一世纪后,随着深度学习理论的出现和数值计算能力的提升,拥有更高复杂度的RNN开始在自然语言处理问题中得到关注。2005年,Alex Graves等将双向LSTM应用于语音识别,并得到了优于隐马尔可夫模型(Hidden Markov Model, HMM)的表现 [26]  。2014年,K. Cho提出了门控循环单元网络(Gated Recurrent Unit networks, GRU),该方法是LSTM之后另一个受到关注的RNN门控构架 [27]  。2010年,Tomas Mikolov及其合作者提出了基于RNN的语言模型 [28]  [29]  。2013-2015年, Y. Benjo、D. Bahdanau等提出了编码器-解码器、自注意力层等一系列RNN算法,并将其应用于机器翻译问题 [30-31]  。为语言模型设计的RNN算法在随后的研究中启发了包括ransformers、XLNet、ELMo、BERT等复杂构筑 [32-34]  。
收起全文
精华内容
参与话题
问答
  • RNN LSTM

    千次阅读 2018-07-15 16:11:42
    详解 LSTM 今天的内容有: LSTM 思路 LSTM 的前向计算 LSTM 的反向传播 关于调参 LSTM 长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RN...

    详解 LSTM

    今天的内容有:

    1. LSTM 思路
    2. LSTM 的前向计算
    3. LSTM 的反向传播
    4. 关于调参

    LSTM

    长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行。

    长短时记忆网络的思路:

    原始 RNN 的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。
    再增加一个状态,即c,让它来保存长期的状态,称为单元状态(cell state)。

    把上图按照时间维度展开:

    在 t 时刻,LSTM 的输入有三个:当前时刻网络的输入值 x_t、上一时刻 LSTM 的输出值 h_t-1、以及上一时刻的单元状态 c_t-1
    LSTM 的输出有两个:当前时刻 LSTM 输出值 h_t、和当前时刻的单元状态 c_t.

    关键问题是:怎样控制长期状态 c ?

    方法是:使用三个控制开关

    第一个开关,负责控制继续保存长期状态c;
    第二个开关,负责控制把即时状态输入到长期状态c;
    第三个开关,负责控制是否把长期状态c作为当前的LSTM的输出。

    如何在算法中实现这三个开关?

    方法:用 门(gate)

    定义:gate 实际上就是一层全连接层,输入是一个向量,输出是一个 0到1 之间的实数向量。
    公式为:


    回忆一下它的样子:


    gate 如何进行控制?

    方法:用门的输出向量按元素乘以我们需要控制的那个向量
    原理:门的输出是 0到1 之间的实数向量,
    当门输出为 0 时,任何向量与之相乘都会得到 0 向量,这就相当于什么都不能通过;
    输出为 1 时,任何向量与之相乘都不会有任何改变,这就相当于什么都可以通过。


    LSTM 前向计算

    在 LSTM-1 中提到了,模型是通过使用三个控制开关来控制长期状态 c 的:

    这些开关就是用门(gate)来实现:

    接下来具体看这三重门


    LSTM 的前向计算:

    一共有 6 个公式

    遗忘门(forget gate)
    它决定了上一时刻的单元状态 c_t-1 有多少保留到当前时刻 c_t

    输入门(input gate)
    它决定了当前时刻网络的输入 x_t 有多少保存到单元状态 c_t

    输出门(output gate)
    控制单元状态 c_t 有多少输出到 LSTM 的当前输出值 h_t


    遗忘门的计算为:

    forget

    遗忘门的计算公式中:
    W_f 是遗忘门的权重矩阵,[h_t-1, x_t] 表示把两个向量连接成一个更长的向量,b_f 是遗忘门的偏置项,σ 是 sigmoid 函数。


    输入门的计算:

    input

    根据上一次的输出和本次输入来计算当前输入的单元状态:

    当前输入的单元状态c_t

    当前时刻的单元状态 c_t 的计算:由上一次的单元状态 c_t-1 按元素乘以遗忘门 f_t,再用当前输入的单元状态 c_t 按元素乘以输入门 i_t,再将两个积加和:
    这样,就可以把当前的记忆 c_t 和长期的记忆 c_t-1 组合在一起,形成了新的单元状态 c_t
    由于遗忘门的控制,它可以保存很久很久之前的信息,由于输入门的控制,它又可以避免当前无关紧要的内容进入记忆。

    当前时刻的单元状态c_t

    输出门的计算:

    output

    LSTM 的反向传播训练算法

    主要有三步:

    1. 前向计算每个神经元的输出值,一共有 5 个变量,计算方法就是前一部分:

    2. 反向计算每个神经元的误差项值。与 RNN 一样,LSTM 误差项的反向传播也是包括两个方向:
    一个是沿时间的反向传播,即从当前 t 时刻开始,计算每个时刻的误差项;
    一个是将误差项向上一层传播。

    3. 根据相应的误差项,计算每个权重的梯度。


    gate 的激活函数定义为 sigmoid 函数,输出的激活函数为 tanh 函数,导数分别为:

    具体推导公式为:

    具体推导公式为:


    目标是要学习 8 组参数,如下图所示:

    又权重矩阵 W 都是由两个矩阵拼接而成,这两部分在反向传播中使用不同的公式,因此在后续的推导中,权重矩阵也要被写为分开的两个矩阵。

    接着就来求两个方向的误差,和一个梯度计算。
    这个公式推导过程在本文的学习资料中有比较详细的介绍,大家可以去看原文:
    https://zybuluo.com/hanbingtao/note/581764


    1. 误差项沿时间的反向传递:

    定义 t 时刻的误差项:

    目的是要计算出 t-1 时刻的误差项:

    利用 h_t c_t 的定义,和全导数公式,可以得到 将误差项向前传递到任意k时刻的公式:


    2. 将误差项传递到上一层的公式:


    3. 权重梯度的计算:

    以上就是 LSTM 的训练算法的全部公式。


    关于它的 Tuning 有下面几个建议:

    来自 LSTM Hyperparameter Tuning:
    https://deeplearning4j.org/lstm

    还有一个用 LSTM 做 text_generation 的例子

    https://github.com/fchollet/keras/blob/master/examples/lstm_text_generation.py

    学习资料:
    https://zybuluo.com/hanbingtao/note/581764


    推荐阅读 历史技术博文链接汇总
    http://www.jianshu.com/p/28f02bb59fe5
    也许可以找到你想要的

    展开全文
  • rnn lstm

    2016-03-18 09:04:00
    资料收集:https://github.com/kjw0612/awesome-rnn 代码+例子+物理意义:https://iamtrask.github.io/2015/11/15/anyone-can-code-lstm/ lstm详解:http://colah.github.io/posts/2015-08-Understanding-LSTMs/ ...

    资料收集:https://github.com/kjw0612/awesome-rnn

    代码+例子+物理意义:https://iamtrask.github.io/2015/11/15/anyone-can-code-lstm/

    lstm详解:http://colah.github.io/posts/2015-08-Understanding-LSTMs/

    转载于:https://www.cnblogs.com/Wanggcong/p/5290735.html

    展开全文
  • BP CNN RNN LSTM 技术分享

    2018-03-16 15:50:25
    分享 BP CNN RNN LSTM 算法核心点: 反向传播算法的核心就是 梯度下降 + 链式法则求偏导 所谓神经网络的训练或者是学习,其主要目的在于通过学习算法得到神经网络解决指定问题所需的参数, 这里的参数包括各层神经元...
  • RNN lstm

    2016-03-26 11:34:00
    http://wenku.baidu.com/link?url=xC9VKCxUquSohEfv28b4fZsjy5zgJV7HbUNvf5SODKQmI_p_q-PxZ6CpWTALDXg3aVpzrESbTkHkvTpsMa6w_9iZqf18HzA4vrxt43o_9ui 转载于:https://www.cnblogs.com/Wanggcong/p/5322516.html
    展开全文
  • RNN LSTM 介绍

    2017-02-07 14:49:00
    RNN以及LSTM的介绍和公式梳理】http://blog.csdn.net/Dark_Scope/article/details/47056361 【知乎 对比 rnn lstm 简单代码] https://www.zhihu.com/question/37082800 [原码]...

     

    RNN以及LSTM的介绍和公式梳理】http://blog.csdn.net/Dark_Scope/article/details/47056361

    【知乎 对比 rnn  lstm  简单代码] https://www.zhihu.com/question/37082800

    [原码]https://gist.github.com/karpathy/d4dee566867f8291f086

      【神经网络介绍 sigmoid,relu 区别】https://zhuanlan.zhihu.com/p/21462488?refer=intelligentunit

    [多篇分析总结】BP神经网络和RNN神经网络的学习和实现。

    [例子学习】人人都能用Python写出LSTM-RNN的代码![你的神经网络学习最佳起步]  http://blog.csdn.net/zzukun/article/details/49968129

     【LSTM公式推导】http://blog.csdn.net/a635661820/article/details/45390671

    【LSTM公式推导2】http://www.cnblogs.com/ooon/p/5594438.html

    The unreasonable effective RNN

    Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation

    Minimal Gated Unit for Recurrent Neural Networks

     http://cs231n.github.io/neural-networks-case-study/  [DNN]

    转载于:https://www.cnblogs.com/zhangbojiangfeng/p/6374046.html

    展开全文
  • lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(lstm_size) #final_state[0]是cell_state #final_state[1]是hidden_state outputs, final_state = tf.nn.dynamic_rnn(lstm_cell, inputs, dtype = tf.float32) ...
  • RNN LSTM GRU介绍

    2020-01-12 16:32:57
    RNN 在实际应用中,我们会遇到很多序列形的数据 为了建模序列问题,RNN引入了隐状态h(hidden state)的概念,h可以对...长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程...
  • RNN LSTM语言模型

    2020-02-23 11:55:00
    2. RNN LSTM语言模型 (梯度权重) (1)one to one : 图像分类 (2)one to many:图片描述 (3)many to one:文本情感分析、分类 (4)many to many(N vs M):Seq2Seq(机器翻译) (5)many to many(N vs...
  • RNN LSTM的坑

    2019-03-04 17:07:35
    tf.nn.dynamic_rnn 详解 - 木二的文章 - 知乎 https://zhuanlan.zhihu.com/p/43041436
  • RNN LSTM 资源汇总

    2017-09-27 14:48:33
    完全理解RNNRNN变体、seq2seq、attention机制  https://zhuanlan.zhihu.com/p/28054589
  • RNN LSTM GRU 学习

    2020-03-24 14:02:50
    RNN LSTM GRU 学习 GRU GRU lstm
  • RNN 循环神经网络 RNN主要处理有时序关系的变长序列问题。每个神经元在每一时刻都一个特殊的hidden状态h(t),由当前节点的输入I(t)和上一时刻t-1隐藏状态h(t-1)加权求和后经过一个非线性激活函数得到,具体表示成...
  • RNN LSTM GRU BRNN介绍

    2019-01-13 13:32:26
    为什么我们需要序列模型? 当你用前向神经网络或者CNN去处理序列模型的时候,表现的很差。我们常见的序列模型的例子:一段语音或者一句包含序列化单词的英语句子。前向传播或者CNN需要这些句子保持同样的额长度,...
  • RNN LSTM 网络参数问题

    千次阅读 2018-11-24 17:38:21
    问题一:在NLP任务中,词向量维度(embedding size)是否一定要等于LSTM隐藏层节点数(hidden size)? 词向量(Word Embedding)可以说是自然语言处理任务的基石,运用深度学习的自然语言处理任务更是离不开词向量...
  • 莫凡教程RNNlstm对回归例子的代码及在高版本TensorFlow代码更新
  • rnn 双向rnn lstm
  • torch 的RNN LSTM GRU

    2020-06-27 17:45:01
    首先创造初始值 ...真不明白torch创建的rnn单元为啥非得指明输入的x的维度, 这样的模型只能接收一定的x,而tensorflow中rnn单元对输入的维度是没有限制的, 只需指定内部的单元数量及可以了 ...
  • DNN CNN RNN LSTM 的区别

    2019-05-02 15:10:47
    神经网络的来源       神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),包含有输入层、输出层和一个隐藏层。输入的特征向量通过隐藏层变换到达输出层,由输出层得到...
  • RNN LSTM 可变输入长度原理

    千次阅读 2019-10-14 15:40:34
    http://www.yidianzixun.com/article/0IZXKDSe
  • 难以置信!LSTM和GRU的解析从未如此清晰(动图+视频)
  • LSTM算法原理简介及Tutorial 一、背景 LSTM(Long Short-Term Memory)算法作为深度学习方法的一种,在介绍LSTM算法之前,有必要介绍一下深度学习(Deep Learning)的一些基本背景。 目前在机器学习领域,最大的...
  • RNN LSTM Regression-- 回归例子可视化

    千次阅读 2018-03-19 15:31:27
    本节我们会使用 RNN 来进行回归的训练 (Regression). 会继续使用到自己创建的 sin 曲线预测一条 cos 曲线. 我们先确定 RNN 的各种参数(super-parameters):import tensorflow as tf import numpy as np import ...
  • RNN LSTM与GRU深度学习模型学习笔记

    万次阅读 2017-01-09 20:39:48
    RNN(Recurrent Neural Network), LSTM(Long Short-Term Memory)与GRU(Gated Recurrent Unit)都是自然语言处理领域常见的深度学习模型。本文是一个关于这些模型的笔记,依次简单介绍了RNN, LSTM和GRU。在学习了大量的...
  • RNN LSTM 循环神经网络 (分类例子)

    千次阅读 2017-11-01 16:02:14
    相关代码为 TF 2017 打造的新版可视化教学代码机器学习-简介系列 什么是RNN机器学习-简介系列 什么是LSTM RNN本代码基于网上这一份代码 code 设置 RNN 的参数 这次我们会使用 RNN 来进行分类的训练 ...
  • 1 引言深度学习算法模型大致分为三类,物体分类,目标检测和自然语言处理。前面两章我们分析了物体分类算法和目标检测算法,着重讲解了算法执行流程,优缺点,以及他们的优化技巧。本文分析最后一个大类,即自然语言...

空空如也

1 2 3 4 5 ... 20
收藏数 29,953
精华内容 11,981
关键字:

rnn