经典论文阅读(3)——Attention is all you need

递归模型通常沿着输入输出序列进行因子计算,这排除了训练样本的并行化,尤其是输入长序列时,因为内存限制了样本批处理。注意力机制通常对依赖关系建模,而不考虑输入输出序列中他们的距离。Transformer是第一个完全依靠自我注意来计算其输入和输出的表示而不使用序列对齐的rnn或卷积的转换模型。

模型架构

大多数神经序列转换模型用的是编码-解码结构,编码器将输入序列表征(x_1,...,x_n)表征为连续表征(z_1,...,z_n),解码器在给定z的情况下生成序列(y_1,...,y_n)

模型架构如下:

encoder

encoder包含6个独立层,每个层包含一个多头注意力子层和一个全连接前馈网络子层,这两个子层都加入了残差连接,每个子层的输出为LayerNorm(x+Sublayer(x))。

decoder

decoder也包含6个独立层,每个层除了编码器的的两个子层,还包含一个对编码器堆栈输出执行多头注意。类似于编码层,还加入了残差连接和层归一化。同时修改了decoder堆栈的自注意力层,避免关注后面的位置。

注意力层

归一化点积注意力

输入包含了维度为d_k的query和key,以及维度为d_v的value,计算Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}}V)。当d_k很大时,点积会很大,经过softmax后到达梯度较小的地方,因此乘以\frac{1}{\sqrt{d_k}}进行归一化。

多头注意力

MultiHead(Q,K,V)=Concat(head_1,...,head_h)W^O\\head_i=Attention(QW_i^Q,KW_i^K,VW_i^V)

相较于直接对d_{model}维度的query、key、value计算注意力,同时做h次将query、key和value映射为d_kd_kd_v维度的向量更有益处,这些输出的d_v维向量连接起来再做一次映射,得到最终的值。多头注意力可以使模型在不同位置上关注来自不同子空间的信息,计算如下:

MultiHead(Q,K,V)=Concat(head_1,...,head_h)W^O\\ head_i=Attention(QW_i^Q,KW_i^K,VW_i^V)

在本工作中h=8,且d_k=d_v=d_{model}/h=64

Transformer中的多头注意力

  • 在encoder-decoder attention中,query来自前一个decoder层,key和value来自encoder输出。这使得decoder的每个位置都将注意到输入序列的所有位置。

  • encoder中包含self-attention层,query、key、value来自encoder前一层的输出。这使得encoder的每个位置可以注意到前一层的所有位置。

  • decoder中包含self-attention层,使得decoder的每个位置都能注意到前一层该位置之前(包含该位置)的所有位置。我们要防止decoder中信息向左流动以保持自回归特性,通过在归一化点积注意力屏蔽(设置为-\infty)softmax输入中与非法连接对应的所有值。

position-wise 前向传馈网络

encoder和decoder中均包含一个全连接前向传馈网络,该网络包含两次线性变换和一个ReLU激活函数,在每个位置上独立地应用:FFN(x) = max(0, xW_1+b_1)W_2+b_2。输入输出的维度为d_model=512,隐藏层维度为d_{ff}=2048

Emeddings和Softmax

将输入token和输出token转换为维度d_{model}的向量,用decoder输出预测next-token概率。在embedding层,将权重乘以\sqrt{d_{model}}

Position embedding

为了让模型利用序列中的顺序,需要加入序列中token的绝对或相对位置信息。position embedding与embedding具有相同的d_{model}维度,如下:
PE_{(pos,2i)} = sin(pos/10000^{2i/d_{model}})\\ PE_{(pos,2i+1)} = cos(pos/10000^{2i/d_{model}})

选择正余弦函数是因为给定一个固定的偏置k,PE_{pos+k}可以表征为PE_{pos}的线性变换。

为什么使用self-attention

1、当序列长度n小于表示维数d时,自注意层比循环层速度快。

2、个体的注意力头不仅清楚地学会了执行不同的任务,且似乎表现出与句子的句法和语义结构相关的行为。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值