ITPub博客

首页 > > > 6.1 循环神经网络

6.1 循环神经网络

作者:RayChou 时间:2019-12-30 09:49:26 0 删除 编辑

前言

在介绍NER的深度学习模型之前,我们这里先要介绍一种深度学习的网络——循环神经网络(RNN)。在NLP领域是非常喜欢用RNN相关的模型的,什么LSTM、Bi-LSTM、GRU、Bi-GRU等等这些单元都会经常在各种NLP模型中出现。那么这个"循环"是怎么回事呢?循环神经网络(Recurrent Neural Networks)是在神经网络中一种非常常见的网络。在现在主流的各种深度网络中不乏它的身影存在。哦对,得说明一下,和卷积网络一样,循环神经网络在深度神经网络模型中也是像“部件”一样出现,也就是会以循环神经网络层的形式出现。

循环神经网络主要的优势是可以更好地拟合那种时间序列上有特征的模型,如果你这么听觉得听不太明白我们来举个小例子。

今天的天气非常()

如果此时我输入拼音“zao”,应该帮我预测出来是“早”还是“糟”呢,或者是别的什么字呢?根据前文来看,“糟”应该更为通顺。这就利用到了上下文关系,而这种内容也是从大量的数据样本中训练而来的。人类能够推理也是因为以前见了很多这样的样本,所以才能推断出那些更为接近经验的正确结论。现在我们要教给机器人,让它们具备这样的学习能力。这种由时序上前面的内容来推断现在应该产生的输出值就是RNN网络的主要功能了。因此,根据RNN本身的特性如果想要训练一个对话机器人,输入一个句子,期望机器人输出一个句子;输入一个英文句子,期望输出一个中文句子,做翻译机器人等等。这类场景都是很适合的。


RNN

如图所示,一个简单的RNN模块,在时序上展开大概就是这种感觉。

左边的这个模块s就代表RNN模块,里面有待定系数;

x代表输入,U代表一个待定矩阵;

o代表输出,V也代表一个待定的矩阵。

W也是一个待定的矩阵。

也就是说一个RNN模型每次输入x,输出o。输入和输出之间的这些层的U和V可以一层当然也可以是多层,和普通的全连接网络一样,是为了完成一系列线性和非线性变换的映射过程。不同点就是这个W,注意看右边的部分,就是在时序上展开的。在时刻t-1的时候,模块输出的 

经过一个W的计算作为下一个时刻t的输入,即,在时刻t时,RNN模块输入不仅有

还有

和W的计算结果也一并输入了进去,进而影响到此刻的输出

。

这种方式显然是假设前面一个状态的输入是对后面一个状态的输出有影响的,所以从感觉上来看肯定是能够拟合类似马尔可夫模型之类的数据序列的。只不过最早的一代RNN所用的BPTT算法已经过时了,现在主流会倾向使用LSTM网络抑或使用GRU。LSTM的全称是(Long Short Term Memory),也就是长短期记忆网络。



LSTM

  LSTM网络在结构出差还是比较复杂的。

 LSTM的单元看上去就是这样一个效果,一个一个首尾相接,同一层的会把前面单元的输出作为后面单元的输入;前一层的输出会作为后一层的输入,就是一个一个的小黑盒子,好处是我们只关心接口部分就可以了。下面具体看看一个单元中都有什么东西。

LSTM单元(1)


LSTM单元(2)


LSTM单元(3)


LSTM单元(4)


LSTM单元(5)


在NLP领域LSTM应用还是比较成熟的,而且应用也比较广泛,这样的例子是很多的。这里虽然出现了很多的公式,但是不用紧张,这些公式是绝对不要求进行强记的,无论是就业面试还是在时机工作中,我们在这里只是了解一下它内部工作的大致原理。最终我们在应用的时候通常还是会用Tensorflow、Pytorch等这些框架中封装好的模块来实现的。

对于一个LSTM单元内部的众多参数来说,我们只能是使用,没有什么调整的余地。训练出来之后的LSTM网络从肉眼角度去看也几乎没办法做任何解释。所以了解到这里就可以了,只要知道一个以时间序列输入的Sequence,如果其前后之间有联系,根据上文可以对下文有提示或限制的作用,那么使用LSTM是可以对它进行学习的。或者说通过LSTM的时序性信息的输入,和时序性信息的输出,让LSTM网络去记忆时序之间的概率关系——也就是从大量的统计中记住我们刚才说的那个根据前后文(主要是前文)来推断哪个输出值的可能性最大。说白了就这么点事情。


GRU

  GRU是一种叫做Gated Recurrent Unit的单元缩写,中文通常也不翻译它。

GRU单元


Bi-LSTM和Bi-GRU

除了前面我们介绍的LSTM和GRU以外,还有一种模型比较有趣,而且在NLP和语音模型中经常出现的,就是Bi-LSTM和Bi-GRU。你可能会觉得“呀,怎么又多了这么多新概念”,其实你不用担心,这种所谓的Bi-LSTM和Bi-GRU其实不是什么新东西,只是LSTM和GRU单元的两种新的连接方式而已。

为了简化说明过程,我就只借用一张Bi-LSTM的图来说明一下是怎么个新的连接方式。

       大家看到了吧,在一层上的LSTM从向前后传播,在后一层上从后向前传播,这就是与原来的LSTM只能从前向后传播最大的不同点。这里的“Bi”指的是“Bidirectional”的概念,就是双向的——双向LSTM,双向GRU。双向GRU我们就不画了,形式上一样,只不过LSTM单元换成GRU单元就可以了。

  这种连接的好处显而易见,就是在一个序列的生成中,要让当前的信息生成不仅要参考前面的信息,也要参考后面的信息。这种在翻译工具、命名实体识别等工具中就非常常见。

  比如,现在遇到一个句子:

  "小张去买了一双(),穿起来走路很舒服。"

  单纯从上文,我们是没办法判断出来他买了什么的。不过从下文可以推断出,他应该是买了一双鞋。这种信息推理能力就是Bi-LSTM和Bi-GRU能够学到的。翻译机器人中有很多场景都是这样,单纯从前面看是不知道该怎么翻合适的,往下看,看着看着就知道前面怎么翻合适了。再给大家举个翻译的例子好了:

  "Lee gave me a ring"

  这应该怎么翻译呢?“ring”在英文中有“戒指”的意思,也有“铃声”的意思。所以这句话翻译成“李给了我一枚戒指”和“李给我打了一个电话”都应该是有道理的,这就是歧义。不过再往下写一些就可以消除歧义。

  "Lee gave me a ring, and invited me to his birthday party"。这个时候翻译机器人应该有足够的理由翻译成“李给我打电话,并邀请我参加他的生日聚会。”如果要想让机器人学会翻译这样的句子当然是在训练翻译机器人的时候“投喂”这样的平行语料进去它才能学到,这点别忽略了。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69954080/viewspace-3120866/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 1.2.3 用户词典
请登录后发表评论 登录
全部评论
现任金山办公软件人工智能组高级AI研发工程师。多年从事机器学习,特别是NLP自然语言处理算法的研究及开发工作。拥有丰富的软件开发经验,以及丰富的人工智能算法训练平台开发经验。

注册时间:2019-11-14

  • 博文量
    71
  • 访问量
    60581