RNN&LSTM

循环神经网络 RNN

1、前言

数据足够多的时候RNN已经不流行了,自然语言处理多用transformer来进行

2、怎样用时序数据来建模?

传统的one to one模型不适合处理时序性数据,通常情况来说输入和输出的长度都不固定 ,对于时序数据,最好输入和输出的长度都不固定 many to one / many to many,
在这里插入图片描述
状态ht看做是从这句话“ the cat sat on the mat.”抽取的特征向量
更新状态h需要用到参数A
A 是参数矩阵,整条链只有一个,A随机初始化,然后利用训练数据来学习A

3、simple RNN

在这里插入图片描述
上一时刻的状态ht-1和新输入的词向量xt做(那个词没听清)得到一个更高的向量,与参数矩阵A相乘,矩阵与向量乘积是向量,再把tanh激活函数(默认)用于向量的每一个元素,把激活函数的输出作为新时刻的状态向量ht,ht的每一个元素都在-1到1之间,

新的状态ht,依赖于向量ht-1,xt以及矩阵A
在这里插入图片描述
参数数量
在这里插入图片描述

4、搭建简单RNN

在这里插入图片描述
输入词向量x和h的维度是自己设置的,记得调参留最优,可以只保留最后一个状态(包含“I love the movie so much的全部信息”),然后再输入一个分类器,判断这句话是消极还是积极
在这里插入图片描述
在这里插入图片描述
(计算参数个数的最后一个32是偏置量b)
若是你想用h0-ht所以的这些状态也可以,如果你让Keras返回所有状态,RNN的输出就是个矩阵,矩阵的每一行是一个状态向量h,如果用所有状态需要加一个flatten层,把状态矩阵变成一个向量,然后把这个向量作为分类器的输入
在这里插入图片描述
只需要把代码变成
在这里插入图片描述
在这里插入图片描述
原来我只要求输出最后一个向量,所以RNN层的输出就是一个32的向量,现在我要求都输出,RNN层的输出就是一个500*32的矩阵,500的意思是电影评论里有500个单词,所以一共有五百个特征向量,每个状态向量都是32维的
【实际试验过程中发现用最后一个状态和全部状态
并没有显著区别

5、simpleRNN的缺陷

比如目前任务是给定半句话要求预测下一个单词:
(1),比如输入时cloud are in the 正确的输出应该是sky,(只借助前面几个词进行预测)RNN可以完成,RNN很擅长short-term dependence
在这里插入图片描述
状态h100 会把之前的输入忘记,RNN的记忆只有7秒
在这里插入图片描述
在这里插入图片描述
RNN->LSTM:
遗忘其实就是深度学习中老生常谈的梯度消失
LSTM或GRU的作用:它可以学习只保留相关信息来进行预测,忘记不相关的数据。在这种情况下,你记得的单词让你判断麦片是好的。

LSTM

在这里插入图片描述
LSTM比RNN复杂的多,RNN有一个参数矩阵,LSTM有四个

1、LSTM的内部结构

在这里插入图片描述
过去的向量通过传输带送到下一个时刻,不会发生太大的变化,LSTM就是靠传输带来避免梯度消失的问题

LSTM中有很多个Gates可以有选择的让信息通过

forget gate遗忘门由sigmoid函数和element-wise multiplication(两个矩阵对应位置元素进行乘积)两部分组成,

输入sigmoid是一个向量a,算出遗忘门向量f
在这里插入图片描述
f怎么算出来的呢
在这里插入图片描述
ft是上一个状态ht-1和当前状态xt的函数(图右侧的计算过程)
遗忘门有一个参数Wf需要通过反向传播在训练数据里学习

input gate输入门,运算过程和遗忘门差不多

在这里插入图片描述
输入门有一个参数Wi需要通过反向传播在训练数据里学习

New value 也很像,激活函数不一样是tanh

在这里插入图片描述
有一个参数Wc需要通过反向传播在训练数据里学习
在这里插入图片描述

output计算LSTM的输出,也就是状态向量ht

在这里插入图片描述
输出门有一个参数Wo需要通过反向传播在训练数据里学习

LSTM输出ht计算
在这里插入图片描述
所有xt状态的信息都积累到了ht里面

在这里插入图片描述

2、LSTM的实现

1、任务:电影评论情感分析
在这里插入图片描述
代码几乎一样就是层名变了
在这里插入图片描述
在这里插入图片描述
LSTM层是2080*4=8320个参数
也可以用dropout
在这里插入图片描述
但是dropout也不一定提升准确率,因为过拟合是由embedding层造成的(32万个参数)
LSTM总是要比simpleRNN要好
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值