Bengxy

如何理解Attention?

字数统计: 1.5k阅读时长: 5 min
2016/05/13 Share

如何理解Attention?

Attention(注意力模型)因为其效果出众,被用于机器翻译、问答系统、图片目标检测等领域。今天来聊一聊Attetion机制。

这篇博客是我很早以前在实验室的一次分享,偏科普。

引言

人的注意力

下面给一个例子体会一下人脑的注意力,例如:

第一个例子 Image QA(图片问答)

[2016 Paper] Progressive attention networks for visual attribute prediction [Adobe]

问一个问题: 看运动员的鞋子,是什么样的?

然后,给你一张图片

origin

通常,人的视觉会集中在鞋子的部位,如果用热度图表示人的注意力,人脑的attention可以表现为:

visual attention

人会首先定位到鞋子,然后给出回答,

假如再问,运动员衣服号码? 很多人可能没有注意到

第二个例子 阅读理解

[2015 Paper] Teaching Machines to Read and Comprehend [Google]

我们在做阅读理解的时候,通常会带着问题去找答案,对一篇文章思考的侧重点也不一样

text attetino

Attention本质

我们关注的焦点通常会集中在目标的特定部分的。其他部分,我们选择视而不见,这样的机制让我们可以从问题出发精准定位到目标

  • 对于一个序列,我们着重考虑某个特定片段
  • 对于一副图片,我们思考的是某个局部

用数学的原理解释,我们的对答案材料的注意力,是一个根据问题q变化的分布

而在传统模型中,我们通常是一视同仁的做判别。

传统模型(翻译模型为例)

Encoder-Decoder翻译模型

而对于当前的翻译模型,普遍由Encoder和Decoder构成。

  • Encoder可以看做feature embedding模型,主要是生成原始数据的表征
  • Decoder则是由特征编码,生成现实空间的结果

翻译模型最常用的抽象表示如下:

translate

可以这么直观的去理解:

假设我们有两个的序列 (X,Y),比如法语和英语句子:

我们的目标是学习这两者之间的关联,达到翻译的目的。

对于中间层语义编码C,可以看做有前面的序列X生成

接下来,依次由语义编码C生成序列Y的第i个对象

Encoder-Decoder是通用的模型框架,
以文本为例,最常用的是RNN / GRU / LSTM 等

1
2
3
4
5
6
对于Encoder-Decoder模型,应用很广
对于机器翻译来说,(X,Y)就是对应不同语言的句子
对于文本摘要来说,X就是一篇文章,Y就是对应的摘要
对于对话机器人来说,X就是某人的一句话,Y就是对话机器人的应答
对于图片描述,X是一张图片,Y是一句话
...

局限

我们生成Y的过程可以这样写:

尽管Decoder模型我们有不同的hidden layer传递,我们考虑了$y_{i-1}$造成的变化,但语义编码C其实不变

这里需要强调一下,虽然RNN的隐含层一直在变,但是原始输入C时固定的,所有的修改都是 $y_{i-1}在C的基础上的改动

也就是在判别过程中,模型对X序列的理解是固定不变的

这也是为什么之前Google在Sequence to Sequence模型发现,句子逆序和顺序结果不同,结合起来会更好的原因。

这样的情景,在处理短文本影响并不大,但处理长文本时,如果我们把句子的所有内容都压缩到一个固定(如128维)的特征向量C中,那长句子很显然有很多信息会丢失

用通俗点话讲就是,句子太长,记不住了

引入注意力Attetion思想

我们人在做翻译的时候,有这样一个分布,如在翻译

"I have an apple"

时,对于这4个word,翻译第一汉字,英文的第一个单词I可能有更高的注意力,如:

(I, 0.7) (have, 0.1) (an, 0.1) (apple, 0.1)

而翻译第二个单词的时候,又有不同的分布

即:

attetiondiff

这样,上述从推导公式变为:

其中,$C_i$ 是对序列X赋予不同权重的语义编码

NLP应用

回到原先的模型,假设我们用的RNN,去翻译“I have an Apple”

RNN

现在的问题在于,如何让我们的翻译机学习到不同单词之间对应的分布

(I, 0.7) (have, 0.1) (an, 0.1) (apple, 0.1)

比较常见的方法是用$Yi$当前的隐含层$H{i-1}$去和输入序列的每个$h_j$ (输入序列X的hidden layer)对比。

具体如何计算呢?
比如可以用$H_{i-1}$和每个Encoder后的单词做点乘,然后softmax,作为权重。

[2015 Paper] Reasoning about Entailment with Neural Attention [斯坦福]

word_by_attention

2015年,一篇做文本摘要的论文表明,attetion机制,其实是隐式的学习并使用了一个影响关系矩阵,每个cell是 $word_j * H_i$

[2015 Paper] A Neural Attention Model for Abstractive Sentence Summarization

wordmap

图片推理

假设现在有Question:第一行图片中数字的颜色是什么? 运动员的鞋子是什么样子的?

利用Attetion,可以框出图片的中的数字

color_attetion

框出鞋子的部位

color_shoe

此外,Image Attention还有很多应用

  • 定位
  • 图片描述

填空式问答(本质是一个定位+多分类)

目标是框出图片中的焦点部分,做分类

cnn_attention

图片描述

目标是生成句子

CNN当做Encoder,用来提取各个level的特征,灰色片部分表示用来计算attention的输出

image_caption

CATALOG
  1. 1. 如何理解Attention?
    1. 1.1. 引言
      1. 1.1.1. 人的注意力
        1. 1.1.1.1. 第一个例子 Image QA(图片问答)
        2. 1.1.1.2. 第二个例子 阅读理解
    2. 1.2. Attention本质
    3. 1.3. 传统模型(翻译模型为例)
      1. 1.3.1. Encoder-Decoder翻译模型
      2. 1.3.2. 局限
      3. 1.3.3. 引入注意力Attetion思想
    4. 1.4. NLP应用
    5. 1.5. 图片推理
      1. 1.5.0.1. 填空式问答(本质是一个定位+多分类)
      2. 1.5.0.2. 图片描述