摘要
当时的序列转录模型主要依赖于复杂的循环或者卷积神经网络加encoder+decoder架构组成,而论文提出了一种简单的网络架构transformer,在原有的encoder+decoder基础上增加注意力机制,而不使用循环和卷积。
引言
在引言中提到RNN的缺点导致它不能很好地提高机器翻译准确度,主要有以下两点:
- 由于RNN的时序性,它很难并行,对于第t个单元的状态 ht ,由于 ht 是由当前的输入 xt 和当前的状态 ht-1 求得,故想得到 ht 的值我们需要求得前面的 ht-1 输出完成,使得模型无法并行运行,导致运算性能较差。
- 由于RNN的历史信息是一步步向后传递,当我们希望保留这些历史信息时,就需要使用较大的 ht, 这会导致我们的内存开销较大。
通过使用attention机制,我们可以较好地完成模型的并行,我们可以在更少的时间和空间开销之内,做到比之前更好的事情。
相关工作
- 使用CNN替换掉RNN来减少时序计算
- 卷积计算时每次只能看到局部像素,需要采用多层卷积操作才能将两个较远的像素联系起来,而使用transformer中的注意力机制可以一次看到所有的像素。
- 提出了多头注意力机制(Multi-Head Attention)用来模拟卷积神经网络多输出通道的效果。
- 提出transformer是第一个只依赖自注意力机制(Self-attention)来做encoder到decoder的架构的模型。
模型
transformer模型架构
-
encoder & decoder架构
-
encoder接收一个带有特征值的输入序列 x(x1, ... , xn)并转换为对应的向量表示 z(z1, ... , zn)作为输出。
-
作者选用了六个layer,即重复六个encoder结构,每个layer中包含两个sub-layers,第一个子层采用multi-head self-attention结构,第二个子层采用一个简单的 Feed-forward network,对于每个子层使用一个残差连接,然后加上 layer normalization,即LayerNorm(x + SubLayer(x)),同时作者规定输出维度dmodel = 512。
-
LayerNorm 与 BatchNorm的区别:
BatchNorm是对每个batch的每个特征做正则化处理,LayerNorm是对每个batch的每个样本做正则化处理,其中LayerNorm对于不同样本做不同区分,适用于 NLP 任务,而BatchNorm对于图像任务可以减少绝对差异,突出相对差异,加快训练速度,适用于 CV 任务。
-
-
decoder拿到编码器的输出z,生成输出序列 y(y1, ... , yn),区别于编码器,解码器的输出 yt 是一个一个生成的,该过程称为自回归(auto-regressive)
- 与ecoder类似,只是多了一个multi-head attention。
-
-
Attention
-
Scaled Dot-Product Attention:
- 输入包括维度为dk的queries和keys,以及维度为dv的values。我们首先计算quary和key的内积作为向量的相似度,然后再除以 \(\sqrt{d_k}\),最后使用Sorfmax函数获得key的权重(非负且总和为1)将这些权重作用在value上即可得到输出。
- 在实际中使用矩阵进行计算:
- 常用的attention机制有两种,additive(加和)attention 和 dot-product(点积)attention,在dk较小时, 两种机制相差不大,但当不缩放较大的dk时,加和attention有着较优的效果,作者猜测是由于较大的dk,点积大幅增加,将softmax推向趋于零的程度,为了抵消这种影响使用除以 \(\sqrt{d_k}\) 的方式。
-
Multi-head attention
- 先将quary,key,value投影到低维,去做Scaled Dot-Product Attention,这个过程重复h次,然后进行连接,再投影到高维进行输出。作者使用h=8,进行计算,故对于每一个head有hk = hv = hmodel/h = 64。
- 先将quary,key,value投影到低维,去做Scaled Dot-Product Attention,这个过程重复h次,然后进行连接,再投影到高维进行输出。作者使用h=8,进行计算,故对于每一个head有hk = hv = hmodel/h = 64。
-
-
self-attention
每个输入的quary,key,value是由输入x作三次线性变换得到。 -
Position-wise Feed-forward network
-
在encoder和decoder中的每个层都包括前馈网络,分别作用与每个词,其中包括两个线性变换和一个Relu激活函数
FFN(x) = max(0, xW1 + b1)W2 + b2 -
作者给出hff = 2048,即W1将x投影成2048维的向量,然后W2再将x投影回512维。
-
-
Embedding 和 Softmax
Embedding用于将输入和输出token转换为hmodel维向量。另外将权重乘以\(\sqrt{d_model}\),因为学习Embedding时会把每一个向量的 L2-norm 学得相对较小,如果维度较大,学到权重的值就会变小,乘以\(\sqrt{d_model}\)放大,再与PE相加使得两者在scale上差不多
-
Position Embedding
与计算机位置编码类似,使用一个长为dmodel维度的向量来表示输入token序列中每个词的时序信息(通过周期不同的sin和cos函数计算得到),再将时序信息与嵌入层相加即可完成将时序信息加入输入数据。
标签:输出,Transformer,跟读,卷积,attention,ht,encoder,decoder,李沐 From: https://www.cnblogs.com/fqlb/p/18305322免责声明:本人深度学习小白一枚,有任何错误欢迎指出。