下图是一个标准的Encoder Only类型的Transformer架构的示意图:

总的来说,Encoder Only类型的Transformer架构的执行流程依次为:
- 数据预处理环节,包括输入数据的向量化(Embedding),增加位置编码等。
- 连续N个Encoder Block。
- 数据的输出环节。
对于Encoder Only Transformer架构而言,数据的输出环节很简单,例如上图所示的Linear+Softmax输出,所以本文的重点是前两个部分的计算流程。
1. 数据预处理
对于自然语言处理类型的Transformer架构来说,数据在进入Transformer架构的Encoder和Decoder中处理前,至少要完成以下工作:
- 分词(Tokenization),把一个完整的句子或者完整的语句段落,分为一个个有独立语义的字或单词(也就是所谓的token),这一步可以使用目前已经非常输出的分词工具来完成。
- 基于以上分词的结果,把一个个独立的字或者单词转换为相同长度(如512,768等)的向量,这一步操作就是所谓的嵌入(Embedding)。经过这一步向量化后,每个token都对应于一组相同长度的向量。
- 以向量长度768为例,如果要进行处理的文本包含有100个token,经过这一步的向量化后,这段文本就会被转换为(100,768)的向量。
- 在之前的句子中给向量化后的token增加位置编码(Positional Encoding),位置编码的长度与Token的向量长度相同,所以每个token的向量直接与其位置编码的向量直接相加即可,相加以后的数据维度不变。
- 仍然以前面的(100,768)维度的向量为例,增加了位置编码后,其维度仍然是(100,768)。
下图是一个对于文本"How are You"进行数据预处理的完整流程:

经过以上的数据预处理环节以后,一段文本(分割为N个token,每个token的向量长度为dimension)就会把转换为(N,dimension)维度的向量,做好了进行Encoder处理环节的准备了。
2.1 Multi-Head Attention中的Q、K、V矩阵
众所周知,Transformer 的核心是自注意力机制(Self-Attention),它的工作逻辑是计算输入序列中每一个元素与其他所有元素之间的相关性。这个自注意力机制的关键组件是:Q、K、V,可以把自注意力想象成一个“信息检索”过程:
- Query (Q):我想找什么?(当前像素/块的特征)
- Key (K):我有什么?(其他所有像素/块的特征标签)
- Value (V):我能提供什么?(实际的内容信息)