Transformer模型如何实现的精准匹配与高效处理?
摘要:2013年 word Embedding 2017年 Transformer 2018年 ELMo、Transformer-decoder、GPT-1、BERT 2019年 Transformer-XL、XLNet、GPT-2 2020年
2013年----word Embedding
2017年----Transformer
2018年----ELMo、Transformer-decoder、GPT-1、BERT
2019年----Transformer-XL、XLNet、GPT-2
2020年----GPT-3
Transformer
谷歌提出的Transformer模型,用全Attention的结构代替的LSTM,在翻译上取得了更好的成绩。这里基于Attention Is All You Need(code:https://github.com/hyunwoongko/transformer),对 Transformer 做一个介绍。模型结构如下图所示,模型包含 encoder 和 decoder 两部分,其中 encoder 包含 N个(6个)当前单元,decoder 部分包含 N个框中单元。下面我们分块对其进行描述。
Position Embedding
Encoder 的输入包含词向量和位置向量(Position Embedding),词向量部分和正常的网络一样,通过学习获得,维度为$d_{model}$。位置向量 将每个位置编号,然后每个编号对应一个向量,通过结合位置向量和词向量,就给每个词都引入了一定的位置信息,这样Attention就可以分辨出不同位置的词了。而位置向量则和以往不同,以往的位置向量是通过学习获得的,而这里谷歌提出了一种位置向量嵌入的方法:
$$\left\{\begin{array}{l}
P E_{2 i}(p)=\sin \left(p / 10000^{2 i / d_{p o s}}\right) \\
P E_{2 i+1}(p)=\cos \left(p / 10000^{2 i / d_{p o s}}\right)
\end{array}\right.$$
这里的意思是将id为$p$的位置映射为一个$d_{pos}$维的位置向量,这个向量的第$i$个元素的数值就是$PE_i(p)$。Google在论文中说到他们比较过直接训练出来的位置向量和上述公式计算出来的位置向量,效果是接近的。因此显然我们更乐意使用公式构造的Position Embedding了,我们称之为Sinusoidal形式的Position Embedding。
Position Embedding本身是一个绝对位置的信息,但在语言中,相对位置也很重要,Google选择前述的位置向量公式的一个重要原因是:由于我们有$sin(\alpha+\beta)=sin\alphacos\beta+cos\alphasin\beta$以及$cos(\alpha+\beta)=cos\alphacos\beta−sin\alphasin\beta$,这表明位置$p+k$的向量可以表示成位置$p$的向量的线性变换,这提供了表达相对位置信息的可能性。
Encoder部分
Encoder 部分由6个相同的子模块组成,每个子模块就是上面图中左侧那个方块了。包含几个子部分:
Multi-Head Attention
Residual connection
Normalisation
Position-wise Feed-Forward Networks
在Encoder 内部又可以看做包含两个子层,一个是Multi-Head Self-Attention为主,另一个是Position-wise Feed-Forward Networks,每个子层内的运算可以总结为:
$$sub\_layer\_output = LayerNorm(x + (SubLayer(x)))$$
接下来着重介绍 两个子层。Multi-Head Self-Attention由Scaled Dot-product Attention和Multi-Head Attention以及Self Attention组成,下面依次进行讲解。
Scaled Dot-Product Attention
$$Attention(Q,\ K,\ V)=softmax(\frac{QK^T}{\sqrt{d_k}})V$$
其中$Q,K,V$分别是query、key、value,他们的shape分别为$(n×d_k)、(m×d_k)、(m×d_v)$。
