博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LSTM神经网络
阅读量:6980 次
发布时间:2019-06-27

本文共 1426 字,大约阅读时间需要 4 分钟。

LSTM是什么

LSTM即Long Short Memory Network,长短时记忆网络。它其实是属于RNN的一种变种,可以说它是为了克服RNN无法很好处理远距离依赖而提出的。

我们说RNN不能处理距离较远的序列是因为训练时很有可能会出现梯度消失,即通过下面的公式训练时很可能会发生指数缩小,让RNN失去了对较远时刻的感知能力。

解决思路

RNN梯度消失不应该是由我们学习怎么去避免,而应该通过改良让循环神经网络自己具备避免梯度消失的特性,从而让循环神经网络自身具备处理长期序列依赖的能力。

RNN的状态计算公式为

,根据链式求导法则会导致梯度变为连乘的形式,而sigmoid小于1会让连乘小得很快。为了解决这个问题,科学家采用了累加的形式,

,其导数也为累加,从而避免梯度消失。LSTM即是使用了累加形式,但它的实现较复杂,下面进行介绍。

LSTM模型

回顾一下RNN的模型,如下图,展开后多个时刻隐层互相连接,而所有循环神经网络都有一个重复的网络模块,RNN的重复网络模块很简单,如下下图,比如只有一个tanh层。

这里写图片描述

这里写图片描述

而LSTM的重复网络模块的结构则复杂很多,它实现了三个门计算,即遗忘门、输入门和输出门。每个门负责是事情不一样,遗忘门负责决定保留多少上一时刻的单元状态到当前时刻的单元状态;输入门负责决定保留多少当前时刻的输入到当前时刻的单元状态;输出门负责决定当前时刻的单元状态有多少输出。

这里写图片描述

每个LSTM包含了三个输入,即上时刻的单元状态、上时刻LSTM的输出和当前时刻输入。

LSTM的机制

这里写图片描述

根据上图咱们一步一步来看LSTM神经网络是怎么运作的。

首先看遗忘门,用来计算哪些信息需要忘记,通过sigmoid处理后为0到1的值,1表示全部保留,0表示全部忘记,于是有

其中中括号表示两个向量相连合并,W_f是遗忘门的权重矩阵,\sigma为sigmoid函数,b_f为遗忘门的偏置项。设输入层维度为d_x,隐藏层维度为d_h,上面的状态维度为d_c,则W_f的维度为d_c\times(d_h+d_x)。

这里写图片描述

其次看输入门,输入门用来计算哪些信息保存到状态单元中,分两部分,第一部分为

该部分可以看成当前输入有多少是需要保存到单元状态的。第二部分为

该部分可以看成当前输入产生的新信息来添加到单元状态中。结合这两部分来创建一个新记忆。

这里写图片描述

而当前时刻的单元状态由遗忘门输入和上一时刻状态的积加上输入门两部分的积,即

这里写图片描述

最后看看输出门,通过sigmoid函数计算需要输出哪些信息,再乘以当前单元状态通过tanh函数的值,得到输出。

这里写图片描述

LSTM的训练

化繁为简,这里只讨论包含一个LSTM层的三层神经网络(如果有多个层则误差项除了沿时间反向传播外,还会向上一层传播),LSTM向前传播时与三个门相关的公式如下,

需要学习的参数挺多的,同时也可以看到LSTM的输出h_t有四个输入分量加权影响,即三个门相关的 f_t i_t c_t o_t,而且其中权重W都是拼接的,所以在学习时需要分割出来,即

相关阅读:

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 进行预定。感谢各位朋友。

=========================

欢迎关注:

这里写图片描述

转载地址:http://sojpl.baihongyu.com/

你可能感兴趣的文章
专业的程序员需要具备的思考能力:写一个程序需要注意多少细节问题
查看>>
Android--使用SharedPreferences
查看>>
PXE 自动安装物理机 (DHCP服务由路由提供, 不能再配置)
查看>>
怪异的StackOverflowException异常
查看>>
JAVA操作数据库----- http://blog.sina.com.cn/andyfang
查看>>
使用Linq to Sql 创建数据库和表
查看>>
Java8-Executors-No.02
查看>>
Objective-C:在类中设置不同协议
查看>>
元数据
查看>>
Web Essentials之Browser Link
查看>>
js修改后没反应-看看是不是取的缓存
查看>>
05. Web大前端时代之:HTML5+CSS3入门系列~H5 多媒体系
查看>>
使用GhostDoc为代码生成注释文档
查看>>
Kettle的设计
查看>>
零代码如何打造自己的实时监控预警系统
查看>>
一段关于写书的对话。
查看>>
分布式监控系统Zabbix-3.0.3-完整安装记录 - 添加shell脚本监控
查看>>
Android之查看外部依赖jar的源代码_android private libralies does not allow modifications to source...
查看>>
Redis中的关系查询(范围查询,模糊查询等...)
查看>>
Git常用命令总结【转】
查看>>