前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习|循环神经网络之LSTM(后篇)

深度学习|循环神经网络之LSTM(后篇)

作者头像
double
发布2018-04-02 16:14:33
7720
发布2018-04-02 16:14:33
举报
文章被收录于专栏:算法channel算法channel

01

回顾

昨天推送了循环神经网络LSTM的前半部分,说到构成其网络模型:输入层包含一系列时序:x0, x1, ..., xt,隐含层是实现 Long-term 记忆的关键,中间的单元不仅接受某个输入 xt, 还会接收上一个单元的输入 Ct-1,然后联合起来在 t 单元进行加工分析,输出 隐含项 Ct 给t+1单元,和 当前单元的输出 ht,关于这部分的内容介绍请参考:

深度学习|理解LSTM网络(前篇)

下面,介绍 LSTM 隐含层的单元节点状态如何从 Ct-1 流动后变为 Ct, ht-1 如何流动后变为 ht 的?

02

解析LSTM的隐含单元

如下图所示为隐含层的中间单元 t 的数据流动示意图,它接收上一个单元 t-1 的输入 Ct-1 和 ht-1,当然还有来自本单元的输入 xt ,LSTM一共经过4步完成这些信息的处理,输出 t 单元的状态 Ct ,和 其输出 ht 。

第一步,LSTM需要确定什么样的信息不要进入到这个单元 t 中,它是通过上节说到的“门”结构实现的,它是由 sigmoid 神经元层和按照点的乘法操作组成的,如下所示:

sigmoid函数的取值范围为0~1,当为0时,也就是不让当前单元的输入xt 的任何信息进入到这个单元的Ct中,如果等于1,意思是全部进入到 Ct 中。

经过这一步后输出的 ft 等于:

其中, Wf 和 bf 为sigmoid节点的权重参数和偏置项。

还是拿语言模型的例子,基于之前的文本,预测当前单元 t 的下一个单词,在这个问题中,单元 t 的状态如果保存着当前话题的种类,但是当我们输入的 xt 是一个新的话题时,我们想要丢弃旧话题的种类。因此经过这一步后,Ct 的状态完成了一部分,即:丢弃旧话题的种类,那么接下来Ct还要储存新话题的种类。

第二步,存储新话题的种类到 Ct 中,实现这个需要经过两个子步:

  1. sigmoid层确定我们将要更新哪些值
  2. tanh层创建新的值向量

正如在语言模型中的例子所示,我们将要添加新话题的类别到单元状态中,以此来代替将要丢弃的旧话题,如下所示为数据流动的公式:

第三步,联合第二步的1和2,以此来生成一个更新到Ct中,这一步真正完成了 Ct-1 到 Ct 的更新。

具体来说,将上一单元的旧状态 Ct-1 乘以 第一步得到的分析结果 ft(可以回想下 ft,它考虑了当前的输入 xt 和 ht-1), 然后添加新的更新到 Ct 中,具体的公式如下所示:

第四步,以上三步完成后, t 单元的还没有输出任何东西,Ct只不过隐含地输入给了下一个单元 t+1,因此,最后一步要确定 ht ,如下图所示,ht 输出的话题是单数还是复数,这样我们才能确定某个动词后面加s还是不加s等。

03

LSTM变形之GRU

对LSTM的有一种改动版本叫做带门的循环单元(Gated Recurrent Unit),简称为 GRU,在2014年由 Cho 等人提出,它将遗忘门和输入门结合为一个“更新门”,同时,将单元的状态 Ct 和隐藏状态合并为一体,这样的修改的结果是比我们上面介绍的标准的LSTM模型更加简化了,因此变得越来越受欢迎。

其输出 ht 的更新公式为:

以上这些就是LSTM的分步解析,清楚这些后,我们基本就能了解LSTM的数据流动原理,以及介绍了2014年Cho提出的更简洁的LSTM版本GRU,接下来,介绍卷积神经网络和循环神经网络的实际应用,其中有些会写比较底层的代码,有的会直接借助TensorFlow框架解决实际问题,这样会进一步加深我们队这些算法的理解。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档