阿里妹导读:曾被 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
如下图所示的 m