Transformer是2017年Google在Computation and Language上发表的,当时主要是针对自然语言处理领域提出的(之前的RNN模型记忆长度有限且无法并行化,只有计算完 时刻后的数据才能计算
时刻的数据,但Transformer都可以做到)。在这篇文章中作者提出了Self-Attention的概念,然后在此基础上提出Multi-Head Attention。
self-attention或者transformer的相关资料,基本上都是贴的原论文中的几张图以及公式
Self-Attention
假设输入的序列长度为2,输入就两个节点 ,
,然后通过Input Embedding也就是图中的 f(x) 将输入映射到
,
。紧接着分别将
,
分别通过三个变换矩阵
,
,
(这三个参数是可训练的,是共享的)得到对应的
,
,
(这里在源码中是直接使用全连接层实现的,这里为了方便理解,忽略偏执)。
其中
- q 代表query,后续会去和每一个k 进行匹配
- k 代表key,后续会被每个q 匹配
- v 代表从a 中提取得到的信息
- 后续q 和k 匹配的过程可以理解成计算两者的相关性,相关性越大对应v 的权重也就越大
假设=
,
=
,
=
那么:
=
=
=
=
Transformer是可以并行化的,所以可以直接写成: