Transformer可解释性:注意力机制注意到了什么?
原创作者 | FLPPED
论文:
Self-Attention Attribution: Interpreting Information Interactions Inside Transformer (2021 AAAI论文亚军)
地址:
https://arxiv.org/pdf/2004.11207.pdf
01 研究背景
随着transformer模型的提出与不断发展,NLP领域迎来了近乎大一统的时代,绝大多数预训练方法例如BERT等都将transformer结构作为模型的框架基础,在NLP许多领域的SOTA框架中也常常能看到它的身影。
而transformer的成功很大程度上得益于多头注意力机制,这一机制可对输入的上下文信息进行编码,并且使得模型学习到不同输入token之间的依赖关系。
在多头注意力的可解释性研究方面,有些学者侧重于对注意力权重的分析,重点讨论权重大的特征,有些将模型决策的关注点放在输入的token上,还有部分学者认为注意力机制的分布是无法直接解释的。
相比于过去的研究,本文提出了一种自注意力机制的归因算法,可对transformer内部的信息交互进行可解释性的说明。
通过该方法,模型可识别较重要的注意力head,将其他不重要的head进行有效裁剪。还可通过构建归因树(attribution tree)将不同层之间的信息交互进行直观的可视化表示。
最后,文章还以bert作为扩展的实例应用,通过对归因结果分析构建的Adversarial trigger对Bert发动攻击,使得bert的预测能力显著下降。
02 Transformer简介
首先让我们来重新回顾一下Transformer结构。一般Transformer的结构是由encoder和decoder两部分组成,两者各包含N=6的layer,每个layer由两个sub-layer组成,分别为多头自注意力和全连接网络,具体如图1所示。
Transformer模型的成功很大程度上得益于多头注意力机制。假定每个layer的attention heads数量为h,第h个attention head可用下式(1),(2),(3)表示
那么每一层多头注意力可表示为:
图1 transformer结构示意图
03 self-attention attribution 概念的提出
以往文章在对attention进行解释时,常常关注计算得来的attention score,由图二中的(a)图可以看出,通过(2)式计算的attention score matrix是十分稠密的,无法直接获得transformer内部真实的交互信息,并且两个单词之间的权重较大,也无法直接说明他们对最终的模型预测产生了重要的影响。
为此作者提出了一种自注意力的归因方法。
假设输入的句子为x,
表示transformer模型,
注意力权重矩阵A代表模型的输入,作者希望计算每一对注意力之间的归因分数 (attention attribution: ATTATTR) 来表示其对模型决策的影响大小。
以第h个attention head为例,其归因分数的计算法方法如式(4)所示,值从0到1的积分过程中,每一对attention connection (i,j)对模型的预测影响越大,它的梯度大小就会越显著,因此积分的值也会越大。
在实际的计算中,作者通过(5)式Riemman 估计来对积分过程进行了简化,
以一个finetune过后的bert模型中的某一个head为例,通过图2可以看出,attention score值较大并不意味着对最终的预测有更大的贡献,例如[SEP] 和其他token之间的attention score很大,但是最终计算的归因分数却很小。
对上下两句之间关系“contradiction”的预测,主要还是归因于第一个句子中的“don’t”和第二句中的“I know”,这一结果也基本符合常识。
可以看出,attribution score更能体现出输入token之间attention的依赖关系对模型预测的贡献。
图2 attention score 和attribution score 示意图
图3 ATTATTR有效性分析
如图3所示,在MNLI(Multi-genre Natural Language Inference) 数据集上,对BERT每一层中attribution scores最高的head进行裁剪,对下游任务预测的准确率影响要大于按照attention scores裁剪,进一步说明attribution score的大小更能反映attention connection 对模型预测能力的影响大小。
从蓝色虚线可以进一步看出仅仅对每一层中top2 的attribution scores进行裁剪就会造成模型预测准确率的巨大下降。
04 研究应用
既然知道每个head中attribution score的“强大威力”, 我们又该如何有效的利用它呢?
在本文的实验部分,作者基于Bert的预训练模型,对下游的四个典型分类任务进行了微调,并基于此说明了attribution 方法的实用价值。
l Attention head 的裁剪
已知attribution score的大小体现了自注意力之间的关系对模型最终决策的影响,作者又对每个attention head定义了其重要性,如(6)式所示,
其中x代表了从留出的数据集中采样出的样本, max(Attrh(A)) 代表第h个attention head中最大的attribution value。
将该指标和其他的重要性对比评价指标:准确率差异和Taylor展开方法对比,实验时,将对应指标下重要性较低的head先进行裁剪。
由图4可以看出,按照ATTATTR方法对head进行裁剪的方法对模型预测准确率的损失要明显低于按照准确率差异的方法,并且取得了和Taylor展开方法相当甚至更好的结果。
图4 按照不同重要性方法对head裁剪后模型预测准确率的变化情况
Transformer内部信息交互的可视化
基于前面提出的attribution score的方法,文章又提出了一种启发式的算法来构建attribution tree,以进一步揭示transformer内部的信息流动,使人能够更直观地理解输入的单词和最终预测之间的联系。
首先在计算每一层的attribution score的时候,需要将每个head的score做加和。
最终构建的attribution tree 需要在最大化attribution score 和使得树中维持边的数量最小之间权衡,因此目标函数可以表示为,
为了避免求解这个联合优化的问题,作者使用了一种自上而下的启发式的算法来生成attribution tree的边,具体算法细节可以参考下图。
图5 Attribution Tree的构建方法
那么通过attribution tree, 又具体得到什么有趣的信息呢?
文章以MNLI数据集中的一对语句为例进行了解释,如下图6所示,该任务的目标是判断两句话之间的关系是矛盾、中立还是相似。
从树的底部可以看到,信息之间的交互仅局限于本句中,是相对local的。
然后随着信息的聚合汇总,两个句子分别聚焦在“supplement”和“extra”两个单词上,从“extra”中可以明显看到“add something extra”信息和“supplement”是强相关且相似的,最终所有信息汇聚到[CLS] token上,做出“entailment”的预测。
可以看出,attribution tree 将整个信息流动的过程清晰的可视化了,增强了transformer模型的可解释性,使人能够更方便的去理解任务以及找到模型可能的改进方向。
图6 MNLI数据集中的某一例子
对BERT模型的非目标攻击
通过对transformer内部信息流动观察,可以进一步发现模型的预测受attribution score较大的一些attention connection的影响较大,而很容易忽视其他大部分的输入信息。
因此文章这里采用over-confident 的模式作为adversarial triggers 来攻击bert模型。
具体实验时,文章首先通过不同层中最大的attribution scores 来提取attention 之间的依赖关系,然后将提取出来的这些依赖关系的对应模式当做adversarial triggers添加到想要攻击的样本中,从而改变原始样本的预测结果。
如下图7所示,整个攻击过程首先将最上方这个预测为contradict的句子对中对结果贡献最大的两个模式“floods-ice”和“Iowa-Florida”抽提出来, 将他们作为trigger加入到下面两个测试的样本中去,可以看到模型的预测结果从原来准确的“entailment”和“neutral”错误的预测成了“contradict”,是不是非常神奇!
图7使用ATTATTR来提取trigger进行攻击
由此也可以看出,bert模型在预测时会过度依赖一些特定的trigger模式来做预测,这样一旦添加一些其他容易混淆的trigger时,就很容易受到攻击从而造成预测显著失真。
05 总结
相比于其他文章将关注点放在注意力权重上的分析和讨论,这篇文章从attribution score这个全新的角度分析了注意力依赖之间的关系以及它对模型预测结果的影响。
此外在应用方面,作者从head 裁剪、transformer内部信息流的可视化以及通过构建adversarial triggers来攻击bert等方面给出了非常有趣且实用的示例,可以看到以transformer为基础架构的预训练模型的预测还十分依赖学到的某种特殊关系对,未来在充分了解attention内部的真实依赖关系的前提下,还需要针对下游任务引入一些新的约束和指导,以便更好地利用输入的信息,提升模型预测的鲁棒性。
参考文献
[1] Hao Y, Dong L, Wei F, et al. Self-Attention Attribution: Interpreting Information Interactions Inside Transformer[C]//Proceedings of the AAAI Conference on Artificial Intelligence. 2021, 35(14): 12963-12971.
私信我领取目标检测与R-CNN/数据分析的应用/电商数据分析/数据分析在医疗领域的应用/NLP学员项目展示/中文NLP的介绍与实际应用/NLP系列直播课/NLP前沿模型训练营等干货学习资源。
Transformer可解释性:注意力机制注意到了什么?的更多相关文章
- 深入理解BERT Transformer ,不仅仅是注意力机制
来源商业新知网,原标题:深入理解BERT Transformer ,不仅仅是注意力机制 BERT是google最近提出的一个自然语言处理模型,它在许多任务 检测上表现非常好. 如:问答.自然语言推断和 ...
- 自然语言处理中的自注意力机制(Self-attention Mechanism)
自然语言处理中的自注意力机制(Self-attention Mechanism) 近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中,之前我对早期注意力 ...
- 自注意力机制(Self-attention Mechanism)——自然语言处理(NLP)
近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中.随着注意力机制的深入研究,各式各样的attention被研究者们提出.在2017年6月google机 ...
- 自然语言处理中注意力机制---Attention
使用Multi-head Self-Attention进行自动特征学习的CTR模型 https://blog.csdn.net/u012151283/article/details/85310370 ...
- 机器学习(ML)十二之编码解码器、束搜索与注意力机制
编码器—解码器(seq2seq) 在自然语言处理的很多应用中,输入和输出都可以是不定长序列.以机器翻译为例,输入可以是一段不定长的英语文本序列,输出可以是一段不定长的法语文本序列,例如 英语输入:“T ...
- 用卷积神经网络和自注意力机制实现QANet(问答网络)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/ ,学习更多的机器学习.深度学习的知识! 在这篇文章中,我们将解决自然语言处理(具体是指问答)中最具挑战性 ...
- 【注意力机制】Attention Augmented Convolutional Networks
注意力机制之Attention Augmented Convolutional Networks 原始链接:https://www.yuque.com/lart/papers/aaconv 核心内容 ...
- NLP教程(6) - 神经机器翻译、seq2seq与注意力机制
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...
- (转)注意力机制(Attention Mechanism)在自然语言处理中的应用
注意力机制(Attention Mechanism)在自然语言处理中的应用 本文转自:http://www.cnblogs.com/robert-dlut/p/5952032.html 近年来,深度 ...
随机推荐
- Hive SQL优化思路
Hive的优化主要分为:配置优化.SQL语句优化.任务优化等方案.其中在开发过程中主要涉及到的可能是SQL优化这块. 优化的核心思想是: 减少数据量(例如分区.列剪裁) 避免数据倾斜(例如加参数.Ke ...
- Intriguing Properties of Contrastive Losses
目录 概 主要内容 广义对比损失 不同的先验 不同的权重比 Feature Suppression DigitOnImageNet dataset RandBit dataset 代码 [Chen T ...
- ECMA-262规范定义的七种错误类型
第一种:Error 所有错误的基本类型,实际上不会被抛出. 第二种:EvalError 执行eval错误时抛出. 第三种:ReferenceError 对象不存在是抛出. 第四种: ...
- centos7 安装python3 小白教程-CV大法
安装python3 centos7,默认系统自带python2.7的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何 ...
- Log4j2进阶使用(Pattern Layout详细设置)
1.进阶说明 通过配置Layout打印格式化的日志, Log4j2支持很多的Layouts: CSV GELF HTML JSON Pattern Serialized Syslog XML YAML ...
- Hadoop编译打包记录
Hadoop编译打包,基于2.7.2版本的源码. # 打包过程中需要使用到的工具 java -version mvn -version ant -version type protoc type cm ...
- Api接口测试总是似懂非懂,只因这个原理没搞清楚
前言 掌握了http协议,就掌握了接口测试 笔者在网络上看过不少接口测试教程,一上来就开始讲怎么操作工具,而不告诉读者为什么要这么操作.读者可能照猫画虎成功了,也可能操作失败了但不知为何出错. 因 ...
- PHP json_encode() 序列化对象、数组、空对象、空数组
$result = [ "object" => ["a" => 1], "array" => [1,2,3,4,5], & ...
- pip list 精确查找某一模块的方法
1. 今天搜资料的时候get一项技能: pip list精确查找某一模块 命令如下: pip list | findstr "win32" (此处win32可以替换成任意想查找的模 ...
- Pytest_跳过用例的执行(7)
pytest跳过用例执行的用法与unittest跳过用例大致相同. pytest跳过用例的方法如下: pytest.mark.skip(reason):无条件用例.reason是跳过原因,下同. py ...