机器学习笔记12(Recurrent Neural Network -> RNN)

Recurrent Neural Network 递归神经网络

   1、SimpleRNN

   2、Long Short-term Memory (LSTM)

   3、GRU 

 

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中,这个过程并不需要我们自己搞。都有现成的。。。

       

 

posted @ 2020-07-09 21:24  Haozi_D17  阅读(161)  评论(0编辑  收藏  举报