注意力机制

1. 前言

神经网络在进行特征提取的时候,会将所有的输入进行处理,提取得到的特征并没有进行特别的处理。那么,如果神经网络能够像人一样,并不是“观察”到所有的特征,而是只“注意”到那些真正关心的特征呢?

2. Show, Attend and Tell: Neural Image Caption Generation with Visual Attention

虽然注意力机制常常用于语音处理,也就是RNN,但是在图像处理上,也有非常有趣的应用。例如这篇论文,使用神经网络对图片进行描述。这篇论文两年前就读过,但是当时也是瞎学一通,今天,抽出时间再次拜读一下。

论文的主要贡献:

  • 作者介绍了两种注意力,一种是soft,它可以使用BP算法求解,一种是hard
  • 作者介绍了将注意力可视化的方法
  • 作者对结果进行了量化验证

2.1 模型介绍

作者采用了常见的sequence to sequence形式,就是通过一个encoder将图片转换为了一个特征向量,再通过decoder将这个向量转换为一串输出。

Encoder:作者使用了传统的CNN作为encoder,通过CNN对一个图片进行了特征提取。作者将特征称为annotation向量。不同的是,作者没有从最后一层fc层中提出特征,而是从中间的卷积层提取特征,因此得到的特征是一个矩阵,而不是一个向量。如下图 L个向量,向量维度是D

annotation

其中每一个特征向量对应图片的一个部分。

Decoder:作者在decoder的选择上也非常简单,就是LSTM。LSTM就是一个加强版的RNN cell。它通过设计门结构,使得cell拥有长时记忆。如下:

LSTM

公式如下:
LSTM

注意,每个时刻LSTM cell的输入是:上个时刻的状态
h_{t-1}
,上个时刻的输出
y_{t-1}
,上下文向量
z_t
。状态,输出都好理解,那么这个
z_t
是什么呢?作者通过对
z_t
的设计,使得它能够包含图片的信息,我们可以将它理解为cell的输入,但是它是通过图片的特征annotation处理得到的。
根据annotation,对每一个特征向量计算一个值
\alpha_i
,用它表示当前时刻和该部分的相关性。当将
\alpha_i
表示为图片部分
i
是当前时刻关心的部分的概率时,就是hard 注意力,当
\alpha_i
表示图片部分
i
,在当前时刻的相对其他图片部分的重要程度时,就是 soft注意力。
公式如下:
通过注意力模型
f_{att}
计算一个输出,该输出通过softmax得到概率
e_{ti} = f_{att}(\alpha_i, h_{t-1})

\alpha_{ti} = \frac{exp(e_{ti})}{\sum^L_{k=1}exp(e_{tk})}

f_{att}作者选择的是一个多层fc,它的输入是上一时刻的状态,和annotation。

一旦得到了权重\alpha_{ti}就可以通过\phi计算上下文向量\hat{z}_t。这里就会有上面提到的hard, soft的区分。

2.2 Stochatic "hard" Attention

作者使用s_t表示在产生第t个词的时候应该注意的地方,s_{ti}是一个向量,它的第i个值为1,其余为0,表示在t时刻应该注意i位置。
那么,由于\alpha_{ti}表示概率,就有如下公式:

hard attention

也就是说,在
t
时刻,只关注应该关注的地方。
为了进行反向传播,作者定义了损失函数:
L_s = \sum_s p(s|\alpha) log p(y | s, \alpha)
其中
y
是输出的单词。
它的梯度:
梯度

进一步
梯度

我理解就是,由于位置的选择是根据概率来决定的,就像给定
n
个选择的概率,进行抽样一样。这可以看作一个Monte Carlo抽样,只不过是对梯度进行抽样。同时,为了减少抽样的不稳定性,也就是方差,作者加入了baseline
作者提出,这个公式类似于REINFORCE。只不过,action的选择
s
,reward是正比于输出的句子的log likelihood的一个值。

2.3 Deterministic "Soft" Attention

soft情况下,\alpha_{ti}被看作相对重要性。那么上下文向量可以由annotation的加权和得到:

soft

在文章中还有关于 输出单词,注意多个地方等的讨论,具体请参考。

3. Neural Machine Translation by Jointly Learning to Align and Translate

这篇貌似是最早引入注意力机制的文章,它在机器翻译中引入了注意力。同样,作者是使用sequence to sequence框架进行训练。

3.1 模型

Decoder:作者定义新的条件概率:

条件概率

也就是说,当网络预测新的词的时候,是根据上一个预测的词
y_{i-1}
,RNN hidden state
s_{i-1}
和上下文向量context vector
c_i
,来进行的。
很显然,关键就在于如何计算这个上下文向量,以及如何使用它来进行预测。
上下文向量由输入的句子决定,在整个模型中,会有一个encoder来将输入的句子映射成多个向量,作者称为annotations
(h_1, ..., h_{T_x})
。每一个annotation向量
h_i
都包含了
i
之前的所有词的信息。
于是,上下文向量就由它们的加权和得到:
context

它们的权重
\alpha{ij}
怎么计算呢?如下面公式:
weight

其中,
a
就是alignment model,由它来决定在预测第
i
个词时,和前面的
j
个输入的关系。作者将
e
称为energy。它反应了annotation
h_j
在预测
i
的时候的重要性。作者使用了一个神经网络作为aligment model,它可以和其他部分一起训练。如下:
alignment model

Encoder
作者使用了一个双向的RNN作为encoder,双向的RNN类似于普通的RNN,但是它又进一步提取了输入反向输入时的特征,具体可以参考论文。

4. Attention Is All You Need(TODO)

在这篇论文中,作者提出了一种新的网络结构,称之为Transformer,里面仅仅使用了注意力机制,抛弃了之前的RNN,CNN等结构。
作者认为,在传统的RNN结构中,在计算过程中需要cell的hidden state h_t。因此,在每个时刻t,都需要之前的结果,这使得训练无法并行化,因此,在训练长的句子的时候,就无法使用大的batch来训练,因为GPU的显存有限。
在论文中,作者提出了Transformer,避开了RNN,将input和output仅仅通过注意力机制连接起来。并且,Transformer允许更多的并行处理。

4.1 模型结构

如下图:


结构

结构依然采用了encoder-decoder的架构。
** Encoder:整个encoder由6个相同的层堆叠成,每一层有两个子层,第一个子层是multi-head self-attention mechanism,第二个子层是一个简单的position-wise fc层。作者在每个子层间加入了layer normalizationresidual connection。也就是说,每个子层的输出是:LayerNorm(x + Sublayer(x))

** Decoder:decoder同样由6个相同的层堆叠成。除了像encoder中的两个子层,decoder还加入了第三个子层,它对encoder的输出进行multi-head attention**。

4.2 注意力

注意力机制可以描述为将一组query 和 一组输入 映射为一组输出,通常情况下这个输出由输入的加权得到,权重由query 和 输入来决定。

Scale Dot-Product Attention:如下图:

Scale Dot-Product Attention

输入由 queries
d_k
维的keys
d_v
维的values组成。那么Attention可以由下式得到:
Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V

权重由
softmax(\frac{QK^T}{\sqrt{d_k}})
得到,

Multi-Head Attention:作者发现将queries, keys, values映射h次,到一个不同的,学习得到的映射结果d_k, d_k, d_v会更加有利。在这些映射后的结果上,再使用注意力机制,得到d_v维的输出。最后再进行拼接,和一次映射,得到最后的输出结果。简单地说,就是将queries, keys, values通过线性变换到一个新的维度,再进行Scalesd Dot-Product Attention,结果拼接起来作为输出。当然这个结果还有一次映射。

Multi-Head Attention

公式如下:


公式

4.3 如何在模型中应用注意力机制

论文提出的模型中,有三个不同的方式来应用注意力机制。

  • queries来自于前一个decoder层,keys, values来自于encoder的输出。这样的话,允许decoder关注到输入的所有位置(之前的)。
  • 在encoder中,包含一个self-attention层。在这个层中,keys, values, queries都来自于同一个地方,例如:上一个encoder层的输出。这样的话,每一次encoder都可以注意到之前所有encoder的输出。
  • 类似地,可以在decoder中加入一个self-attention层,来观察到之前所有层的输出。但是,我们需要防止前面层的信息淹没了decoder当前的信息,we need to prevent leftward information flow in the decoder to preserver the auto-regressive property,作者通过使用mask,去掉了所有不合理的连接。

4.4 Positional Encoding

为了在输入中保留位置信息,作者加入了位置编码。如下:

positional encoding

其中
pos
是位置,
i
是纬度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容