RNN&LSTM学习笔记

深度学习-RNN&LSTM学习笔记

RNN中的关键词:

时序数据:有前后依赖关系的数据序列。例如:对一个包含 3 个单词的语句,那么展开的网络便是一个有 3 层神经网络,每一层代表一个单词。

循环:RNN 之所以称为循环神经网路,是因为一个序列当前的输出与前面的输出有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,也就是说隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。

参数共享:虽然RNN在每一步都在做相同的事,指数输入不同,大大降低了网络需要学习的参数。CNN 和 RNN 的共享参数:我们需要记住的是,深度学习是怎么减少参数的,很大原因就是参数共享,而CNN 是在空间上共享参数,RNN 是在时间上(顺序上)共享参数

长序依赖问题:当前的输入需要依赖很久之前的序列,由于参数在传递的过程中会出现梯度消失或者梯度爆炸的问题,使得普通的RNN很难解决这类问题。

隐藏层:是网络的记忆单元。根据当前输入层的输出与上一步隐藏层的状态进行计算。其中 f 一般是非线性的激活函数,如 tanh 或 ReLU

在这里插入图片描述

LSTM关键词

遗忘门:门:是一种让信息有选择的通过的过程,一般将参数经过sigmoid转化为【0,1】之间,0表示忘记,1表示记忆。当信息需要被保留时,才经过激活函数处理,最终输出。否则,直接丢弃

RNN和LSTM出现的背景和意义

RNN是循环神经网络的意思,为什么要使用循环呢?对什么进行循环呢?

在翻译中,常常用根据上下文的意思来判断某个词或者某句话的意思。在时序问题中,需要根据历史的数据来推测当前数据的值;但是传统的神经网络中每个数据的输入和输出都是孤立的,RNN就横空出世了。

RNN中循环的含义是 在模型在计算当前的输入信息是,会将历史的输入信息产生的参数考虑进来,这样网络就有了记忆上文的作用了。双向RNN不仅会考了上文的参数,还会考虑下文的参数,这样网络就能够记忆上下文的信息了。其中循环的含义是:上一个输入信息的输出信息会传递给当前的模型,当前的模型输出的信息会传递给下一个输入数据的计算过程,但是整个模型的参数对象和个数是不变的,只不过值在不断更新。即在 RNN 中,每输入一步,每一层各自都共享参数 U,V,W。其反映着 RNN 中的每一步都在做相同的事,只是输入不同,因此大大地降低了网络中需要学习的参数。

但是普通 RNN 训练中,无法解决长时依赖问题(即当前的输出与前面很长的一段序列有关,一般超过十步就无能为力了),因为 Backpropagation Through Time (BPTT) 会带来所谓的梯度消失或梯度爆炸问题(the vanishing/exploding gradient problem)。 就像一个试图记住所有事的人,最终什么也想不起来。怎么解决呢?LSTM就横空出世了。

LSTM:长短期记忆模型。该模型能够处理时间跨度较长的输入信息,原理是LSTM内部有一个遗忘门,遗忘门就像一个开关,当参数包含的信息量不满足规则时,就遗忘该参数。就像智者不会什么事都要记住,而是有选择地记住重要的事,反而会记得更清晰。这样,LSTM就能够记住长序数据了。

遗忘门的原理是:门:是一种让信息有选择的通过的过程,一般将参数经过sigmoid转化为【0,1】之间,0表示忘记,1表示记忆。当信息需要被保留时,才经过激活函数处理,最终输出。否则,直接丢弃。

标准LSTM门:

1)决定丢弃信息:

人工智能的重要算法之一--LSTM算法

2)确定更新的信息:

人工智能的重要算法之一--LSTM算法

3)更新细胞状态:
在这里插入图片描述

4)输出信息:

人工智能的重要算法之一--LSTM算法

keras中LSTM的参数介绍

  1. return_sequences:默认为false。当为false时,返回最后一层最后一个步长的hidden state;当为true时,返回最后一层的所有hidden state。

    在LSTM中间层一般将return_sequence =True,在训练的最后return_sequence =False
    例如:
    #变换
    trainx = np.reshape(trainx,(trainx.shape[0],timesteps,1))#变换shape,以满足keras
    #lstm training
    model = Sequential()
    model.add(LSTM(128,input_shape=(timesteps,1),return_sequences= True))
    model.add(Dropout(0.5))
    model.add(LSTM(128,return_sequences=True))
    #model.add(Dropout(0.3))
    model.add(LSTM(64,return_sequences=False))
    #model.add(Dropout(0.2))
    model.add(Dense(predict_steps))
    model.compile(loss=“mean_squared_error”,optimizer=“adam”)
    model.fit(trainx,trainy, epochs= 50, batch_size=200)

  2. return_state:默认false.当为true时,返回最后一层的最后一个步长的输出hidden state和输入cell state
    cell是指一种伴随整个网络过程中用来记忆,遗忘,选择并最终影响 hidden state 结果的东西,称为 cell state。 cell state 就是实现 long short memory 的关键

  3. 输入数据的格式:必须是3维矩阵,分别是样本个数,循环次数,样本的特征维度:样本reshape input to be 3D [samples, timesteps, features]
    train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))

发布了65 篇原创文章 · 获赞 16 · 访问量 8094
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览