- 本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!
- 个人主页:有梦想的程序星空
- 个人介绍:小编是人工智能领域硕士,全栈工程师,深耕Flask后端开发、数据挖掘、NLP、Android开发、自动化等领域,有较丰富的软件系统、人工智能算法服务的研究和开发经验。
- 如果文章对你有帮助,欢迎
关注
、点赞
、收藏
。
1.简述
通常,在自然语言生成任务(机器翻译,文本摘要,对话系统等)中,RNN和Transfomer都是常用的算法。下面,我们浅谈下采用RNN和Transformer的区别。
2.RNN模型简介:
循环神经网络(recurrent neural network,简称RNN)源自于1982年由Saratha Sathasivam 提出的霍普菲尔德网络。
循环神经网络,是指在全连接神经网络的基础上增加了前后时序上的关系,可以更好地处理比如机器翻译等的与时序相关的问题。
RNN的目的就是用来处理序列数据的。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题都无能无力。比如你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。
相比于词袋模型和前馈神经网络模型,RNN可以考虑到词的先后顺序对预测的影响,RNN包括三个部分:输入层、隐藏层和输出层。相对于前馈神经网络,RNN可以接收上一个时间点的隐藏状态,基本结构图如下:
图1 循环神经网络的结构图
计算公式如下:
对于每一个时间点,输入是
和上一个时间点的隐藏状态
,输出是当前时间点的隐藏状态
,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》。
图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不需要循环,并行地处理单词,而且其多头注意力机制可以将很远的词联系起来,大大提高了训练速度和预测准确度。