Attention机制解读

本文部分转载自阿里巴巴工程师楠易

前言

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

1. 什么是 Attention

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

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

  • 在memory中找相似 (score function): e_i=a(q,k_i)
  • 归一化 (alignment function): \alpha=softmax(e_i)
  • 读取内容 (context vector function): c=\Sigma_i \alpha_i v_i

2. Self-Attention

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

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

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

下图是完整版本的 multi-head attention 的示例图。这是基于上文中提及了 QKV 的 memory-based 的建模方式。需要说明的几个点:

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

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

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

3. Why Attention Works?

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

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

要回答为什么 attention 这么优秀?是因为它让模型开窍了,懂得了提纲挈领,学会了融会贯通。那又是如何开窍的?是因为它懂得了"context is everything"。

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

发布于 2019-10-02

文章被以下专栏收录