论文阅读——Attention is all you need

Attention is all you need

论文地址:Attention Is All You Need

1. Motivation

  • 循环模型固有的顺序特性阻碍样本训练的并行化,这对于更长的序列长度的训练很不利,因为有限的内存限制样本的批次大小。
  • Attention机制已经成为序列和传导模型中不可缺失的一部分,可以建模依赖关系而不考虑其在输入或输出序列中的距离。 但是目前的这种attention机制都与循环网络一起使用。

2. Contribution

  • 提出了Transformer,该模型完全依赖于注意力机制来建立输入和输出的完全依赖关系。

3. Method

3.1 模型架构

使用堆叠的self-Attention和point-wise,完全连接层用于编码器-解码器。
论文阅读——Attention is all you need_第1张图片

3.2 编码器-解码器堆栈

  1. 编码器:
    对于一个序列 ( x 1 , x 2 , . . . , x n ) (x_1,x_2,...,x_n) (x1,x2,...,xn),编码器会将其表示成 z = ( z 1 , z 2 , . . . , z n ) \bf{z} = (z_1,z_2,...,z_n) z=(z1,z2,...,zn),其中 z t z_t zt表示的是词 x t x_t xt的向量表示。

  2. 解码器
    对于z,生成序列 ( y 1 , y 2 , . . . , y m ) (y_1,y_2,...,y_m) (y1,y2,...,ym),在解码器里词是一个一个生成的这是和编码器不一样的地方。有自回归的属性——过去时刻的输出是你当前时刻的输入。

  3. 编码器堆栈
    由N = 6个相同层组成。每层有两个子层,第一个是多头注意力机制结构(Multi-Head Attention),第二个是一个简单的全连接的前馈网络(Feed Forward)。在每一个子层都用一个残差连接,然后进行层归一化(Add & Norm)。每个子层的输出就是 L a y e r N o r m ( x + S u b L a y e r ( x ) ) LayerNorm(x+SubLayer(x)) LayerNorm(x+SubLayer(x))。为了方便残差连接,所有子层以及嵌入层产生的输出维度都为 d m o d e l = 512 d_{model} = 512 dmodel=512
    论文阅读——Attention is all you need_第2张图片

解释一下LayerNorm:
一般在变长的输入样本的情况下使用layernorm,回想一下batchnorm,是在一个batch里面对所有样本的某个特征做均值以及方差的归一化(使其均值为0,方差为1)。layernorm就是对一个样本的所有特征做归一化。
论文阅读——Attention is all you need_第3张图片

因为序列模型输入是变长的,对于batchnorm来说切平面可能含有大量的填充0,而且如果有个输入特别特别长,他算出来的全局均值以及方差就会受这个输入影响很大。

论文阅读——Attention is all you need_第4张图片

而layer norm,切出来的平面是这样的:
论文阅读——Attention is all you need_第5张图片
也不需要全局的均值和方差。
(以上借鉴李沐大大的解释)
2. 解码器:解码器也是由N = 6个相同层堆叠。一共有三个子层,从下往上,第一个子层是修改后的多头自注意力层(Masked Multi-Head Attention),以防止位置对后续位置的关注,确保位置i的预测只依赖于小于i位置的已知输出。第二个子层和编码器第一个子层一样(Multi-Head Attention),该子层对编码器输出进行多头注意。第三层就是个前馈网络(Feed Forward)。
论文阅读——Attention is all you need_第6张图片

3.3 注意力

注意力机制
注意力函数是将一个query和一些key-value对映射成一个输出的函数,具体来说output是一些value的加权和。每个value的权重是由value对应的key和query之间的相似度得到的。query和key越相似,这个 key对应的value的权重就越大。
自注意力机制
注意力机制主要分为软注意力,硬注意力和自注意力。
软注意力是对每个输入项的分配的权重为0-1之间,对大部分信息都有考虑,但考虑程度不一样,所以相对来说计算量比较大。
硬注意力是对每个输入项分配的权重非0即1,直接舍弃掉一些不相关项。优势在于可以减少一定的时间和计算成本,但有可能丢失掉一些本应该注意的信息。

自注意力对每个输入项分配的权重取决于输入项之间的相互作用,即通过输入项内部的"表决"来决定应该关注哪些输入项。

Scaled Dot-Product Attention

  • 输入: Q u e r y Query Query d k d_k dk维的 k e y key key d v d_v dv维的值。 Q u e r y Query Query是一组查询query,打包成矩阵 Q ∈ R m × d k Q \in R^{m\times d_k} QRm×dk,同样的key和value都被打包成矩阵 K ∈ R m × d k , V ∈ R m × d v K \in R^{m \times d_k},V \in R^{m\times d_v} KRm×dk,VRm×dv
  • 为什么要除以一个 d k {\sqrt d_k} d k?因为当dk比较大的时候,Q和K两个矩阵做点积可能会很大,query和key之间差距就会变得很大。softmax之后更加靠近1,梯度消失。
  • 输出:
    A t t e n s i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attension(Q,K,V) = softmax(\frac{QK^T}{\sqrt d_k})V Attension(Q,K,V)=softmax(d kQKT)V
    体系结构如图所示:
    论文阅读——Attention is all you need_第7张图片
    Mask就是对于后面不应该看到的内容他的key-value对,把key置为一个很大的负数,这样做完点积后,经过softmax就会接近0
    Multi-Head Attention
    具体结构如图所示:
    论文阅读——Attention is all you need_第8张图片
    线性层就是会将Q、K、V投影到一个比较低的维度,h维。然后再经过scaled dot-product,将输出concat一下,最后再投影回来。多头注意力的引用主要是为了匹配不同的输入模式。投影方式是可以学习到的。
    Q , V , K Q,V,K Q,V,K使用不同的学习过的线性投影器分别投影到 d k 、 d k 、 d v d_k、d_k、d_v dkdkdv维度上,投影h次。然后在并行运行注意力方法(Scaled Dot-Product Attention)最后得到 d v d_v dv维的输出。
    M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , h e a d 2 , . . . , h e a d h ) W O h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) MultiHead(Q,K,V) = Concat(head_1,head_2,...,head_h)W^O\\head_i = Attention(QW_i^Q,KW_i^K,VW_i^V) MultiHead(Q,K,V)=Concat(head1,head2,...,headh)WOheadi=Attention(QWiQ,KWiK,VWiV)
    W i Q , W i K ∈ R d m o d e l × d k , W i V ∈ R d m o d e l × d v W_i^Q,W_i^K \in R^{d_{model} \times d_k},W_i^V \in R^{d_{model} \times d_v} WiQ,WiKRdmodel×dk,WiVRdmodel×dv and W O ∈ R h d v × d m o d e l W^O \in R^{hd_{v} \times d_{model}} WORhdv×dmodel

Transformer中Attention的应用

  • encoder-decoder attention:Q来自前一个解码器输出,K和V来自于编码器输出。模拟了seqtoseq注意力机制。
  • encoder self-attention:Q,K,V都来自前一层编码器,是同一个东西。编码器每一个位置都可以关注到前一层编码器所有位置。对每个query会计算一个相同大小的输出(value的加权和,维度都是d)
  • decoder self-attention:和编码器差不多,但是为了防止解码器的信息向左流动以保持自动回归特性,在scaled dot-product attention中加入了mask。

3.4 前馈网络

其实是个MLP,不一样的是对于输入的每一个词作一次MLP。公式如下:
F F N ( x ) = m a x ( 0 , x W 1 + b 1 ) W 2 + b 2 FFN(x) = max(0,xW_1+b_1)W_2+b_2 FFN(x)=max(0,xW1+b1)W2+b2
相当于一个线性层+激活函数+线性层。 x x x的维度是512, W 1 W_1 W1就是把512维投影到2014, W 2 W_2 W2再投影回来。

3.5 Transformer 和 RNN

对于时序数据的语义信息,RNN将上一时刻的输出 h t − 1 h_{t-1} ht1作为下一时刻的输入,然后连带输入x一起送到MLP。

而Transformer是将整个输入传入Attention层,得到全局的一个语义信息,然后再用MLP做语义转换

3.6 Positional Encoding

注意Attention层是没有时序信息的,输出的是value的权重和。Positional Encoding主要是处理时序信息,在输入的时候加入。 这里任何一个词可以用一个长为512维的向量表示,位置编码层也会用长为512的向量来表示这个词的位置,具体的值用周期不一样的sin和cos得到。再加入到词向量中。

4. Experiment

3.7 关于Label Smoothing

文章对于softmax做了一个label smoothing。softmax需要输出值接近无限大才会判定为1,这就造成了训练困难。文章实验中对于准确的词只需要softmax输出是0.1的时候就判为1。这虽然会降低置信度但是会提高精度和BLUE分数。

实验结果

论文阅读——Attention is all you need_第9张图片

你可能感兴趣的:(论文阅读,深度学习,自然语言处理,神经网络)