lstm网络_LSTM(长短期记忆网络)

在上篇文章一文看尽RNN(循环神经网络)中,我们对RNN模型做了总结。由于RNN也有梯度消失的问题,因此很难处理长序列的数据,大牛们对RNN做了改进,得到了RNN的特例LSTM(Long Short-Term Memory),它可以避免常规RNN的梯度消失,因此在工业界得到了广泛的应用。下面我们就对LSTM模型做一个总结。

Long Short Term Memory networks(以下简称LSTMs),一种特殊的RNN网络,该网络设计出来是为了解决长依赖问题。该网络由 Hochreiter & Schmidhuber (1997)引入,并有许多人对其进行了改进和普及。他们的工作被用来解决了各种各样的问题,直到目前还被广泛应用。

1、从RNN到LSTM

在 RNN 模型里,我们讲到了 RNN 具有如下的结构,每个序列索引位置 都有一个隐藏状态 。

37b0fab4bc6bf84c64db72b50e450df0.png
RNN时间线展开图

如果我们略去每层都有 ,则 RNN 的模型可以简化成如下图的形式:

所有循环神经网络都具有神经网络的重复模块链的形式。在标准的RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。

6bb420b81ee72e8a9286381f561a5ed8.png
The repeating module in a standard RNN contains a single layer.

图中可以很清晰看出在隐藏状态由和 得到。由于 RNN 梯度消失的问题,大牛们对于序列索引位置 的隐藏结构做了改进,可以说通过一些技巧让隐藏结构复杂了起来,来避免梯度消失的问题,这样的特殊 RNN 就是我们的 LSTM 。

LSTMs也具有这种链式结构,但是它的重复单元不同于标准RNN网络里的单元只有一个网络层,它的内部有四个网络层。由于 LSTM 有很多的变种,这里我们以最常见的 LSTM 为例讲述。LSTMs的结构如下图所示。

92ac359192a52780ea2e334ace295163.png
The repeating module in an LSTM contains four interacting layers.

可以看到 LSTM 的结构要比 RNN 的复杂的多,真佩服牛人们怎么想出来这样的结构,然后这样居然就可以解决 RNN 梯度消失的问题。

在解释LSTMs的详细结构时先定义一下图中各个符号的含义,符号包括下面几种:

7493da9c226c752a5ac039cb4e6d191d.png

在上图中,黄色的盒子是神经网络层,粉红色的圆圈表示点操作,如向量加法乘法,单箭头表示数据流向,箭头合并表示向量的合并(concat)操作,箭头分叉表示向量的拷贝操作。

2、LSTM核心思想

LSTMs的核心是单元状态(Cell State),用贯穿单元的水平线表示。

单元状态有点像传送带。它沿着整个链一直走,只有一些微小的线性相互作用。信息很容易在不改变的情况下流动。单元状态如下图所示。

09e924921abfe1ccf16af76e7d620868.png

LSTM确实有能力将信息移除或添加到单元状态,并由称为gates的结构小心地进行调节。

门是一种选择性地让信息通过的方式。它们由一个Sigmod网络层和一个点乘运算组成。

470adb9a3b15e609572b73868cf23bce.png

因为sigmoid层的输出是0-1的值,这代表有多少信息能够流过sigmoid层。0表示都不能通过,1表示都能通过。

一个LSTM里面包含三个门来控制单元状态。

3、一步一步理解LSTM

前面提到LSTM由三个门来控制细胞状态,这三个门分别称为忘记门、输入门和输出门。下面一个一个的来讲述。

3.1 遗忘门(forget gate)

LSTM 的第一步就是决定细胞状态需要丢弃哪些信息。这部分操作是通过一个称为遗忘门的 sigmoid 单元来处理的。它通过 和 信息来输出一个 0-1 之间的向量,该向量里面的 0-1 值表示单元状态 中的哪些信息保留或丢弃多少。0表示不保留,1表示都保留。遗忘门如下图所示。

9ad829bdcab01a2c8a1d4744f0bd5110.png
01ceadfb5a7f7e2343242efda58c015a.png
forget gate

3.2 输入门(input gate)

要更新单元状态,我们需要输入门。首先,我们将先前的隐藏状态和当前输入传递给 函数。这决定了通过将值转换为0到1来更新哪些值。0表示不重要,1表示重要。你还将隐藏状态和当前输入传递给 函数,将它们压缩到-1和1之间以帮助调节网络。然后将 输出与 输出相乘。

9c2f6bbca85c35fda9c4c173d0d8d624.png
c073d884a9fc871553a09457d9a65a86.png
input gate

3.3 单元状态(cell state)

现在我们有足够的信息来计算单元状态。首先,单元状态逐点乘以遗忘向量。如果它乘以接近0的值,则有可能在单元状态中丢弃值。然后我们从输入门获取输出并进行逐点加法,将单元状态更新为神经网络发现相关的新值。这就得到了新的单元状态。

fddfc6fdba0e04ccc9bd6df52f6b91bd.png
3cf4e0b2c455df66c93cf72412e331bd.png
cell state

3.4 输出门(output gate)

最后我们有输出门。输出门决定下一个隐藏状态是什么。请记住,隐藏状态包含有关先前输入的信息。隐藏状态也用于预测。首先,我们将先前的隐藏状态和当前输入传递给 函数。然后我们将新的单元状态传递给 函数。将 输出与 输出相乘,以决定隐藏状态应携带的信息。它的输出是隐藏状态。然后将新的单元状态和新的隐藏状态传递到下一个时间步。

1ebbf49bea0bce3ed6bdc4776aeb9b0e.png
36622f06563c37bf479317787258c0c0.png
output gate

遗忘门决定了哪些内容与前面的时间步相关。

输入门决定了从当前时间步添加哪些信息。

输出门决定下一个隐藏状态应该是什么。

4、LSTM变种

之前描述的LSTM结构是最为普通的。在实际的文章中LSTM的结构存在各种变式,虽然变化都不会太大,但是也值得一提。

其中一个很受欢迎的变式由Gers & Schmidhuber (2000)提出,它在LSTM的结构中加入了“peephole connections.”结构,peephole connections结构的作用是允许各个门结构能够看到细胞信息,具体如下图所示。

6c81a214b45cb6f5271d84e335450f8b.png

上图在所有的门上都增加了“peephole connections.”,但是但许多论文只为部分门添加。

还有一种变式是在忘记门与输入门之间引入一个耦合。不同于之前的LSTM结构,忘记门和输入门是独立的,这个变式是在忘记门删除历史信息的位置加入新的信息,在加入新信息的位置删除旧信息。该结构如下图所示。

2d9dc8eda984dfbd71e74a7075d76aa0.png

一种比其他形式变化更为显著的LSTM变式是由 Cho, et al. (2014)提出的门循环单元(GRU)。它将忘记门和输入门合并成一个新的门,称为更新门。GRU还有一个门称为重置门。如下图所示

d449c9ae0e30326788ded02fcaef74ff.png

5、总结

之前也提到过RNNs取得了不错的成绩,这些成绩很多是基于LSTMs来做的,说明LSTMs适用于大部分的序列场景应用。一般文章写法会堆一堆公式吓唬人,希望本文一步一步的拆分能有助于大家的理解。LSTMs对于RNNs的使用是一大进步。那么现在还有个问题,是否还有更大的进步?对于很多研究者来说,但是是肯定的,那就是attention的问世。attention的思想是让RNN在每一步挑选信息的时候都能从更大的信息集里面挑选出有用信息。例如,利用RNN模型为一帧图片生成字母,它将会选择图片有用的部分来得到有用的输入,从而生成有效的输出。事实上, Xu, et al.(2015) 已经这么做了,如果你想更深入的了解attention,这会是一个不错的开始。attention方向还有一些振奋人心的研究,但还有很多东西等待探索......

6、参考链接

  • http://colah.github.io/posts/2015-08-Understanding-LSTMs/
  • https://zhuanlan.zhihu.com/p/81549798
9b0738ce8dfe65d830000b2ead24b3f4.png
关注公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

随笔27 面向对象的五大基本原则

面向对象的五大基本原则 单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化…

ant接口用什么天线_手机听收音机时,为什么必须用耳机作为天线?

名侦探柯基-十万个为什么 第七十六期起因,观看活着韩国丧尸电影时的一幕,刘亚仁想听电台广播,却无奈于所有设备都是无线的,由此疑惑到,只有插入有线的耳机,才能收听广播吗?耳机线就是天线&#…

qt c++ 图片预览_Qt多语言国际化

Qt附加工具介绍Qt Assistant(Qt助手)Qt Linguist(Qt语言家)Qt Designer(Qt设计师)Qt AssistantQt Assistant是可配置且可重新发布的文档阅读器,可以方便地进行定制并与Qt应用程序一起重新发布。Qt Assistan…

Icon+启动图尺寸

1、LaunchImage 启动图 命名格式: 1x -> xxx.png 2x -> xxx2x.png Retina 4 -> xxx2x.png     转载于:https://www.cnblogs.com/z-z-z/p/7828082.html

智商情商哪个重要_《所谓逆商高,就是心态好》:逆商,比情商和智商更重要...

所谓“逆商”,是指人们遇到逆境时的应对能力,即战胜挫折、摆脱困境和超越困难的能力。我们一生会面临各种各样的难题,也许是考试失利,也许是和心爱的人分离,也许是工作上竞争失败……在失意的时候你会做何选择&#xf…

mysql 排名_学会在MySQL中实现Rank高级排名函数,所有取前几名问题全部解决.

MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名。尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名效果。在这里我用一个简单例子来实现…

__getattr__动态获取接口

# -*- coding:utf-8 -*- #在看廖雪峰的python3.5教学时,看到面向对象高级编程_定义类 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319098638265527beb24f7840aa97de564ccc7f20f6000 百度了很久没有找到想要的答案&a…

意大利_【解读】去意大利留学,一定要学意大利语吗?意大利语难吗?

喜欢意大利,想去意大利留学,但不想学意大利语可以吗?意大利语太难了,听说有英授专业(本来就要学英语、考雅思所以不担心英语)……问题来了去意大利留学,选择英授专业的话还需要学意大利语吗?我们一点点剖析…

MD5、SHA1、SHA256的简单讲解

简述: 最近在研究系统以及驱动,当下载比较大的文件时总会提供SHA1或者SHA256,下载结束后使用校验工具得到的值与它进行比对来判断下载是否成功。 使用工具校验 certutil -hashfile 文件名 sha1/sha256/md5正文: MD5、SHA1、SHA256这些都被称为 哈希…

java swarm集群_52个Java程序员不可或缺的 Docker 工具

Docker工具分类列表编排和调度持续集成/持续部署(CI / CD)监控记录安全存储/卷管理联网服务发现构建管理编排和调度 1. KubernetesKubernetes是市场上最实用的最受欢迎的容器编排引擎。最初作为一个Google项目开始,成千上万的团队使用它来部署生产中的容器。谷歌声称…

centos7.4安装nginx1.8.1 php7.7.11 安装 MySQL5.7.20

解决依赖关系 yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel nginx源码下载地址 http://nginx.org/download/ 解压 tar -zxvf nginx-1.8.1.tar.gz 进入目录 cd nginx-1.8.1 检测配置 ./configure --prefix/usr/local/nginx --sbin-path/usr/bin/n…

comsol显示电场计算结果_在 COMSOL 中构建磁流体动力学多物理场模型

COMSOL Multiphysics 软件中的模型都是从零开始构建的,软件支持多物理场,因此用户可以按照自己的意愿轻松地组合代表不同物理场现象的模型。有时这可以通过使用软件的内置功能来实现,但有些情况下,用户需要做一些额外的工作。我们…

数据挖掘初次接触!学习代码

import pandas as pd import numpy as np from time import timedatapd.read_csv("dankuan.csv",sep;,index_col0) #打开表 data.head() #查看前几行的数据,默认前5行 data.describe() #数据的快速统计汇总 data.g4_term_type.value_counts() data2data.fillna(value…

心率过100怎么处理_心跳每分钟超过100次,为何血压很正常?心跳太快该怎么办?...

在人们的心中一个人要是心跳速度很快,那么就意味着血压升高了。大家也知道正常情况下,每分钟心跳在55下到100下之间,都是正常情况。不过,现在有很多人心跳虽然很快,每分钟都超过100次了,但是一检查血压还是…

python卷子_Python试卷

3、写一个函数&#xff0c;计算一个给定的日期是该年的第几天。def getday(self,yNone,mNone,dNone):date datetime(y,m,d)days date.strftime(%j)return days4、写一个函数&#xff0c;给定N&#xff0c;返回斐波那契数列第N项。def getn_vlaue(self,n):if n<2:return 1e…

JS日期选择器

<html><head><title>JS日期选择器</title><script type"text/JavaScript">function HS_DateAdd(interval, number, date) {number parseInt(number);if (typeof (date) "string") {var date new Date(date.split("-…

微运行库2015_vc++2015运行库下载_vc++2015运行库64位官方下载「vc2015」-太平洋下载中心...

常见问答&#xff1a;(1)win10安装vc2015提示错误0x80070666如何解决&#xff1f;步骤&#xff1a;前提需要通过程序和功能 将旧版的vc 卸载1、首先下载"VC6.0垃圾文件清理工具"&#xff1b;2、将下载的到压缩包解压出来&#xff1b;3、打开文件夹&#xff0c;在Copy…

python爬silverlight_Python创建Silverlight控件编写过程经验分享

Python编程语言可以帮助我们实现哪些功能呢&#xff1f;它的主要应用范围都包括哪些呢&#xff1f;我们今天先来了解一下有关Python创建Silverlight控件的相关实现方法&#xff0c;以此来初步熟悉一下这一语言的应用方式以及功能特点。其实关注Silverlight很久了&#xff0c;只…

RGB转LAB色彩空间

https://www.cnblogs.com/hrlnw/p/4126017.html 1.原理 RGB无法直接转换成LAB&#xff0c;需要先转换成XYZ再转换成LAB&#xff0c;即&#xff1a;RGB——XYZ——LAB 因此转换公式分两部分&#xff1a; &#xff08;1&#xff09;RGB转XYZ 假设r,g,b为像素三个通道&#xff0c;…

fileitem方法_FileItem的常用方法

下面介绍FileItem类中的几个常用的方法&#xff1a;1. isFormField方法isFormField方法用于判断FileItem类对象封装的数据是否属于一个普通表单字段&#xff0c;还是属于一个文件表单字段&#xff0c;如果是普通表单字段则返回true&#xff0c;否则返回false。该方法的完整语法…