循环神经网络导读
循环神经网络(Recurrent Neural Network)是一类以序列数据为输入,在序列的演进方向进行递归且所有节点(循环单元)按链式连接的递归神经网络。其中双向循环神经网络(Bidirectional RNN, Bi-RNN)和长短期记忆网络(Long Short-Term Memory networks,LSTM)是常见的的循环神经网络。今天,小编带你认识常见的几种循环神经网络模型,主要内容来自Colah的博客,外加一些自己的总结,一起来学习吧~
循环神经网络 RNNs
在阅读或思考的过程中,人类常常结合以前的信息得到结果。但是,普通的神经网络并不能做到这一点。这或许便是传统神经网络的主要缺点。循环神经网络可以做到这一点,通过循环,循环神经网络将当前步所学习到的信息传递下去,从而学会像人一样进行思考。
上图即是循环神经网络的一个示例。可以看到,同普通的神经网络相似,其同样具有输入输出层以及隐层。但是,循环神经网络会结合当前步的输入 以及上一步网络所给出的 hidden state , 计算出当前时间步的 ,并将作为输入输出到下一时间步的循环神经网络之中。同时,网络的其他部分会根据当前的状态计算出当前步的输出.
给出计算公式为:
为了便于理解,我们可以将循环神经网络视作一系列共享权值的网络,并将其展开。
展开之后,可以感觉到循环神经网络似乎天然与序列有某种联系,似乎循环神经网络就是为了序列而出现的。
LSTMs
但是,RNN 仍然具有其局限性。很多时候,人类做出推理时仅需根据最新得到的信息即可得到结果。然而,不可避免的是,有些推理可能需要较长时间以前的信息进行辅助。
在这种情况之下,RNN对于要学习的东西便无能为力了。理论上,RNN 是可以学习到这样的长时依赖的。然而,RNN 并没有在时间上学习到这种长时依赖。因而,在RNN 的基础上提出了LSTM, 用以学习这种情况。LSTM 被设计解决上文所述的长时依赖问题,但是,在实际中,记住信息似乎是LSTM的本能,而不是挣扎着学会的能力。
LSTMs 全称:Long Short Term Memory networks, 是一种特殊的 RNN 网络,能够学习到序列问题中的长时依赖。同普通的RNN 相似,LSTM同样是链式的结构。相较于RNN, LSTM的重复单元发生了变化。LSTM 的隐层不在只是简简单单的一层,而是通过特殊方式联结在一起的4层隐层。
首先需要谈到的是LSTMs 的Core Idea之一cell state. Cell State 就像传送带一样,穿越整个链式网络,仅仅存在少量的线性互动。这使得信息非常容易从网络的浅层传递到网络的深层。
其次需要谈到的是LSTMs 网络中的门gates. 正是通过一些特定门的实现,LSTMs 才能实现对 Cell State 进行修改。
-
首先需要决定遗忘 中多少的内容,通过sigmoid 层计算遗忘门;
-
接下来向cell state中加入当前步所学习到的内容,这将分为两部分:一是通过 sigmoid 层计算输入门, 二是通过 tanh 层计算候选cell state . 接下来便是结合遗忘门与输入门,得到新的cell state 。
-
最终,我们需要决定输出的内容,通过学习输出门 决定接下来需要输出的内容。
LSTMs 的变种
第二节中介绍的 LSTMs 是普通的LSTM. 并不是所有的LSTM 结构均如上所述。 事实上,很多论文中提到的 LSTM 架构会有一些小小的差异。下面是几种LSTM的变体:
-
添加了 peephole connections 的 LSTM:
这种 LSTM在计算遗忘、输入、输出门时,将cell state 添加到考虑之中。
-
遗忘门和输入门互补的 LSTM:
该版本中,遗忘门与输入门的和为1,因而只需计算遗忘门即可,无需再次计算和学习输入门。
-
Gated Recurrent Unit, GRU:
GRU 舍弃了遗忘门和输入门,将其合并为一个更新门。并且,GRU同样合并了cell state 和hidden state, 以及一些其它的变化。相较于普通的LSTMs, GRU更加简单,并且也逐渐流行起来
公众号ID:gakki0103希望大家多多支持我的公众号,扫码关注,我们一起学习,一起进步~
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:循环神经网络导读 - Python技术站