lstm模型与情感分析实例

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

LSTM(Long Short-Term Memory)

LSTM出现背景:由于RNN存在梯度消失的问题,很难处理长序列的数据。为了解决RNN存在问题,后续人们对RNN做了改进,得到了RNN的特例LSTM,它可以避免常规RNN的梯度消失,因此在工业界得到了广泛的应用。
LSTM模型是RNN的变体,它能够学习长期依赖,允许信息长期存在。

举个例子来讲:比如人们读文章的时候,人们会根据已经阅读过的内容来对后面的内容进行理解,不会把之前的东西都丢掉从头进行思考,对内容的理解是贯穿的。
传统的神经网络即RNN做不到这一点,LSTM是具有循环的网络,解决了信息无法长期存在的问题,在工业界普遍使用有良好的效果。

带循环的递归神经网络如下
带循环的递归神经网络

RNN与LSTM之间联系

RNN具有如下的结构,每个序列索引位置t都有一个隐藏状态h(t)。
在这里插入图片描述
如果略去每层都有的o(t),L(t),y(t),则RNN的模型可以简化成如下图的形式:
在这里插入图片描述
可以看出h(t)由x(t)和h(t−1)得到。
得到h(t)后一方面用于当前层的模型损失计算,另一方面用于计算下一层的h(t+1)。

为了避免RNN的梯度消失,LSTM将tanh激活函数转为更为复杂的结构
LSTM的结构如下图:在这里插入图片描述
在下图中,每一行都带有一个向量,该向量从一个节点输出到其他节点的输入。 粉红色圆圈表示点向运算,如向量加法、点乘,而黄色框是学习神经网络层。 线的合并表示连接,而线的交叉表示其内容正在复制,副本将转到不同的位置。可以看到LSTM的结构要比RNN的复杂的多,真佩服牛人们怎么想出来这样的结构,然后这样居然就可以解决RNN梯度消失的问题?由于LSTM怎么可以解决梯度消失是一个比较难讲的问题,我也不是很熟悉,这里就不多说,重点回到LSTM的模型本身。

LSTM模型结构

细胞状态

我们可以看出每个序列位置t时刻除了跟RNN一样的隐藏状态h(t),还多了一个穿过图的顶部的长横线
长直线称之为细胞状态(Cell State),记为C(t)。如下图
在这里插入图片描述

遗忘门

遗忘门(forget gate)决定我们会从细胞状态中丢弃什么信息
在LSTM中即以一定的概率控制是否遗忘上一层的隐藏细胞状态。遗忘门子结构如下图所示:
在这里插入图片描述
图中输入的有上一序列的隐藏状态h(t−1)和本序列数据x(t),通过一个激活函数,一般是sigmoid,得到遗忘门的输出f(t)。由于sigmoid的输出f(t)在[0,1]之间,因此这里的输出ft代表了遗忘上一层隐藏细胞状态的概率。用数学表达式即为:
在这里插入图片描述
其中Wf,Uf,bf为线性关系的系数和偏倚,和RNN中的类似。σ为sigmoid激活函数

输入门

输入门它的作用是处理哪部分应该被添加到细胞状态中,也就是为什么被称为部分存储。它的子结构如下图:
在这里插入图片描述
从图中可以看到输入门由两部分组成,第一部分使用了sigmoid激活函数,输出为i(t),第二部分使用了tanh激活函数,输出为a(t), 两者的结果后面会相乘再去更新细胞状态。用数学表达式即为:
在这里插入图片描述
其中Wi,Ui,bi,Wa,Ua,ba,为线性关系的系数和偏倚,和RNN中的类似。σ为sigmoid激活函数。

更新细胞状态

根据遗忘门得到的概率值,丢弃掉一部分之前的细胞状态加上根据输入门得到的新的一部分细胞状态相加,得到此时刻的细胞状态
在这里插入图片描述

输出门

输出门(output gate)由 o(t) 控制,在这一时刻的输出 h(t)和 y(t) 就是由输出门控制的
h(t)的更新由两部分组成,第一部分是o(t), 它由上一序列的隐藏状态h(t−1)和本序列数据x(t),以及激活函数sigmoid得到,第二部分由隐藏状态C(t)和tanh激活函数组成
在这里插入图片描述
简要来说,LSTM 单元能够学习到识别重要输入(输入门作用),存储进长时状态,并保存必要的时间(遗忘门功能),并学会提取当前输出所需要的记忆。

这也解释了 LSTM 单元能够在提取长时序列,长文本,录音等数据中的长期模式的惊人成功的原因。

前向传播算法

一个时刻的前向传播过程如下,对比RNN多了12个参数
在这里插入图片描述
在这里插入图片描述

反向传播算法

反向传播通过梯度下降法迭代更新所有的参数
在这里插入图片描述
如图上的5个不同的阶段反向传播误差

先介绍下各个变量的维度,htht 的维度是黄框里隐藏层神经元的个数,记为d,即矩阵W∗W∗ 的行数(因为WjiWji是输入层的第ii个神经元指向隐藏层第jj个神经元的参数),xtxt的维度记为n,则[ht−1xt][ht−1xt]的维度是d+nd+n,矩阵的维度都是d∗(d+n)d∗(d+n),其他的向量维度都是d∗1d∗1。(为了表示、更新方便,我们将bias放到矩阵里)
以Wf举例:
在这里插入图片描述
同理:
在这里插入图片描述
合并为一个矩阵就是:
在这里插入图片描述
⊙是element-wise乘,即按元素乘。其他的为正常的矩阵乘
用δztδzt表示EtEt对ztzt的偏导
⊗​ 表示外积,即列向量乘以行向量

结论

LSTM对比RNN简单来讲就是复杂了每层的计算方式,解决梯度消失,可以用于处理处理长序列的数据,所以在工业界得到了广泛的应用

代码实例

使用keras实现LSTM 情感分析

keras提供一个LSTM层,用它来构造和训练一个多对一的RNN。我们的网络吸收一个序列(词序列)并输出一个情感分析值(正或负)。
训练集源自于kaggle上情感分类竞赛,包含7000个短句 UMICH SI650
每个句子有一个值为1或0的分别用来代替正负情感的标签,这个标签就是我们将要学习预测的。

导入所需库

from keras.layers.core import Activation, Dense, Dropout, S

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值