循环神经网络

TensorFlow人工智能引擎入门教程之九 RNN/LSTM循环神经网络长短期记忆网络使用

余生颓废 提交于 2020-03-26 09:21:32
3 月,跳不动了?>>> 这几天空余时间玩了2天的单机游戏。 黑暗之魂,手柄玩起来挺爽, 这一章节我们讲一下 循环神经网络,RNN 是一种非常通用的神经网络,无论是图像识别 还是 声音识别 文字识别 NLP 时间系列的数据 周期的数据 等等都是通用适合的. 在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNNs之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNNs能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关.比如 图片 如果28x28像素 如果我们把每一行像素跟上一行的像素 看做时间系列处理的话,也就是 在传统的神经网络WX+B 引入了t 每一个时间系列 t范围内,下一次的w 通过上一个t-1 的wx+b得到 w 所以 图像如果使用RNN处理适合 图像理解 效果很好,NLP 效果也很好。 详细的介绍 可以看这个 http://www

再探循环神经网络

一曲冷凌霜 提交于 2020-03-14 02:22:05
上一篇中,我们讨论了循环神经网络相关的基本内容,今天我们继续探讨一下循环神经网络还有那些需要注意的更高级的用法。 降低过拟合 在之前的讨论中,我们经常聊起过拟合的问题,我们一般判断训练的网络什么情况下算作训练完成,查看其精度和损失时,也都看的是其过拟合之前的数据,避免过拟合的一种方法是用 dropout 方法,随机清零的方式去实现,但是在循环神经网络中,这个问题就有点复杂了。 人们在大量的实验中早已经发现,在循环层前进行 dropout 对于降低过拟合没什么帮助,甚至可能会影响网络的正常训练,在循环层中如何 dropout 是在 2015 年的一篇论文中提出来的,具体的方式是:在每一个时间步中,使用相同的 dropout 掩码,并且将这个不随时间步变化的 dropout 掩码应用于层的内部循环激活,这样就可以将其学习的误差传递下去,如果在 Keras 中使用 LSTM、GRU 等循环神经网络都可以通过设置 dropout(输入单元 dropout) 和 recurrent_out (循环单元 dropout)来降低过拟合,一般情况下,最佳情况不会有大的下降,但会稳定更多,是调优网络的一个思路。用的方法是: model.add(layers.GRU(32, dropout=0.2, recurrent_dropout=0.2, input_shape=(None, float

循环神经网络

情到浓时终转凉″ 提交于 2020-03-11 19:27:59
​最近的股市震荡的有点厉害,跌的有点惨,面对如此情景,我波澜不惊,原因很简单,前几年我小试牛刀的时候我意识到了这不是我这种散户能玩得懂的,如今的我早已空仓。万物皆可 AI,如何用深度学习的方法去理解呢?当然,本篇不是一个指导买股票的文章,也不会用股票的数据信息去训练模型,我付不起这样的责任,也同样因为股票的市场行情远非一点股票价钱数据就可以解释的。下面我们来聊一聊正事, 循环神经网络(RNN) 。 为什么要引入循环神经网络?思考一个问题,如果问你明天股票的市场行情是看涨还是看跌,大概率你会搜索一下近一段时间的行情趋势,然后给我一个猜测的回答,我们认为明天的行情与近一段时间的股票价格是有关系的,我们人脑会对此进行一定的推测,我们知道神经网络在某一种程度上来说,也是一种模拟人脑的行为,那我们的神经网络可以做预测吗?我们之前用于训练神经网络的是一个独立的数据信息,我们把它们打乱顺序,还是可以得到正确的结果,很显然,股票的价钱信息是不能打乱顺序的,这两种数据有什么区别? 一种数据是顺序无关的,一种数据是顺序有关的。 我们之前的网络不好用了,我们需要新的网络去解决这个问题——循环神经网络。循环神经网络遍历数据时,会保存数据的状态信息,这个状态信息包含之前数据的信息,它的内部有环状结构,前一项数据项的输出,是下一个数据项的输入,这样后一项数据会受到前一项数据的影响。

动手深度学习 笔记 7

我与影子孤独终老i 提交于 2020-02-21 11:45:24
循环神经网络进阶 GRU(门控循环单元) 门控循环神经网络,为了更好地捕捉时间序列中时间步距离较大的依赖关系。 其中,门控循环单元(gated recurrent unit,GRU)是一种常用的门控循环神经网络,它引入了重置门(reset gate)和更新门(update gate)的概念,从而修改了循环神经网络中隐藏状态的计算方式。 R t =σ(X t W xr +H t−1 W hr +b r ) Z t =σ(X t W xz +H t−1 W hz +b z ) H˜ t =tanh(X t W xh +(R t ⊙H t−1 )W hh +b h ) H t =Z t ⊙H t−1 +(1−Z t )⊙H˜ t • 重置⻔有助于捕捉时间序列⾥短期的依赖关系; • 更新⻔有助于捕捉时间序列⾥⻓期的依赖关系。 来源: CSDN 作者: M.〽 链接: https://blog.csdn.net/weixin_43332422/article/details/104381121

循环神经网络经典模型

落花浮王杯 提交于 2020-02-19 23:12:40
详细地介绍了经典的RNN、RNN几个重要变体,以及Seq2Seq模型、Attention机制。 #一、从单层网络谈起 在学习RNN之前,首先要了解一下最基本的单层网络,它的结构如图: #二、经典的RNN结构(N vs N) 如: 自然语言处理问题。x1可以看做是第一个单词,x2可以看做是第二个单词,依次类推。 语音处理。此时,x1、x2、x3……是每帧的声音信号。 时间序列问题。例如每天的股票价格等等 序列形的数据就不太好用原始的神经网络处理了。为了建模序列问题,RNN引入了隐状态h(hidden state)的概念,h可以对序列形的数据提取特征,接着再转换为输出。先从h1的计算开始看: 图示中记号的含义是:圆圈或方块表示的是向量。 一个箭头就表示对该向量做一次变换。如上图中h0和x1分别有一个箭头连接,就表示对h0和x1各做了一次变换。 在很多论文中也会出现类似的记号,初学的时候很容易搞乱,但只要把握住以上两点,就可以比较轻松地理解图示背后的含义。 h2的计算和h1类似。要注意的是,在计算时,每一步使用的参数U、W、b都是一样的,也就是说每个步骤的参数都是共享的,这是RNN的重要特点,一定要牢记。 依次计算剩下来的(使用相同的参数U、W、b): 一个箭头就表示对对应的向量做一次类似于f(Wx+b)的变换,这里的这个箭头就表示对h1进行一次变换,得到输出y1。剩下的输出类似进行

深度学习——循环神经网络

为君一笑 提交于 2020-02-19 06:09:16
理解 循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network)。 递归神经网络(RNN)相对于MLP和CNN的主要优点是,它能够处理序列数据,在传统神经网络或卷积神经网络中,样本(sample)输入与输出是没有“顺序”概念的,可以理解为,如果把输入序列和输出序列重新排布,对整体模型的理论性能不会有影响。RNN则不同,它保证了输入和输出至少有一端是有序列特征的。 传统的神经网络结构可以归纳为下图左边的形式,隐藏层 h 的状态是不保存的,而在RNN中,每一个时间步的隐藏层状态都是由上一层的输入和上一个时间的状态共同计算得到。 为什么循环神经网络可以往前看任意多个输入值呢? 来看下面的公式,即 RNN 的输出层 o 和隐藏层 s 的计算方法: 如果反复把式 2 带入到式 1,将得到: RNN 的训练算法为:BPTT BPTT 的基本原理和 BP 算法是一样的,同样是三步: 1、前向计算每个神经元的输出值; 2、反向计算每个神经元的误差项值,它是误差函数E对神经元j的加权输入的偏导数; 3、计算每个权重的梯度。 最后再用随机梯度下降算法更新权重。 模型参数 W_xh: 状态-输入权重 W

循环神经网络 简易使用

…衆ロ難τιáo~ 提交于 2020-02-16 01:22:56
循环神经网络 本节介绍循环神经网络,下图展示了如何基于循环神经网络实现语言模型。我们的目的是基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络引入一个隐藏变量H,用Ht表示H在时间步t的值。Ht的计算基于Xt和Ht−1,可以认为Ht记录了到当前字符为止的序列信息,利用Ht对序列的下一个字符进行预测。 循环神经网络的构造 我们先看循环神经网络的具体构造。假设Xt∈Rn×d是时间步t的小批量输入,Ht∈Rn×h是该时间步的隐藏变量,则: Ht=ϕ(XtWxh+Ht−1Whh+bh). 其中,Wxh∈Rd×h,Whh∈Rh×h,bh∈R1×h,ϕ函数是非线性激活函数。由于引入了Ht−1Whh,Ht能够捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样。由于Ht的计算基于Ht−1,上式的计算是循环的,使用循环计算的网络即循环神经网络(recurrent neural network)。 在时间步t,输出层的输出为: Ot=HtWhq+bq. 其中Whq∈Rh×q,bq∈R1×q。 从零开始实现循环神经网络 我们先尝试从零开始实现一个基于字符级循环神经网络的语言模型,这里我们使用周杰伦的歌词作为语料,首先我们读入数据: In [1]: import torch import torch.nn as nn import time import math

6.5 循环神经网络的简洁实现

心不动则不痛 提交于 2020-02-15 10:10:00
6.5.1 定义模型 Mxnet: num_hiddens = 256 rnn_layer = rnn . RNN ( num_hiddens ) rnn_layer . initialize ( ) batch_size = 2 state = rnn_layer . begin_state ( batch_size = batch_size ) state [ 0 ] . shape num_steps = 35 X = nd . random . uniform ( shape = ( num_steps , batch_size , vocab_size ) ) Y , state_new = rnn_layer ( X , state ) Y . shape , len ( state_new ) , state_new [ 0 ] . shape # 本类已保存在d2lzh包中方便以后使用 class RNNModel ( nn . Block ) : def __init__ ( self , rnn_layer , vocab_size , ** kwargs ) : super ( RNNModel , self ) . __init__ ( ** kwargs ) self . rnn = rnn_layer self . vocab_size = vocab

循环神经网络实现创作歌词

我的梦境 提交于 2020-02-15 09:11:17
介绍 假设 X t ∈ R n × d X_t∈\R^{n×d} X t ​ ∈ R n × d 是时间步 t t t 的小批量输入, H t ∈ R n × h H_t∈\R^{n×h} H t ​ ∈ R n × h 是该时间步的隐藏变量,则: H t = ϕ ( X t W x h + H t − 1 W h h + b h ) H_t=ϕ(X_t W_{xh}+H_{t−1}W_{hh}+b_h) H t ​ = ϕ ( X t ​ W x h ​ + H t − 1 ​ W h h ​ + b h ​ ) 其中, W x h ∈ R d × h W_{xh}∈\R^{d×h} W x h ​ ∈ R d × h , W h h ∈ R h × h W_{hh}∈\R^{h×h} W h h ​ ∈ R h × h , b h ∈ R 1 × h b_h∈\R^{1×h} b h ​ ∈ R 1 × h , ϕ ϕ ϕ 函数是非线性激活函数。由于引入了 H t − 1 W h h H_{t−1}W_{hh} H t − 1 ​ W h h ​ , H t H_t H t ​ 能够捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样。由于 H t H_t H t ​ 的计算基于 H t − 1 H_{t−1} H t − 1 ​ ,上式的计算是循环的

循环神经网络

允我心安 提交于 2020-02-15 00:59:36
文本预处理 读入文本 分词 建立字典,将每个词映射到一个唯一的索引(index) 将文本从词的序列转换为索引的序列,方便输入模型 import spacy nlp = spacy . load ( 'en_core_web_sm' ) doc = nlp ( text ) print ( [ token . text for token in doc ] ) from nltk . tokenize import word_tokenize from nltk import data data . path . append ( '/home/kesci/input/nltk_data3784/nltk_data' ) print ( word_tokenize ( text ) ) 语言模型 n元语法 P ( w 1 , w 2 , … , w T ) = ∏ t = 1 T P ( w t ∣ w t − ( n − 1 ) , … , w t − 1 ) P(w_1, w_2, \ldots, w_T) = \prod_{t=1}^T P(w_t \mid w_{t-(n-1)}, \ldots, w_{t-1}) P ( w 1 ​ , w 2 ​ , … , w T ​ ) = t = 1 ∏ T ​ P ( w t ​ ∣ w t − ( n − 1 ) ​ , … ,