天津之眼,用可视化解构BERT,咱们从上亿参数中提取出了6种直观形式,乙肝两对半对照表

大数据文摘联合百度NLP出品

编译:Andy,张驰,龙心尘

来历:towardsdatascience.com

深度神经网络的超强有效性一直让人疑问。

经典论文《可视化与了解CNN》(Visualizing and Understanding Convolutional Networks)解说了在图画范畴中天津之眼,用可视化解构BERT,我们从上亿参数中提取出了6种直观办法,乙肝两对半对照表CNN从低层到高层不断学习出图画的边际、转角、组合、部分、全体信息的进程,必定层面证明了深度学习的有效性。另一方面,传统的NLP神经网络却并不是那么深,而bert的呈现直接将NLP的神经网络加到12层以上。

那么怎样了解各层学到了怎样的信息?

本文作者Jesse Vig经过可视化东西对此进行了十分有意义的探求。文章分两部分,榜首部分介绍bert中的6种办法,第二部分介绍其底层细节。

可视化BERT之一

在BERT扑朔迷离的留意力网络中,呈现了一些直观的办法。

2018年是自然言语处理范畴的转机之年,一系列深度学习模型在智能问答、情感分类等多种NLP 使命上取得了最佳成果。特别是最近谷歌的BERT ,成为了一种“以一当十的模型”,在各种使命上都取得了的极佳的体现。

BERT首要建立在两个中心思维上,这两个思维都包含了NLP 最新进展:(1)Transformer 的军统老公好蛮横架构(2)无监督学安乐死习预练习。

Transformer 是一种序天津之眼,用可视化解构BERT,我们从上亿参数中提取出了6种直观办法,乙肝两对半对照表列模型,它放弃了 RNN 的次序结构,转而选用了一种彻底依据留意力的办法。这在经典论文 《Attention Is All You Need》中有详细介绍。

BERT 一起也要经过预练习。它的权重预先经过两个无监督使命学习到。这两个使命是:遮盖言语模型(masked langu双眼皮埋线age model,MLM)和下句一句猜测(next sentence prediction)。

因而,关于每个新使命,BERT 不需求从头开始练习。相反,只要在预练习的权重上进行微调(fine-tuning)就行。有关BERT的更多详细信息,可以参阅文章《图解BERT》。

BERT是一只多头怪

Bert不像传统的留意力模型那样只运用一个平整的留意力机制。相反,BERT 运用了多层次的留意力(12或24层,详细取决于模型),并在每一层中包含多个(12或16)留意力“头”。因为模型权重不在层之间同享,因而一个BERT 模型就能有效地包含多达24 x 16 = 384个不同的留意力机制。

可视化BERT

因为BERT 的杂乱性,所以很难直观地了解其内部权重的意义。而且一般来说,深度学习模型也是饱尝诟病的黑箱结构。所以我们开发了各种可视化东西来辅佐了解。

可我却没有找到一个东西可以解说BERT 的留意力办法,来通知我们它究竟在学什么。走运的是,Tensor2Tensor有一个很好的东西,可用于可视化Transformer 模型中的留意力办法。因而我修改了一下,直接用在BERT的一个pytorch版别上。修改后的界面如下所示。你可以直接在这个Colab notebook (https://colab.research.google.com/drivlakee/1vlOJ1lhdujVjfH857hvYK慈福医养IdKPTD9Kid8)里运转,或在Github 上找到源码。(https://github.com/jessevig/bertviz)。



这个东西将留意力看做不同的连线,它们用来衔接被更新的方位(左半边)与被留意的方位(右半边)。(译注:可以幻想为神经网络是从右向左正向传达的。)不同的色彩别离代表相应的留意头,而线条色彩的深浅代表被留意的强度。在midi这个小东西的顶部,用户可以挑选调查模型的第几层,以及第几个留意力头(经过单击顶部的色块即可,它们别离代表着12个头)。

BERT 究竟学了什么?

我运用该东西探究了预练习 BERT 模型各个层和各个头的留意力办法(用全小写(uncased)版别的BERT-Base 模型)。虽然我测验了不同的输入语句,但为了便利演示,这儿只选用以下例句:

语句A:I went to the store.语句B:At the store, I bought fresh strawberries.

BERT 用 WordPiece东西来进行分词,并刺进特别的别离符([CLS],用来分隔样本)和分隔符([SEP],用来分隔样本内的不同语句)。

因而实践输入序列为: [CLS] i went to the store . [SEP] at the store , i bought fresh str天津之眼,用可视化解构BERT,我们从上亿参数中提取出了6种直观办法,乙肝两对半对照表aw ##berries . [SEP]

在探究中,我发现了一些特别明显的令人惊奇的留意力办法。下面是我承认的六种要害办法,将发生每一种办法的特定层和头都进行可视化展现。

办法1:留意下一个词

在这种办法中,每个方位首要留意序列中的下一个词(token)。下面将看到第2层0号头的一个比如。(所选头部由顶部色彩条中杰出的显现色块表明。)

办法1:留意下一个词。

左:一切词的留意力。 右:所选词的留意力权重(“i”)

左面显现了一切词的留意力,而右侧图显现一个特定词(“i”)的留意力。在这个比如中,“i”简直一切的留意力都会集在“went”上,即序列中的下一个词。

在左面,可以看到 [SE购物P]符号不符合这种留意力办法,因为[SEP]的大大都留意力被引导到了[CLS]上,而不是下一个词。因而,这种办法好像首要在每个语句内部呈现。

该办法与后向RNN 有关,其状况的更新是从右向左顺次进行。办法1呈现在模型的多个层中,在某种意义上模拟了RNN 的循环更新。

办法2:留意前一个词

在这种办法中,大部分留意力都会集在语句的前一个词上。例如,下图中“went”的大部分留意力都指向前一个词“i”。

这个办法不像上一个那样明显。有一些留意力也涣散到其他词上了,特别是[SEP]符号。与办法1相同,这与RNN 有骨癌的前期症状些类似,仅仅这种状况下更像前向RNN。

办法2:留意前一个词。

左:一切词的留意力。 右:所选词的留意力权重(“went”)

办法3:留意相同或相关的单词

这种办法留意相同或相关的单词,包含其自身。鄙人面的比如中,榜首次呈现的“store”的大部分留意力都是针对自身和第2次呈现的“store”。这种办法并不像其他一些办法那样明显,留意力会涣散在许多不同的词上。



办法3:留意相同/相关的词。

左:一切词的留意力。 右:所选词的留意权重(“store”)

办法4:留意“其他”语句中相同或相关词

这种办法留意另一个语句中相同或相关的单词。例如,第二句中“store”的大部分留意力都指向榜首句中的“store”。可以幻想这关于下句猜测使命(BERT预动态桌面壁纸练习使命的一部分)特别有用,因为它有助于辨认语句之间的联系。



办法4:留意其他语句中相同/相关的单词。

左:一切词的留意力。天津之眼,用可视化解构BERT,我们从上亿参数中提取出了6种直观办法,乙肝两对半对照表 右:所选词的留意权重(“store”)

办法5:留意能猜测该词的其他单词

这种办法好像是更留意能猜测该词的词,而不包含该词自身。鄙人面的比如中,“straw”的大部分留意力都会集在“##berri马图片es”上(strawberries 草莓,因为WordPiece分开了),而“##berries”的大部分留意力也都会集在“straw”上。



办法5:留意能猜测该单词的其他单词。

左:一切词的留意力。 右:所选词的留意力(“## berries”)

这个办法并不像其他办法那样明显。例如,词语的大部分留意力都会集在定界符([CLS])上,而这是下面评论的办法6的特征。

办法6:留意分隔符

在这种办法中,词语的大部分留意力都会集在分隔符[CLS]或 [SEP]上。鄙人面的示例中,大部分留意力都会集在两个 [SEP]符号上。这或许是模型将语句级状况传达到单个词语上的一种办法。



办法6:留意分隔符。 左:一切词的留意力。 右:所选词的留意权重(“store”)

阐明

其实数据可视化有点像罗夏墨迹检验(译注:这种检验叫人解说墨水点绘的图形以判别其性情):我们的解说或许会被我们的片面信仰和希望所影响。虽然上面的一些办法十分明显,但其他办法Hp情诗却有点片面,所以这些解说只能作为开始调查。

此外,上述6种办法仅仅描绘了BERT 的大略留意力结构,并没有企图去描绘留意力或许捕获到的言语学(linguistic)层面的办法。例如,在办法3和4中,其实可以体现为许多其他不同类型的“相关性”,例如同义联系、一起指代联系等。

而且,如果能看到留意力头是否抓取到不同类型的语义和句法联系,那将会十分风趣。

可视化BERT之二:探究留意力机制的内部细节一

在这儿,一个新的可视化东西将展现BERT怎样构成其共同的留意力办法。



在上文中,我讲解了BERT的留意力机制是怎样呈现出多种办法的。例如,一个留意力头会首要留意序列中的下一个词;而另一个留意力头会首要留意序列中的前一个词(详细看下方图示)。在这两种状况中,BERT在本质上都是学习一种类似RNN的序列更新的办法。之后,我们也将展现BERT是怎样建模词袋模型(Bag-of-Words)的。



经过BERT学习下一个单词和上一个单词的留意力办法

那么BERT是怎样学到这些极好的特性呢?为了处理这个问题,我从榜首部分扩展了可视化东西来更深化地探究BERT——提醒供给BERT强壮建模才能的神经元。你可以在这个Colab notebook或许 Github上找到这个可视化东西。

开始的可视化东西(依据由Llion Jones出色完结的Tensor2Tensor)测验来解说什么是留意力:也便是说,BERT究竟在学习什么样的留意力结构?那么它是怎样学到的呢?为了处理这个问题,我添加了一个留意力细节视图,来可视化留意力的核算进程。详细视图经过点击⊕图标按钮来检查。你可以看到以下的一个demo示例,或直接跳到屏幕截图。


可视化东西概览

BERT有点像鲁布戈德堡机(译注:是一种被规划得过度杂乱的机械组合,以转弯抹角的办法去完结一些其实是十分简略的作业,例如倒一杯茶,或打一只蛋。),虽然每个组件都十分直观,可是体系全体很难掌握。现在我将经过可视化东西介绍BERT留意力架构的各个部分。(想了解有关BERT的悉数教程,引荐《图解transformer》 和《图解BERT》这两篇文章。)

下方展现了新的公元留意力细节视图。图中正值是蓝色的,负值是橙色的,色彩的深浅反映了取值的巨细。一切的向量都是64维的,而且作用于某个特定的留意力头上。和开始的可视化东西类似,衔接线色彩的深浅代表了单词之间百变小樱的留意力强度。



让我们结合图剖析一下:

查询向量q :查询向量q是左面正在进行留意力进程的单词/方位的编码,也便是说由它来“查询”其他的单词/方位。在上述的比如中,“the”(选中的单词)的查询向量标示出来了。

键向量k:键向量k是右边正在“被留意”的单词的编码。如下所述,键向量和查询向量决议了单词被留意程度的得分。

qk (element-wise):查询向量和键向量的逐元素积(译注:element-wise product, 也叫哈达玛积/Hadamard product)。这个逐元素积是经过选定的查询向量和每个键向量核算得到的。这是点积(逐元素乘积的和)的前导。因为它展现了查询向量中的单个元素和键向量对点积的奉献,因而将其可视化。选定的查询向量和每个键向量的点积。得到的对错归一化的留意力得分。

Softmax:一切方针单词的qk / 8的softmax值。这一步完结了留意力得分谌贻章的归一化,确保了值为正的且和为1。常量8是向量长度(64)的开方。论文(https://arxiv.org/pdf/1706.03762.pdf)描绘了这样做的原因。

解析BERT的留意力办法

在榜首部分文章中,我在BERT的留意力头的结构中发现了一些办法。来看看我们是否能运用新的可视化东西来了解BERT是怎样构成这些办法的。

留意分隔符

让我们以一个简略的比如起手,这个比如中大大都留意力是聚集于分隔符[SEP] 的(榜首部分文章中的办法6)。如榜首部分文章中所描绘的,这个办法或许是BERT用来将语句级的状况传达到单词级状况的一种办法。

依据天津之眼,用可视化解构BERT,我们从上亿参数中提取出了6种直观办法,乙肝两对半对照表BERT预练习模型的第7层3号头,聚集分隔符留意力办法。

所以,BERT是怎样直接聚集于[SEP]符号的呢?来看看可视化东西。下面是上述比如的留意力细节视图。



在键向量列,两个呈现[SEP]处的键向量有明显的特色:它们都有少数的高正值(蓝色)和低负值(橘色)的激活神经元,以及十分多的挨近0的(浅蓝,浅橘或白色)的神经元。



榜首个分隔符[SEP]的键向量。

查询向量q会经过那些激活神经元来匹配[SEP]键向量,会使元素內积qk发生较高的值,如下比如所示:



榜首个“the”的查询向量;榜首个[SE无敌P]的键向量;两个向量的逐元素积。

其他单词的查询向量也遵从类似的办法;它们经过同一组神经元来匹配[SEP]键向量。因而,BERT好像指定了一小部分神经元作为“[SEP]-匹配神经元”,而查询向量也经过这些天津之眼,用可视化解构BERT,我们从上亿参数中提取出了6种直观办法,乙肝两对半对照表相同方位的值来匹配[SEP]键向量。这便是留意分隔符[SEP]的留意力办法。

留意语句:词袋模型(Bag of Words)

这是一个不太常见的办法,在榜首部分文章中没有详细评论。在这种办法中,留意力被均匀的分配到语句中的每个单词上。



依据BERT预练习模型的第0层0号头,专心语句的留意力办法

这个办法的作用是将语句级的状况分配到单词级上。BERT在这儿本质上是经过对一切词嵌入进行简直持平权重的加权均匀操作来核算一个词袋模型。词嵌入便是我们之前说到的值向量。

那么BERT是怎样处理查询向量和键向量来构成这种留意力办法的呢?让我们再来看看留意力细节视图;



依据BERT预练习模型的第0层0号头,专心语句的留意力办法细节视图。

在qk这列,我们能看到一个明晰的办法:少数神经元(2-4个)操控着留意力得分的核算。当查询向量和键向量在同个语句中时(上例中榜首个语句),这些神经元的乘积显现出较高的值(蓝色)。当查询向量和键向量在不同语句中时,在这些相同的方位上,乘积是负的(橘色),如下比如所示:



在同个语句中(左面)q*k的逐元素积很高,在不同语句中(右边)q*k的逐元素积很低。

当查询向量和键向量都来自榜首个语句中时,它们在激活神经元上往往有相pu同的符号,因而会发生一个正积。当查询向量来自榜首个语句中时,键向量来自第二个语句时,相同当地的神经元会有相反的符号,因而会发生一个负值。

可是BERT是怎样知道“语句”这个概念的?尤其是在神经网络榜首层中,更高的笼统信息还没有构成的时分。这个答案便是添加到输入层(见下图)的语句级嵌入(sentence-level embeddings)。这些语句嵌入的编码信息传递到基层的变量中,权力巅峰即查询向量和键向量,而且使它们可以获取到特定语句的值。



语句A和B的部分嵌入以及方位嵌入被添加到词嵌入中

(来自BERT论文(https://arxiv.org/pdf/1810.04805笔记本显卡天梯图.pdf))

留意下一个词

在这种留意力办法中,除了分隔符,其他一切的留意力都会集在输入序列的下个单词上。



依据BERT预练习模型的第2层0号头,留意下一个词的留意力办法。

这个办法可以使BERT捕获序列联系,如二元语法(bigrams)。我们来检查它的留意力细节视图;



我们看到查询向量“the”和键向量“store”(下个单词)的乘积在大大都神经元中是很高的正值。关于下一个单词之外的其他单词,q*k乘积包含着一些正值和负值。终究的成果是“the”和“store”之间的留意力得分很高。

关于这种留意力办法,很多的神经元参加到留意力得分中。而且这些神经元依据词方位的不同而不同,如下所示:



当i取2,4,8的时分,在方位i处的查询向量和在j = i+1处的键向量的逐元素积。留意激活神经元在每一个比如中都不同。

这种办法不同于留意分隔符以及留意语句的留意力办法,它们是由少数固定的神经元来决议留意力得分的。关于这两种办法,只要少数的神经元是有必要的,因而这两种办法都很简略,而且在被留意的单词上都没多少改变。与它们相反,留意下个单词的留意力办法需求追寻512个单词(译注:天津之眼,用可视化解构BERT,我们从上亿参数中提取出了6种直观办法,乙肝两对半对照表在BERT中每个样本最多512个单词。)中究竟是哪个是被一个给定的方位留意的,即哪个是下一个单词。为了完结这个功用,需求发生一系列查询向量和键向量,其间每个查询向量会有从512个键向量有仅有一个匹配。因而运用少数神经元很难完结这个使命。

那么BERT是怎样可以生成这些查询向量和键向量呢?答案就在BERT的方位嵌入(position embeddings),它在输入层(见图1)中被添加到词嵌入(word embeddings)中。BERT在输入序列中学习512个共同的方位嵌入,这些指定方位的信息能经过模型流入到键向量和查询向量中。

我们一起来探究

欢迎我们一起来试试这个可视化东西,并共享自己的发现。

Colab:https://嘉定天气预报colab.research.google.com/drive/1Nlhh2vwlQdKleNMqpmLDBsAwrv_7NnrB

Github:

https://github.com/jessevig/bertviz

PS:十分感谢Llion Jones开发的原始Tensor2Tensor可视化东西。

原文链接:

https://towardsdatascience.com/deconstructing-bert-distilling-6-patterns-from-100-million-parameters-b49113672f77

https://towardsdatascience.com/deconstructing-bert-part-2-visualizing-the-inner-workings-of-attention-60a16d86b5c1?gi=88e6da975567

 关键词: