BERT中的黑暗秘密

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Anna Rogers

编译:ronghuaiyang

导读

在finetune BERT的时候发生了什么?

这篇博客文章总结了我们EMNLP 2019年的论文“Revealing the Dark Secrets of BERT”(Kovaleva, Romanov, Rogers, & Rumshisky, 2019)。pdf:https://www.aclweb.org/anthology/D19-1445.pdf

2019年可以被称为NLP的Transformer之年:这种架构主导了排行榜并激发了许多分析研究。毫无疑问,最受欢迎的Transformer是BERT(Devlin, Chang, Lee, & Toutanova, 2019)。除了其众多的应用,许多研究探索了各种语言知识的模型,通常得出这样的结论,这种语言知识确实存在,至少在某种程度上(Goldberg, 2019; Hewitt & Manning, 2019; Ettinger, 2019)。

这项工作的重点是补充的问题:在finetune BERT的时候发生了什么?特别是,有多少可从语言学角度解释的自注意力模式被认为是它的优势,可以实际用来解决下游的任务?

为了回答这个问题,我们用BERT finetune了以下GLUE (Wang et al., 2018)的任务和数据集:

  • 语义检测 (MRPC and QQP);

  • 文本相似度 (STS-B);

  • 情感分析 (SST-2);

  • 文本蕴含 (RTE);

  • 自然语言推理 (QNLI, MNLI).

BERT的简单介绍

BERT代表Transformer的双向编码器表示。该模型基本上是一个多层双向Transformer编码器 (Devlin, Chang, Lee, & Toutanova, 2019),有多个关于它的工作原理的优秀指南,包括图解的Transformer.。我们关注的是Transformer架构的一个特定组件,即self-attention。简而言之,它是一种衡量输入和输出序列组件的方法,以便对它们之间的关系(甚至远程依赖关系)进行建模。

作为一个简单的例子,让我们假设我们需要创建一个句子“Tom is a black cat”的表示。BERT在对“cat”进行编码时,可能会选择更多地关注“Tom”,而较少关注“is”、“a”、“black”。这可以表示为权重向量(对于句子中的每个单词)。当模型对序列中的每个单词进行编码时,就会计算出这些向量,从而得到一个方阵,我们称之为“自注意力图”。

现在,我们还不清楚“Tom”和“cat”之间的关系是否总是最好的。要回答关于猫的颜色的问题,模特最好关注“black”而不是“Tom”。幸运的是,它不必选择。BERT(和其他Transformer)很强大很大程度上归功于这样一个事实:在多层中有多个头,它们都学会了构建独立的自注意力图。理论上,这可以赋予模型“在不同位置关注来自不同表示子空间的信息”的能力(Vaswani et al., 2017)。换句话说,模型将能够在当前任务的几个备选表示之间进行选择。

自注意力权重的计算大部分发生在BERT的预训练中:该模型(预)针对两项任务(Masked语言模型和下一个句子预测)进行训练,然后针对个别下游任务(如情绪分析)进行finetune。这种分离的基本思想训练过程分为semi-supervised训练和finetune阶段,其中finetune阶段是监督学习:迁移任务的数据集通常太小,一般不够了解整个语言,但大型文本语料库可以通过语言建模用于此目的(和其他类似的)。因此,我们可以获得独立于任务的句子和文本的信息表示,然后这些句子和文本可以“适应”后续任务。

让我们在这里指出,“适应”应该工作的确切方式在BERT论文或GPT技术报告(其中强调了预训练/finetune方法)中都没有详细描述。然而,如果注意力本身是为了提供一种对部分的输入序列“链接”,增加信息量,多头,多层架构需要提供多个可选择的自注意力图,可能finetune过程会教模型依靠对手头的任务更有用的自注意力图。例如,在情感分析任务中,名词和形容词之间的关系比名词和介词之间的关系更重要,因此,finetune会理想地教会模型更多地依赖更有用的自注意力图。

学到的自注意力模式是什么类型的,每种类型有多少?

那么BERT的自注意力模式是什么呢?我们找到了五个,如下图所示:

图1,BERT自注意力模式的类型。 每个图像上的两个轴表示输入样本的BERT标记,颜色表示绝对注意力权重(深色表示更大的权重)。
  • 垂直模式表示对单个标记的关注,它通常是[SEP]标记(表示句子结束的特殊标记)或[CLS]标记(作为提供给分类器的完整序列表示使用的特殊BERT标记)。

  • 对角线模式表示注意前面/后面的单词;

  • 块模式表示对序列中所有标记的关注或多或少是一致的;

  • 从理论上讲,异构模式是唯一能够对应输入序列各部分之间的任何有意义的关系的模式(尽管不一定如此)。

以下是BERT在七项GLUE任务中五种注意力的比例(每一列代表所有层中所有头部的100%):

图2所示。 在选定的GLUE任务上,BERT的自注意映射类型的比例进行了微调。

虽然具体的比例因任务而异,但在大多数情况下,可能有意义的模式占BERT所有自注意力权重的不到一半。至少有三分之一的BERT head只关注[SEP]和[CLS] —— 这种策略不能为下一层的表示提供很多有意义的信息。它还表明,该模型严重参数化过度,这解释了最近蒸馏方法的成功尝试 (Sanh, Debut, Chaumond, & Wolf, 2019; Jiao et al., 2019)。

值得注意的是,我们使用的是BERT-base,即较小的模型,在16层中有12个头。如果它已经被过度参数化了,这就意味着BERT-large和所有后来的模型,都是过度参数化的,其中一些是30倍大(Wu et al., 2016)。

这样对[SEP]和[CLS]的依赖也可能表明,要么BERT以某种方式“吸收”了前面层获得的信息表示,后续的self-attention图并不需要太多,要么BERT某种程度上整体不依赖于self-attention。

fine-tuning的时候发生了什么?

我们的下一个问题是BERT的微调过程中发生了什么变化。下面的热图显示了在finetune之前和之后,每个头和每一层扁平的自注意映射矩阵之间的余弦相似性。较深的颜色表示在表现上有更多的差异。对于所有的GLUE任务,进行了3个epochs的finetune。

图3所示,在经过训练和调整的BERT中,平展的自注意图之间存在余弦相似性。 颜色越深表示差异越大。

我们发现,大多数注意力的权重并没有发生太大的变化,对于大多数任务来说,最后两层变化最大。这些变化似乎不支持任何特定类型的有意义的注意力模式。相反,我们发现这个模型基本上更依赖于垂直注意力模式。在SST的例子中,在最后一层中较厚的垂直注意模式是由于对最终[SEP]和它之前的标点符号的联合注意,我们观察到这是垂直注意模式的另一个常见目标。

图4,自注意力图的一个单独的例子,在SST上对BERT进行finetune。

这有两个可能的解释:

  • 垂直模式在某种程度上是足够的,也就是说,标记表示在某种程度上吸收了前一层的有意义的注意力模式。我们确实发现最早的层更关注[CLS],然后[SEP]开始主导大多数任务(见图6)

  • 手头的任务实际上并不需要细粒度的、有意义的注意力模式,而这种模式本应是Transformers的主要特征。

finetune会造成多大的区别?

考虑到在预训练和调优中使用的数据集的巨大差异,以及非常不同的训练目标,研究调优实际上产生了多大的差异是很有趣的。据我们所知,这个问题以前没有人提出过。

我们对每个选择的GLUE数据集进行了三个实验:

  • 预训练模型的权重冻结,并使用特定任务的分类器,看看BERT的表现

  • 从正态分布中随机初始化模型,并对任务数据集进行3个epochs的finetune,然后看看BERT的表现

  • 使用官方的预训练BERT-base模型,在任务数据集上finetune3个epochs,然后看看BERT的表现

实验结果如下:

虽然很明显,预训练+finetune设置可以产生最高的结果,但随机+finetune的BERT在所有任务上都表现得令人不安,除了文本相似性。事实上,对于情绪分析来说,随机初始化和finetune BERT可以得到80%的准确率,而且不需要任何预训练。考虑到大型预训练变压Transformer的规模,这就提出了一个严重的问题:昂贵的预训练是否能带来足够的经济效益。它还提出了关于NLP数据集的严重问题,这些数据集显然可以在没有太多任务无关的语言知识的情况下解决,而这些任务无关的语言知识是预xunl+finetune设置应该提供的。

18.01.2020更新:感谢Sam Bowman指出,随机BERT结果总体上可与预训练Transformer的GLUE基线相当,并且可以很好地解释为这些任务在没有深入语言知识的情况下可以解决的程度。NLP社区在更困难的数据集上需要更多的工作,实际上需要这样的知识,在过渡期间,我们至少应该切换到SuperGLUE。请注意,对于这些任务,GLUE基线和大多数发布的结果都使用单词嵌入或基于计数的单词向量作为输入,而我们的随机BERT是完全随机的。因此,直接比较并不完全公平。然而,特别是对于SST,这种比较可以与原始的递归神经张量网络进行比较(Socher et al., 2013)。这个2013年的模型相比之下很小,而且也采用随机向量作为输入表示,但是它在二进制分类上比我们的随机+finetuneBERT多7点。

有没有可以在语言学上解释的自注意力头?

在这一点上,有几项研究试图找出自注意力的头编码特定类型的信息,但大多数集中在语法上。我们做了一个实验,关注框架语义元素:我们从FrameNet 1.7抽取了473个句子,最多12个标记的长度,并且核心框架元素距离目标词至少2个标记。在下面的例子中,是体验者和分词之间的关系唤起了emotion_directframe。可以说,这种关系对于理解一个给定的句子所描述的情况是至关重要的,任何声称能够提供语言信息的自注意力图的机制都应该反映出这些关系(可能包括许多其他关系)。

我们通过预训练的BERT得到这些句子的表示法,计算与标注的框架语义关系对应的标记对之间的最大权值。图5表示FrameNet数据集中所有示例的这些分数的平均值。我们发现两个头(第1层的头2,第7层的头6)比其他头更关注这些框架语义关系。

但是,在推理的时候,到底是什么信息在起作用呢?

我们认为,通过对训练前的BERT权值进行探查,得出某些信息实际上是编码的结论,未免过于草率。考虑到模型的大小,可能会发现任何其他关系的编码的类似证明(事实上,Jawahar等人发现在那个方向上的不同分解方案之间没有显著的差异)。真正的问题是,模型在推理时是否真的依赖于这些信息。

为了确定我们认为对帧语义关系编码有用的两个头是否真的被finetune过的BERT使用,我们进行了一项消融研究,一次禁用一个头(即用统一注意力替换习得的注意力权重)。图6显示了在我们的示例中所有GLUE任务的热图,每个单元格显示的是总体性能,当给定的头被关闭。很明显,虽然整体模式不同任务之间,我们最好随机删除头 —— 包括那些我们确认为编码有意义的信息,应该为最相关的任务。许多头也可以在不影响任何性能的情况下关闭,这再次表明,即使是BERT-base也严重参数化了。

图6,模型的性能,一次禁用一个头,蓝色线表示没有禁用头的基线性能。较深的颜色对应较高的性能分数。

机器翻译任务也得出了类似的独立结论,即将注意力权重归零,而不是用统一注意力代替它们(Michel, Levy, & Neubig, 2019)。我们进一步表明,这种观察不仅扩展到头,而且扩展到整个层:根据任务的不同,整个层可能对模型性能有害!

图7,禁用一个层的模型的性能。

讨论

我们的主要贡献在于,虽然BERT的大多数研究都集中在探索预训练好的模型上,但我们提出了一个问题,即在微调过程中会发生什么,以及通过自注意力机制获得的表征有多大意义。到目前为止,我们还没有找到语言上有意义的自注意力图对微调BERT的表现至关重要的证据。我们的研究结果有助于从以下几个方向对基于Transformer模型的属性进行持续的讨论:

a)BERT过度参数化了。在我们的实验中,我们一次只禁用一个头,而在大多数情况下,模型的性能并没有受到影响,这一事实表明,许多头具有功能重复,即禁用一个头不会损害模型,因为相同的信息可以在其他地方获得。这个结果指向了过度参数化,并解释了像ALBert和TinyBERT这样的小型BERT的成功。

这种过度参数化意味着,BERT可能会有一些非常重要的头,它们在语言上具有有意义的自注意力模式,但为了证明这一点,我们必须尝试禁用所有可能的头组合(这是不可行的)。在同一时期的一项研究中提出了一个很有前途的替代方案:(Voita, Talbot, Moiseev, Sennrich, & Titov, 2019)通过使用具有修剪效果的正则化目标对模型进行finetune,确定了基础Transformer的“重要”头。

b)BERT不需要那么聪明来完成这些任务。BERT在没有预训练的情况下可以很好地完成大多数GLUE任务,这一事实表明,在很大程度上,不需要太多的语言知识就可以解决这些问题。与口头推理不同,它可能学会依靠数据集中的各种捷径、偏见和人为因素来做出正确的预测。在这种情况下,它的自注意力图不一定对我们有意义。这一发现支持了当前许多数据集问题的最新发现(Gururangan et al., 2018; McCoy, Pavlick, & Linzen, 2019)。

另一种解释是BERT的成功是由于玄学,而不是由于自注意力。例如,在finetune之后对标点符号的高度关注可能意味着该模型实际上学会了依赖于某些其他组件,或者存在一些我们无法理解的深层模式。此外,注意力在多大程度上可以用来解释模型预测的原则目前正在辩论(Jain & Wallace, 2019;Serrano & Smith, 2019;Wiegreffe & Pinter, 2019)。

—END—

英文原文:https://text-machine-lab.github.io/blog/2020/bert-secrets/

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/352801.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

计算机竞赛游戏探险岛,冒险岛2主线任务攻略_第三章主线任务图文攻略

冒险岛2现已开启终极内测,很多玩家可能不知道主线任务怎么做,下面为大家带来冒险岛2第三章主线任务攻略(第三章:特别的任务),一起来看看吧! *冒险岛2第三章主线任务攻略 接下来要继续更新的,是冒险岛2主线任…

《黑暗之光》RPG游戏案例学习(8)——第四章 游戏任务系统

游戏任务系统 任务界面任务的接受与完成(1)点击NPC时,出现任务描述(2)接受任务后,出现任务提示(3)完成任务后,提交获取奖励 其他设计添加按钮音效鼠标指针管理系统 参考&…

黑暗逃生服务器显示无,《黑暗逃生》常见问题解决方法 游戏进不去?

本款游戏被称作一款3D版的狼人杀游戏,最近有很多玩家开始游玩这个游戏了,但是相对的游戏时常会出现些小问题,接下来小编就给大家带来这篇黑暗逃生常见问题解决方法,不要错过哦。 常见问题解决教程 1、游戏无法运行:“-…

黑暗逃生服务器显示无,《黑暗逃生》常见问题 已知问题及解决方案

今天发号哥和大家讲解《黑暗逃生》常见问题 已知问题及解决方案 黑暗逃生常见问题解决由发号哥小编给大家带来,大家在玩黑暗逃生的时候一定会遇到一些问题吗,小编给大家整合了黑暗逃生已知问题及解决方案,感兴趣的玩家一起来看看吧。 传奇最经…

RPG游戏《黑暗之光》流程介绍与代码分析之(四):任务系统的实现

第四章:任务系统 这部分主要对任务系统进行设计,游戏的关键因素之一就是任务系统与玩家的交互,但在代码实现中并不算复杂。本篇博客主要通过一下几个方面实现任务系统。 任务模型的导入与任务UI界面的创建任务的接受与完成针对不同对象的指针…

GoodTask 6.6.0 计划提醒任务管理工具

GoodTask是一款基于Apple提醒和日历、功能强大的任务/项目管理工具。它既可以用作简单的待办事项检查列表,也可以用作复杂的项目管理工具,帮助完成重大项目。GoodTask让您通过各种不同的视角来观看自己关注且需要完成的事务。有了GoodTask,您…

超黑光摄像机可以有多“黑“?

目前,市场标准黑光级IPC能在0.0005Lux(照度单位)的低照下维持彩色,但星光级或普通红外条件则必须依赖补光灯。那么有没有一款摄像机能达到超黑光的标准,能够在更暗环境下,不需要额外补光的情况下维持彩色呢? 超低照成像…

如何处理亿级图片排重(精准排重,相似排重)

图片相似度对比 1、需求 假如有一个图片池,存有1亿图片。给一张目标图片,在图片池中做匹配。 判断一张图片是否在图片池中出现过。(完全一样)判断有没有相似的出现过。比如两张图相似度90,两张图片是在描述一件事情。 …

【初识Spring框架】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 1. Spring框架是什么? 2. IOC 容器…

mDNS实现之Bonjour与Avahi(二)——win/linux/arm交叉编译

0.Part1: mDNS实现之Bonjour与Avahi(一)——win/linux/arm交叉编译_平凡之路-CSDN博客官网:Bonjour - Apple Developerhttps://developer.apple.com/bonjour/1.WindowsBonjour SDK for Windowshttps://developer.apple.com/downlo…

Android Says Bonjour

转载自: https://blog.csdn.net/innost/article/details/8629139 Android Says Bonjour 很高兴能在农历蛇年刚开始的这期《程序员》杂志上继续为读者奉上Android的故事。初来咋到,首先要向大家说声”你好“。有意思的是,Android也很通人情&a…

iOS 之 Bonjour 协议简单抓包分析

引子 因在学习iOS编程之bonjour编程的过程中,对bonjour产生了一些些的好奇,因此就查 阅了各种资料以及自己抓包分析该协议。 注:文章作为个人学习记录,不一定准确,如有错误请多多指教,共同进步!…

1.7 基于XML配置方式使用Spring MVC

一、基于XML配置与注解的方式使用Spring MVC 1、创建Maven项目 Maven项目 - SpringMvcDemo01 单击【Finish】按钮 2、添加相关依赖 在pom.xml文件里添加支持Spring MVC的相关依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmln…

硬件工程师-BOOST升压电源设计

一、Boost变换原理 开关闭合时&#xff0c;电感电压等于输入电压 开关断开时&#xff0c;电感电压输出电压-输入电压&#xff0c; 电感的感生电动势&#xff0c;N ΔΦ磁通的变化率&#xff0c;Δt时间 假设开关闭合与开关断开&#xff0c;开关断开时能量全部释放光 将第三个式…

【Python】深度理解Class类、Object类、Type元类的概念和关系

深度理解Class类、Object类、Type元类 1.Class类、Object类、Type元类的表面关系2.Class、Object、Type解释3.关系详解4.那么如何看待object、type在Python面对对象概念中的一席之地呢&#xff1f;5.那么object、type扮演了什么样的角色呢&#xff1f;他们对class又分别做了什么…

MongoDB(学习笔记1.0)

最近在学非关系型数据库MongoDB&#xff0c;猛地用起来的真的没关系型数据库方便啊。 首先还是数据库的安装&#xff1a; 安装直接去官网安装即可&#xff0c;官网地址&#xff1a;MongoDB: The Developer Data Platform | MongoDB 当前也有免安装版的&#xff0c;这里就不再…

京东数据分析软件工具(京东618销量查询)

这一期&#xff0c;我们主要分享今年618京东美妆的预售数据&#xff0c;包括面部护肤、香水彩妆、男士面部护肤品类。 -面部护肤- 今年618&#xff0c;面部护肤品类在京东累计预售量达到130万件&#xff0c;预售额达到13亿元。预售期间&#xff0c;护肤品类均价在1010元左右。期…

Android 使用第三方字体

先看下图 一.全局替换方式 1.新建assets引入资源 2. 自定义application&#xff0c;将第三方的字体&#xff0c;替换当前系统默认字体 class App : Application() {override fun onCreate() {super.onCreate()initTypeface()}private fun initTypeface() {val typefaceByson…

Android 字体大小(fontScale)不随系统设置变化

需求 App字体大小不变 如果用户将系统字体大小设置的非常大&#xff0c;可能导致APP的文字大小显示异常。 目标效果是&#xff0c;APP内字体大小不随系统设置的 字体大小 变化。 原始效果 系统的字体大小设置为 超大 时&#xff1a;&#xff08;字体大小 可变&#xff09; 目…

Android 自带的字体库、字体样式

1、设置字体 android:fontFamily“字体样式” 1、sans-serif-smallcaps &#xff08;左边只设置字体&#xff0c;右边设置加粗&#xff09; 2、sans-serif 3、cursive 4、sans-serif-black 5、sans-serif-condensed-light 6、sans-serif-thin 7、serif 8、serif-monospa…