1、引入
英语长句子优先找出主谓宾,人像油画会先看眼睛,...。人在观察事物的时候会抓住重点,所以想让机器也具备这种“抓住重点”的能力。
最早用于机器翻译场景。使用固定大小(fixed-size)的representation去概括非常长的句子的所有语言义细节是非常困难的。
对于一个(RNN\LSTM...)深层网络模型,如何让它知道什么是重点?什么没那么重要?抓住重点可以降低困难。
那么如何实现“抓住重点”的目的呢?
2、什么是Attention?
Transformer中关于Attention的解释,写成公式大概是:
其中为Attention weight。
原文: An Attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight assigned to each value is computed by a compatibility function of the query with the corresponding key.
翻译: Attention可以描述为将query和一组key-vlaue映射成一个output,其中query,key,value和output都是向量。output的计算为values的加权总和,其中分配给每个value的权重通过query与相应key的兼容函数计算。
补充
输入:K,Q,V
涉及函数: compatibility function ,softmax()
计算步骤:
【步骤一】基于KQ计算两个向量相似程度;
【步骤二】softmax函数可以将各种输入值压缩到0-1的范围上,这样就可以得到对Values关注应该分布的注意力强弱了。
【步骤三】乘上values得到具有关注信息的新的向量output。
Attention本身概念并不复杂,就是基于query和key计算一个权重,然后对value重新赋值。
2.1、f是怎么?
函数旨在获得query和key的相似程度,有很多的计算方法
。
不过最出名的是Scaled Dot-Product方法,对QK做内积计算,然后乘上缩放因子,其中是query和key的维度。
讲到Attention,常见到下图,指的就是Scaled Dot-Product Attention,特指是Scaled Dot-Product的Attention,来源与Transformer论文。
2.2、QKV是什么东西?
在不同场景下QKV是不一样的。
2.2.1、机器翻译场景
Attention机制最早在机器翻译的场景中出现,引入Attention后提升了长文本的翻译效果。
随着序列长度的增长,加了Attention的翻译模型仍旧保持较高的Bleu得分。
机器翻译采用seq2seq的结构,一个encoder,一个decoder。编码器对每次词的输出作为key和value,解码器对上一个词的输出作为query。Attention基于key和query计算权重值,输出对原本的value赋予权重后的结果。
进一步解释:比如把法语翻译成英语,每个词作为一个输入,经过embedding+双向RNN编码处理,输出的值作为Attention需要的key和value。query取的是上一个词翻译的结果。
Attention操作后,改变了每个词的重要性。比如翻译出第一个词“Jane”,原本每个法语词对翻译出“Jane”的重要性都是一样的,加入Attention之后,给法语“Jane”更大的权重,使得翻译容易进行。
所以在翻译场景中,key和value其实是同一个东西,是输入词经过编码处理后的输出;query是上一个词经过解码后的结果。
2.2.2、Transformer
Transformer里有三个相关的Attention层。
1,2的Key,Value,Query,是一根线过来复制三下的,用的是同一个东西;
3的query来自上一个解码器层,keys和values来自编码器的输出。
3、常见Attention
3.1、self-Attention
传统的Attention是基于source端和target端的隐变量计算Attention,得到的结果是源端的每个词与目标端每个词之间的依赖关系。
self-Attention,顾名思义,self就是自己,关注自身的注意力,source端和target端都是自身,关注自身的依赖关系。
虽然self-Attention的query,key,value都是同一个来源,但还是有点差异的,引入了三个对应的权重,由模型训练得到。
小结:self-Attention就是query,key-value都是同个东西,研究自身内部的关系
3.2、Multi-Head Attention
Multi-Head Attention并行计算多个attention,再把输出的结果合并起来。
其中,
当这个attention是self-attention时,
3.3、其他Attention
基于query,key获得attention matrix,当句子很长的时候,N*N的计算量会很大的。
所以要想办法把这个矩阵的计算复杂度降低。提出了很多杂七杂八的attention,比如Local Attention,stride Attention,Global Attention,...,反正都是想办法把矩阵计算的复杂度降低[4]。
4、其他
4.1、position信息
Transformer是完全使用Attention的,没有用之前的循环或者卷积。但Attention是没有记录位置信息的,所以需要有位置信息。
所以在Transformer的框架图里会有Positional Encoding。
4.2、Attention代码实现
【暂放】更多探索
# Scaled Dot-product attention layer
tf.keras.layers.Attention(use_scale=True, score_mode="dot", **kwargs)
4.3、补充
知名的Transformer(变形金刚)论文全名是《Transformer:Attention is all you need》,Transformer框架中涉及self-attention,multi-head attention,masked multi-head attention。
然后之后就出现了很多“xxx is all you need”的论文。
参考资料
[1] 李沐,66 使用注意力机制的seq2seq【动手学深度学习v2】
[2] 吴恩达,P170 注意力模型直观理解
[3] 论文, Trandsformer:Attention is all you need
[4] 李宏毅, P34 各种self-attetion
网友评论