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


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

           

  • 相关阅读:
    基础抽象代数
    斜堆
    WC2018
    WC2019
    有向图上不相交路径计数
    生成树计数
    Prüfer序列
    反演
    1.1 Linux中的进程 --fork、孤儿进程、僵尸进程、文件共享分析
    Python程序的执行过程 解释型语言和编译型语言
  • 原文地址:https://www.cnblogs.com/Haozi-D17/p/13264745.html
Copyright © 2020-2023  润新知