Transformer模型由6个Encoder和6个Decoder组成,输入和输出通过同一个训练好的词嵌入层(Word Embedding)将输入字符转换为维度d的向量。这种设计使得模型能够捕捉到序列中的长距离依赖关系,并且对于不同的任务和数据集,Transformer模型都表现出了强大的泛化能力。
第一步:首先我们构建6个基础组件:
多头注意力 (Multi-head Self-Attention)
前馈网络 (Position-wise Feed-Forward Network)
层归一化 ( Layer Normalization)
残差连接 (Residual Connection)
单词嵌入 Word Embedding
位置编码(Positional Encoding)
这6个基础组件类似用最基础的积木块搭建了 墙壁,屋顶,篱笆,厅柱,大门,窗户 这样的模块。
第二步:
然后用这6个基础组件构建了3个中间成品: 编码器,解码器,产生器。类似用基础组件构建了城堡的主楼,塔楼,花园。
第三步:
最后用这3个中间成品组装成Tranformer完整模型。类似用主楼,塔楼,花园这样的中间成品拼凑出一座完整美丽的城堡。
1, 多头注意力: Multi Head Attention (用于融合不同单词之间的信息, 三处使用场景,①Encoder self-attention, ② Decoder masked-self-attention, ③ Encoder-Decoder cross-attention)
2, 前馈网络: Positionwise Feed Forward (用于逐位置将多头注意力融合后的信息进行高维映射变换,简称FFN)
3, 层归一化: Layer Norm (用于稳定输入,每个样本在Sequece和Feature维度归一化,相比Batch Norm更能适应NLP领域变长序列)
4, 残差连接: Res Connection (用于增强梯度流动以降低网络学习难度, 可以先Layer Norm再Add,Layer Norm也可以放在残差Add之后)
5, 单词嵌入: Word Embedding (用于编码单词信息,权重要学习,输出乘了sqrt(d_model)来和位置编码保持相当量级)
6, 位置编码: Position Encoding (用于编码位置信息,使用sin和cos函数直接编码绝对位置)
7, 编码器: Transformer Encoder (用于将输入Sequence编码成与Sequence等长的memory向量序列, 由N个Transformer Encoder Layer堆叠而成)
8, 解码器: Transformer Decoder (用于将编码器编码的memory向量解码成另一个不定长的向量序列, 由N个Transformer Decoder Layer堆叠而成)
9, 生成器: Generator (用于将解码器解码的向量序列中的每个向量映射成为输出词典中的词,一般由一个Linear层构成)
10, 变形金刚: Transformer (用于Seq2 Seq转码,例如用于机器翻译,采用Encoder Decoder架构,由Encoder, Decoder 和 Generator组成)
通过上面这些组件的构建和搭配,transformer模型就搭建完成了,这些都是概念上的搭建,后续还需要通过pytorch逐一时间各个组件。
测试的同学先了解清楚模型的内部结构及关联关系,在进一步使用python实现,并进行数据预训练。