
Attention Is All Your Need
What is Transformer?
Transformer
中抛弃了传统的CNN和RNN,由且仅由self-Attenion
和Feed Forward Neural Network
组成。
$$
test \frac{1}{2}
$$
Why Transformer?
一些序列的模型(RNN, LSTM,GRU等),他们的计算都是一个线性的计算,即,第$t$时刻的的计算依赖于$t-1$时刻。限制了并行能力。同时,存在一些长期依赖的信息丢失问题。
Transformer
并不是一个序列模型,因此能够并行计算。同时序列中任意两个位置的距离被缩小成了一个常量。
What is the construction of Transformer?
Transformer的basic block是一个Encoder-Decoder结构:
论文中,整个模型是由6个这样的basic block组成:
Encoder和Decoder的结构又是怎样的?
Encoder由两部分组成:
Self-Attention
可以得到一个加权的特征向量$Z$:
$$
Z = \operatorname{Attention}(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V
$$Feed Forward Neural Network
两层的全联接层:
$$
\operatorname{FFN}(Z)=\max \left(0, Z W_{1}+b_{1}\right) W_{2}+b_{2}
$$
Decoder包含三部分:
Self-Attention
这个self-Attention可以理解为”当前的翻译和已经翻译的内容之间的关系”
Encoder-Decoder Attention
可以理解为当前翻译和编码的特征向量的关系
Feed Forward Neural Network
Transformer的输入是什么?
通过word2vector将输入的语聊转换为特征向量。论文中是512维的向量 $$d_{\text {model}}=512$$。
Self-Attention是什么?
Self-Attention的核心是维输入向量的每一个单词,学习一个权重。
举个🌰:
1 | The animal didn't cross the street because it was too tired |
中,it到底代表的是什么呢?
通过Self-Attention,我们就能够通过it和其他单词间的权重,来进行判断。
在Self-Attention中,每一个输入的词向量$x \in \mathbf{R}^{512}$,能够得到三个不同的向量:$q$、$k$ 和 $v \in \mathbf{R}^{64}$。这三个向量的获得,是通过三个不同的矩阵:$W^{Q}$、$W^{K}$ 和 $W^{V} \in \mathbf{R}^{512 \times 64}$ 获得的。$q$ 代表着 Query,$k$ 代表着 key,$v$ 代表着 value。
整个Self-Attention的计算如下:
将输入的词向量$x$和矩阵$W^{Q}$、$W^{K}$ 和 $W^{V}$ 相乘,得到对应的$q$、$k$ 和 $v$。
计算$s = qk$ (query和key的乘)
对$s$进行归一化:$s = s/ \sqrt{d_k}$, 这里的$d_k$ 指的是$k$ 的维度,这里$d_k$ 就是64,那么$s = s/8$
对归一化之后的$s$进行softmax激活。
随后,将4得到的数值乘以向量$v$,得到加权的输入向量的得分。
$z = \sum{v}$
除此之外,self-attention还包含有residual short connection,来是的网络的优化更稳定。
Multi-Head Attention
就是将Self-Attention进行堆叠,每一个输入向量$x$会被输入到$h$个不同的self-attention模块中。将得到的加权向量concate后,进行一个全联接操作降维。
位置编码
输入的词向量,并没有保留他的位置信息。对于位置的编码,一般有两种做法,一种是根据数据学习,另外一种是自己设计一种规则来编码。
这里,作者设计了一种位置编码:
$$
\begin{array}{c}
P E(\text {pos}, 2 i)=\sin \left(\frac{p o s}{10000^{\frac{2 i}{d_{\text {madd} l}}}}\right) \ \
P E(\text {pos}, 2 i+1)=\cos \left(\frac{p o s}{10000^{\frac{2 i}{d_{\text {modd} l}}}}\right)
\end{array}
$$
作者这么设计的原因是考虑到在NLP任务重,除了单词的绝对位置,单词的相对位置也非常重要。