【Attention is All You Need】
Introduction
经典论文了,里面的很多的机制都是非常具有借鉴意义的,重读也还是可以学到不少的东西的。 这个文章的主要解决的问题就是RNN及其变种的模型无法大规模的并行化的问题。同时提出了Self-Attention的机制,这个Attention机制可以广泛的被应用于各种模型之中,对于模型的提高也是非常有效的。废话少说,我们直接进入模型之中。
Model Architecture
文章的模型结构是一个Encoder-Decoder结构,所谓的Encoder就是将词语表示$(x_1,\cdots,x_n)$丢进模型之中获得隐态表示$z = (z_1,\cdots,z_n)$,而Decoder就是在给定$z$的情况下,输出一个Output序列$(y_1,\cdots,y_m)$。
Encoder and Decoder Stacks
Encoder 之中含有6层,每一层还有两个子层。第一子层是个多头Self-Attention的机制,第二子层是一个简单的前馈神经网络。在两个子层之间通过深度残差网络进行连接,并且层间要进行归一化处理。通过这样的六个层连接最终形成一个Encoder Block。
而Decoder之中也是六层,不过六层之中的子层比Encoder之中的子层多了一层。也就是将Encoder的输出作为输入放进Decoder之中,
Attention
Attention可以被看成是用Query,Key相乘得到Score然后与Value计算的过程。其中的QKV都是矩阵
上图就是Attention的计算的过程,首先看单头的计算,输入的Query和Key的维度都是$d_k$,Values的维度是$d_v$,通过将Query与Keys相乘再除$\sqrt{d_{k}}$可以得到一个Score,然后再经过SoftMax就可以得到一个概率权重,将这个权重乘Value就可以得到Attention了,用公式表示就是
$$Attention(Q,K,V) = softmax(\frac{QK^{T}}{\sqrt{d_k}})V$$
需要注意的是,常用的Attention有两种,第一种是Additive Attention,第二种是我们这里使用的Dot-Product Attention,关于什么是Additive Attention我暂时也还不清楚,希望接下来可以补坑吧。
上面的是单头(Single Head)的Attention计算过程,接下来就是换成多头了(学过金融的同学看到这里应该会迷茫吧,这个多头和市场之中的多头的意思不一样)。这的多头注意力机制很简单,也就是将不同的头的注意力结合起来然后用一个大的矩阵$W^{O}$进行混合就行了。
$$\begin{split} MultiHead(Q,K,V) & = Concat(head_{1},\cdots,head_{h})W^{O} \\ head_{i} & = Attention (QW_{i}^{Q}),KW_{i}^{K},VW_{i}^{V} \end{split}$$
在本论文之中使用了$h = 8$个头,每一个头的大小是64.而这就是多头(韭菜)注意力机制了。
需要注意一点就是这个SoftMax的过程的使用是仁者见仁智者见智的,在我们之前所讨论的一篇文章之中【Label Embedding using Hierarchical Structure of Labels for twitter Classification】就没有使用Softmax,在模型的使用的时候希望大家可以自己尝试加不加。
Positional Encoding
这个模型其实类似于一个Bag of Words模型,但是其又想加入一些位置信息,那么要怎么办呢?其使用了一个称作Positional Encoding 机制的东西。也就是对于输入的词语除了本身的词向量之外,再额外加一个向量,这个向量的生成的过程如下所示
$$\begin{split}PE_{(pos,2i)} & = \sin (pos/10000^{2i/d_{model}}) \\ PE_{(pos,2i+1)} &=\cos (pos/10000^{2i/d_{model}}) \end{split}$$
对于每个词向量,如果在单数的位置就加上下面的,如果在双数的位置上就加上上面的。其形象化的表示在国外的某一个知名博主Jalammar那有表述。是一个将Positional画出来的图
可以发现其大概可以表述词语的所在的位置的信息。
Comments
感觉这两天写的都有些短(雾),都只有两千字左右,不过感觉精神还是传达到了,这篇文章的重要性及其大,甚至可以说是成功的将前浪拍死在了沙滩上,在BERT横行一段时间之后,甚至网上一度有RNN无用论,其所依仗的最重要的机制就是之前所提到的Self-Attention的机制,这个机制第一使得并行化成为了可能,第二通过多头注意力,使得文章的特征可以由不同的Head进行表示,一定程度上产生了特征工程的效果。同时可以使用并行化,大大加快了训练的速度(这个对于我这种CPU玩家就只是有没有差不多了,反正也没GPU)。
Comments
2 Comments
[…] 这篇论文之中所提出来的模型是为了解决机器翻译之中的一些问题的,在神经网络翻译出来之前,一直都是基于统计的翻译的方法,大概就是一个词典然后对照翻译的意思吧,这个我不是领域专家所以也无法给出一个很直观的解释。大家有兴趣可以去翻翻,但是现在使用的方式一般都是神经网络翻译了,不过神经网络的翻译的方式也是存在着许多的问题的。比如说在长句子翻译的时候就会迷失自我,抓不到重点乱翻译,这是与Encoder-Decoder框架所相关的问题,在昨天的论文之中我们【Attention is All You Need】知道了Encoder-Decoder框架是什么,无非是将输入转换成为中间状态再从中间状态转化出输出。问题就在于,第一,如何使得中间态获得尽可能多的信息,第二,如何使得中间态之中所存储的信息得到最充分的利用。本文也正是从这两个方面所下手的。 […]
[…] =(p_{1},p_{2},cdots,p_{m})$,这里没说这个位置向量是怎么获得的,姑且以为是Attention is All you need里面的那样的获得的。令$t_{D}in […]
Leave a Comment