深度学习 第六章 RNN循环神经网络

深度学习入门视频-唐宇迪 (笔记加自我整理)

深度学习 第六章 RNN循环神经网络

1.RNN

         RNN循环神经网络,重点在循环两字上面。和典型神经网络一样,也是由输入层、隐含层、输出层构成。和大部分神经往不同,RNN输入的是序列。对比Word2vec的CBOW,虽然输入的都是带有前后关系的样本,不同的是Word2Vec的CBOW输入的上下文单词数据,需要预测中心位置单词的是正确单词的概率,像选词填句。而RNN输入的是一个完整的序列,不需要预测中间结果,比如可以是输入一段话,预测这一段话表达的情感是消极还是积极的,也可以预测下一个单词是什么(RNN最后位置 vs CBOW中间位置),而且RNN是没有词向量作为副产品产出,训练完成得到的只有一个模型(权重参数)。

       下面是一个比较经典的RNN结构,左边是未展开样子,输入为Xt,A表示隐含层,ht表示经由第t词计算得到的中间结构,右图是展开的样子,两者表达的意义是一样的。

        可以用学习的过程来解释RNN过程,比如学习深度学习这课程,第一天学习,第二天学习,第三天学习,每一天学习的效果是由历史的积累和当前学习到的内容共同决定的,越到后面学习的效果越是叠加的。(人的大脑容量也是有限的,所以会出现某些知识点被记住,某些知识点被忘记,而LSTM模型和大脑记忆的不同时,LSTM是自己选择性遗忘和记忆,大脑有点不受控。)

      

        

         同一条序列样本,按顺序输入的每一个xn都会经过隐含层,其实这里隐含层的权重参数是一组,每个输入对应的权重参数是相同的,左图会用循环体表示,即权重参数共享,这一点和卷积神经网络中使用相同权重参数的过滤,过滤输入数据类似,参数的个数对比全连接的神经网络会少很多,而右图是结果的展开形式,两个图表示的结构式一样的,不同的是每次计算得到的中间结果hn是不同的,当前次的输入也是不同的。

       下图RNN循环神经网络的数学表达方式,红色箭头指的是反向传播方向,用于更新参数,黑色箭头指的是正向传播,即通过依次连续的输入,预测最终结果输出。RNN本身就是神经网络模型中的一种,所以用激活函数去线性化,最终输出结果通常是多分类问题,一般会采用softmax分类器。

     

         RNN的关键点,就是可以记录之前输入的数据作为中间结果,和本次输入一同输入隐含层,得到最终结果。缺点是当序列特别长,越临近的信息越有用,越靠前的信息越无用,但是RNN会记录之前所有的信息,没有办法忘记一些事情,所以我们期望可以选择性忘记一些信息(较远的信息),选择性记住一些信息(较临近的信息),这时就诞生了LSTM长短记忆网络。

2.LSTM(长短记忆网络)

         RNN最大的问题是记住的信息太多了,很多信息是没有用的,所以出现了LSTM,在RNN的基础上选择性地记住某些信息、选择性地遗忘某些信息,用控制参数C来表示。下面就是RNN和LSTM的区别。

      

  •         控制参数Ct

        控制参数C主要由两个模块组成,遗忘模块和记忆模块,每个模块都可以表示为输入的信息量 遗忘/记住 百分之多少,不同的是参数不同。

        控制参数中有个门单元的概念,表示百分之多少的信息量通过,遗忘信息由乘法门单元表示,记住信息加法门单元表示。门单元就是对输入的数据加上sigmoid函数变化,输出为0-1之间的概率值。比如门单元输出是0表示信息全部遗忘,不通过门;输出是1表示信息全部记住,通过门单元;输出是0.5表示50%的信息量会通过门单元。

       

         

         对于遗忘模块,输入是上次的历史结果ht-1+当前次的输入xt,首先要计算遗忘的信息是什么,即输入和对应的权重参数相乘做线性变化,再去线性得到ft,即表示需要遗忘的全部信息,而控制参数Ct-1表示遗忘的程度,ft*Ct-1得到遗忘模块最终的信息量。

       说明:神经网络每个神经元的计算,有个常规的套路,f(x)= sigmoid(W*X+B ),即输入的数据X进行线性变化,然后再去线性化,本节后面的计算基本上都是、这个套路,sigmoid是去线性化,可以用relu,tanh等来替换,方便理解。

    

         对于记忆模块,输入同样是上次的历史结果ht-t和当前次的输入xt,同样要计算计算记住的信息是什么,即输入和对应的权重参数做线性变化,再去线性得到it,即要记住的全部信息。值得注意的是记忆模块的控制参数不是Ct-1,而是根据你学到的历史ht-1和本次的输入来更新你的控制参数~Ct,记忆模块~Ct的计算也是输入和对应参数做线性变化再去线性得到~Ct,最终,记住的全部信息it * 记忆的控制参数~Ct, 得到的是要记忆模块的信息量。

     注意Ct和~Ct的表示区别。Ct表示当前次产生的最终的控制参数,而~Ct表示根据本次输入更新记忆模块的控制参数,是中间变量。

     

    遗忘模块信息量+ 记忆模块信息量,得到的结果才是当前这一轮的最终的控制参数Ct。        

 

  • 当前的输出结果ht

         更新本次的控制参数Ct之后,才能真正计算本次的输出结果ht。还是熟悉的配方,fx = sigmoid(W*X+B)是一种常规计算讨论,这里仍然是这样,历史结果ht-1和当前次输入xt和对应的权重参数做线性变化再去线性化,得到待输出的全部信息量Ot,控制参数是Ct,最终得到输出结果ht = Ot*tanh(Ct)。 这里需要注意的是对控制参数Ct做的变换是tanh,不是sigmoid,但tanh(Ct)得到的含义一样,同样表示通过信息量的比例。

 

 

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页