BERT的前世今生

Transformer

Transformer来自论文: All Attention Is You Need

别人的总结资源:

  1. 谷歌官方AI博客: Transformer: A Novel Neural Network Architecture for Language Understanding
  2. Attention机制详解(二)——Self-Attention与Transformer谷歌软件工程师
  3. 放弃理想,周全拥抱Transformer:自然语言处置三大特征抽取器(CNN/RNN/TF)对照中科院软件所 · 自然语言处置 /搜索 10年工作履历的博士(阿里,微博);
  4. Calvo的博客:Dissecting BERT Part 1: The Encoder,只管说是剖析Bert,然则由于Bert的Encoder就是Transformer,以是实在它是在剖析Transformer,内里举的例子很好;
  5. 再然后可以进阶一下,参考哈佛大学NLP研究组写的“The Annotated Transformer. ”,代码原理双管齐下,讲得也很清晰。
  6. 《Attention is All You Need》浅读(简介+代码)这个总结的角度也很棒。

A High-Level Look

可以将输入的语言序列转换成另外一种序列,好比下图的神经机器翻译:

BERT的前世今生

Transformer模子由编码器-解码器组合组成,解码器卖力对序列举行编码,提取时间和空间信息,解码器卖力行使时间和空间特征信息举行上下文展望,下图是单个结构:

BERT的前世今生

编码器和解码器客栈的组合结构,在谷歌的实验结构中接纳了6个编码器和6解码器相对应,使模子的编码能力和解码能力到达一个平衡状态(客栈式结构):

BERT的前世今生

编码器-解码器的内部结构,类似seq2seq模子:

BERT的前世今生

seq2seq模子:

BERT的前世今生

Encoder: 由6个相同的层组成, 每层包罗两个sub-layers.第一个sub-layer就是multi-head attention layer,然后是一个简朴的全毗邻层。其中每个sub-layer都加了residual connection(残差毗邻)和normalisation(归一化)。

Decoder: 由6个相同的层组成,这里的layer包罗三个sub-layers, 第一个sub-layer 是masked multi-head attention layer。这里有个稀奇点就是masked, 作用就是防止在训练的时刻,使用未来的输出的单词。好比训练时,第一个单词是不能参考第二个单词的天生效果的。Masked是在点乘attention操作中加了一个mask的操作,这个操作是保证softmax操作之后不会将非法的values连到attention中,提高泛化性。

BERT的前世今生

Self-Attention at a High Level

假设下面的句子就是我们需要翻译的输入句:

”The animal didn’t cross the street because it was too tired”

当模子处置单词的时刻,self attention层可以通过当前单词去查看其输入序列中的其他单词,以此来寻找编码这个单词更好的线索。

BERT的前世今生

Self-Attention in Detail

第一步是将输入的嵌入词向量通过三个差别的参数矩阵获得三个向量,划分是一个Query向量,一个Key向量和一个Value向量,参数矩阵划分为Wq,Wk,Wv,,如下图所示:

BERT的前世今生

第二步是通过当前词的q向量与其他词的k向量盘算当前词相对于其他词的得分,分数接纳点积举行盘算,如下图所示:

BERT的前世今生

第三步和第四步是讲获得的分数除以k值维数的平方根(k值维数为64,可以使训练历程有加倍稳固的梯度,这个归一化的值是履历所得),再通过softmax获得每个得分的标准化得分:

BERT的前世今生

第五步是对当前词所获得的标准化值对所有value向量举行加权求和获得当前词的attention向量,这样就使差别单词的嵌入向量有了attention的介入,从而展望上下文句子的时刻体现差别的主要的主要水平。

BERT的前世今生

Matrix Calculation of Self-Attention

  • Attendtion向量盘算的矩阵形式,通过全职矩阵举行词向量的盘算大大加快了神经网络的速率

  • X矩阵中的每一行对应于输入句子中的一个单词。(图中的4个方框论文中为512个)和q / k / v向量(图中的3个方框论文中为64个)

BERT的前世今生

公式中浓缩前面步骤2到5来盘算self attention层的输出。

BERT的前世今生

The Beast With Many Heads

使用“Multi-headed”的机制来进一步完善self-attention层。“Multi-headed”主要通过两个方面改善了Attention层的性能,参数组成和子空间映射:

BERT的前世今生

Many Heads的优瑕玷:

  • 它拓展了模子关注差别位置的能力。Multi head 的每个参数矩阵都市纪录单词的位置信息,使原来的单个位置信息变得加倍庞大。

  • 它为attention层提供了多个“representation subspaces”。由下图可以看到,在self attention中,我们有多个个Query / Key / Value权重矩阵(Transformer使用8个attention heads),使特征的提取变得加倍庞大,而不是作为一个整体的特征举行,每个单独的子空间都市举行上下文的信息融合

在8个差别的子空间举行self-attention的操作,每个单词天生自力的8个向量

BERT的前世今生

将8个子空间天生的向量压缩成一个大向量,每个向量的子空间矩阵能够学习到更多细节,压缩历程接纳一个更大的参数矩阵举行,对multi-head向量举行组合,天生最终的特征向量。

BERT的前世今生

整体的框图来示意一下盘算的历程:

BERT的前世今生

Representing The Order of The Sequence Using Positional Encoding

实在上面先容的网络内里并没有思量序列的位置信息,在RNN中差别时刻的信息是通过递归网络的时间t来描绘的,有显著的时间刻度,以是引入了位置向量来解决时间刻度问题。

BERT的前世今生

谈谈 Promise 以及实现 Fetch 的思路

为了让模子捕捉到单词的顺序信息,添加位置编码向量信息(POSITIONAL ENCODING),位置编码向量不需要训练,它有一个规则的发生方式,天生与词嵌入向量有着相同的向量就可以。

BERT的前世今生

通过组织函数sin、cos来对位置举行嵌入,pos为单词位置信息,而i用来表达dimension 这里为了好说明,若是2i= dmodel, PE 的函数就是sin(pos/10000)。这样的sin, cos的函数是可以通过线性关系相互表达的,通过两个函数对奇偶维度举行编码。位置编码的公式如下图所示:

个人以为选择正余弦函数主要是在-1和1之间是一个对称关系,两个相邻的维度编码相差对照大,在位置上有更好的区分性,1000是序列的长度,一样平常只管将取值局限控制在四分一个周期内里,这样会使每一个序列的每一个维度都取唯一的值。

BERT的前世今生

The Residuals

编码器和解码器内里的每一层都接纳残差的头脑举行训练,目的就是为了解决网络过深情形下的难训练问题,残差毗邻可以将目标值问题转化成零值问题,一定水平也可以削减网络的过拟合问题。

BERT的前世今生

使用残差毗邻的编码器内部结构:

BERT的前世今生

使用残差毗邻的编码器-解码器内部结构:

BERT的前世今生

The Decoder Side

通过自回归方式举行展望,解码器每一个时间步输入一个单词,然后输出一个单词,将展望的单词作为下一时刻的输入举行单词的展望,直到展望竣事。

BERT的前世今生

The Final Linear and Softmax Layer

  • 线性层是一个简朴的全毗邻神经网络,模子一次天生一个输出,我们可以假设模子从该概率漫衍中选择具有最高概率的单词并抛弃其余的单词。

  • 对于最终句子的天生有2个方式:一个是贪心算法(greedy decoding),一个是波束搜索(beam search)。

BERT的前世今生

Bidirectional Encoder Representation from Transformers

Word Embedding

  • 线性模子,主要是对高维空间举行映射,实在是对one-hot向量的空间转换。

  • 通过神经网络对输入的词举行映射,获取词向量,一样平常有cbow和skip-gram两种方式,此方式训练的词向量与上下文无关,并没有参考位置信息,只是对词的有无举行参考,接纳的是负采样,展望的时刻举行的是一个二分类器,模子以为只要在下文中找出准确的词就以为是完成了义务。

BERT的前世今生

尚未解决一词多义等问题。好比多义词Bank,有两个常用寄义,然则Word Embedding在对bank这个单词举行编码的时刻,是区分不开这两个寄义的,由于它们只管上下文环境中泛起的单词差别,然则在用语言模子训练的时刻,岂论什么上下文的句子经由word2vec,都是展望相同的单词bank,而统一个单词占的是统一行的参数空间,这导致两种差别的上下文信息都市编码到相同的word embedding空间里去。以是word embedding无法区分多义词的差别语义,这就是它的一个对照严重的问题。

BERT的前世今生

Embedding from Language Models(ELMO)

  • ElMO接纳双向的LSTM做上下文相关的义务,早年到后和后到前划分做一遍LSTM的encoding操作,从而获得两个偏向的token联系。

  • Word Embedding本质上是个静态的方式,所谓静态指的是训练好之后每个单词的表达就牢固住了,以后使用的时刻,岂论新句子上下文单词是什么,这个单词的Word Embedding不会随着上下文场景的转变而改变,以是对于好比Bank这个词,它事先学好的Word Embedding中夹杂了几种语义 ,在应用中来了个新句子,纵然从上下文中(好比句子包罗money等词)显著可以看出它代表的是“银行”的寄义,然则对应的Word Embedding内容也不会变,它照样夹杂了多种语义。

BERT的前世今生

ELMO的本质头脑是:

事先用语言模子学好一个单词的Word Embedding,此时多义词无法区分,不外这没关系。在我现实使用Word Embedding的时刻,单词已经具备了特定的上下文了,这个时刻我可以凭据上下文单词的语义去调整单词的Word Embedding示意,这样经由调整后的Word Embedding更能表达在这个上下文中的详细寄义,自然也就解决了多义词的问题了。以是ELMO自己是个凭据当前上下文对Word Embedding动态调整的思绪。

BERT的前世今生

一样的,在详细举行下游义务的时刻,接纳神经网络参数微调的方式凭据差别的词的上下文环境对词向量举行调整,从而获得统一词的差别向量示意。

瑕玷:

  • LSTM的抽取能力远远落后于Transformer,主要是并行盘算能力

  • 拼接方式融合双向特征能力偏弱

Bidirectional Encoder Representation from Transformers

BRET接纳两阶段模子,首先是语言模子预训练;其次是使用Fine-Tuning模式解决下游义务。在预训练阶段接纳了类似ELMO的双向语言模子,双向指的是对于展望单词的上文和下文是否介入,若是都介入展望那么就是双向,双向容易导致自己看自己的问题,后面提出mask来解决

BERT的前世今生

经由预训练的BRET模子,其已经具备了厚实的词向量特征信息,然后将此词向量信息与下游义务举行组合举行NLP下游义务,例如文本天生,文本分类。

BERT的前世今生

若何能够更好将BRET模子与下游义务举行革新是一个对照庞大的问题,再好的预训练语言模子都要与下游的义务模子相结合才有好的效果, BRET的优势在于可以自由凭据预训练模子举行单词级别的义务和句子级的义务。

BERT的前世今生

BRET模子的创新

就是论文中指出的Masked 语言模子和Next Sentence Prediction。而Masked语言模子上面讲了,本质头脑实在是CBOW,然则细节方面有改善。

Masked 语言模子:

  • 而Masked语言模子上面讲了,本质头脑实在是CBOW,然则细节方面有改善,掩饰的同时,要输出掩饰的词的位置,然后用真实词来展望。
  • Mask LM主要是为了增添模子的鲁棒性和现实性能,然则在训练时使用mask过多会影响现实义务的显示,以是做了一些处置:随机选择语料中15%的单词,把它抠掉,也就是用[Mask]掩码取代原始单词,然后要求模子去准确展望被抠掉的单词。然则这里有个问题:训练历程大量看到[mask]符号,然则真正后面用的时刻是不会有这个符号的,这会指导模子以为输出是针对[mask]这个符号的,然则现实使用又见不到这个符号,这自然会有问题。为了制止这个问题, BRET革新了一下,15%的被选中要执行[mask]替身这项光荣义务的单词中,只有80%真正被替换成[mask]符号,10%被狸猫换太子随机替换成另外一个单词,10%情形这个单词还待在原地不做改动。这就是Masked双向语音模子的详细做法。

BERT的前世今生

Next Sentence Prediction:

  • 指的是做语言模子预训练的时刻,分两种情形选择两个句子,一种是选择语料中真正顺序相连的两个句子;另外一种是第二个句子从语料库中抛色子,随机选择一个拼到第一个句子后面。
  • 我们要求模子除了做上述的Masked语言模子义务外,附带再做个句子关系展望,判断第二个句子是不是真的是第一个句子的后续句子。之以是这么做,是思量到许多NLP义务是句子关系判断义务,单词展望粒度的训练到不了句子关系这个层级,增添这个义务有助于下游句子关系判断义务。以是可以看到,它的预训练是个多义务历程。这也是BRET的一个创新,一样平常用于句级义务。

BERT的前世今生

BERT的前世今生

Transformer&BERT总结

  • 首先是两阶段模子,第一阶段双向语言模子预训练,这里注重要用双向而不是单向,第二阶段接纳详细义务Fine-tuning或者做特征集成;

  • 第二是特征抽取要用Transformer作为特征提取器而不是RNN或者CNN;

  • 第三,双向语言模子可以接纳CBOW的方式去做(固然我以为这个是个细节问题,不算太要害,前两个因素对照要害)。 BRET最大的亮点在于效果好及普适性强,险些所有NLP义务都可以套用BRET这种两阶段解决思绪,而且效果应该会有显著提升。可以预见的是,未来一段时间在NLP应用领域,Transformer将占有主导地位,而且这种两阶段预训练方式也会主导种种应用。

原创文章,作者:28qn新闻网,如若转载,请注明出处:https://www.28qn.com/archives/18632.html