一、Attention机制
attention概括下就是:对全部依赖对象根据重要程度进行区别对待,或叫加权求和。可借下图进行说明:
参见上图,以常见的机器翻译任务来说,Query代表上一时刻的输出信息,而Key和Value一般是相同的,如代表隐藏层的输出。attention的计算过程分为如下三步:
1)根据Query和
计算两者之间的相关性,即
。
2)用softmax对
进行归一化处理计算注意力权重值
。
3)通过注意力权重
对value进行加权求和,得到当前数学表达
。
1.1 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对原文进行对齐。
- local 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》就属于这种。
二、Transformer算法
【参考资料】
1、Attention用于NLP的一些小结:https://zhuanlan.zhihu.com/p/35739040。
2、Mechanics of Seq2seq Models With Attention:https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/。
3、The Illustrated Transformer:http://jalammar.github.io/illustrated-transformer/。