Attention 一综述

article/2025/10/15 0:19:31

近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中。随着注意力机制的深入研究,各式各样的attention被研究者们提出,如单个、多个、交互式等等。去年6月,google机器翻译团队在arXiv上的《Attention is all you need》论文受到了大家广泛关注,其中,他们提出的自注意力(self-attention)机制和多头(multi-head)机制也开始成为神经网络attention的研究热点,在各个任务上也取得了不错的效果。在AAAI2018的接收论文中,有30余篇都使用了attention机制,其中有3篇使用到了self-attention。本人就这篇论文中的self-attention以及一些相关工作进行了学习总结(其中也参考借鉴了张俊林博士的博客“深度学习中的注意力机制(2017版)”和苏剑林的“《Attention is All You Need》浅读(简介+代码)”),和大家一起分享。

一、引言

   Attention机制由视觉图像领域提出来,在2014年,Bahdanau在《Neural Machine Translation by Jointly Learning to Align and Translate》上将其应用到机器翻译任务上,这是第一个应用到NLP领域的论文。之后,15、16、17乃至今年,都有各式各样的attention机制结合深度学习网络模型被用于处理各种NLP的任务。在2017年,google机器翻译团队发表的《Attention is all you need》中大量使用了自注意力机制(self-attention)来学习文本表示,脱离传统的RNN/CNN,同时也使用了新颖的multi-head机制。自注意力机制也成为了大家近期研究的热点,可以应用到各种NLP任务上。

  对于传统的机器翻译,我们可以使用sequence to sequence(encoder-decoder)模型来进行翻译,如下图所示。

    这里,我们可以把上图抽象出来得到下图。输入序列{x1, x2, x3, x4},传入编码器(encoder)中进行编码,得到语义编码c,然后通过解码器(decoder)进行解码,得到输出序列{y1, y2, y3},输入与输出的个数可以不相等。

   但是,这种方式会有一个问题:对于长句子的翻译会造成一定的困难,而attention机制的引入可以解决这个问题。如下图所示:

这里,我们可以看到,decoder中有几个输出序列,对应的语义编码c则有相同的数量,即一个语义编码ci对应一个输出yi。而每个ci就是由attention机制得到,具体公式如下:

回顾了传统的attention模型之后,我们看一下google翻译团队对attention模型的高度抽取概况。他们将其映射为一个query和一系列<key, value>,最终得到输出attention value的过程。这里的query相当于decoder中的si-1,key与value都来自于encoder的hj,区别在于前后状态的hj。然后计算query与keyi的相似度,并与valuei进行相乘,然后求和。

上面提到的query与key之间计算相似度有许多方法,如dot、general、concat和MLP等方式,具体公式如下所示。而attention模型抽象为query、key和value之间的相似度计算,总共有3个阶段。第一阶段:query与keyi使用特定的相似度函数计算相似度,得到si;第二阶段:对si进行softmax()归一化得到ai;第三阶段,将ai与valuei对应相乘再求和,得到最终的attention value。其实对比传统的attention公式,我们可以看出,这两套公式还是很像的。

二、自注意力机制

下面主要介绍《Attention is all you need》这篇论文,发表在NIPS2017上。这篇论文的创新性在于:(1)不同于以往基于RNN的seq2seq模型框架,该论文使用了attention机制代替了RNN搭建模型;(2)提出了多头注意力机制(multi-head self-attention);(3)在WMT2014语料中,取得了先进结果,并且训练速度要快很多。

该模型的架构如图所示,依然符合seq2seq的架构,由encoder和decoder组成。在编码器中由许多重复的网络块组成,一个网络块由一个多头attention层和一个前向神经网络组成(而非单独使用attention模型),整个编码器栈式搭建了N个块。Decoder与encoder类似,除了编码器到解码器的学习外,还有解码器到解码器的学习。同时,为了能够更深层次的搭建网络结构,该模型使用了残差结构(Add)和对层的规范化(Norm)。

               

本文对基本的attention模型进行了少许改进,提出了缩放点积attention(scaled dot-Product attention)。在使用点积运算进行相似度计算的基础上,缩小了倍(dk为词向量的维度)。其目的在于调节的作用,使得内积不易过大。

多头attention(Multi-head attention)的结构贺公式如图所示。首先,需要对query、key和value进行一个线性变换;然后输入到缩放点积attention机制,重复做h次,每次的输入为线性变换后的原始输入,这里,多头就是指做多次attention之后进行拼接,每一次算一个头,每次Q、K和V的线性变换参数W是不一样的;最后,将拼接后的模型做一次线性变换,得到的值为多头attention的结果。可以看出,多头attention与传统的attention区别在于计算了h次,这样可以从不同的维度和表示子空间里学习到相关的信息,可通过attention可视化机制来验证。

在整个模型中,从编码器到解码器的地方中使用了多头attention进行连接,K、V和Q分别是编码器的层输出(这里K=V)和解码器中多头attention的输入,这其实跟主流的机器翻译模型中的attention一样,进行传统的翻译对齐任务。然后,在编码器和解码器中都使用了多头自注意力self-attention来学习文本的表示,K=V=Q,即里面的每个词都要和该句子中的所有词进行attention计算,其主要目的是学习句子内部的词依赖关系,捕获句子中的内部结构。

这里,要着重说一下位置编码。因为该模型没有使用RNN等序列模型,不能考虑到时序信息,因此,这里拟合了一个位置编码函数,来模拟词语的顺序。实验结果表明,这种方式是合理有效的。

三、AAAI2018中的self-attention

   在新放出来的AAAI2018的论文中,共计有30余篇使用attention模型处理各种NLP任务,这里,主要介绍使用self-attention机制的三篇论文。

1、DiSAN: Directional Self-Attention Network for RNN/CNN-Free Language Understanding

   这篇论文是悉尼科技大学UTS的张成奇教授发表的论文,发表在AAAI2018上。该论文旨在提出一种通用框架,在自然语言推理(natural language inference)、情感分析、语义关系(semantic relatedness)、句子分类(sentence classifications)等任务中均取得较好的效果。

创新点主要有两点:第一,多维度:这里的attention被用于计算每个特征上;第二,方向性:使用一个或多个位置mask对attention进行建模。

  这里,输入序列为x = [x1, x2, ..., xn],词向量维度为de。

  首先,对embedding层经过全连接层,得到hidden state:h = [h1, h2, ..., hn],公式如下:

  然后,计算hi与hj之间的相似度函数f(hi, hj),公式如下所示。其中c=5。

公式里的M为位置编码mask。本文共提出三种位置mask方式,分别为前向(fw)、后向(bw)和对角(diag),公式如下:

         

 然后,对得到的相似度函数f(hi, hj)进行softmax归一化操作,得到(0, 1)之间的数P。接着,对应与输入向量x进行相乘,求和,最终得到输出向量s。

 同时,本文引入门机制。对向量s和隐层状态h进行线性变换后再求和,并进行sigmoid操作,得到F。用门F控制h和s的比例,得到最终的输出向量u。

本文,在输入向量上,分别使用前向自注意力机制和后向自注意力机制,将两部分的结果进行拼接,并使用多维度的self-attention,最后输出。实验表明,该模型在很多任务中均取得了很好的结果。

2、Deep Semantic Role Labeling with Self-Attention

   这篇论文来自AAAI2018,厦门大学的工作。将self-attention应用到了语义角色标注任务(SRL)上,看作一个序列标注问题,使用BIO标签进行标注。然后提出使用深度注意力网络(Deep Attentional Neural Network)进行标注,网络结构如下。在每一个网络块中,有一个RNN/CNN/FNN子层和一个self-attention子层组成。最后直接利用softmax当成标签分类进行序列标注。该论文在网络块数为10的时候,取得了较好的结果。

  

3、Simultaneously Self-Attending to All Mentions for Full-Abstract Biological Relation Extraction

    这篇论文是AndrewMcCallum团队应用self-attention在生物医学关系抽取任务上的一个工作,应该是已经被NAACL2018接收。这篇论文作者提出了一个文档级别的生物关系抽取模型,里面做了不少工作,感兴趣的读者可以更深入阅读原文。我们这里只简单提一下他们self-attention的应用部分。论文模型的整体结构如下图。

四、总结

    Google提出的self-attention是attention模型的一种特殊形式,是自己学习自己的过程,Q=K=V;提出的multi-head attention是通过计算多次来捕获不同维度不同子空间上的相关信息。Self-attention可以不考虑词与词之间的距离而直接计算依赖关系,能够学习到一个句子的内部结构,能够简单并行的计算,可以脱离CNN和RNN,但是需要合理的考虑和设置位置函数。当然,从AAAI2018年的论文可以看出,self-attention也可以当作一个层,与RNN、CNN和FNN等配合使用,能够更好的解决NLP领域的任务。

参考文献:

[1] Vaswani, Ashish, et al. Attention is all you need. Advances in Neural Information Processing Systems. 2017.

[2] Shen, T.; Zhou, T.; Long, G.; Jiang, J.; Pan, S.; and Zhang, C. Disan: Directional self-attention network for rnn/cnn-free language understanding. AAAI 2018.

[3] Verga P, Strubell E, McCallum A. Simultaneously Self-Attending to All Mentions for Full-Abstract Biological Relation Extraction. AAAI 2018.

[4] Tan Z, Wang M, Xie J, et al. Deep Semantic Role Labeling with Self-Attention. AAAI 2018.

 

参考博客:

张俊林,深度学习中的注意力机制(2017版),https://blog.csdn.net/malefactor/article/details/78767781

苏剑林,《Attention is All You Need》浅读(简介+代码),https://kexue.fm/archives/4765


http://chatgpt.dhexx.cn/article/cghTiS5E.shtml

相关文章

从Attention到Bert——1 Attention解读

下一篇从Attention到Bert——2 transformer解读 文章目录 1 Attention的发展历史2015-2017年 2 Attention的原理3 Multi-Head Attention4 Self-Attention为什么需要self-attention什么是self-attention 5 Position Embedding 最早&#xff0c;attention诞生于CV领域&#xff0…

Attention UNet

Attention UNet论文解析 - 知乎Attention UNet论文地址&#xff1a; https://arxiv.org/pdf/1804.03999.pdf 代码地址&#xff1a; https://github.com/ozan-oktay/Attention-Gated-NetworksAttention UNet在UNet中引入注意力机制&#xff0c;在对编码器每个分辨率上的特征与解…

attention

文章目录 Attention基本的Attention原理参考 Hierarchical Attention原理实践参考 Self Attentionother Attention Attention Attention是一种机制&#xff0c;可以应用到许多不同的模型中&#xff0c;像CNN、RNN、seq2seq等。Attention通过权重给模型赋予了区分辨别的能力&am…

史上最小白之Attention详解

1.前言 在自然语言处理领域&#xff0c;近几年最火的是什么&#xff1f;是BERT&#xff01;谷歌团队2018提出的用于生成词向量的BERT算法在NLP的11项任务中取得了非常出色的效果&#xff0c;堪称2018年深度学习领域最振奋人心的消息。而BERT算法又是基于Transformer&#xff0…

一文看懂 Attention(本质原理+3大优点+5大类型)

Attention 正在被越来越广泛的得到应用。尤其是 BERT 火爆了之后。 Attention 到底有什么特别之处&#xff1f;他的原理和本质是什么&#xff1f;Attention都有哪些类型&#xff1f;本文将详细讲解Attention的方方面面。 Attention 的本质是什么 Attention&#xff08;注意力&a…

史上最直白之Attention详解(原理+代码)

目录 为什么要了解Attention机制Attention 的直观理解图解深度学习中的Attention机制总结 为什么要了解Attention机制 在自然语言处理领域&#xff0c;近几年最火的是什么&#xff1f;是BERT&#xff01;谷歌团队2018提出的用于生成词向量的BERT算法在NLP的11项任务中取得了非常…

关于Attention的超详细讲解

文章目录 一、动物的视觉注意力二、快速理解Attention思想三、从Encoder-Decoder框架中理解为什么要有Attention机制四、Attention思想步骤五、Self-Attention5.1 Self-Attention的计算步骤5.2 根据代码进一步理解Q、K、V5.3 再来一个例子理解 六、缩放点积中为什么要除以根号d…

浅聊古代————汉朝

文章目录 西汉西汉建立&#xff1a;汉高祖刘邦西汉灭亡&#xff1a;王莽篡汉新朝建立&#xff1a;王莽篡汉改新新朝灭亡&#xff1a;绿林赤眉起义 东汉东汉建立&#xff1a;起义军刘秀东汉灭亡&#xff1a;曹丕篡汉 西汉 西汉建立&#xff1a;汉高祖刘邦 刘邦被项羽封为汉王。…

XNU简介

XNU内核比较庞大复杂&#xff0c;因此这里只是进行主要内容的介绍 XNU据说是一个无限递归的缩写&#xff1a;XNU’s Not UNIX XNU内核是Mac和iOS的核心&#xff0c;有三个主要部分组成的一个分层体系结构&#xff1b;内核XNU是Darwin的核心&#xff0c;也是整个OS X的核心。 …

函数

1.编写函数&#xff0c;完成下面的程序&#xff0c;将一个字符串中的字母排序后输出。输出要求&#xff1a;字母从小到大排序&#xff08;包括大小写&#xff09;后的字符串。例如: 输入&#xff1a;Hello World! 输出&#xff1a;!HWdellloor 程序中的必要代码为: main() …

HangOver

How far can you make a stack of cards overhang a table? If you have one card, you can create a maximum overhang of half a card length. (We’re assuming that the cards must be perpendicular to the table.) With two cards you can make the top card overhang t…

❤️对比PyWinAuto和uiautomation实现微信联系人自动采集❤️

大家好,我是小小明。昨天我在《UI自动化工具轻松实现微信消息的自动收发和朋友圈爬取》一文中演示了UIAutomation的三个使用示例,链接:https://blog.csdn.net/as604049322/article/details/119899542 由于昨天对UIAutomation的API了解还不够全面,个别代码优化空间还较大。…

适用于winform程序的UI自动化实现(python+uiautomation)

适用于winform程序的UI自动化实现&#xff08;pythonuiautomation&#xff09; 一、使用的工具和库 定位工具&#xff1a;inspect&#xff08;提取码&#xff1a;kvwx&#xff09;、UISpy(提取码&#xff1a;ab0e) python库使用&#xff1a;subprocess&#xff08;内置库&…

WPF UIAutomation测试套件开发

目录 介绍 目标 测试方案 功能测试&#xff08;黑匣子&#xff09; 测试示例 设计 记录测试并生成测试方法 更新测试方法并构建 测试用例规范 测试方法 初始化方法 实现自定义TestContext 测试配置 关于CodedUI的常见问题 不要手动更改* .Designer.cs文件中的代…

安卓手机 Python 自动化( uiautomation、uiautomation2、weditor )

其他自动化工具或者框架&#xff1a; Airtest&#xff1a;https://airtest.readthedocs.io/zh_CN/latest/autojs&#xff1a;Auto.js快速入门实战教程&#xff1a;https://zhuanlan.zhihu.com/p/90065914appium&#xff1a;https://blog.csdn.net/freeking101/article/details/…

UIAutomation识别UI元素

MS UI Automation(Microsoft User Interface Automation&#xff1a;UIA)是随.net framework3.0一起发布的&#xff0c;虽然在如今这个几乎每天都有各种新名词、新技术出来的所谓的21世纪&#xff0c;它显得已经有些过时了。前些日子&#xff0c;正好一个项目&#xff0c;可以用…