Transformer
论文
简单来说,transformer就是利用 self-attention 实现了在某个任务下句子中词与词的关联性。
2017年6月google团队在《Attention is all your need》论文中提出的Transformer解码器作为语言模型。
Transformer《Attention is all you need》2017 Transformer 是第一个完全依赖于 Self-Attention 来计算其输入和输出表示的模型,而不使用序列对齐的 RNN 或 CNN。更准确的讲,Transformer 由且仅由 self-Attention 和 Feed Forward Neural Network 组成。一个基于 Transformer 的可训练的神经网络可以通过堆叠 Transformer 的形式进行搭建,作者的实验是通过搭建编码器和解码器各 6 层,总共 12 层的 Encoder-Decoder,并在机器翻译中取得了 BLEU 值得新高。
问题
1、LSTM网络模型获取文本的上下文语义关系,存在序列依赖问题。
2、LSTM的序列依赖导致网络无法并行运算,所以不能训练深层的网络。
3、rnn 或 cnn 网络中在词语的语义训练过程中认为每个词语的对改词语的影响是同等重要的,但是一句话可能词语的侧重有所不同,而且在不同的任务中词语的重要程度也不相同。
解决
1、用Transformer代替LSTM捕捉词语的上下文关系,且transormer中不存在序列依赖问题。这样可以方便对网络模型进行堆叠,挖掘更深层的语义关系。循环神经网络所捕捉到的信息较少,而Transformer可以捕捉到更长范围的信息。计算速度比循环神经网络更快,易于并行化
2、引入attention机制挖掘词语之间的语义联系,以及对词语的重要性进行区分。
主要贡献
1)不同于以往主流机器翻译使用基于RNN的seq2seq模型框架,该论文用attention机制代替了RNN搭建了整个模型框架。
2)提出了多头注意力(Multi-headed attention)机制方法,在编码器和解码器中大量的使用了多头自注意力机制(Multi-headed self-attention)。
3)在WMT2014语料中的英德和英法任务上取得了先进结果,并且训练速度比主流模型更快。
关键词:attention、Multi-headed attention
Attention
attention其实就是,循环神经网络hi的在每个时刻的权重αi
在计算attention时主要分为三步:
第一步是将query和每个key进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等;
然后第二步一般是使用一个softmax函数对这些权重进行归一化;
最后将权重和相应的键值value进行加权求和得到最后的attention。
目前在NLP研究中,key和value常常都是同一个,即key=value。
self Attention
attention是需要两个句子的,我们很多时候只有一个句子,这就需要self-attention。提取信息的时候、编码时self-atenntion是自驱动的,self-attention关注的词的前后整个上下文。
self Attention 计算过程
如下图例子给定两个词 thinking和machies,首先通过通过self-attention,把它变成一个向量,这里的self-attention是考虑上下文的。
假设只有两个词,映射成长度只有四的向量,接下来使用三个变换矩阵
w
q
w_q
wq、
w
k
w_k
wk、
w
v
w_v
wv,分别把每个向量变换成三个向量
q
1
q_1
q1、
k
1
k_1
k1、
v
1
v_1
v1和
q
2
q_2
q2、
k
2
k_2
k2、
v
2
v_2
v2这里是与设映的向量相乘得到的
得到向量之后就可以进行编码了,考虑上下文,如上文提到的bank同时有多个语义,编码这个词的时候要考虑到其他的词,具体的计算是
q
1
q_1
q1、
k
1
k_1
k1做内积,
q
2
q_2
q2、
k
2
k_2
k2做内积得到score,内积越大,表示约相似,softmax进行变成概率。花0.88的概率注意Thinking,0.12注意macheins这个词
就可以计算
z
1
z_1
z1了,
z
1
z_1
z1=0.88
v
1
v_1
v1+0.12
v
2
v_2
v2,
z
2
z_2
z2的计算也类似
q表示为了编码自己去查询其他的词,k表示被查询,v表示这个词的真正语义,经过变换就变成真正的包含上下文的信息,普通attention可以理解为self-attention的一个特例, 普通attention的对比:
Multi-headed attention
实际中是多个head, 即多个attention(多组qkv),通过训练学习出来的。不同attention关注不同的信息,指代消解 上下位关系等多个head,原始论文中有8个,每个attention得到一个三维的矩阵
将8个3维的拼成24维,信息太多 经过24 *4进行压缩成4维。
Transformer 模型
transformer本质也是一个encoder与decoder的过程,最起初时6个encoder与6个decoder堆叠起来,如果是LSTM的话,通常很难训练的很深,不能很好的并行
每一层结构都是相同的,我们拿出一层进行解析,每一层有self-attention和feed-forward,decoder还有普通的attention输入来自encoder,和seq-2seq一样,我在翻译某一个词的时候会考虑到encoder的输出,来做一个普通的attention
【encoder】部分:embedd–>【self_attention–>add&Normalize–>feed Forward–>add&Normalize】–>【】…可以有多个网络单元堆叠
【decoder】部分:embedd–>【self_attention–>add&Normalize–>encoder_decoder_attention–>add&Normalize–>feed Forward–>add&Normalize】–>【】…可以有多个网络单元堆叠
transformer-encoder
如下图例子给定两个词 thinking和machies,首先通过word embedding把它变成向量,通过self-attention,把它变成一个向量,这里的self-attention是考虑上下文的。然后再接全连接层,计算
z
1
z_1
z1的时候我要依赖
x
1
x_1
x1、
x
2
x_2
x2、
x
3
x_3
x3整个序列的,才能算
z
1
z_1
z1,
z
2
z_2
z2也一样,我算
r
1
r_1
r1的时候时不需要
z
2
z_2
z2的,只要有
z
1
z_1
z1我就可以算
r
1
r_1
r1 .只要有
r
z
2
rz_2
rz2就能算
r
2
r_2
r2,这个是比较大的一个区别,这样就可以并行计算。
transformer-decoder
decoder加上了普通的attention,最后一刻的输出,会输入
transformer的decoder不能利用未知的信息,即单向信息流问题。
transformer 输入
transformer的输入=词向量的输入+位置向量的输入;
tansformer-输入-位置编码
eg:
北京 到 上海 的机票
上海 到 北京 的机票
self-attention是不考虑位置关系的,两个句子中北京,初始映射是一样的,由于上下文一样,qkv也是一样的,最终得到的向量也是一样的。这样一个句子中调换位置,其实attention的向量是一样的。实际是不一样的,一个是出发城市,一个是到达城市。
引入位置编码,绝对位置编码,每个位置一个Embedding ,同样句子,多了个词 就又不一样了,编码就又不一样了
北京到上海的机票 vs 你好,我要北京到上海的机票
tranformer原始论文使用相对位置编码(bert open gpt使用的是绝对位置编码)
transformer 优点
transformer 解决的问题:
1、可以并行计算,训练的很深,到后来的open gpt可以到12层 bert的16、24层
2、单向信息流的问题:至少在encoder的时候考虑前面和后面的信息,所以可以取得很好的效果
3、transformer解决了普通word embedding 没有上下文的问题,但是解决这个问题,需要大量的标注信息样本。
如何解决transformer的问题,就引入了elmo
elmo:无监督的考虑上下文的学习,(解决3需要大量表示样本问题)
语言表示模型比较重要的文章时间节点
1、NNLM Neural Probabilistic Language Model,这篇论文是Begio等人在2003年发表的,可以说是词表示的鼻祖。
2、word2vecEfficient Estimation of Word Representations in Vector Space,word2vec词向量 是NLP自然语言处理领域当前的主力方法,本文是 word2vec 原始论文,由google的 Mikolov 在2013年发表, Mikolov于2013,2014,2015 连续发表了3篇Word2vec 的 文章,本文是第1篇。
3、attention 机制最早是2014在视觉图像领域提出来的,应该是在九几年思想就提出来了,但是真正火起来应该算是google mind团队的这篇论文《Recurrent Models of Visual Attention》,2015他们在RNN模型上使用了attention机制来进行图像分类。随后,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用类似seq2seq+attention的机制在机器翻译任务上将翻译和对齐同时进行,他们的工作算是是第一个提出attention机制应用到NLP领域中。
4、Transformer《Attention is all you need》2017 Transformer 是第一个完全依赖于 Self-Attention 来计算其输入和输出表示的模型,而不使用序列对齐的 RNN 或 CNN。更准确的讲,Transformer 由且仅由 self-Attention 和 Feed Forward Neural Network 组成。一个基于 Transformer 的可训练的神经网络可以通过堆叠 Transformer 的形式进行搭建,作者的实验是通过搭建编码器和解码器各 6 层,总共 12 层的 Encoder-Decoder,并在机器翻译中取得了 BLEU 值得新高。
5、Elmo是context-dependent词向量生成的方法,一发表就成了the-state-of-the-art,出自2018年论文Deep contextualized word representations。
6、BERTBERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,2018,一种从Transformers模型得来的双向编码表征模型。BERT的设计是通过在所有层中对左右上下文进行联合调节,来预先训练来自未标记文本的深层双向表示。
预训练的BERT模型可以通过fine-tuned 在广泛的任务中创造新的最佳记录,比如问答任务,语言推理任务等,而不需要对BERT本身架构做实质性的修改。
参考文献
[1] https://zhuanlan.zhihu.com/p/106106079
[2] https://zhuanlan.zhihu.com/p/82391768