架构
Transformer主要由6个编码器,6个译码器组成。也就是下图N=6。
注:每个之间不共享权重。
自注意力机制
1、输入内容会被拆分成为许多小片段,小片段称为token。如果是对文本进行处理时,通常小片段就会是一个单词或者是单词的一部分。
首先模型拥有一个预设的词汇库,包含了所有可能的单词,并且每个词都有一个对应的向量。这个向量的来历,就是使用了Embedding算法。
将这些token转换成为对应的向量表示。这些向量会作为input进入Attention的计算公式中。输入的向量必须是实数数组或者一维、多维数组,也就是张量Tensor。
向量组成的这个矩阵就叫做嵌入矩阵(Embedding matrix)。
其中,向量的大小是我们自己定义的超参数,一般就是训练数据集中最长句子的长度。
提示:矩阵并不是单词本身,而是tokens。矩阵的初始值是随机的,但是会随着训练不断进行调整。
重点公式
①首先,需要对token转换成为的向量进行处理,比如句子中每个名词都在问是否有形容词,而这个问题,就是作为词的Query。
②Q、K、V的来源是用总体的实数矩阵乘以各自的权重矩阵得到。
③其中,Q、K的行大小与嵌入维度匹配。
V的大小与嵌入矩阵的大小相同。Q、K、V向量的维度要比嵌入的向量要小,规定不是固定的,目的是让多头注意力机制的计算不会发生太大变化。
Key作为Q的回答者,键矩阵也是可调节参数的组合与查询矩阵相同。
而两者作为点乘的作用就是衡量每个键与每个查询的匹配程度,而得到的结果是一个实数矩阵,也就是相似度矩阵。
而再乘以V就是让词语可以将信息传递给它们的相关的其他词。
得到的结果再进行就是一个描述细腻还有丰富信息的向量。之后将得到的向量输送给前馈神经网络进行处理。
tips:点积,用于衡量两个向量的相似度,如果感到困惑,思考一下数学上两个向量,他们两个如果进行运算,是不是就是逐元素对应相乘然后求和。
关键参数:模型每次只能处理一定数量的向量,我们的关键目标就是让向量通过网络传递,生成信息时,能够最大程度上考虑上下文信息,其中上下文大小就是Context size,也就是决定了预测下一个词的过程中可以纳入的文本大小。
公式中除以√dk的原因是为了重新将特征向量中的元素缩放到方差为1的分布中,并不会改变矩阵的维度为了稳定梯度,数值稳定性。
方向相同,结果为正。
④在训练过程中,提高模型的一个效率就是让模型预测下一个输出,那么一个样本就能提供更多的学习能力。
⑤Mask掩码的作用,为了不让后续Token影响前面的信息。
如果进行了置0,那么就会有信息损失。
所以采用的策略就是将这些需要掩码部分设置为负无穷大,即能将之后的信息掩盖,又能够保证归一化的完整性。
但是过大的上下文范围设置就会导致注意力机制进行巨大的计算量。
注:交叉注意力设计的模型会处理两种不同类型的数据。
2、紧接着进入前馈层(Feed Forward)或者多重感知机(MLP)。
3、在最后一个与unbedding进行相乘的结果就是Logits。
4、位置编码的作用在于记录每个单词,所在位置的不同具有不同的意义。
多头注意力机制
多头注意力机制其实就是自注意力机制的延展,只是多个模块进行运算。
有几个头,就会产生几组Z,而这个Z就是运用公式得到的Attention得分
那么前馈层如何处理这些单独的数据,就要一个额外的矩阵
之后再将得到的结果送入到前馈神经网络中。
Transformer全流程
Inputs
首先输入的是我们人类语言的序列,经过词嵌入(Embedding)进行转换成一个个向量。
算法的原理就是依据每个单词与要转换的词的距离进行调整生成。
Positional Encoding
在进行Embedding操作之后,加入位置编码(Positional Encoding)。
在加入位置编码之后,才能了解单词的位置信息。
每个位置的位置编码由正弦函数和余弦函数进行生成:
1.偶数维度:使用正弦函数计算。奇数维度:使用余弦函数计算。
其中,pos表示每个词的向量位置,i是维度。词向量的产生有多种,比如one-hot编码或者word2vec编码。
举例:
①假设pos=0的词向量长度为4,即=4,那么第一个词向量为
②那么词向量的位置编码长度=4可以表示为:
③那么当i=0时,代入公式就可以得到:
当i=1时,代入公式就可以得到:
那么对应词向量的位置编码为:
所以加入位置编码就可以得到一个附带有位置信息的全新向量:
Encoder&Decoder
这部分主要是进行多头注意力机制的处理,多头注意力机制的原理输入以及输出在上文已经进行讲解。细节部分会在以下进行讲解。
有个重要的部分就是在这两个部分进行交互时,Query 来自Traget序列,而Key-Value来自Input序列。
Add&Norm
Add指的就是残差结构,这点在图中可以直观地感觉到。残差结构的解析内容在本文不再进行解读。主要体现在一个公式上:
Norm则是表示的Layer Normalization在多头自注意力机制中,层规范化可以帮助稳定注意力权重的分布,使得模型能够更好地捕捉不同位置的特征。
FeedForward
前馈网络(FFN)也叫作 多层感知器(MLP:multi-layer perceptron)。多层感知器至少包含三层:输入层、隐藏层(可以有多个)以及输出层。
FFN 相当于将每个位置的Attention结果映射到一个更大维度的特征空间,然后使用ReLU引入非线性进行筛选,最后恢复回原始维度。
Masked Multi-Head Attention
带有掩码的多头注意力机制,上文讲到Mask的作用就是为了让当前位置的单词只接受之前已知的词句的信息,而不受之后信息的影响。
Linear
Linear层就是一个全连接网络,作用是把decoder输出的向量映射到一个大很多的logits 向量上。
之后通过Softmax输出一个概率,将概率最大的那个词输出。