近年来,注意力(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

AAAI2018中的自注意力机制(Self-attention Mechanism)的更多相关文章

  1. (转)注意力机制(Attention Mechanism)在自然语言处理中的应用

    注意力机制(Attention Mechanism)在自然语言处理中的应用 本文转自:http://www.cnblogs.com/robert-dlut/p/5952032.html  近年来,深度 ...

  2. 注意力机制(Attention Mechanism)在自然语言处理中的应用

    注意力机制(Attention Mechanism)在自然语言处理中的应用 近年来,深度学习的研究越来越深入,在各个领域也都获得了不少突破性的进展.基于注意力(attention)机制的神经网络成为了 ...

  3. 深度学习之注意力机制(Attention Mechanism)和Seq2Seq

    这篇文章整理有关注意力机制(Attention Mechanism )的知识,主要涉及以下几点内容: 1.注意力机制是为了解决什么问题而提出来的? 2.软性注意力机制的数学原理: 3.软性注意力机制. ...

  4. 注意力机制(Attention Mechanism)应用——自然语言处理(NLP)

    近年来,深度学习的研究越来越深入,在各个领域也都获得了不少突破性的进展.基于注意力(attention)机制的神经网络成为了最近神经网络研究的一个热点,下面是一些基于attention机制的神经网络在 ...

  5. 【注意力机制】Attention Augmented Convolutional Networks

    注意力机制之Attention Augmented Convolutional Networks 原始链接:https://www.yuque.com/lart/papers/aaconv 核心内容 ...

  6. 自然语言处理中的自注意力机制(Self-attention Mechanism)

    自然语言处理中的自注意力机制(Self-attention Mechanism) 近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中,之前我对早期注意力 ...

  7. 自注意力机制(Self-attention Mechanism)——自然语言处理(NLP)

    近年来,注意力(Attention)机制被广泛应用到基于深度学习的自然语言处理(NLP)各个任务中.随着注意力机制的深入研究,各式各样的attention被研究者们提出.在2017年6月google机 ...

  8. CVPR2021| 继SE,CBAM后的一种新的注意力机制Coordinate Attention

    前言: 最近几年,注意力机制用来提升模型性能有比较好的表现,大家都用得很舒服.本文将介绍一种新提出的坐标注意力机制,这种机制解决了SE,CBAM上存在的一些问题,产生了更好的效果,而使用与SE,CBA ...

  9. 【学习笔记】注意力机制(Attention)

    前言 这一章看啥视频都不好使,啃书就完事儿了,当然了我也没有感觉自己学的特别扎实,不过好歹是有一定的了解了 注意力机制 由于之前的卷积之类的神经网络,选取卷积中最大的那个数,实际上这种行为是没有目的的 ...

随机推荐

  1. win10安装VMware v14.1.1.28517

    一.下载 VMware v14.1.1.28517 下载地址(包含安装说明):http://www.downza.cn/soft/74728.html 二.VMware Workstation 14 ...

  2. Python3:字符串的大小写和镜像字符串(swapcase()函数,chr(),ord(),translate()函数)

    题目: 请编程实现字符串的转换:1. 将"adsdsfdndsdsdfsfdsdASDSDEDSFE18754"字符串大写变小写,小写变大写:2. 并且将字符串变为镜像字符串,例如 ...

  3. SpringBatch框架简介

    概观 轻量级,全面的批处理框架,旨在开发对企业系统日常运营至关重要的强大批处理应用程序. Spring Batch提供了可重复使用的功能,这些功能对于处理大量记录至关重要,包括记录/跟踪,事务管理,作 ...

  4. Oracle 表操作

    表操作 复制表结构和数据 CREATE TABLE table_name AS SELECT * FROM old_table_name; 复制表结构 CREATE TABLE table_name ...

  5. 关于stm32的数据类型

    常见的uint16_t.uint32_t.u8.u16等 定义在stm32f10x.h文件中,这个文件是定义相关数据类型和结构体的头文件.

  6. Android 控件背景选择图片还是drawable XML资源

    决定一个控件应该是否用Drawable XML渲染,应考虑以下几个因素: * App是否要支持多分辨率: * App是否有瘦身的需要: * 图案是否足够简单: * 图案需要自由缩放: * 设计开发工作 ...

  7. ROS-PCL点云库的安装

    网上各种说安装点云库还慢,中间出现一些没有依赖库的情况,但在我这里都是很顺利,难道是一开始安装了ROS的原因?不是很清楚,暂且将过程写下来. 一,下载PCL $ git clone https://g ...

  8. python学习第25天

    异常处理 什么是异常?什么是错误? 1,程序中难免出现错误. 错误主要分为两种: 1,语法错误 语法错误是根本上的错误,无法通过PYTHON解释器.完全无法执行,是在程序中不应该出现的错误.无法进行异 ...

  9. 【原创】大数据基础之Mesos(1)简介、安装、使用

    Mesos 1.7.1 官方:http://mesos.apache.org/ 一 简介 Program against your datacenter like it’s a single pool ...

  10. 【原创】大数据基础之Mesos+Marathon+Docker部署nginx

    一 安装 安装docker:https://www.cnblogs.com/barneywill/p/10343091.html安装mesos:https://www.cnblogs.com/barn ...