学习目标
1 注意力机制原理
1.1 注意力机制示意图
Attention机制的工作原理并不复杂,我们可以用下面这张图做一个总结

1.2 Attention计算过程¶
- 阶段一: query 和 key 进行相似度计算,得到一个query 和 key 相关性的分值
- 阶段二: 将这个分值进行归一化(softmax),得到一个注意力的分布
- 阶段三: 使用注意力分布和 value 进行计算,得到一个融合注意力的更好的 value 值
为了更好的说明上面的情况, 我们通过注意力来做一个机器翻译(NMT) 的任务,机器翻译中,我们会使用 seq2seq 的架构,每个时间步从词典里生成一个翻译的结果。就像下面这张图一样.

在没有注意力之前,我们每次都是根据 Encoder 部分的输出结果来进行生成,提出注意力后,就是想在生成翻译结果时并不是看 Encoder 中所有的输出结果,而是先来看看想生成的这部分和哪些单词可能关系会比较大,关系大的我多借鉴些;关系小的,少借鉴些。就是这样一个想法,我们看看该如何操作。
- 这里为了生成单词,我们把 Decoder 部分输入后得到的向量作为 query;把 Encoder 部分每个单词的向量作为 key。首先我们先把 query 和 每一个单词进行点乘score=query\cdot keyscore = query ⋅ key,得到相关性的分值;
- 有了这些分值后,我们对这些分值做一个softmaxsoftmax ,得到一个注意力的分布
- 有了这个注意力,我们就可以用它和 Encoder 的输出值 (value) 进行相乘,得到一个加权求和后的值,这个值就包含注意力的表示,我们用它来预测要生成的词。
这个过程我们可以看看一个动图的事例理解一下:
1.3 Attention计算逻辑
当然,Attention 并不是只有这一种计算方式,后来还有很多人找到了各种各样的计算注意力的方法, 比如我们上面介绍的三种计算规则, 但是从本质上,它们都遵循着这个三步走的逻辑: