循环神经网络-LSTM
LSTM(Long Short-Term Memory)是长短期记忆网络,是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件。
LSTM能够很大程度上缓解长期依赖的问题。
LSTM的形象描述
RNN是傻子式的记忆,把所有的事情都记下来,这很容易记忆混乱。
LSTM不同的地方是学会了思考、总结,而且思考方式很符合人类的思维。
首先它会有一定的记忆(初始记忆)和经验。
// 记忆:人在学习时会通过各种渠道获取大量资料,但是有些资料这样说,有些那样说,无法确定真假,只能都记住,这就是记忆
// 经验:通过一些权威的资料获取的知识,或者自己实际验证过的,作为经验
然后它会综合今天发生的事情和之前的经验,来判断之前的记忆是否正确,然后遗忘错误的记忆,记忆被刷新。
此时的记忆还不包含今天的事情。
然后它并行的做了两件事,第一,把今天发生的事情和之前的经验总结一下(当中肯定有确定是错误的的),第二,对今天发生的事情和之前的经验进行评价,之后它把确定错误的删除,不确定正确与否的放入记忆库,和之前的记忆产生新的记忆,记忆又被刷新。
此时的记忆已经包含今天的事情。
然后它又并行的做了两件事,第一,对当前的记忆进行思考总结,第二,综合今天发生的事情和之前的经验,来对当前的记忆进行评价,然后提炼出新的经验,并且保存所有的记忆。
// 经验也是需要被记忆的,也是放在记忆库中
LSTM的结构
先从宏观上感受下RNN和LSTM的区别


传统RNN每个隐层单元内只是一个简单的tanh层 ,LSTM每个隐层单元内有4层结构:3个sigmoid层,1个tanh层
LSTM结构详解
LSTM的关键是细胞状态C,一条水平线贯穿图形上方,这条线上只有少量线性操作,信息在上面流传很容易保持。

第一层是个忘记层,有个遗忘门,决定细胞状态中丢弃什么信息。
把ht−1和xt拼接起来,传给一个sigmoid函数,该函数输出0到1之间的值,这个值乘到细胞状态Ct−1上去。sigmoid函数的输出值直接决定了状态信息保留多少。
比如当我们要预测下一个词是什么时,细胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语。

上一步的细胞状态Ct−1已经被忘记了一部分,接下来本步应该把哪些信息新加到细胞状态中呢?
这里又包含2层:
一个tanh层用来产生更新值的候选项
,tanh的输出在[-1,1]上,说明细胞状态在某些维度上需要加强,在某些维度上需要减弱;
还有一个sigmoid层(输入门层),它的输出值要乘到tanh层的输出上,起到一个缩放的作用,极端情况下sigmoid输出0说明相应维度上的细胞状态不需要更新。
在那个预测下一个词的例子中,我们希望增加新的主语的性别到细胞状态中,来替代旧的需要忘记的主语。

现在可以让旧的细胞状态Ct−1与ft(f是forget忘记门的意思)相乘来丢弃一部分信息,然后再加个需要更新的部分it∗
(i是input输入门的意思),这就生成了新的细胞状态Ct。

最后是输出门,决定输出什么。
输出值跟细胞状态有关,把Ct输给一个tanh函数得到输出值的候选项。候选项中的哪些部分最终会被输出由一个sigmoid层来决定。
在那个预测下一个词的例子中,如果细胞状态告诉我们当前代词是第三人称,那我们就可以预测下一词可能是一个第三人称的动词。

总结一下
比较流行的叫法是“门”

LSTM包括四个输入,一个输出。
Input Gate的功能是外界能否存入值到Memory里去。当打开时,能存入,当关闭时,则不能存入值。
Output Gate的功能是决定Memory的值能否传递到外面单元去。
Forget Gate 的功能是什么时候要把过去记忆的东西忘掉。
Input Gate和Output Gate以及Forget Gate的打开和关闭都是通过学习自己学习得到的。
而LSTM有四个inputs和一个output:
1.想要被存入到Memory里面的值,但是不一定存的进去(看Input Gate的开关)
2.操控Input Gate的输入
3.操控Output Gate的输入
4.操控Forget Gate的输入
一个输出:
Memory输出的值(不一定能输出,要受Output Gate的控制)

以上是最简单的LSTM,后面我会通过实例来阐述复杂一点的LSTM。
LSTM缺点的形象描述
接着上面的形象描述讲,LSTM虽然在学习方法上跟人类很像,但是并不如人类那么智能,为什么呢?
因为LSTM的每个门都有个激活函数sigmoid,sigmoid的特点是大多数时候都要么无限接近1,要么无限接近0,这使得LSTM在总结经验时不能像人类那样很好地吸收精华,去掉糟粕,而是要么全盘忘掉以前,要么全盘接受以前,要么全盘否定现在,要么全盘接受现在,所以LSTM只能算是个比较极端的人。
循环神经网络-LSTM的更多相关文章
- 十 | 门控循环神经网络LSTM与GRU(附python演练)
欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! 目录: 门控循环神经网络简介 长短期记忆网络(LSTM) 门控制循环单元(GRU) ...
- 循环神经网络LSTM RNN回归:sin曲线预测
摘要:本篇文章将分享循环神经网络LSTM RNN如何实现回归预测. 本文分享自华为云社区<[Python人工智能] 十四.循环神经网络LSTM RNN回归案例之sin曲线预测 丨[百变AI秀]& ...
- Pytorch循环神经网络LSTM时间序列预测风速
#时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征.这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺序的,同样大 ...
- 循环神经网络-LSTM进阶
基础的LSTM模型,单隐层,隐层单神经元,而实际中一般需要更为复杂的网络结构, 下面借用手写数字的经典案例构造比较复杂的LSTM模型,并用代码实现. 单隐层,隐层多神经元 # -*- coding:u ...
- 深度学习 循环神经网络 LSTM 示例
最近在网上找到了一个使用LSTM 网络解决 世界银行中各国 GDP预测的一个问题,感觉比较实用,毕竟这是找到的唯一一个可以正确运行的程序. #encoding:UTF-8 import pandas ...
- 循环神经网络之LSTM和GRU
看了一些LSTM的博客,都推荐看colah写的博客<Understanding LSTM Networks> 来学习LSTM,我也找来看了,写得还是比较好懂的,它把LSTM的工作流程从输入 ...
- 通过keras例子理解LSTM 循环神经网络(RNN)
博文的翻译和实践: Understanding Stateful LSTM Recurrent Neural Networks in Python with Keras 正文 一个强大而流行的循环神经 ...
- 循环神经网络RNN及LSTM
一.循环神经网络RNN RNN综述 https://juejin.im/entry/5b97e36cf265da0aa81be239 RNN中为什么要采用tanh而不是ReLu作为激活函数? htt ...
- 深度学习之循环神经网络RNN概述,双向LSTM实现字符识别
深度学习之循环神经网络RNN概述,双向LSTM实现字符识别 2. RNN概述 Recurrent Neural Network - 循环神经网络,最早出现在20世纪80年代,主要是用于时序数据的预测和 ...
随机推荐
- 20170914xlVBA通讯公司分类汇总
Sub 租房() Dim Wb As Workbook Dim Sht As Worksheet Dim OpenWb As Workbook Dim OpenSht As Worksheet Dim ...
- You Don't Know JS: this & Object Prototypes( 第3章 对象)
前2章探索了this绑定指向不同的对象需要函数引用的call-site. 但是什么是对象,为什么我们需要指向它们? 本章探索细节. Syntax the rules that describe ho ...
- Okhttp 插入缓存拦截器 解析
我们在做网络请求的时候,如果网络请求过于频繁而且请求的数据变动不大,或者基本没有变动,这个时候如果没有缓存功能,我们想一下 会浪费掉多少资源,一次请求刷新一次,去请求一次,不但会消耗用户的流量,而且还 ...
- loj#528. 「LibreOJ β Round #4」求和
求:\(\sum_{i=1}^n\sum_{j=1}^m\mu(gcd(i,j))^2\) 化简可得\(\sum_{i=1}^{min(n,m)}{\lfloor \frac{n}{i} \rfloo ...
- 【基础知识】【1】CDN
正文: CDN:Content Delivery Network,内容分发网络.使用户访问离ta最近的资源服务器,优化访问速度 优点: 1,内容可以共享,不同站点的同一文件可以不用多次缓存 2,增加下 ...
- Oracle PL/SQL游标
游标的提出: SQL是面向集合的,其结果一般是集合量(多条记录),而PL/SQL的变量一本是标量,其一组变量异常一直只能存放一条记录.所以仅仅使用变量并不能完全满足SQL语句向应用程序输出数据的要求. ...
- C# 3.0 / C# 3.5 自动属性
自动属性的好处 自动属性简化了我们在做 C# 开发的时候手写一堆私有成员 + 属性的编程方式,我们只需要使用如下方式声明一个属性,编译器就会自动生成所需的成员变量. 传统属性概念 属性的目的一是封装字 ...
- Lucene.Net 学习(搜索部分)(低要求,写给自己看)
1. 搜索 排序:lucene 提供了Sort类对结果进行排序 提供了Filter类对查询条件进行限制 你或许会不自觉地拿它跟SQL语句进行比较:“lucene能执行and.or.order by.w ...
- 【转】MVC5学习笔记 BindAttribute
// POST: Movies/Create // 为了防止“过多发布”攻击,请启用要绑定到的特定属性,有关 // 详细信息,请参阅 http://go.microsoft.com/fwlink/?L ...
- npm run build 打包后,如何运行在本地查看效果(Apache服务)
目前,使用vue-cli脚手架写了一个前端项目,之前一直是使用npm run dev 在8080端口上进行本地调试.项目已经进行一半了,今天有时间突然想使用npm run build进行上线打包,试试 ...