循环神经网络(RNN)详解

文章目录

  • 前言
  • 一、 序列的表示方法
  • 二、循环神经网络模型
  • 三,循环神经网络的意义


前言

我们还有很多如:波形,声音,文本等类型的数据需要进行处理,这些波形直接或间接是可以抽象出时间轴的意义。即有先后顺序之分,一旦顺序打乱会影响其内在含义,我们将这一类型的数据称为序列。而循环神经网络在序列这一数据类型的处理上有着很深远的影响力。


一、 序列的表示方法

我们定义序列数据类型:[b,seq_len,feature_len]对于文本来说,b代表有几句话,seq_len代表话的长度,feature_len代表每个字的特征。可以看出b和seq_len都是标量,而我们需要做的是将feature_len也由String类型转化成一个标量。

这里我们可能首先会想到one hot encoding,它在分类问题的数据预处理中有着极其广泛的运用。One-hot编码又称为独热编码,只有0和1两个分布。关于如何使用one-hot抽取文本特征向量,我们通过以下例子来说明。假设我们语料库中有三段话:

我爱中国
爸爸妈妈爱我
爸爸妈妈爱中国

我们先对语料库分离并获取其中所以的词,然后对每个词进行编号:
1我 2爱 3爸爸 4妈妈 5中国

如果不进行one-hot编码提取三句话的特征变量:
我爱中国----------------------> 1,2,5
妈妈爱我----------------------> 4,2,1
爸爸爱中国--------------------> 3,2,5

这种顺序编码最大的缺陷是强加一个顺序关系,具体来说,每个字之间并没有一个大小先后关系,而用数字顺序编号则强加了一个顺序关系,这是我们不希望看到的;进行one-hot编号后提取的特征如下:

我爱中国----------------------> 1,1,0,0,1
妈妈爱我----------------------> 1,1,0,1,0
爸爸爱中国--------------------> 0,1,1,0,1

优缺点分析:这种编码方式在数据量较少的分类问题上运用极广。一是解决的分类器不好处理离散数据的问题,二是在一定程度上也起到了扩充特征的作用。

而缺点也同样存在:而且在文本等大数据表示上有些缺点就非常突出了。首先,它是一个词袋模型,不考虑词与词之间的顺序,而文本中字词的顺序也很重要;其次,它假设词语词相互独立,而在绝大数情况下,词与词之间是相互影响的;再次,它得到的特征是离散稀疏的;最后,如果一句胡的字词很多,用来表示这句话的维度就会很高,而且鉴于它得到的特征是离散稀疏有大量的0存在,这种表示方式是十分占用空间的。

鉴于这些缺点,在文本等序列问题的处理上,我们有一个专门将字词的语义转换为标量的课题称为 sequence/word embedding。常见的word embedding方式有Word2Vec和GloVe,因为已经存在完备的API接口,我们这里不对其具体原理进行探索,只需明白其意义和作用便可进一步理解循环神经网络的处理模式。

二、循环神经网络模型

我们从电影影评的角度的角度来引入循环神经网络,并与全连接神经网络做一个比较。
对于影评“I hate this boring movie”经过embedding后作为输入经过一个线性模型的全连接层,最后得到输出(好评或差评)。如图:
循环神经网络(RNN)详解_第1张图片
该模型有两个明显的缺点:

一是对于每个字词都有一个对应的权值w和偏置b。若一句话有成百上千词则会产生众多参数,而且神经网络层数的增加时,参数也会成倍的增加,这对于模型的训练是非常耗时耗力的。

二是该模型没有语义相关性,例如将“I hate this boring movie”中的词打乱顺序后输入模型训练,并不影响模型的训练和结果的输出。而实际上,对于语言来说,打乱顺序后语义会得到破坏,如果字词之间没有相关性,那么提取出的特征向量将不能保留语义信息,可想而知这样训练出的结果是没有意义的。

而循环神经网络模型则较好的解决这两个问题。
首先,我们由卷积神经网络的卷积层中,权值共享的模式得到启发,将其运用在循环神经网络上,使得每个字词都共享一个权值,大大减少了权值和偏置的参数量。如图
循环神经网络(RNN)详解_第2张图片
其次,我们增加一个语义存储单元h的概念。在开始时,将h清零,相当于我们听别人说话时,先将大脑清空不去想别的事情一样。然后每经过一个字词,我们将该字词的前面的所有部分作为h,然后乘以一个权值w后作为新的语义存储单元。
循环神经网络(RNN)详解_第3张图片
如图,清零的h0作为输入元素,将字词“I”经过线性单元后加上h0whh的整体作为h1,h1既作为该节点的输出,也作为更新后的记忆存储单元参与下一个字词“hate”的编码,以此类推。即,每经过一个字词,对下一字词的处理的不仅仅是线性模型,还有之前的语义存储单元,其整体作为输出结果并自更新为新的语义单元。这样便使每次字词之间有了语义间的相关性,也是循环神经网络“循环”的由来。

三,循环神经网络的意义

相比于全连接神经网络和卷积神经网络,循环神经网络有着特殊的不可替代的意义。因为,不管是卷积神经网络还是全连接神经网络,他们假设的前提都是:元素之间是相互独立的,输入和输出也是独立的,比如输入的是身高体重等没有先后或者重要程度等相关性的信息,输出是男生或者女生。
但现实世界中,很多元素的相关的,比如文本,语音等。如一句话:我喜欢吃水果,最喜欢吃的水果是香蕉,今天去市场我要买一些____。这里的填空根据语义关系很容易填“香蕉”。因为我们是根据上下文的内容推断出来的,但通过一般的神经网络算法实现这一步并不容易,因此,就有了现在的循环神经网络,他的本质是:像人一样拥有记忆。因此,他的输入结果就依赖于当前的输入信息和记忆单元。


你可能感兴趣的:(人工智能基础知识,神经网络,深度学习)