Recurrent Neural Network 递归神经网络
1、SimpleRNN
2、Long Short-term Memory (LSTM)
1、基础版本
1)什么是RNN
举例说明,下图售票系统可以判定目的地和日期,其中关键词汇作为一个向量被输入。
词汇怎么转化为向量?下面两种方法
这样我们就能得到一个系统,将一个word 作为一个 input,output是一个概率分布。
但是如果只有这样,我们就无法分辨出到底应该要去往那边的车票。可能是出发地也可能是目的地。
我们想个办法,没读到一个词,都留下个标记。后面再计算的时候,需要考虑前面的标志位。初试位要设置初始值。
下面计算例子
至此,我们就能实现我们前面的内容了,就是来回都可以识别了,并且每个阶段识别完成之后的标志位并不一定一样,但是用的是同一个layer。
升级一下,我们可以用多个layer,每层都有对应的标志位。
进一步升级,也可以将前一步的output,作为下一步某层layer的标志位。
再一步升级,组建双向的RNN,真正的output需要考虑,两个方向的输出。使得得到的结果更好。
2、Long Short-term Memory (LSTM)
前面的内容是最基础的RNN,但事实上常用的并不是上面的,而是LSTM。
前面simpleRNN只有input、output、memory(标志位)。
而 LSTM 则多了input gate、output gate 、forget gate,其中input gate用来控制输入是否能够输入,output gate用来控制输出是否能被读取,forget gate则用来控制memory cell是否被清零。一共有四个输入和一个输出。
计算例程如下所示
换个写法,input的每一维都有不同的作用,在各个地方作为输入时都需要乘上不同的weight。
下面给个计算范例。
我们明白了LSTM的原理之后,怎么实现呢,很简单,只需要用LSTM代替neurons就可以了。
但事实上,LSTM的四个input,并不是一样的。我们需要对x进行不同的转换,然后在作为四个不同的input使用。
然后将每一个LSTM连接起来就可以了。同时呢,实际中的input(也就是x),并不是直接使用的,而是需要考虑上一层的output(h)和memory(c)。如下图。
在keras中,这个过程并不需要我们自己搞。都有现成的。。。