Attention机制概念整理
深度学习中的注意力机制(Attention Macheanism):
Attention机制较为广泛的应用是为了解决LSTM长输入序列在编码成固定长度向量后,解码受限于该固定长度向量的问题。但是这个概念最初引入是在计算机视觉领域。
Attention的概念来源于人类的视觉注意力机制:人们视觉在感知东西的时候一般不会是一个场景从到头看到尾每次全部都看,而往往是根据需求观察注意特定的一部分。而且当人们发现一个场景经常在某部分出现自己想观察的东西时,人们会进行学习在将来再出现类似场景时把注意力放到该部分上。所以,深度学习中注意力机制的核心目标也是从众多信息中选择出对当前任务目标更关键的信息。
Attention函数本质:
用key-value描述注意力机制上图的另外一个理解方式是软寻址,也就是说每来一个Query,通过和存储器内key的地址进行相似性比较,并可能从每个对应的key中都会取出具有一定重要性的内容value,这个重要性由Query和key的相似性决定,最后对这些从不同的key中取出的value进行加权求和
Encoder-Decoder框架(NLP领域里一种通用框架,例如LSTM):
Encoder顾名思义就是对输入句子Source进行编码,将输入句子通过非线性变换转化为中间语义表示C:
对于解码器Decoder来说,其任务是根据句子Source的中间语义表示C和之前已经生成的历史信息(y1,y2,...,yi-1)来生成i时刻要生成的单词:
对于nlp文本处理领域中不同的任务只需要改变source和target:s(中文句)t(英文句)——>机器翻译;s(文章)t(概述)——>文本摘要;s(问题)t(回答)——>对话机器人
如果不加attention机制,生成目标yi时,source中任意一个单词的影响力都是相同的(没有注意力的焦点)。
如果句子过长,中间语义C不足以包含每个单词本身的信息,会丢失很多细节信息,因此要引入注意力机制,将重点放在对target中的yi生成有用的相应的source词上。
理解Attention模型的关键就是这里,即由固定的中间语义表示C换成了根据当前输出单词来调整成加入注意力模型的变化的Ci
加入了Attention的Encoder-Decoder框架将上图转化成函数表示:(Soft Attention:Attention+Softmax)
其中Aij是一个权值矩阵,aij表示source中的第i个单词对target中第j的单词预测的贡献(可以理解成相似性),hj是source中第j个单词的语义编码(不同框架编码不同)
RNN中的Attention机制i-1时刻的隐层状态Hi-1是已知的,F(hj,Hi-1)函数表示目标单词yi和每个输入单词j对齐的可能性
Attention的物理含义:
一般在自然语言处理应用里会把Attention模型看作是输出Target句子中某个单词和输入Source句子每个单词的对齐模型,这是非常有道理的。例如在传统机器学习方法中相当于短语对齐的过程。
更进一步的抽象,可以将target看成Query,这个Query和source中的每个检索词value都有一个相似性,即权重系数,将这些权重系数相加得到Attention值,转化成公式:
从这个层面上可以看出Attention就是从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,这个“聚焦”就体现在权重系数上
Attention的计算过程:
1. 根据Query和key计算权重系数;
① 根据Query和Key计算相似性:相似度的计算可用点积、cosine相似性、MLP网络等计算
② 对①的原始分值进行归一化处理:如SoftMax
2.根据权重系数对value就行加权求和
整个计算过程可表示成下图:
Self-Attention机制:
未完待续
参考张俊林博士的博客结合个人理解整理了一下 https://blog.csdn.net/malefactor/article/details/78767781