介绍
Transformer 是一种基于 encoder-decoder 结构的模型,模型结构如下图所示,在encoder中主要有Multi-Headed Attention和前馈神经网络层组成,decoder 中主要有Multi-Headed Attention、前馈神经网络层和Masked Multi-Headed Attention组成。
在 Encoder 中,
- Input 经过 embedding 后,要做 positional encodings
- 经过Multi-head attention
- 再经过 position-wise Feed Forward
- 每个子层之间有残差连接
在 Decoder 中,
如上图所示,也有 positional encodings,Multi-head attention 和 FFN,子层之间也要做残差连接,但比 encoder 多了一个 Masked Multi-head attention,最后要经过 Linear 和 softmax 输出概率。
Positional Encoding
Positional Encoding 是一种考虑输入序列中单词顺序的方法。
encoder 为每个输入 embedding 添加了一个向量,这些向量符合一种特定模式,可以确定每个单词的位置,或者序列中不同单词之间的距离。计算方式如下:
其中为token在sequence里的位置, 为Embedding的维度, 为Embedding中的某一对应维度。
Add & Layer normalization
Add操作借鉴了ResNet模型的结构,其主要作用是使得transformer的多层叠加而效果不退化
Layer Normalization操作对向量进行标准化,可以简化学习难度
操作的结构为:
Self-Attention
当模型在处理每个单词时,self-attention 可以帮助模型查看 input 序列中的其他位置,寻找相关的线索,来达到更好的编码效果。它的作用就是将对其他相关单词的“understanding”融入我们当前正在处理的单词中。
-
为编码器的每个输入单词创建三个向量,即 Query vector, Key vector, Value
vector,这些向量通过embedding 和三个矩阵相乘得到,矩阵是随机初始化的且不断更新。 -
计算self-attention的分数值,该分数值决定了当我们在某个位置encode一个词时,对输入句子的其他部分的关注程度。使用Query与Key做点成,如第一个词使用
-
将得分除以为key向量的维度,这样可以有更稳定的梯度。
-
传递给 softmax,Softmax 就将分数标准化,这样加起来保证为 1,这个 softmax 分数决定了每个单词在该位置表达的程度。
-
用这个得分乘以每个 value 向量
-
加权求和这些 value 向量
Multi-Headed Attention
通过添加一种称为Multi-Headed注意力的机制,进一步完善了自我注意力层。这样可以通过两种方式提高关注层的性能:
- 它扩展了模型专注于不同位置的能力。
- 它为关注层提供了多个“表示子空间”。
经过 multi-headed , 我们会得到和 heads 数目一样多的 Query / Key / Value 权重矩阵组,简单来说,就是定义 8 组权重矩阵,每个单词会做 8 次上面的 self-attention 的计算,但在 feed-forward 处只能接收一个矩阵,所以需要将这八个压缩成一个矩阵.
Masked Multi-head attention
mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer 模型里面涉及两种 mask,分别是 padding mask 和 sequence mask。
- Padding Mask
因为每个批次输入序列长度是不一样的也就是说,我们要对输入序列进行对齐。具体来说,就是给在较短的序列后面填充 0。但是如果输入的序列太长,则是截取左边的内容,把多余的直接舍弃。因为这些填充的位置,其实是没什么意义的,所以我们的attention机制不应该把注意力放在这些位置上,所以我们需要进行一些处理。 - Sequence mask
sequence mask 是为了使得 decoder 不能看见未来的信息。也就是对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。因此我们需要想一个办法,把 t 之后的信息给隐藏起来。
对于 decoder 的 self-attention,里面使用到的 scaled dot-product attention,同时需要padding mask 和 sequence mask 作为 attn_mask,具体实现就是两个mask相加作为attn_mask。
其他情况,attn_mask 一律等于 padding mask。
Feed-Forward Layer
这里就是将Multi-Head Attention得到的提炼好的向量再投影到一个更大的空间,在那个大空间里可以更方便地提取需要的信息(使用Relu激活函数),最后再投影回token向量原来的空间
The Final Linear and Softmax Layer
解码器堆栈输出浮点向量通过最后的线性层,然后是Softmax层,变成一个词。
线性层是一个简单的完全连接的神经网络,它将解码器堆栈产生的向量投影到一个更大,更大的向量中,称为对数向量。
Softmax输出概率值最大的对应的词就是我们最终的结果
训练
数据集
使用标准的WMT 2014英德数据集进行训练,该数据集由大约450万个句子对组成。句子使用字节对编码进行编码,该编码具有约37000个标记的共享源目标词汇表。
对于英语-法语,我们使用了更大的WMT 2014年英法数据集,包含3600万个句子,并将标记拆分为32000个单词片段词汇表。句子对由近似的序列长度组合在一起。每个训练批次包含一组包含大约25000个源令牌和25000个目标令牌的句子对。
优化
使用Adam优化算法,
实验对比
将Transformer和ByteNet、GNMT-RL、ConvS2SMoE等模型进行对比其BLEU分在EN-DN上达到最优,其耗费的代价也最低。
来源:CSDN
作者:摸黑也码着代码
链接:https://blog.csdn.net/m0_37374707/article/details/103630006