Backgrounnd
传统的处理序列学习的任务,我们通常使用的是 RNN,
Structure
encoder-decoder Stacks
最常用的序列生成模型用的都是 encoder-decoder 结构,attention 模型也不例外,不过不同于传统的 seq2seq 模型,attention 模型每次都是将所有的输入数据一起做的 encoding。还要指出的是,这里的 attention 模型和 Bahdanau 14 年的论文引用 attention 机制来做 mt 是不一样的,这里,google 将 attention 作为了流的所有的部分,并且抛弃了传统 RNN 一个输入接着一个输入的做法。
于是,新的 Attention 结构能够进行并行计算了,而且每次运算的复杂度也可以减少,同时维持了精度。
Attention
Attention 是这篇论文的亮点也是核心所在,从上面的结构我们可以发现,attention 模型的输入是三个,如果这三个都是出自同一个 input 我们称这个 attention 模块为 self-attention
Scaled Dot-product Attention
结合上面整体的架构和 self-attention 模块,我们来详细的描述一下 Scaled Dot-product 过程的 pipeline:
- 总的输入 $X$ 一般是一个 $n \times C$ 的矩阵,这里 n 表示这段话有 n 个词,C 表示这个词的 one-hot vector 的长度(也就是字典的大小)一般所有用神经网络处理文本的输入都是这样的
- 对于输入做一个 embedding:$X = XE$ 得到一个 $n \times d_m$ 的向量,这一步,和其他的 RNN 也一样
- 用三个不同的需要学习的矩阵 $W^Q(d_m \times d_k), W^K(d_m \times d_k), W^V(d_m \times d_v)$ 再对输入做一个映射,生成三个不同的矩阵 $Q(n\times d_k), K(n\times d_k), V(n\times d_v)$ 到这里也就是上面最左边的图片下面的输入。这三个矩阵 Q K V 其实都是有各自的含义的:
- Q K 的作用是生成一个 $n \times n$ 的 attention 权重表
- Q 是 query 的缩写,表示我们的询问期望的是哪些词向量
- V 相当于是最原始输入的句子的每个词向量的表达
- 有了输入,我们可以直接得到 self-attention 模块的计算公式:
- 当 Q 与 K 做矩阵运算后,底下除了一个系数,这个算是一个归一化的 trick 吧,也是名称 Scaled 的由来
- 最后 softmax(.) 的结果就是 $n \times n$ 的 attention 权重表
最后借用别人的一张图来概括整个过程
Multi-Head Attention
上面介绍的 Scaled Dot-product 是为了引出 Multi-Head Attention 的,Multi-Head Attention 相当于做了 $h$ 次不同的 Scaled Dot-product Attention,然后把这 h 个矩阵拼起来,再做最后一次线性变换
公式为:
$W_i^Q \in R^{d_m \times d_k}, W_i^K \in R^{d_m \times d_k}, W_i^K \in V^{d_m \times d_v}$
为什么要多次投影呢,从下面一张图可以看到,single attention 只能够 focus 句子的某一部分,而 multi-head attention 的不同 head 能 focus 不同的句子的部分,图中是指 “it” 应该和哪些部分相关
Position Encoding
由于每次,我们直接把所有的词向量全部放入了模型中进行训练,所以这样就丢失了时间上的信息,也就是词与词之间的先后顺序的关联,为了解决这个问题,我们直接在输入上面做一些手脚。比如在最上面的那张 attention 结构图中,像太极一样的符号就是 positional Encoding,具体的公式是:
上面的公式可以生成一个新的 $n\times d_m$ 大小的矩阵(和 input 的大小一样)</br>
生成的矩阵直接和输入做一个叠加 </br>
pos 的取值范围是 $(0, n)$ 表示</br>
i 的取值范围是 $(0, d_m)$
上面的图就是生成的 position encoding 的具体的样子,可以发现层于层之间的 encoding 会比较接近,同时如果某两层差序列上的距离差的比较远的话,他们的向量的表示也会比较远,且差距和序列差距呈正相关?最后这些结果会反应在矩阵的投影上
Trainging
Reference
https://jalammar.github.io/illustrated-transformer/
Vaswani, A., et al. (2017). Attention is all you need. Advances in Neural Information Processing Systems.