- 递归神经网络(Recurrent Neual Networks,RNN)
DNN和CNN都是不撞南墙不回头的神经网络,它不会有feedback的操作。
一个有记忆的神经网络
我们在很多的应用上,我们需要把结果的feedback回来,帮助我们做判断。这种情况我们就可以用RNN的处理方法。
RNN模型如下
RNN除了上一次数据的输入,还有这一次数据的保留一起当做输入字段协助你再下一次输出会做的更正确。所以跑RNN模型必须要注意,输入字段的前后是有关系的我们之前跑的模型,数据的输入,前后是没有关系的。比如图像输入,我马上判断它是猫还是狗,第一只是猫是狗,对下一只有影响吗,如果是CNN是不会有关系的。如果跑的是RNN的话,前者会影响后者,有时候后面也会影响前面。
数据输入不是单一的数据,它是一连串的数据,我们把左边RNN的图展开,其实步骤就是X0是我第一个时间点输入的值,隐藏层呢会输出到输出层,输出之后,还会往右输入到一样的隐藏层。第二次进行数据处理的时候,它会考虑X0的输出结果,进行处理,下一个时间点呢,我们输入了一个X2,X2又会把上一次X1的数据进行处理,架构看起来只有一个架构,实际上我们根据时间召开,它的模型是像右图一样。
但是实际上的架构是左图。
RNN的应用:
比如现在我们有一个ticket book系统(砍价系统)
现在有一个顾客说它想在11月二号抵达台北。然后这句话被输入系统,系统要怎么理解这句话呢?它需要知道目的地和时间。我们想要了解这两个信息,solving
用RNN就很适合。因为如果我们想要用CNN进行处理的话,准确率就没那么高。,这里的图中y1y2代表的是信息是时间的概率和信息是地点的概率。
如果我们要输入文本的词。,最简单的方法自然就是用独热模型对词进行处理。
词汇的大小代表的就是向量的大小。Apple就是10000
当然也有其他的模型比如你不认为每个词都应该占用一个位置。那么就可以使用其它字段,降低向量长度。还有一种方法,我们不考虑词,我们考虑字母的组合,比如3个字母的单词,我们就可以采用262626的方法,进行组合。
向量长度就是262626
那么apple就只会在app和ple ppl,3个位置是1.向量长度可能有所缩短。
现在我们输入taipei,会出现2种情况:一个台北代表的是终点的位置,一个台北代表的是起点的位置,比如
所以我们不仅仅只考虑一个词taipei,我们还要考虑它前一个词,如果前一个词输入的是leave,即使是taibei,dest的概率也应该小。说明我们的神经网络对之前输入的词要有记忆Memory,那么这个时候RNN就非常合适。
说明一下RNN的其中一种架构
比如这次输入的是a1,那么它对a1就会有记忆。然后它输出的结果就会不一样memory就会被考虑为另外一个的输入。也可以被考虑为短期记忆,用上一个的memory也当做输入层。也就是a1,a2就会变成一个输出和输入层都经过的点。
可以发现我们2是之前输入11的结果,这个时候它就变成输出神经元,一起加总进来,2+1+1+2就是6,然后再被6输出的结果更新。
改变输入顺序,结果也会出现不同
每次,输出新的值
比如arrive1被输入到x1的时候,再输入taipei的概率就很高,
我们对比一下就可以发现,如果前面是leave的Taipei和前面是arrive的taipei二者是终点站的概率是完全不同的。所以这个单词是相同的,但是前一个单词的记忆不同,也会出现不同的判断。
这个就是RNN的做法,它的输入必须是一个序列形式的输入,前后关系。
刚才我们的RNN都是只有一个隐藏层,实际上RNN是可以有多个隐藏层。每个隐藏层的结果会feedback到下一个隐藏层,这种架构叫做elman netword
也有另一种架构会把输出结果放在第一个隐藏层。
RNN的两种方法如下:
Elman Network和Jordan Network其实是根据实际情况的不同选择其中一种方法,如果需要记忆最后的输出结果,就使用Jordan,否则需要过程结果就使用Elman
RNN还有一种双向记忆的方法,结合前后的输入,来综合最后的结果。
既看左边的词,又看右边的词,双向RNN。
后面也有发展,可能我们不仅仅考虑短期记忆,要考虑长期记忆,协助解决方法的LSTM之类的模型。
版权归原作者 晴天qt01 所有, 如有侵权,请联系我们删除。