• 本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!
  • 个人主页:有梦想的程序星空
  • 个人介绍:小编是人工智能领域硕士,全栈工程师,深耕Flask后端开发、数据挖掘、NLP、Android开发、自动化等领域,有较丰富的软件系统、人工智能算法服务的研究和开发经验。
  • 如果文章对你有帮助,欢迎关注点赞收藏

1.简述

通常,在自然语言生成任务(机器翻译,文本摘要,对话系统等)中,RNN和Transfomer都是常用的算法。下面,我们浅谈下采用RNN和Transformer的区别。

2.RNN模型简介:

循环神经网络(recurrent neural network,简称RNN)源自于1982年由Saratha Sathasivam 提出的霍普菲尔德网络。

循环神经网络,是指在全连接神经网络的基础上增加了前后时序上的关系,可以更好地处理比如机器翻译等的与时序相关的问题。

RNN的目的就是用来处理序列数据的。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题都无能无力。比如你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。

相比于词袋模型和前馈神经网络模型,RNN可以考虑到词的先后顺序对预测的影响,RNN包括三个部分:输入层、隐藏层和输出层。相对于前馈神经网络,RNN可以接收上一个时间点的隐藏状态,基本结构图如下:

RNN网络torch代码 rnn transformer_神经网络

图1 循环神经网络的结构图

计算公式如下:

RNN网络torch代码 rnn transformer_并行化_02

对于每一个时间点,输入是

RNN网络torch代码 rnn transformer_自然语言处理_03

和上一个时间点的隐藏状态

RNN网络torch代码 rnn transformer_RNN网络torch代码_04

,输出是当前时间点的隐藏状态

RNN网络torch代码 rnn transformer_神经网络_05

g()函数是激活函数,比如tanh或是sigmoid函数,f()函数通常是softmax函数。

循环神经网络的输入是序列数据,每个训练样本是一个时间序列,包含多个相同维度的向量。网络的参数如何通过训练确定?这里就要使用解决循环神经网络训练问题的 Back Propagation Through Time 算法,简称BPTT

循环神经网络的每个训练样本是一个时间序列,同一个训练样本前后时刻的输入值之间有关联,每个样本的序列长度可能不相同。训练时先对这个序列中的每个时刻的输入值进行正向传播,再通过反向传播计算出参数的梯度值并更新参数。

循环神经网络在进行反向传播时也面临梯度消失或者梯度爆炸问题,这种问题表现在时间轴上。如果输入序列的长度很长,人们很难进行有效的参数更新。通常来说梯度爆炸更容易处理一些。梯度爆炸时我们可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。

有三种方法应对梯度消失问题:

(1)合理的初始化权重值。初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。

(2) 使用 ReLu 代替 sigmoid 和 tanh 作为激活函数。

(3) 使用其他结构的RNNs,比如长短时记忆网络(LSTM)和 门控循环单元 (GRU),这是最流行的做法。

2.Transformer模型简介:

Transformer模型是一种基于Attention机制来加速深度学习算法的模型,可以进行并行化计算,而且每个单词在处理过程中注意到了其他单词的影响,效果非常好。

论文地址:https://arxiv.org/abs/1706.03762

论文题目为:《Attention Is All You Need》。

RNN网络torch代码 rnn transformer_并行化_06

图2 Transformer模型的结构图

Transformer模型有Encoder层和Decoder层,由结构图可以发现编码层和解码层里都包含了多头注意力层(Multi-Head Attention层)和前馈神经网络(Feed Forward层),解码层还包括一个Masked多头注意力层。每个层后面都加了Add&Norm,其中Add是残差连接,用于解决多层网络训练的问题,让网络只关注当前差异的部分,Norm是指Layer Normalization归一化,加快收敛。

3.Transformer和RNN的区别:

1.RNN采用一种类似于递归的方式运行,无法执行并行化操作,也就无法利用GPU强大的并行化能力,而Transfomer基于Attention机制,使得模型可以并行化操作,而且能够拥有全局的信息。

2.Transformer本身是不能利用单词之间的位置信息的,所以需要在输入中添加一个位置embedding信息,否则Transformer就类似于词袋模型了。

3.RNN利用循环顺序结构,对于长句需要的训练步骤很多,加大了训练的难度和时间。而Transfomer不需要循环,并行地处理单词,而且其多头注意力机制可以将很远的词联系起来,大大提高了训练速度和预测准确度。