Transformer

介绍Transformer基础知识

Transformer避免使用循环神经网络,只使用注意力机制,其分为两个模块左边为encoder右边为decoder

image-20210112141734011

1.Encoder

根据论文,Encoder由6个相同的layer组成,即图中左边单元,每个layer里面又有2个sub-layer分别为 multi-head self-attention mechanism 和 fully connected feed-forward network,在每个sub-layer后加入了residual connection(残差连接)和layer normalization,因此每个sub-layer的输出为\(LayerNorm(x+Sublayer(x))\),为了引入残差连接,所有sub-layer和Embedding层输出的维度都是\(d_{model}=512\)

2.Decoder

与Encoder类似,但比其多一个sub-layer用于计算Encoder层输出的attention,同时由于模型是自回归(后面的token只取决于前面的token),因此在Decoder端加入mask保证训练和推理阶段的一致性,此处的mask处理是生成一个下三角全为0上三角为负无穷的矩阵,与之前的Scaled Score相加即可,此后再经过softmax后上三角全部变为0

img

img

3.Attention

\[ Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V \]

在论文中其attention机制由于除去了\(\sqrt{d_k}\)因此被叫做Scaled Dot-Product Attention,\(d_k\)为输入的query和key的维度,作者同时解释了为何使用点积形式的attention,因为其可以写成矩阵乘法以便计算。同时作者说经过其测试,较小的\(d_k\)值时,加性和点积计算结果差不多,但随着\(d_k\)增大,加性点积表现效果更好,他们猜测是点积放大了幅度,因此进行归一化处理,即除以\(\sqrt{d_k}\)(假设原来\(q\)\(k\)的方差为1,则点积后方差会变为\(d_k\)

image-20210112155228788

4.Multi-Head Attention

论文中使用的是Multi-Head Attention 其将V,K,Q经过h次线性变换分别计算注意力值再拼接起来 \[ MultiHead(Q,K,V)=Concat(head_1,\cdots,head_h)W^O\\where\ \ head_i=Attention(QW_i^Q,KW_i^K,VW_i^V)\\ W_i^Q\in\mathbb{R}^{d_{model}\times d_k},W_i^k\in\mathbb{R}^{d_{model}\times d_k},W_i^V\in\mathbb{R}^{d_{model}\times d_v},W_i^O\in\mathbb{R}^{hd_v\times d_{model}} \] 使用这种注意力机制,其可以关注不同子空间的信息,相当于寻找序列不同角度之间的关系,最后再拼接在一起

在论文中设置\(h=8\)\(d_k=d_v=d_{model}/h=64\)总的计算量与single-head attention相比保持不变

5.Position Encoding

由于模型没有递归和卷积网络,因此需要引入位置编码来表征位置 \[ PE_{(pos,2i)}=sin(pos/10000^{2i/d_{model}})\\ PE_{(pos,2i+1)}=cos(pos/10000^{2i/d_{model}}) \] 位置编码和embedding层维数相同,因此可以直接相加

这里的Position Encoding是两个维度的函数可以将其看作是\(PE_{t,\omega_i}=sin(w_i\cdot t)\)这里\(t\)指代\(pos\),随着维度的增加,\(\omega_i\)逐渐减少,因此在

不同维度上周期在变换,在同一维度上,呈显出随位置变化的周期性

image-20210113100222041

6.Padding Mask

由于通常会将多个句子一同训练,对于句子之间长度不同此时需要用0进行补齐,这个过程称为padding

但是这在进行softmax时会产生问题

\[ \sigma(z_i)=\frac{e^{z_i}}{\sum e^{z_j}} \] 由于\(e^0=1\)是有值的,意味着padding部分参与运算,因此需要mask操作让这些部分不参与,一般是给一个很大的负数偏置

7.Layer Normalization

Layer Normalization 的作用是把神经网络中隐藏层归一为标准正态分布,也就是 i.i.d 独立同分布,以起到加快训练速度,加速收敛的作用 \[ \mu_j=\frac{1}{m}\sum_{i=1}^mx_{ij}\\ \sigma_j^2=\frac{1}{m}\sum_{i=1}^m(x_{ij}-\mu_j)^2\\ LayerNorm(x)=\frac{x_{ij}-\mu_j}{\sqrt{\sigma^2+\epsilon}} \] img