股票预测,自动翻译,你想要的它都能做——RNN算法探索之旅(3)

前面两期,我们了解了前馈神经网络、循环神经网络。

《股票预测,自动翻译,你想要的它都能做——RNN算法探索之旅(1)》

《股票预测,自动翻译,你想要的它都能做——RNN算法探索之旅(2)》

这一期,我们来学习循环神经网络的一种变体:长短期记忆,简称LSTM。

在正式学习之前,我们先来回忆下“什么是循环神经网络”?

所谓“循环”,是指数据本身带有时间先后顺序,即“每一条数据,都受到来自前面数据的影响”。

比如,股票价格:

聊天对话:

新闻内容:

故事发展情节:

这些数据,都带有时间先后顺序。

如果我们想处理这类数据,就需要使用到循环神经网络。

上节课我们讲到,循环神经网络的形态,类似于下图的样子:

如果,我们想预测一句话,比如:

我们想预测下面这句话中,每一个文字,其后面最有可能出现的第一个汉字是什么?

这样的问题,可以简单地描述为:

具体细节,请戳上期内容

从上图中我们能够看到,在中间的灰色链条上,被塞入了各式各样的“记忆”。事实上,在这根灰色链条上,存储了大量的信息。

这根“灰色”链条,我们可以视它为一根“记忆链条”。

如果将这根记忆链条,比喻成一条公路;将每一次的记忆,比作一辆车。

那么,在这条公路上,已经塞满了汽车:

如果,这根记忆链条很长、很长……

那么可以想象,在这条长长的公路上,会积压无数等待通行的车辆。

你或许能看清离你最近的,但却无法回望到整个队伍的尽头。

RNN算法也是一样,

在这根记忆链条上,存储了太多、太多“有用的”和“无用的”信息。

或许,它仍保留有最近一段时间的记忆,

但是,太过久远的记忆,已经记不清了。

所以,当你的数据比较有限时,使用RNN是一个不错的选择。

但如果你的数据时间周期很长,

例如:

你有100天的股票收盘数据,

你希望基于这100天的数据,

预测出第101天的收盘价格。

此时,如果你仍选用RNN算法,那么很有可能,

它并不能带来令你满意的结果。

因为,它实在记不住那么久远的信息了。

而此时能解决问题的,是LSTM。

什么是LSTM?

LSTM是RNN的一种变体

既然是变体,说明它的基本原理与RNN大体相同。

唯一的区别在于,

它比RNN多出了一条公路:

在这条多出的“公路”上,LSTM存储了更加简洁的信息。

就像你在图中看到的,左边的道路,忙忙碌碌;

右边的道路,清清净净。

对应LSTM算法,

忙忙碌碌的道路,即“第1根灰色链条”,依然是“隐藏层”,它用于做各种各样的记忆运算。

比如:

哪些记忆“有用”,我要留下;

哪些记忆“没用”,我要丢弃;

哪些输入带有新的信息,我要更新;

等等这些,都是在第1根灰色链条上来处理的,所以你看到它,一直在忙忙碌碌地工作。

而第2根灰色链条,学术上称为“细胞状态”,它用于存储“有用的”记忆。

那些“无用的”记忆,是不会出现在这根链条上的,所以你看到它,是干干净净、十分简洁的。

正因为有了这样一条“干净、简洁”的信息通道,LSTM能够记住更加久远的信息,即“在处理长期记忆的问题上,LSTM相较于RNN更胜一筹”

下面,我们来看一看,LSTM是如何“开通这样一条快速通道”的?

还是这张图,我们将其中一个隐藏层单元,放大来看:

将隐藏层单元放大后的效果为:

和RNN一样,这个单元依然受 Xt 和 ht-1 的影响。

其原因,请查阅上节课的学习内容,这里不再赘述。(传送到上节课)

与RNN不同的是,在这个单元上,多出了3个“阀门”:

刚刚我们已经讲了,整个单元受 [Xt,ht-1] 的影响。因而,这3个阀门同样也受 [Xt,ht-1] 的影响。

因而,在很多教材上,你会看到这样的公式:

其实,它们均在说明,3个阀门被 [Xt,ht-1] 影响着:

回过头来,我们仍然看这张图:

这3个阀门,分别代表:

忘记门: 忘记过去没用的记忆 输入门: 输入新的记忆 输出门: 输出当前时刻用得上的信息

耐心看完下面这张动图,LSTM的运行原理,你或许就清楚了。

我们将动图锁定在最后一时刻:

从上图我们能够看到,

右侧的灰色链条上,仅包含了有价值的信息,因而更加简洁。

也正因为多加了这根链条,使得LSTM比起RNN来,能够记住更加久远的信息。

到目前为止,我们没有涉及复杂的数学公式,但是LSTM的运行原理,你应该已经非常清晰了,就是上面这张动图,希望你能理解并记住它。

温馨提示:

为了方便理解,在本文“输入门”的位置上,只画出了一条线:

更多的时候,你会看到2条,一条决定添加哪些信息,一条决定添加多少。

这2条线的运算目的,就是为了向旧记忆中,添加有用的新记忆

作为初学者,你只要了解输入门的功能,就可以了。

结语

LSTM很难,希望这一期的内容,能够为你打开一扇大门。或许为了说清问题,文中所做的某些简化并不完美,但我仍希望它们能更好地帮助仍在学习LSTM原理的人们。

之前,为了搭建聊天机器人,我们已经将前期工作准备就绪

《keras教程:手把手教你做聊天机器人(上)》

下一期,我们就使用刚刚学到的LSTM,来搭建这台机器人的“语言中枢”,让它成为能和我们聊天的伴侣。

我们下期见~~

原文发布于微信公众号 - AI传送门(aiportal)

原文发表时间:2017-10-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏成长道路

JDBC动态SQL语句连接orcale数据库的工具类

import java.sql.Connection; import java.sql.DriverManager; import java.sql.P...

2700
来自专栏码匠的流水账

聊聊spring cloud的AbstractLoadBalancingClient

本文主要研究一下spring cloud的AbstractLoadBalancingClient

1092
来自专栏菩提树下的杨过

MSDN官方的ASP.Net异步页面的经典示例代码

示例1.演示异步获取一个网址的内容,处理后显示在OutPut这一Label上 using System; using System.Web; using S...

2135
来自专栏闻道于事

商城项目整理(三)JDBC增删改查

商品表的增加,修改,删除,订单表的增加,确认,用户表的查看,日志表的增加,查看 商品表建表语句: 1 create table TEST.GOODS_TABL...

5885
来自专栏c#开发者

C# : row-clickable GridView and get and set gridview rows using JavaScript

Complete C# code: ---------------- using System; using System.ComponentModel; ...

3166
来自专栏积累沉淀

Hive2.0.0操作HBase 1.2.1报错解决

首先看错  org.apache.hive.service.cli.HiveSQLException: Failed to open new session: ...

2549
来自专栏跟着阿笨一起玩NET

[C#]工具类—FTP上传下载

  不错的文章:http://www.cnblogs.com/greatverve/archive/2012/03/03/csharp-ftp.html

1581
来自专栏码匠的流水账

聊聊EurekaRibbonClientConfiguration

spring-cloud-netflix-eureka-client-2.0.0.RELEASE-sources.jar!/org/springframewor...

1461
来自专栏菩提树下的杨过

SqlTransaction事务使用示例

using System; using System.Data; using System.Data.SqlClient; using System.Co...

1988
来自专栏跟着阿笨一起玩NET

GB2312转换成UTF-8与utf_8转换成GB2312

2291

扫码关注云+社区