参考学习:

举个例子讲下transformer的输入输出细节及其他 - 知乎 (zhihu.com)

transformer详细介绍(1)__输入Embedding与位置编码_input embedding-CSDN博客

本文只是为了加强记忆而书写,具体想学习进入链接学习更清晰。

Transformer模型主要是编码器与译码器,下面是模型的框架图:

 编码器部分包含多头注意力机制,层归一化,前馈神经网络还有残差的思想保证其性能不降低;

解码器部分和编码器部分也是差不多,但是在第一个多头注意力机制中增添了掩码处理Masked,好像说是因为避免未来的信息对影响现在的信息所以增添的掩码处理。

这里不对其模型模块做过多笔记,主要是想记录其输入的词嵌入和位置编码的处理。

Transformer模型不像RNN和CNN网络一样对位置分布信息具有处理能力,但是对于文本信息来说就比如翻译而言,位置信息是很重要的,不能光翻译出单个词的意思而忽略了词在句子中的位置,比如说我爱你,和你爱我,换个位置就是不同的意义了,所以其位置信息也很重要。

Embedding:

词嵌入部分,还是依据翻译来讲解,原句:"我爱吃苹果",翻译句:"I love eating apples"。这就是一对样本数据

对原局进行词嵌入,相当于对这个句子编码为一个数字矩阵,这里设定句子中每一个单词对应一个(1,embedding_dimension​ =512)的词向量,那么在原句中"我","爱",“吃”,“苹果”,这四个词通过词嵌入处理这句话就变为(4,512)的矩阵,但是我们不能保证输入的每一句的句子词都是固定的数量,比如上面的例子就是4个词,所以设定一个最大词长度max_seqence_length,如果词长度小于这个标准就padding一下,把剩下的位置全部填充为0,假设最大词长度为20,以上面给出的例子来说,"我爱吃苹果"这句话通过词嵌入会变成一个(20,512)的矩阵,但是训练的时候是按批次提取训练的,一批有batch个句子,所以最后一次训练的词嵌入输入维度为(设定的batch,设定的最大词长度max_seqence_length=20,设定的embedding_dimension​=512)。

 

Positional Encoding:

位置编码部分,上面说的Embedding(词嵌入)这里只是单纯的把句子转换为数字进行编码,但是不存在其位置的关联,我们还要注意位置的信息,对于一个句子来说其位置编码和词嵌入的维度是一模一样的,还是拿上面设定的数据来表示,那么一个句子的位置编码就为(20,512)保持一致,那么最后一个批次的位置编码也是和词嵌入相同为(设定的batch,设定的最大词长度max_seqence_length=20,设定的512)。

那么一个句子到底是怎么位置编码的呢?其公式如下图:

 

 

最终的输入就是想词嵌入和位置编码相加作为输入,这就其矩阵大小需要相同的原因。