Multi-Head Attention和Transformer Decoder(GPT)详解

文章目录

  • 一、Transformer的Attention
    • 1. Self-Attention
    • 2. Masked Self-Attention
    • 3. Multi-Head Attention
  • 二、Transformer Decoder(GPT)
    • 1. GPT的网络结构
    • 2. GPT的计算原理

一、Transformer的Attention

1. Self-Attention

  如前篇文章所述,Scaled dot-prodect Attention是先计算Query和各个Key的相似性,即每个Key对应Value的权重系数,进而对Value进行加权求和(矩阵乘法),即得到了最终的Attention数值。其中,Key和Value是相同的数值,即代表同一个来源的句子,Query代表的是目标句子,Query和Key往往是不同的。
  而在Self-Attention中,Query则和Key、Value相同,故而这时的Attention称为Self-Attention,即句子中每个词在这个句子中的Attention,如下图:
Multi-Head Attention和Transformer Decoder(GPT)详解_第1张图片

2. Masked Self-Attention

  Masked Self-Attention是对Self-Attention的改进,在Self-Attention中,会计算每个单词与句子中所有其他单词的关系权重。而在实际的自然语言生成过程中,句子都是逐字生成的,当前字正在生成时,该字后边的句子内容还是未知的,即为空,因此,影响当前字的只有当前位置之前的句子,而不包括当前位置之后还处于未知状态的内容。此时Masked Self-Attention应运而生,如下图:
Multi-Head Attention和Transformer Decoder(GPT)详解_第2张图片
  上述公式中,给Q和K的权重系数矩阵,加上一个右上角的值全为“负无限大”的矩阵,这样就掩盖了当前的Query与其后所有字的权重系数(置为0),称为Masked Self-Attention。
  上节中的例子经过Mask后,变为如下形式:
Multi-Head Attention和Transformer Decoder(GPT)详解_第3张图片

3. Multi-Head Attention

  Multi-Head Attention即将QKV映射到不同的空间让多个Head去学习不同的特征,从而均衡同一种注意力机制可能产生的偏差,让词义拥有来自更多元的表达,实验表明可以提升模型效果。原理如下图:
Multi-Head Attention和Transformer Decoder(GPT)详解_第4张图片
  那么,如何获得同一组QKV的不同空间特征呢?答案是进行线性变换,即对每组QKV,通过Linear计算,取得对应的特征矩阵,再对不同的特征矩阵组做Attention计算,最后将计算结果合并到一起且再经过Linear计算,得到最终的Multi-Head Attention,如下图:
Multi-Head Attention和Transformer Decoder(GPT)详解_第5张图片
  注:d_model(词向量的维度)等于d_k(Linear变换的矩阵维度)乘以h(Head的数量)。

二、Transformer Decoder(GPT)

1. GPT的网络结构

Multi-Head Attention和Transformer Decoder(GPT)详解_第6张图片
  上图是一个标准的GPT(Transformer Decoder)的网络结构,从下往上,共分为如下几个部分:
  1. Inputs:GPT的输入,常见的是一段文字输入。在GPT中,我们会先将输入的句子中每个文字(或词语)映射为机器可以识别的token(即一个数字),常见的方法是维护一个词汇表,取该文字(或词语)在词汇表中的index为token。对于中文的句子,还要注意一句话中某些字可以组成一个词语,代表某一个完整的意思,那么这个词语在词汇表中的index就作为token,而不是将词语中的每个字拆开分别查找index;
  2. Input Embedding:Embedding即词向量,该层是将输入的token映射为更紧凑的矩阵(1中映射得来的token转换成one-hot编码后,是一个稀疏矩阵,浪费了大量的计算资源,故需要转换成更紧凑的矩阵);
  3. Positional Encoding:位置编码是将每个字(词)在句子中的位置做相应编码(即一个代表[1, 2, 3, …]的向量),并将其与输入相加,目的是让模型知道每个字(词)在句子中的位置信息,实验表明,该方式可以提高模型的准确度;
  4. Multi-Head Attention:如上节所述,该层用于计算QKV的权重系数矩阵,即Attention,注意,这里的Attention是Masked Self-Attention;
  5. Add&Norm:类似于残差网络的设计,将经过Multi-Head Attention前的输入,和经过Multi-Head Attention之后的输出相加并做Norm,可以让信息保存的更加完整;
  6. Feed Forward:该层由两个Dense层组成,激活函数是relu,作用是对Attention做线性变换,更好的识别其代表的特征;
  7. Add&Norm:同5;
  8. Linear&Softmax:输出层,输出一个固定长度的文字序列,每个文字有不同的准确率(由于存在Softmax,所有的概率相加为1),如果想让模型输出更加多样化,则可以随机选择准确率最大的几个字,反之,则减小选择的范围;
  注:图中的N,代表重复N次,不同的GPT版本N的大小不同,代表的参数规模也不同。

2. GPT的计算原理

  GPT的计算过程基本如1中所述,这里引用一张网络上的图片做个总结:
在这里插入图片描述

你可能感兴趣的:(机器学习/深度学习,transformer,gpt,深度学习)