遍地开花的 Attention ,你真的懂吗?

作者 : 开心源码 本文共10227个字,预计阅读时间需要26分钟 发布时间: 2022-05-13 共164人阅读

阿里妹导读:曾被 paper 中各种各样的 Attentioin 搞得晕晕乎乎,虽然零零散散地整理过少量关于Attention 的笔记,重点和线索仍然比较凌乱。今天,阿里巴巴工程师楠易,将 Attentioin 的知识系统性地梳理、回顾、总结,不求深刻,但求通俗,希望能帮助对 Attention 有疑惑的同学。

前言

Attention 自2015年被提出后,在 NLP 领域,图像领域遍地开花。Attention 赋予模型区分辨别能力,从纷繁的信息中找到应当 focus 的重点。2017年 self attention 的出现,使得 NLP 领域对词句 representation 能力有了很大的提升,整个 NLP 领域开启了全面拥抱 transformer 的年代。

本文会主要从2个方面来详情 Attention。

初识 Attention,主要扒一扒 Attention 的历史,而后给出一个通用的框架来答复一个终极问题:what is Attention?

细数 Attention,以上文给出的通用框架视角来审视所有的 Attention,在这个章节,你会和各种各样的 Attention 相遇、相识、相恋(global/local、soft/hard、Bagdanau attention、 Luong attention、 self-attention、 multi-head attention , 以及它们的别名),理解它们之间的联络与差异。

初识Attention

History

Attention 的发展可以粗暴地分为两个阶段。

2015-2017年,自从 attention 提出后,基本就成为 NLP 模型的标配,各种各样的花式 attention 铺天盖地。不仅在 Machine Translation,在 Text summarization,Text Comprehend(Q&A), Text Classification 也广泛应用。奠定基础的几篇文章如下:

2015年 ICLR 《Neural machine translation by jointly learning to align and translate》初次提出 attention(基本上算是公认的初次提出),文章提出了最经典的 Attention 结构(additive attention 或者者 又叫 bahdanau attention)用于机器翻译,并形象直观地展现了 attention 带来源语目标语的对齐效果,解释深度模型究竟学到了什么,人类表示服气。

2015年 EMNLP 《Effective Approaches to Attention-based Neural Machine Translation》在基础 attention 上开始研究少量变化操作,尝试不同的 score-function,不同的 alignment-function。文章中使用的 Attention(multiplicative attention 或者者 又叫 Luong attention)结构也被广泛应用。

2015年 ICML 《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》是 attention(提出hard/soft attention的概念)在 image caption 上的应用,故事圆满,符合直觉,人类再次表示很服气。

在上面几篇奠基之作之上,2016和2017年 attention 开枝散叶,无往不利。Hiearchical Attention,Attention over Attention,multi-step Attention……这些或者叫得上名的或者叫不上名。

2017年-至今是属于 transformer 的时代。基于 transformer 强大的表示学习能力,NLP 领域爆发了新一轮的活力,BERT、GPT 领跑各项 NLP 任务效果。奠基之作无疑是:

2017年 NIPS《Attention is all you need》提出 transformer 的结构(涉及 self-attention,multi-head attention)。基于 transformer 的网络可一律替代sequence-aligned 的循环网络,实现 RNN 不能实现的并行化,并且使得长距离的语义依赖与表达更加精确(据说2019年的 transformer-xl《Transformer-XL:Attentive Lanuage Models Beyond a fixed-length context》通过片段级循环机制结合相对位置编码策略可以捕获更长的依赖关系)。

what is Attention ?

直奔主题,终极叩问 “what is attention?” 。这个章节,尝试以统一的笼统框架来定义 attention。好像先编写一个笼统类,后续章节涉及所有的 attention 都继承于这个笼统类。这里我写了两个笼统类,一个叫 alignment-based,一个叫 memroy-based。(两名字我给起的,保留最终解释权)。

alignment-based

如下图所示的 model setting,输入 c(context,有的论文写s),y(input,有的地方也写作 h),输出 z。图中,英文表达原汁原味,细品一下。

图片来源:https://towardsdatascience.com/memory-attention-sequences-37456d271992

我们细拆 Attention Model,以经典的 Bahdanau attention 为例,看看笼统出来的三部曲:

  • score function :度量环境向量与当前输入向量的类似性;找到当前环境下,应该 focus 哪些输入信息;

  • alignment function :计算 attention weight,通常都使用 softmax 进行归一化;

  • generate context vector function :根据 attention weight,得到输出向量;

下图,更加直观地展现这三个接口的位置:

自此之后,要认清一个 attention 的介绍,只要要搞清楚这三个部分,所有的变换都是在3个位置进行调整,当然变化最丰富的是 score function。在后一个章节会详细比照不同种类的 attention 在这三个维度上的变换。

memory-based

另一种视角是 QKV 模型,假设输入为 q,Memory 中以(k,v)形式存储需要的上下文。感觉在 Q&A 任务中,这种设置比较正当,transformer 是采用的这种建模方式。k 是 question,v 是 answer,q 是新来的 question,看看历史 memory 中 q 和哪个 k 更类似,而后依葫芦画瓢,根据类似 k 对应的 v,合成当前 question 的 answer。

图片来源:https://zhuanlan.zhihu.com/p/35571412

在这种建模方式下,也分为三步:

其实还是没有逃出上文三部曲的框架。只是将 input 分裂成了 kvpair。

后文都会以统一的三部曲建模方式(score function,alignment function,generate context vector function)来分析所有 attention。

Attention in Detail

在上文,我们 high-level 地理解了 attention 三部曲的建模方式,接下来要把所有Attention 拉出来排排坐。

Framework

如下图,通常听到的少量 attention,他们的差异其实主要表现在 score-function 层面,其次是表现在 generate context vector function 的层面。我们分别来看看,这些 attention 之间的差异与联络。

generate context vector function

hard / soft attention 是在文章《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》提出的概念,最直观的一种了解是,hard attention 是一个随机采样,采样集合是输入向量的集合,采样的概率分布是alignment function 产出的 attention weight。因而,hard attention 的输出是某一个特定的输入向量。soft attention 是一个带权求和的过程,求和集合是输入向量的集合,对应权重是 alignment function 产出的 attention weight。hard / soft attention 中,soft attention 是更常用的(后文提及的所有 attention 都在这个范畴),由于它可导,可直接嵌入到模型中进行训练,hard attention 文中 suggests a Monte Carlo based sampling approximation of gradient。

alignment function

在 soft attention 中,又划分了 global/local attention(In this paper :《Effective Approaches to Attention-based Neural Machine Translation》)。

直观了解就是带权求和的集合不一样,global attention 是所有输入向量作为加权集合,使用 softmax 作为 alignment function,local 是部分输入向量才能进入这个池子。为什么用 local,背后逻辑是要减小噪音,进一步缩小重点关注区域。接下来的问题就是,怎样确定这个 local 范围?文中提了两个方案 local-m 和 local-p。local-m 基于的假设生硬简单,就直接 pass了。local-p 有一个预估操作,估计当前时刻应该关注输入序列(总长度为S)的什么位置 pt(引入了两个参数向量,vp,wp),而后在 alignment function 中做了一点儿调整,在 softmax 算出来的attention wieght 的基础上,加了一个以 pt 为中心的高斯分布来调整 alignment 的结果。

作者最后阐述 local-p + general(score-function 参考上图中multiplicative attention 中的 general 版本)的方式效果是最好的。但从global/local 视角的分类来看,更常用的仍然还是 global attention,由于复杂化的local attention 带来的效果增益感觉并不大。

score-function

如何生成输出向量,有上面提及的那些变换。接下来是变化更加丰富的 score function。最为常用的 score function 有上文图中的那几种(基本全乎了吧)。其实本质就是度量两个向量的类似度。假如两个向量在同一个空间,那么可以使用 dot 点乘方式(或者者 scaled dot product,scaled 背后的起因是为了减小数值,softmax 的梯度大少量,学得更快少量),简单好使。假如不在同一个空间,需要少量变换(在一个空间也可以变换),additive 对输入分别进行线性变换后而后相加,multiplicative 是直接通过矩阵乘法来变换(你是不是也曾迷惑过为什么attention 要叫做 additive 和 multiplicative attention?)。

后文我们将详情几个具备代表性的 attention,通过具体的 attention example 来进一步了解。以及少量花样 attention,看大家都怎么变着法儿用 attention。

Bahdanau Attention & Luong Attention

在比照之中,认知更清晰,一图表达所有。这两个 Attention 就是整个 Attention 的奠基之作。Tensorflow 中实现了这两种 Attention 的 API。

Self Attention & Multi-head Attention

why self attention ?

有很多文章写 self-attention,但是写 why self-attention 的并不多。所以打算多花点笔墨来写 why。

RNN 的长距离依赖比较 tricky:RNN 很强大(可以作为 encoder 对长度任意的序列进行特征抽取,基于特征抽取的能力可以胜任分类任务,另一方面可以作为Generators 学习 Language Model),其实核心就是长距离依赖(gate architectures – 线性操作让信息可以保持并流动,并选择性地让信息通过),可以对长度任意的序列进行表达,但是这种方式还是比较 tricky。并且这种序列建模方式,无法对具备层次结构的信息进行很好的表达。
RNN 因为递归的本质,导致无法并行。

CNN 在 NLP 中扮演了 n-gram 的 detector 角色,在层内可以并行。CNN works well,基于的假设是局部信息相互依赖。CNN 具备 Hierarchical Receptive Field,使得任意任意两个位置之间的长度距离是对数级别的。

所以有没有一种方法,能够做到既能又能还能?

相对于 CNN,要 constant path length 不要 logarithmic path length , 要 variable-sized perceptive field,不要固定 size 的 perceptive field;
相对于 RNN,考虑长距离依赖,还要可以并行!

这就是 self attention。下图可以看到 self-attention 和 convolution 有点儿神似,它摒弃了 CNN 的局部假设,想要寻觅长距离的关联依赖。看下图即可以了解 self-attention 的这几个特点:

  • constant path length & variable-sized perceptive field :任意两个位置(特指远距离)的关联不再需要通过 Hierarchical perceptive field 的方式,它的 perceptive field 是整个句子,所以任意两个位置建立关联是常数时间内的。
  • parallelize : 没有了递归的限制,就像 CNN 一样可以在每一层内实现并行。

图片来源:https://nlp.stanford.edu/seminar/details/lkaiser.pdf

self-attention 借鉴 CNN中 multi-kernel 的思想,进一步进化成为 Multi-Head attention。每一个不同的 head 使用不同的线性变换,学习不同的 relationship。

what is self-attention?

已经有很多很好的文章详情 transformer 和 self-attention,以及内部细节。有兴趣的同学可以看下参考资料【11】,详情得比较详细,下图是完整版本的 multi-head attention 的示例图(引用自上述链接中)。这是基于上文中提及了 QKV 的 memory-based 的建模方式。需要说明的几个点:

  1. QKV 都是对输入 x 的线性映射。
  2. score-function 使用 scaled-dot product。
  3. multihead 的方式将多个 head 的输出 z,进行 concat 后,通过线性变换得到最后的输出 z。

transformer 框架中 self-attention 本身是一个很大的创新,另一个有意思的是 three ways of attention 的设计。attention weight 一列以英译中,encoder 输入machine learning,decoder 输入机器学习。

  1. Encoder self-attention:Encoder 阶段捕获当前 word 和其余输入词的关联;
  2. MaskedDecoder self-attention :Decoder 阶段捕获当前 word 与已经看到的解码词之间的关联,从矩阵上直观来看就是一个带有 mask 的三角矩阵;
  3. Encoder-Decoder Attention:就是将 Decoder 和 Encoder 输入建立联络,和之前那些普通 Attention 一样;

在 transformer 中除了上诉提及的东西,还有 positional encoding,residuals 这些小而美的东西。在复杂度方面在原文中也与 RNN-CNN 进行了比照。

花样 Attention

下面简要详情几种花样的 attention:

RNN 对序列建模,但是缺乏层次信息。而语言本身是具备层次结构,短语组成句子,句子组成篇章。因而研究者十分希望把语言中的这些层次结构在模型中得以表现,Hierarchical 的方式就出现了。《Hierarchical Attention Networks for Document Classification》,从 word attention 到 sentence attention,如下图一。

在匹配或者者检索任务中(如Q&A,IR),要衡量 query,doc 类似度,这时候attention 的方法中,query 和 doc 就互为对方的 cotext,query 对 doc 算一次attention,doc对query 算一次 attention,《Attention-over-Attention Neural Networks for Reading Comprehension 》,如下图二。

上文详情 why self-attention 时已经提及了 RNN 和 CNN 的少量优点和问题,几乎和 transformer 同时,facebook 发表了《Convolutional Sequence to Sequence Learning》,同样地想借用 CNN 的优点来补足 RNN 不能并行的弱点,用 CNN 结合 attention 来对序列进行建模,如下图三。

随着 transformer 的爆红,围绕 transformer 的花边,出现了 weighted-transformer 《Weighted Transformer Network For Machine Translation》。今年出现了 transformer-xl 《Transformer-xl :attentive language models beyond a fixed-length context》,如下图四, 想达到对任意长度的输入进行特征抽取,而不是 transformer 切成 segment 的定长输入。

总结

Why Attention Works?

从上面的建模,我们可以大致感受到 Attention 的思路简单,四个字“带权求和”即可以高度概括,大道至简。做个不太恰当的类比,人类学习一门新语言基本经历四个阶段:死记硬背(通过阅读背诵学习语法练习语感)->提纲挈领(简单对话靠听懂句子中的关键词汇精确了解核心意思)->融会贯通(复杂对话懂得上下文指代、语言背后的联络,具有了举一反三的学习能力)->登峰造极(沉迷地大量练习)。

这也好像attention的发展脉络,RNN 时代是死记硬背的时期,attention 的模型学会了提纲挈领,进化到 transformer,融汇贯通,具有优秀的表达学习能力,再到 GPT、BERT,通过多任务大规模学习积累实战经验,战斗力爆棚。

要答复为什么 attention 这么优秀?是由于它让模型开窍了,懂得了提纲挈领,学会了融会贯通。

那又是如何开窍的?是由于它懂得了”context is everything”。

1.在语言模型中:语言模型(language model)是整个 NLP 领域的基础,语言模型的精准程度基本上直接掌握所有 NLP 任务效果的命脉。而 context 又掌握着语言模型的命脉,语义不孤立,在特定 context 下展现特定的一面,模型假如可以学习到这些知识,即可以达到见人说人话,见鬼说鬼话的理想状态。

在语义表达上能把 context 用好的都是成功的典范(参考:word2vec 靠学习 word 及其 context 发家,ELMo-deep contextualized word representations, BERT 从句子中抠掉一个词用上下文去预测这个词,transformer-xl 较 transformer 使用更全面的 context 信息,XLNet 一大重要贡献也是研究如何使用上下文信息来训练语言模型)。

2.在其余领域中:Attention 是把 context 用好的典范之一。Attention 背后本质的思想就是:在不同的 context 下,focusing 不同的信息。这原本就是一个普适的原则。所以 Attention 可以用到所有相似需求的地方,不仅仅是 NLP,图像,就看你对 context 如何定义。

在很多的应用场景,attention-layer 肩负起了部分 feature-selection,featue-representation 的责任。举个例子,transfer learning with Domain-aware attention network for item recommemdation in e-commerce 中提及:不同场景的客户的行为有不同的偏好(场景是 context,价格,品牌是不同的信息),天猫客户对品牌看重,亲淘客户 focus 价格,可以通过 attention-layer 学习到不同 context 下,客户的 Attention 在哪里。在 ctr 预估中,Deep Interest Network for Click-Through Rate Prediction 出发点相似。在推荐场景中,文章 Feature Aware Multi-Head Attention 在手淘猜你喜欢排序模型中的应用 。这些都是attention 在业务场景落地的参考。

最后,国际搜索和推荐算法部招贤纳士啦!假如对信息检索、NLP、图像解决、机器学习方向有兴趣,想要加入我们,简历申请地址:carrie.ywj@alibaba-inc.com

Reference

1.Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv:1409.0473, 2014.
2.Xu K, Ba J, Kiros R, et al. Show, attend and tell: Neural image caption generation with visual attention[J]. arXiv preprint arXiv:1502.03044, 2015.
3.Luong M T, Pham H, Manning C D. Effective approaches to attention-based neural machine translation[J]. arXiv preprint arXiv:1508.04025, 2015.
4.Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[C]//Advances in neural information processing systems. 2017: 5998-6008.
5.Dai Z, Yang Z, Yang Y, et al. Transformer-xl: Attentive language models beyond a fixed-length context[J]. arXiv preprint arXiv:1901.02860, 2019.
6.Yang Z, Yang D, Dyer C, et al. Hierarchical attention networks for document classification[C]//Proceedings of the 2016 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies. 2016: 1480-1489.
7.Cui Y, Chen Z, Wei S, et al. Attention-over-attention neural networks for reading comprehension[J]. arXiv preprint arXiv:1607.04423, 2016.
8.Gehring J, Auli M, Grangier D, et al. Convolutional sequence to sequence learning[C]//Proceedings of the 34th International Conference on Machine Learning-Volume 70. JMLR. org, 2017: 1243-1252.
9. kimiyoung/transformer-xl
10.https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html
11.https://jalammar.github.io/illustrated-transformer/
12.https://www.songma.com/p/b1030350aadb
13.https://arxiv.org/abs/1706.06978


本文作者:楠易

阅读原文

本文来自云栖社区合作伙伴“阿里技术”,如需转载请联络原作者。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 遍地开花的 Attention ,你真的懂吗?

发表回复