记录一下RNN为什么可以记录以前历史信息,如何从公式中体现出?
那么首先介绍一下为什么普通的神经网络不能记忆以前的历史信息,然后引出RNN的相应能力,因为如果普通的神经网络能够记录以前的历史信息的话,那么也就不会有RNN思想的诞生了。
首先我们有一个任务,就是进行词性标注,下面有两个训练数据。
他向我表白我觉得他的表白不够真诚
正确的词性是:
那么将这些训练数据送给神经网络进行训练,比如第一个数据 “他/r”,神经网络学习 “他->r”的一个映射,第二个数据 “向/p”,神经网络学习一个 “向->p”的映射,这样一直将训练数据学习完,更新到最后的参数,从而学习到model,但是问题来了。
学习示例图如下:
在上面的训练数据中,有些词语的词性并不是唯一的,比如“表白”一词,在“他向我表白”这句话中作为动词v,在“我觉得他的表白不够真诚”这句话中作为名词n,所以对于神经网络来说,它是会学乱的。
一下子神经网络要学习“表白”是动词,一下子又要学习“表白”是名词,神经网络也很无辜呀,它没有能力来处理什么情况下应该将“表白”判别为名词,什么情况下降“表白”判断为动词,因为神经网络学习不到周围的语境。喂给神经网络的数据和之前的数据并没有联系。
所以我们这个时候就需要一个能够记忆以前历史信息的网络出现,比如在第一句话中,碰到表达一词的时候,我知道他前面的词是“我”/代词,那么代词后面的表白作为动词的概率就远大于名词的表白,当然RNN还能够看到他前面好几个词语,理论上rnn可以记忆当前词语前面的任何词。
同理在第二句话的时候,碰到“表白”一词的时候,我们的网络能够知道他前面的词是“的”/助词,那么助词后面的“表白”作为名词的概率就远大于动词的”表白“。
所以我们希望能够有一个网络在预测当前任务的时候,能够记忆以前的知识帮助当前的任务完成,这样RNN就闪亮登场了,可能有些小伙伴会说,它存在很多问题,比如不能长期记忆,但是这篇文章不介绍,但是无论如何,RNN提供了这种问题解决的可能。
首先来介绍一下RNN
首先看一个简单的循环神经网络如,它由输入层、一个隐藏层和一个输出层组成:
不知道初学的同学能够理解这个图吗,反正我刚开始学习的时候是懵逼的,每个结点到底代表的是一个值的输入,还是说一层的向量结点集合,如何隐藏层又可以连接到自己,等等这些疑惑~这个图是一个比较抽象的图。
我们现在这样来理解,如果把上面有W的那个带箭头的圈去掉,它就变成了最普通的全连接神经网络。x是一个向量,它表示输入层的值(这里面没有画出来表示神经元节点的圆圈);s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同);
全部0条评论
快来发表一下你的评论吧 !