【参考资料】:
注:本文的内容均来自上面所罗列的参考资料,只是在学习的过程中对所学的内容进行整理,感谢上面的各位大佬,让我这个nlp小白对attention有了一定的了解。
Attention机制的血缘关系:
encoder-decoder:
是一种神经网络的结构,常见的encoder和decoder可以是RNN、LSTM、GRU这些能够处理序列数据的模型。
seq2seq:
任务:输入一个序列,输出一个序列。
主要部分:encoder和decoder,encoder首先处理输入序列中的每一个item(需要做embeeding处理),并且将其转换成一个向量(context向量),然后encoder将context向量传递给decoder,decoder根据context向量一个接一个的生成输出序列中的每个item。
Attention:
从上面的encoder和decoder结构seq2seq模型可以发现,encoder只把最后一个hidden state作为context向量喂给decoder,所以这种结构在处理长句子翻译问题的时候表现并不好。为解决这个问题,Attention应运而生,Attention使得模型能够关注输入序列中与目标相关的部分。
1. 什么要引入Attention机制?
循环神经网络已经的很强的记忆能力,但想要记忆长距离的信息需要更复杂的模型,需要更强大的计算能力,而往往在很多场合计算能力是一个瓶颈,使得不能一味增加模型的复杂度来提高模型效果。
2. Attention机制的理解
引入人脑处理信息过载的方式,只选择一些关键信息进行处理,来提高神经网络的效率。在图像识别中人的面部、文本中的标题以及文章首句等位置就是关键信息。
3. Attention机制有哪些?
按照认知神经学中的注意力,可以分为两类:
- 聚焦式(focus)注意力:自上而下的有意识的注意力,主动注意--------是指有预定目的、依赖任务、主动有意识地聚焦于某一对象的注意力。
- 显著性(saliency-based)注意力:自下而上的有意识的注意力,被动注意—基于显著性的注意力是由外界刺激驱动的注意力,不需要主动干预,也和任务无关;可以将max-pooling和门控(gating)机制来近似地看做是自下而上的基于显著性的注意力机制。
在人工神经网络中,注意力机制一般就特指聚焦式注意力。
4. Attention机制的原理
上面的图是QKV模型,假设输入为 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 q q q,Memory 中以( k k k, v v v)形式存储需要的上下文。感觉在 Q&A 任务中,这种设置比较合理,transformer 是采用的这种建模方式。 k k k 是 question, v v v是 answer, q q q是新来的 question,看看历史 memory 中 k k k 更相似,然后依葫芦画瓢,根据相似 v v v,合成当前问题的答案。
decoder中的信息定义为一个Query,encoder中包含了所有可能出现的词语,我们将其作为一个字典,该字典的key为所有encoder的序列信息。n个单词相当于当前字典中有n条记录,而字典的value通常也是所有encoder的序列信息。
注意力机制可以分为三步:
-
step1-信息输入:
用X = [x1, · · · , xN ]表示N 个输入信息 -
step2-计算注意力分布α:
令Key=Value=X,则可以给出注意力分布
α i = s o f t m a x ( s ( k e y i , q ) ) = s o f t m a x ( s ( X i , q ) ) α_i = softmax(s(key_i,q)) = softmax(s(X_i,q)) αi=softmax(s(keyi,q))=softmax(s(Xi,q))
我们将 α i \alpha_i αi称之为注意力分布(概率分布), s ( X i , q ) s(X_i,q) s(Xi,q)为注意力打分机制,有几种打分机制:
-
step3-根据注意力分布α来计算输入信息的加权平均:
注意力分布 α i \alpha_i αi可以解释为在上下文查询q时,第i个信息受关注的程度,采用一种“软性”的信息选择机制对输入信息X进行编码为:
a t t ( q , X ) = ∑ i = 1 N α i X i att(q,X) =\sum_{i=1}^{N}\alpha_iX_i att(q,X)=i=1∑NαiXi
这种编码方式为软性注意力机制(soft Attention),软性注意力机制有两种:普通模式(Key=Value=X)和键值对模式(Key!= Value )
关于Attention的更多内容可以在开头的参考资料中进行查阅学习。