简析Transformer
简析Transformer(attention is all you need)
Transformer:
1. BERT,GPT等模型的基础,推动NLP进入BERT时代的起因。
2. 因其推出的self-attention被广泛应用于NLP和CV等领域。
3. 直接导致了NLP模型步入CV模型的发展趋势,模型大到普通玩家靠边站的地步(这也是最近小样本学习在学术界逐渐火热的原因之一)。
不管未来的发展趋势如何,Transformer作为现今NLP发展根基之一,是我们必须掌握和理解的模型,对于CV也一样,毕竟self-attention如今也广泛应用于CV领域。
在正式介绍Transformer之前,为保证可读性,读者需要提前了解下述技术和模型:
-
encoder-decoder模型
encoder-decoder
为最常用的机器翻译模型架构 -
seq2seq
解决了输入输出不定长的问题,是理解文中有关mask内容的基础 -
词向量
必备技能,NLP版的one-hot
-
attention
需要简单的了解attention
的工作原理 -
high way
参考ResNet
本文的重点在于
-
self-attention
的提出 -
position-wise encoding
解决了self-attention
无法捕捉token
(分词后的词语,为了方便理解,后文使用词语来代替token)间前后位置关系的缺点。
Abstract
Transformer使用提出了一个全新的模型结构,在机器翻译任务中达到了state-of-art的效果。
1. Introduction
简单概括一下,在Transformer之前,NLP
主要是RNN
的天下,毕竟RNN
本就是为自然语言处理这类时间序列的数据而生。但是,时间序列顺序这一性质本质上排除了并行数据性能,造成训练时间较长,在句子较长的情况下越发明显。
为了解决模型训练速度慢这一问题,Google使用self-attention来构建encoder和decoder,实现数据的并行计算(注意,并行计算只是加速了encoder)。
2. Background
Transformer是第一个抛弃RNN和CNN,只使用self-attention和全连接FC来构建encoder和decoder的模型,并且在吊打了RNN和CNN(讲道理,小样本上,RNN性能优于Transformer,毕竟Transformer设计本身是面向大数据集的)
3. Model Architecture
Transformer架构依然是encoder-decoder,区别在于encoder和decoder不再使用RNN和CNN来搭建,在此,为了方便称呼,我们称之为block,其中encoder和decoder均由N个block堆叠而成。
encoder block和 decoder block的区别不大,decoder block多了 Masked Multi-Head Attention加Add&Norm网络。decoder block多了这一部分网络的原因是因为decoder由self-attention搭建而成,在解码过程中,需要Mask掉当前时刻之后出现的词语,并由其将Mask后的输入数据生成Multi-head Attention需要的Value。
图中 Positional encoding对输入词语的位置编码,让模型知道词语的先后顺序。
下面拆开encoder block 和 decoder block来看其具体结构。
Encoder:
Encoder中N为6,即6个encoder block堆叠而成,block里由 Multi-Head Attention 和 Feed Forward两层网络组成,这里需要注意的是,为了缓解梯度消失的问题,使用了Add&Norm,并进行了跨层连接。
Decoder:
N同样为6,相比于encoder,block里多了Masked Multi-Head Attention对当前时刻应该解码的词语隐藏其后续的词语。
3.2 Mutli-Head Attention
有图是Multi-Head Attention,可以理解为将输入拆分交给多个Self-attention来共同执行,之后将多个Self-attention的输出合并拼接成Multi-Head Attention的输出。论文中设定为一个Multi-Head Attenton包含8个self-attention,需要注意的是,这个值在实际使用过程中可以根据实际情况自行调整。
注意:Multi-head Attention的输入为的V,K,Q,而不是Q,K,V,这主要是为了decoder block的Multi-head Attention。
这里插一句self-attention的计算公式,其中Q,K,V为输入
3.3 Feed Forward
在文中也叫Position-wise Feed-Forward Networks,由两层FC组成,输入输出为512,中间层单元为2048,公式如下:
3.4 Embedding and Softmax
没什么说的,使用预训练好的词向量,或者没有训练的词向量都行,看自己实际情况。
注意:1.文中encoder embedding,decoder embedding,softmax参数共享
2.embedding的权重乘以根号512.
3.5 Position encoding
将词语的先后位置加入,解决self-attention缺失词语先后信息的问题,RNN不存在这个问题则是因为RNN是顺序一个一个词语执行,而self-attention则是通过矩阵进行并行运算,位置信息可以通过公式,也能通过一层网络训练得到。公式如下:
4. Why Self-Attention
1.计算复杂度低,o(1)
2.并行计算
3.长距离依赖
5.Training
5.3 Optimizer
这个没有什么可说的,注意下超参数就行
剩下的实验部分自己看原文就行
总结:
1.整体而言,Transformer在NLP中性能优于RNN
2.小数据集中,Transformer不一定能胜过RNN ,就我复现的代码而言,小数据集上Transformer不如RNN。
3.最初的时候,一直很疑惑Q K V三个矩阵怎么来的,其实实现中发现很简单,比如第一层encoder的Multi-Head Attention的Q,K,V就都是是embedding的输出,等于将embedding的输出复制了三份。