attention 机制
motivation
attention 机制最早是在图像领域提出来的,它受人类在观察事物时会重点关注某一部分而不是全部的启发。attention 机制最早应用在nlp领域中是在机器翻译任务上。机器翻译任务是一个经典的序列到序列的任务,在机器翻译中seq2seq是一个非常热门的模型,主要包括encoder和decoder 两个部分:encoder将输入表示成一个固定长度的向量,解码器根据encoder的输出向量解码出序列。这里存在一个问题:无论输入序列的长度为多长,都输出一个固定长度的向量,解码器受限于这个固定长度的向量,尤其是当序列长度较长时,并不能得到一个很好的向量表示,因此提出了atttention机制
attention机制的形式
attention 形式上包括两部分:查询(query)和一组键值对(key-value)
attention 的计算过程:
- 计算查询query与键key的相似度,计算相似度的方法包括点积、拼接以及使用感知机
- 使用softmax函数进行归一化,计算得到权重
- 对value值使用步骤2中计算得到的权重进行加权求和
注:在nlp领域很多时候key和value 是一样的
attention的种类
计算查询query与键key的相似度可以有不同的方式:点积形式、一般形式、连接形式、感知机形式
soft-attention 与 hard-attention
soft-attention 是给每个单词与当前词match赋予一个概率或者说权重,而hard-attention是在序列中找到一个特定单词与当前词进行对齐,而其他的单词与当前词对齐的概率为0
global-attention 与 local-attention
Soft attention 每次对齐的时候都要考虑前面的encoder的所有 h i h_i h