【自然语言处理】Attention 讲解

有任何的书写错误、排版错误、概念错误等,希望大家包含指正。

在阅读本篇之前建议先学习:
【自然语言处理】Seq2Seq 讲解

Attention Mechanism

注意力机制源于对人类视觉的研究,注意力是一种人类不可或缺的复杂认知功能,指人可以在关注一些信息的同时忽略其他信息的选择能力。注意力机制符合人类看图片的逻辑,当我们看一张图片时,往往并没有看清图片的全部内容,而是将注意力集中在图片的某个重要部分。重点关注部分,就是一般所说的注意力集中部分,而后对这一部分投入更多注意力资源,以获取更多所需要关注的目标的细节信息,忽略其他无用信息。这是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段,是人类在长期进化中形成的一种生存机制。人类视觉注意力机制极大地提高了视觉信息处理的效率与准确性。深度学习中也应用了类似注意力机制的机制,从而极大提升了自然语言处理、语音识别、图像处理的效率和性能。

在实践中人们发现,EncoderDecoder(Seq2Seq)模型有一个严重的问题,即编码器部分与解码器部分之间只有一个向量 c c c,无论输入到编码器的语句多长,都只能通过向量 c c c 传递给解码器,这往往会导致信息的丢失。为此,利用注意力机制,为解码器的每个状态生成一个中间语义向量 c t ′ c_{t'} ct,该中间语义向量能够很好地描述输入到编码器的语句中每个单词对解码器的第 t ′ t' t 个状态对的影响。引入注意力机制的 Encoder-Decoder 模型如图 1 1 1 所示。

在这里插入图片描述

图 1    引入注意力机制的 Encoder-Decoder 模型架构

Query、Key 和 Value

有一种解释说,注意力机制中的 Query (Q),Key (K),Value (V) 的概念源于信息检索系统。举个简单的例子,使用搜索引擎查找信息时,输入栏中的输入内容为 Query,搜索引擎对比数据库中全部数据的关键字 Key 与要查询的内容 Query 的匹配程度,选择出最佳匹配对应的 Value 返回。

可见,Query 和 Key 的匹配程度决定了选择哪个 Value。在注意力机制中同理,向量 Query 与每个元素的 Key 计算相似程度作为权重,权重越大表示在 Query 的指引下我们的关注度越高,再将权重与 Value 对应相乘,得到对 Value 中不同元素赋予不同关注度的最终向量。

在不同的任务、不同的具体注意力模型中,选择的 Query、Key 和 Value 有所不同,但大致仅涉及两组选择方式。

本篇博客讨论的是 Query 与输出序列有关,一般为输出序列状态向量的线性变换;Key=Value 与输入序列有关,一般为输入序列状态向量的线性变换。

在自然语言处理应用中会把注意力机制看作输出(Target)句子中某个单词和输入(Source)句子每个单词的相关性。目标句子生成的每个单词对应输入句子单词的概率分布可以理解为输入句子的单词和这个目标生成的单词的对齐概率,这在机器翻译语境下是非常直观的:传统的统计机器翻译过程一般会专门有一个短语对齐的步骤,而注意力模型其实起的是相同的作用。

Source 由一系列的 <Key, Value> 数据对构成,对给定 Target 中的某个元素 Query,通过计算 Query 和各个 Key 的相似性或者相关性,得到每个 Key 对应 Value 的权重系数,然后对 Value 进行加权求和,得到最终的 Attention 数值。所以本质上注意力机制是对 Source 中元素的 Value 值进行加权求和,而 Query 和 Key 是用来计算对应 Value 的权重系数的。可以将其本质思想改写为如下公式:
A t t e n t i o n ( Q u e r y , S o u r c e ) = ∑ i = 1 T S i m i l a r i t y ( Q u e r y , K e y i ) ⋅ V a l u e i {\rm Attention(Query, Source)}=\sum_{i=1}^{T}{\rm Similarity}({\rm Query}, {\rm Key}_i)·{\rm Value}_i Attention(Query,Source)=i=1TSimilarity(Query,Keyi)Valuei
其中, T T T 为 Source 的长度。

注意力(中间语义向量)的计算过程为:根据 Query 和 Key 计算两者的相似性或者相关性,最常见的计算方法包括求两者的向量点积、求两者的向量 Cosine 相似性或者通过再引人额外的神经网络来求,假设求得的相似值为 s i s_i si;对计算出的 T ′ T' T s i s_i si 进行归一化处理,得到权重系数,使用 Softmax 函数计算各个权重的值 a i a_i ai,计算公式为 a i = S o f t m a x ( s i ) = e s i ∑ j = 1 T ′ e s j a_i = {\rm Softmax}(s_i) = \frac{e^{s_i}}{\sum_{j=1}^{T'}e^{s_j}} ai=Softmax(si)=j=1Tesjesi;使用权重系数 a i a_i ai 对 Value 进行加权求和,计算公式为 A t t e n t i o n ( Q u e r y , S o u r c e ) = ∑ i = 1 T a i ⋅ V a l u e i {\rm Attention(Query, Source) }= \sum_{i=1}^{T}{a_i}·{\rm Value}_i Attention(Query,Source)=i=1TaiValuei

其中, A t t e n t i o n \rm Attention Attention 即为中间语义向量。

Bahdanau Attention

Bahdanau Attention 结构如图 2 2 2 所示。其中, α i , j \alpha_{i,j} αi,j 表示输入序列第 j j j 个时刻对输出序列第 i i i 个时刻的贡献权重。

在这里插入图片描述

图 2    Bahdanau Attention 模型

X X X Y Y Y 分别由各自的单词序列构成:
X = ( x 1 , x 2 , … , x T ) Y = ( y 1 , y 2 , … , y T ′ ) X=(x_1,x_2,\dots, x_T) \\ Y = (y_1,y_2,\dots, y_{T'}) X=(x1,x2,,xT)Y=(y1,y2,,yT)

t ′ t' t 时刻注意力(中间语义向量)的计算为,拼接双向模型每个时刻的向量 h t → \mathop{h_t}\limits^{→} ht h t ← \mathop{h_t}\limits^{←} ht 得到 h t h_t ht,计算 s t ′ − 1 s_{t'-1} st1 与每个 h t h_t ht ( t = 1 , 2 , … , T ) (t=1,2,\dots, T) (t=1,2,,T) 之间的相似度,进而通过 Softmax 得到概率分布,亦权重,将权重与 s t ′ − 1 s_{t'-1} st1 按元素相乘得到 t ′ t' t 时刻的注意力。注意, t ′ t' t 时刻的注意力是通过 s t ′ − 1 s_{t'-1} st1 得到的。

在训练时的解码阶段,将每个时刻 t ′ t' t 的中间语义向量 c t ′ c_{t'} ct 与当前时刻的的真实标签 y t ′ y_{t'} yt 拼接作为解码器 t ′ t' t 时刻的输入;在预测时的解码阶段,中间语义向量 c t ′ c_{t'} ct 与预测标签 y ^ t ′ \hat y_{t'} y^t 拼接作为输入。

Luong Attention

论文主要提出了三点:全局注意力、局部注意力和 Input-feeding 方法。

Luong Attention 模型结构也是采用 Encoder-Decoder 框架,只是编码器和解码器采用多层 LSTM,如图 3 3 3 所示。对于全局注意力模型和局部注意力模型,在计算中间语义向量时,均使用编码器和解码器最顶层的 LSTM 的隐藏状态。

在这里插入图片描述

图 3    Luong Attention 模型结构

全局注意力

全局注意力模型与 Bahdanau Attention 相似,在计算注意力时会涉及全部的编码器状态 h t h_t ht ( t = 1 , 2 , … , T ) (t=1,2,\dots, T) (t=1,2,,T)。不同之处在于全局注意力模型不像 Bahdanau Attention 一样计算 s t ′ − 1 s_{t'-1} st1 和每个 h t h_t ht 的相似度,而是计算 s t ′ s_{t'} st h t h_t ht 的相似度;另外,还将 s t ′ s_{t'} st c t ′ c_{t'} ct 拼接经过一层全连接得到 s ~ t ′ \tilde s_{t'} s~t,将 s ~ t ′ \tilde s_{t'} s~t 作为获取概率分布的依据。大致流程如图 4 4 4 所示。

在这里插入图片描述

图 4    全局注意力模型

不妨将权重向量 α i , j \alpha_{i,j} αi,j 重新标记为每个输出时刻关于输入时刻的函数,即 α t ′ ( t ) \alpha_{t'}(t) αt(t)。那么其计算公式为
α t ′ ( t ) = a l i g n ( h t , s t ′ ) = exp ⁡ ( s c o r e ( h t , s t ′ ) ) ∑ i exp ⁡ ( s c o r e ( h t , s i ) ) \begin{align} \alpha_{t'}(t) &= {\rm align}(h_t, s_{t'})\notag \\ &= \frac{\exp \left({\rm score}(h_t, s_{t'})\right)}{\sum_{i}\exp \left({\rm score}(h_t, s_{i})\right)} \notag\\ \end{align} αt(t)=align(ht,st)=iexp(score(ht,si))exp(score(ht,st))
其中, s c o r e \rm score score 有三种计算方式:
s c o r e ( h t , s t ′ ) = { s t ′ T h t d o t s t ′ T W a h t g e n e r a l v a T tanh ⁡ ( W a [ s t ′ ; h t ] ) c o n c a t {\rm score}(h_t, s_{t'}) = \left\{\begin{array}{ll} s_{t'}^Th_t & {\rm dot} \\ s_{t'}^TW_a h_t & {\rm general} \\ v_a^T \tanh (W_a[s_{t'};h_t]) & {\rm concat} \end{array}\right. score(ht,st)= stThtstTWahtvaTtanh(Wa[st;ht])dotgeneralconcat
其中, v a v_a va W a W_a Wa 为权重矩阵。

得到权重向量 α \alpha α 后确定中间语义向量 c t ′ c_{t'} ct,将中间语义表示与 s t ′ s_{t'} st 拼接输入到一个新的全连接层,输出 s ~ t ′ \tilde s_{t'} s~t,公式为
s ~ t ′ = tanh ⁡ ( W c [ c t ; s t ′ ] ) \tilde s_{t'} = \tanh (W_c [c_t;s_{t'}]) s~t=tanh(Wc[ct;st])
最后,通过 s ~ t ′ \tilde s_{t'} s~t 以及其它变量确定条件概率或条件分布。具体地,我们可以认为条件分布由 s ~ t ′ \tilde s_{t'} s~t 经过 Softmax 得到,即
P ( y t ′ ∣ y 1 , … , y t ′ − 1 , x 1 , … , x T ) = s o f t m a x ( W s s ~ t ′ ) P(y_{t'}\mid y_1,\dots, y_{t'-1}, x_1,\dots, x_T) = {\rm softmax}(W_s \tilde s_{t'}) P(yty1,,yt1,x1,,xT)=softmax(Wss~t)
其中, W s W_s Ws 为权重矩阵。

局部注意力

全局注意力模型保证全部输入单词都被给予一定的关注,但是带来了比较大的开销。局部注意力模型可以视为软注意力模型和硬注意力模型的一种折中,它比全局模型或软注意力的计算成本更低。同时,与硬注意力不同的是,局部注意力模型是可微分的,这使得它更容易实现和训练。

全局注意力模型由于在解码器的每个时刻都需要考虑编码器所有的隐藏状态,因此,其计算成本是非常昂贵的,特别是对于一些长句子或长篇文档,其计算就变得不切实际,故论文作者提出了局部注意力模型,即每次解码时不再考虑编码器的全部隐藏状态了,只考虑局部的隐藏状态。

在局部注意力模型中,解码器的每个时刻 t ′ t' t,需要先确定输入序列中与该时刻对齐的一个位置 p t ′ p_{t'} pt,然后以该位置为中心,设定一个窗口大小 D D D,对应的窗口为 [ p t ′ − D , p t ′ + D ] [p_{t'}-D, p_{t'}+D] [ptD,pt+D] D D D​ 具体的取值需要凭经验设定。在计算权重向量时,只考虑编码器中在该窗口内的隐藏状态,当窗口的范围超过输入序列的范围时,则对超出的部分直接舍弃。大致流程如图 5 5 5 所示。

在这里插入图片描述

图 5    局部注意力模型

确定 p t ′ p_{t'} pt 的方式有两种:单调对齐(Monotonic alignment,local-m)和预测对齐(Predictive alignment,local-p)。单调对齐直接规定 p t ′ = t ′ p_{t'} = t' pt=t,即假设输入序列与输出序列是按时间顺序对齐的;预测对齐,引入下面公式计算每个时刻 t ′ t' t 对应的位置 p t ′ p_{t'} pt
p t ′ = S ⋅ s i g m o i d ( v p T tanh ⁡ ( W p s t ′ ) ) p_{t'} = S· {\rm sigmoid}\left(v^T_p \tanh(W_ps_{t'})\right) pt=Ssigmoid(vpTtanh(Wpst))
其中, S S S 为输入序列长度, v p v_p vp W p W_p Wp 为权重矩阵。可见, p t ′ ∈ [ 0 , S ] p_{t'}\in [0, S] pt[0,S]。另外,论文作者还对 α \alpha α 进行了高斯修正,即
α t ′ ( t ) = a l i g n ( h t , s t ′ ) exp ⁡ ( − ( t − p t ′ ) 2 2 σ 2 ) \alpha_{t'}(t) = {\rm align}(h_t, s_{t'})\exp\left(-\frac{(t - p_{t'})^2}{2\sigma^2}\right) αt(t)=align(ht,st)exp(2σ2(tpt)2)
其中, σ = D / 2 \sigma = D/2 σ=D/2

Input-feeding方法

论文作者认为在解码阶段前面词汇的对齐信息对后续单词的对齐和预测是有帮助的。论文作者采用将上一个时刻的 h ~ t ′ − 1 \tilde h_{t'-1} h~t1 与当前时刻 t ′ t' t 的输入拼接作为完整输入,以此实现对齐信息的向后传递。大致流程如图 6 6 6 所示。

在这里插入图片描述

图 6    Input-feeding 方法示意图

REF

[1]《深入浅出 Embedding》吴茂贵、王红星著

[2]《动手学深度学习》阿斯顿·张、李沐等著

[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] Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv:1409.0473, 2014.

[5] Transformer 1. Attention中的Q,K,V是什么 - 知乎

[6] 常见注意力机制原理介绍与对比 - CSDN

[7]【机器学习】GRU 讲解 - CSDN

猜你喜欢

转载自blog.csdn.net/weixin_46221946/article/details/128921926
今日推荐