RNN&LSTM结构篇

这篇文章是写给初入RNN坑的同学们的,如果你对RNN有初步的了解但又有很多地方不清楚,并且想进一步学习更加流行的LSTM,希望这篇文章会让你有所收获。


Recurrent Neural Networks

 


 

 传统的RNN在每个神经单元中只有一个tanh激活函数,如上图所示,第t个神经元的输入不仅仅有xt,还有上个神经元的状态ht-1/或者是上一个神经元的输出yt-1。这里根据ht接收的是ht-1还是yt-1的不同,分为两种RNN,一般来说我们用的都是第一种Elman network。



 

 一般来说RNN输出有两种模式,第一种是将每一步的输出进行平均,也就是average pooling,第二种是只使用最后一步的输出。看了一下keras中RNN的API默认是使用第二种输出模式;而Attention RNN是建立在第一种输出模式之上的,说白了就是将对每一步的输出进行加权平均。




LSTM(Long Short-Term Memory)

 

 RNN可以根据之前的状态对未来的状态进行推断,但一般只能处理间隔较短的信息,处理长间隔信息的能力较差,为了加强这种长时间记忆的能力,我们可以使用LSTM网络。

 LSTM与RNN结构上的差异在于多了3个门限:即遗忘门、输入门和输出门,以及多了一个隐含的状态Ct。与RNN不同的是,LSTM中的Ct才是真正存储隐藏信息的地方,相比RNN中的ht,LSTM中的Ct更容易存储长间隔的信息。


下面来说一说LSTM中各个门限。

第一个门限:遗忘门

 遗忘门的作用是控制历史状态Ct-1保留多少信息。遗忘门会使用ht-1和xt,并用sigmoid激活函数计算出一组在0和1之间的数字(1表示完全保留,0表示完全遗忘),即ft。ft会和Ct-1相乘,决定Ct-1会有多少信息保留下来。


第二个门限:输入门

 输入门的作用是决定什么样的新信息要添加到状态C中。这里的~Ct其实就相当于RNN中经过循环核之后的结果。it是输入门,输入门使用的也是ht-1和xt,并经过sigmoid激活函数,和遗忘门计算的方法一模一样,只不过计算遗忘门的权重矩阵Wf和计算输入门的权重矩阵Wi并不共享参数。最终it和~Ct相乘,共同决定有多少信息存入状态C中。

      接下来我们看一看LSTM是怎么更新状态C的,其实就是对前一步的状态Ct-1进行部分遗忘(乘上遗忘门ft),并加上经过输入门it选择过的新的输入,新的状态Ct就这么诞生啦。当ft比较大,且it比较小的时候,状态C就可以很好的保留长间隔的信息喽。


第三个门限:输出门

 输出门ot计算的方式和之前两个门限一模一样,它的作用是决定我们将状态Ct中的哪一部分信息输出出去。Ct会经过tanh激活函数映射到-1和1之间,之后乘以ot,就是我们的对外输出用到的隐含状态ht。ht再乘上权重矩阵Wy,并经过激活函数激活,才成为最终的输出yt。

 

之前我没弄懂的东西,看看对你有没有用:

1.    之前一度以为这些门限,状态Ct,输出ht都是一个1*1的常数,现在知道其实是1*state_size的向量。

2.    ht并不是LSTM或RNN的输出,还要经过下面一步处理才能变成最后的输出yt。

 

 

放一下TensorFlow中BasicLSTMCell计算时的源码,大家可以参考一下。

 


能阅读英文的话大家最好看一下英文版的,写得非常棒!

参考资料:http://colah.github.io/posts/2015-08-Understanding-LSTMs/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值