1 Transformer整体结构
从功能角度上,我将Transformer各个组件划分到四个功能模块,对应于图1中4中颜色框框选部分:输入模块(绿色框框)、编码器模块(红色框框)、解码器模块(蓝色框框)、输出模块(黑色框框)。
第一步,我们将词库中每一个词(中文就是字了,为了更大众化地表达,我们就称之为词吧)以及开始标志转化为嵌入词向量,词嵌入向量的维度为embedding dimension,一句话中总共的单词长度为sequence length,因此可以得到一个sequence_length ×× embedding_dimension大小的矩阵,其中每一行代表的是一个词。有了词嵌入矩阵还不够,还需要在矩阵中添加位置编码,随后将矩阵传入编码器模块。这一系列操作,就是输入模块负责的功能。输入模块有两个部分,功能实现是一模一样的,区别在于一个是对源数据进行编码,也就是我们现在第一步中所做的操作,另一个是对目标数据进行编码。
第二步,编码器模块接收到输入模块传输过来的矩阵后,要完成多头注意力计算、规范化、前向传播等等一系列操作,而且这些操作还不止进行一次(8次),最终将输出结果传入解码器模块。编码器模块是Transformer模型最为核心的部分,创新使用的多头注意力机制是Transformer算法性能突出的关键。
第三步,接下来,输出矩阵从编码器传到了解码器模块,我们姑且称这个矩阵为矩阵A吧。解码器接收到矩阵A后,解码器对应的输入模块也开始工作,这个输入模块会对目标数据进行词嵌入、添加位置编码等一些列操作,形成另一个矩阵,我也给它命一个名,叫矩阵B吧。矩阵B进入解码器后,进行掩码,再进行一次注意力计算,然后往前传递,与矩阵A“胜利会师”。会师后,两者共同进行注意力计算,生成新的矩阵,并进行前向传播和规范化。进行一系列类似操作后,将矩阵传入输出模块。从这里可以看出,解码器模块,是有两个输入的,一个来自于编码器,一个来自于输入模块对目标数据的编码。
第四步,这是最后一步了,输出模块对解码器模块的输出矩阵进行一次线性变换,然后通过softmax层转换为概率分布矩阵,矩阵中概率最大值对应的英文词汇为这一次传输的输出结果,即翻译结果。
上述整体流程介绍,我们提到了许多概念和操作,例如词嵌入、位置编码、多头注意力机制等等。