最近准备自学一下自然语言处理(NLP),顺便记录一下学习的心得体会,首先从神经网络模型RNN说起,虽然RNN已经有些过时,但了解其网络模型的结构有助于我们学习其他流行的模型。
全连接神经网络模型和卷积神经网络模型都属于one2one模型,但是人脑并不用one2one模型处理时序数据,人类并不会将一整段文字全部输入大脑,而是从左到右阅读文字,积累信息。one2one 模型很适合处理图片等信息,对于文本问题,输入和输出的长度并不固定,例如将一段英语翻译成汉语,输入输出的字词数并不固定,因此seq2seq模型更加适合。
在RNN中,word为原始的输入文本,X为经过word embedding的词向量,A为参数矩阵,h为输入向量的状态更新。其中,h0包含了第一个词the的信息,h1包含前两个词the cat的信息,以此类推,最后一个状态ht包含了之前所有输入单词的信息。其中,RNN只有一个参数矩阵A,与RNN的长度无关,A随机初始化,然后利用训练数据学习A。
如图所示,参数矩阵A的维度为h*(h+x),因此可以结合旧的状态h(t-1)与新的输入xt得到新的状态ht。为什么需要双曲正切函数进行激活呢?由下图可知,当输入X均为0时,最终的输出状态h100为参数矩阵A的100次方乘h0,因此当参数矩阵A小于1时,A的100次方无限接近于0,当A大于1时,A的100次方接近于无穷大。使用了激活函数以后,每次让h恢复到-1和+1之间,
RNN模型中,只涉及到一个参数矩阵A,具体的参数数量如下图所示
RNN的一个吸引人之处是它可以将先前的信息与当前的任务联系起来,就像视频前面的帧可以输入到当前环节来预测或者理解当前帧。如果RNN能真正做到这样,那人它的确非常有用了,但是它真的能吗?实际上,这要视情况而定。
有时,我们只需要就近的一些信息就可以完成当前任务。例如,一个语言模型想要根据前面的词预测最后一个词,如要预测“the clouds are in the (sky),”的最后一个词,我们不需要更多的上下文语境就能知道最后一个词是sky。在这个例子中,相关信息和需要它的地方之间距离很近,RNN可以学会使用过去的信息。
但是,也有很多句子需要更多上下文信息,如“I grew up in France. … I speak fluent (French).”。从临近的语境中可以知道,最后一个词应该是一种语言,但是要知道是哪种语言,必须要前面的“France”,要再往前推。需要的信息和当前点可能隔很远。不幸的是,随着距离的增加,RNN并不能学会将这些信息联系起来。
有关RNN模型的简要介绍就到这里,希望对你有所帮助~