Attention Is All You Need

在主流的序列转录(给定一个序列,生成另外一个序列)模型中,他们依赖于比较复杂循环或者是卷积神经网络。

sequence transduction models 比较好的结构是 encoder-decoder

编码器 将 (x1, x2, ... , xn)(原始输入) 映射成 (z1, z2, ..., zn)(机器学习可以理解的向量)

 一个句子有 n 个词,xt 是第 t 个词,zt 是第 t 个词的向量表示。

解码器 拿到 编码器 的输出,会生成一个长为 m 的序列(y1, y2, ... , ym)

n 和 m 可以一样长、可以不一样长。

Transformer模型是继MLP(多层感知器),CNN和RNN之后的第四大类模型,不需要循环和卷积,只用注意力机制。(第一个)

在今年9月份,斯坦福联合了100多名作者写了一篇两百多页的综述文章,将Transformer模型和它之后的一些变种,提议将这一类模型叫做基础模型,可见它对的影响有多大。

RNN并行度低

用卷积神经网络,对长序列难以建模,如果用Transformer里面的注意力机制的话,一次能看到所有的像素,一层就能够把整个序列看到,但是这样会降低有效分辨率,Multi-Head Attention可以模拟卷积神经网络多输出通道的效果来抵消这种影响。

模型架构

Input Embedding(嵌入层)把一个个词表述成一个向量

Nx表示N个这样的层摞在一起

Enooder输入一排x向量,输出另外一排h向量 

 上图是mask

为了保持解码器的自回归特性,需要防止解码器中的信息向左流动。我们在scale dot-product attention的内部,通过屏蔽softmax输入中所有的非法连接值(设置为负无穷)实现了这一点。mask主要是为了避免在第t个时刻看到之后时刻的东西,给qt和kt之后计算的那些值,换成一个很大的负数,进入softmax做指数的时候就会变成零,从SoftMax出来的值所对应的权重都会变成零

解码器的输出是一个个产生的。

解码器是把三部分组成一个块,重复n次。 

编码器是用6个完全一样的层,每一个层里面有两个子层(multi-head self-attention层simple,position-wise fully connected feed-forward network层),每一个子层用一个残差连接,最后使用layer normalization

 解码器是用6个完全一样的层,每一个层里有三个子层,多了一个masked multi-head self-attention。

 

norm加快收敛

注意力函数可以描述为将查询和一组键值对映射到输出,其中query、key、value和输出都是向量。输出作为value的加权和计算,其中分配给每个value的权重由query与相应key的相似度计算。输出是三个v的相加

加型注意力机制和点积注意力机制。

点积注意力机制能够通过高度优化的矩阵乘法库进行并行计算,在实践中更快速,且参数空间更高效。

query和key做矩阵乘法,除以根号dk,经过mask和softmax,再和velue做矩阵乘法,得到输出

Attention

 

key和value来自于编码器的输出,query来自于解码器下一个attention的输入

 

Multi-Head Attention:把query、key、value投影到dk,投影h次,再做h次的注意力函数,把每一个函数的输出并在一起,再投影一次会得到最终的输出。为了可以学习权重。

不同的头concat,投影到W^o上

通过不同的可以学习的权重w投影到dk上,再做注意力函数

Position-wise Feed-Forward Network:把同一个MLP对每一个位置作用一次

Attentiom是对输入做一个加权和,把整个序列里面的信息抓取做一次汇聚

 

 RNN是上一刻的输出与当前输入信息一起并入进去,得到当前的输出。

Embedding,把输入的一个个词映射成一个个长度为d向量

输出是value的加权和,权重是query和key之间的距离

Position Encoding把输入词的位置信息(一个矩阵)加进去

attention

计算复杂度越低越好,顺序计算越少越好,信息从一个数据点走到另一个数据点的长度

n是序列的长度,d是向量的长度

query可以和所有的key做运算,输出是所有value的加权和,query可以和任何一个很远的key、value直接运算

卷积核的是维度是k

restricted代表query只和旁边的r个数据进行运算

attention对信息的糅合性更好

Training(训练)

在标准的WMT 2014英语-德语数据集上进行训练,包含约450万个句子对,这些句子对使用byte-pair编码进行编码,源语句和目标语句共享大约37000个词符的词汇表。 对于英语-法语翻译,我们使用大得多的WMT 2014英法数据集,它包含3600万个句子,并将词符分成32000个word-piece词汇表[38]。 序列长度相近的句子一起进行批处理。 每个训练批次的句子对包含大约25000个源词符和25000个目标词符。

我们在一台具有8个 NVIDIA P100 gpu的机器上训练我们的模型。对于paper中描述的使用超参数的基础模型,每个训练步骤大约需要0.4秒。我们对基础模型进行了总共100000步或12小时的训练。对于我们的大型模型(见表3的底线),步进时间为1.0秒。大模型 使用了30万步(3.5天)的训练。

我们使用Adam优化器,其中β1 = 0.9, β2 = 0.98及ϵ= 10-9。 我们根据以下公式在训练过程中改变学习率:

模型越宽,学习率越低

总结:带权重的层,输出都使用了 dropout ,P drop = 0.1,10% 的元素 重置为 0, 剩下的值 * 1.1

softmax很难趋近为1。很soft输出值很大,才会激活为1。

正确的词,softmax的输出为 0.1 即可,剩下的值是 0.9 / 字典大小

模型的不确定度增加,可以提高 accuracy and BLEU的分数

结论

我们的模型在 WMT2014 英语-德语的翻译任务上取得了28.4的BLEU评分。在现有的表现最好模型的基础上,包括整合模型,提高了2个BLEU评分。
  
在WMT 2014英语-法语翻译任务中,我们的大型模型的BLEU得分为41.0,超过了之前发布的所有单一模型,训练成本低于先前最先进模型的1 ∕ 4 。 英语-法语的Transformer (big) 模型使用P d r o p = 0.1 。

n是堆的层数,d是模型的宽度(token要表示成一个多长的向量),dff表示的是你拿MLP中间隐藏层的输出的大小,h是注意力层 头的个数,dk和dv代表一个头里面key和value的维度,Pdrop是dropout丢弃率,els是要学的lable的真实值是多少,train step是要训练多少个batch

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值