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