attention机制说白了就是加权求和。
attention机制之所以看上去繁复冗杂是因为有很多的种类,按照不同的分类标准,可以分为以下几种类型:
1、计算区域
- soft attention:对所有key求权重概率,参考所有key进行加权求和。
- hard attention:精准定位到某个key,此key权重概率为1,其余key为0。
- local attention:上述两者折中。先基于hard定位到某key,然后在key的一个窗口内应用soft。
2、所用信息:假设要对一段原文进行attention处理,可能会用到内部信息和外部信息。
- general attention:用到了外部信息,常见于用来构建两段文本关系的任务。query一般包含了外部信息,根据外部query对原文进行对齐。
l2. ocal attention:只使用内部信息,即query、key、value都只和输入原文有关系,如:self attention。
3、结构层次
- 单层attention:用一个query对一段原文进行一次attention。
- 多层attention:比如把一个文档划分成多个句子。第一层对每个句子使用attention计算一个句向量,第二层对所有句向量执行attention生成文档向量进行后续使用。
- 多头attention:可参考《attention is all you need》中的multihead attention。
4、模型结构
- CNN+attention:可对卷积层输出做attention或者可用attention替换max pooling。
- LSTM+attention:如对所有step的hidden state进行加权,把注意力集中到整段文本中比较重要的hidden state信息。
- 纯attention:最经典的方案,如《attention is all you need》就属于这种。
参考:
https://zhuanlan.zhihu.com/p/124218197
https://zhuanlan.zhihu.com/p/35739040