transformer模型

transformer

Posted by abhhay on July 24, 2022

1.参考:

attention is all you need

简书博客

2.目录

1.transformer来由

​ transformer模型是Google公司提出的一种seq2seq模型,其本身最重要的核心点就是应用了大量的attention机制来代替传统的rnn。

img

​ 图1 Transformer架构图

2.Encoder部分

Encoder部分是transformer最重要的部分,理解了编码器就能快速掌握解码器,因为解码器的结构和编码器是类似的,知只是换成了 Masked Muti-Head Attention机制(masked机制指的是每次在进行计算的时候只能看到过去的输出,而不能看到未来的输出)

  1. input Embedding ——> 输入矩阵X([batch,seq_len])经过embedding变成([batch,seq_len,embed])。

  2. positional Encording ——> RNN具有先天的位置信息(按照顺序一个个输入),而transformer需要一个位置嵌入,用来标记位置关系,input Embedding+positional Encording 相加输入到第3步。

  3. 第3部分就是上一次self attention的讲解,简单来说就是求一个序列中每个向量和其他向量的相似度,其输入与输出是维度是保持不变,多头代表的多套注意力机制,多头的自注意力机制是为了获得不同特征下不同的语义,模型分为多个头,形成多个子空间,可以让模型去关注不同方面的信息,最后再将各个方面的信息综合起来。

    在这儿最开始我简单理解的多头是[batch * seq_len * embed] 加入多头后[batch * seq_len * (embed * n)] 当时我就在纳闷n头注意力机制他的矩阵都是一样的为啥能获得其他语义信息,后面明白了[batch * seq_len * n *(embed//n)] 词向量的维度要能被n整除 。

  4. Add & Norm

    1. Add :这个地方用到了ResNet的思想,用到了残差连接,原因是:随着网络模型的不断加深,会出现梯度消失,梯度爆照,或者过拟合。(后面简称退化问题 )
    2. Norm:这个地方使用的是layer Normalization。Normalization,那就是把输入转化成均值为 0 方差为1的数据,可以提高模型的训练速度和精度,使得模型更加稳健。layer Normalization 和batch Normalization的区别是 前者对一层中的不同特征进行归一化处理,而后者则是在每一个批次中进行处理。
  5. 两次线性变换之后并经过relu激活函数,之后重复Add&Norm之中的操作。

  6. 3-5步 称之为一个block。循环多次最后输出维度和原输入维度相同,值不同的矩阵。

3.Decoder部分

​ Masked Muti-Head Attention

​ 传统的Seq2Seq中的Decoder使用的是RNN模型,因此在训练过程中t时刻只能看到t-1时刻的信息,而看不到t+1时刻的信息,而transformer模型改用self-attention机制,在训练的过程中,信息都暴露在decoder中,所以明显是有问题的,所以我们需要对Decoder进行特殊的处理,这个就叫Masked Muti-Head Attention(我理解的意思是,如果暴露了信息,整个模型都学不到相应的权重参数)

4.Masked Encoder-Decoder Attention

imgs

其实这一部分的计算流程和前面 Masked Self-Attention 很相似,结构也一摸一样,唯一不同的是这里的 K,V为 Encoder 的输出, 为QDecoder 中 Masked Self-Attention 的输出。

优点

RNN结构属于串行运行,在编码器的过程中,所有的语义都被压缩到一个给定维度的向量中,其本身就会损失一定的语义信息,尽管有改良的双向RNN,但还是没有注意力机制勇猛,不管空间上的距离,每个字的距离都是相同,能观察到一段序列中不同文字的相似度。 所以他的特征抽取能力会比RNN模型好。

###

结语

励志做一个有梦想的NLPer

                                                                          坑坑 加油