首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

循环神经网络之LSTM

01

回顾

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

下面,介绍 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 中,实现这个需要经过两个子步:

sigmoid层确定我们将要更新哪些值

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框架解决实际问题,这样会进一步加深我们队这些算法的理解。

算法channel会有系统地,认真地推送:机器学习(包含深度学习,强化学习等)的理论,算法,实践,源码实现。期待您的参与!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171224G06YJ700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券