一、背景信息:
GPT是2018 年 6 月由OpenAI 提出的预训练语言模型。
 GPT可以应用于复杂的NLP任务中,例如文章生成,代码生成,机器翻译,问答对话等。
 GPT也采用两阶段的训练过程,第一阶段是无监督的方式来预训练生成式的语言模型,第二阶段根据特定任务进行微调。
 GPT的网络架构使用的是多层Transformer Decoder改的结构。
二、整体结构:
GPT 使用Transformer的 Decoder 结构,并进行了一些改动,GPT 中的Decoder只保留了原Decoder中的第一个Attention模块Mask Multi-Head Attention。
 
GPT堆叠了12个Transformer的Decoder模块作为解码器,然后通过全连接得到输出的概率分布。
 GPT中采用的是单向的语言模型,即通过上文预测当前的词,而Decoder中的Masked Multi Self-Attention可以起到遮掩待预测的下文内容的效果。
 
GPT 处理不同任务时的输入变换
GPT模型由输入嵌入层、多层Transformer Decoder以及输出层这三个部分组成。
 其中
 1、输入嵌入层: 将输入的文本序列转换为词向量、位置向量并将二者相加得到输入向量。
 2、多层Transformer Decode: 其中每一层由以残差和的方式做LayerNorm的掩码多头自注意力机层与以残差和的方式做LayerNorm的双层前馈神经网络组成。
  
      
       
        
         
          
           
            
           
          
         
         
          
           
            
             
             
               X 
              
              
              
                o 
               
              
                u 
               
              
                t 
               
              
                p 
               
              
                u 
               
              
                t 
               
              
             
            
              = 
             
             
             
               X 
              
              
              
                o 
               
              
                u 
               
              
                p 
               
              
                u 
               
              
                t 
               
              
                − 
               
              
                o 
               
              
                r 
               
              
                i 
               
              
             
            
              ⊗ 
             
             
             
               X 
              
              
              
                M 
               
              
                a 
               
              
                s 
               
              
                k 
               
              
             
            
           
          
         
         
          
           
            
            
              X 
             
            
              = 
             
            
              L 
             
            
              a 
             
            
              y 
             
            
              d 
             
            
              e 
             
            
              r 
             
            
              N 
             
            
              o 
             
            
              r 
             
            
              m 
             
            
              ( 
             
             
             
               X 
              
              
              
                o 
               
              
                u 
               
              
                t 
               
              
                p 
               
              
                u 
               
              
                t 
               
              
             
            
              + 
             
            
              M 
             
            
              a 
             
            
              s 
             
            
              k 
             
            
              M 
             
            
              u 
             
            
              l 
             
            
              t 
             
            
              i 
             
            
              H 
             
            
              e 
             
            
              a 
             
            
              d 
             
            
              A 
             
            
              t 
             
            
              t 
             
            
              e 
             
            
              n 
             
            
              t 
             
            
              i 
             
            
              o 
             
            
              n 
             
            
              ( 
             
             
             
               X 
              
              
              
                o 
               
              
                u 
               
              
                p 
               
              
                u 
               
              
                t 
               
              
             
            
              ) 
             
            
              ) 
             
            
           
          
         
         
          
           
            
            
              X 
             
            
              = 
             
            
              F 
             
            
              e 
             
            
              e 
             
            
              d 
             
            
              F 
             
            
              o 
             
            
              r 
             
            
              w 
             
            
              o 
             
            
              r 
             
            
              d 
             
            
              ( 
             
            
              X 
             
            
              ) 
             
            
              = 
             
            
              m 
             
            
              a 
             
            
              x 
             
            
              ( 
             
            
              0 
             
            
              , 
             
            
              X 
             
             
             
               W 
              
             
               1 
              
             
            
              + 
             
             
             
               b 
              
             
               1 
              
             
            
              ) 
             
             
             
               W 
              
             
               2 
              
             
            
              + 
             
             
             
               b 
              
             
               2 
              
             
             
            
           
          
         
        
       
         \begin{matrix} \\X_{output}=X_{ouput-ori }\otimes X_{Mask} \\X = LayderNorm(X_{output} + MaskMultiHeadAttention(X_{ouput})) \\X = FeedForword(X) = max(0, XW_{1} + b_{1})W_{2} + b_{2}\begin{matrix}\end{matrix} \end{matrix} 
        
       
     Xoutput=Xouput−ori⊗XMaskX=LayderNorm(Xoutput+MaskMultiHeadAttention(Xouput))X=FeedForword(X)=max(0,XW1+b1)W2+b2
 3、输出层: GPT模型的输出层通常为一个全连接层,将多层解码器的输出转换为对应的单词概率分布。
- 分类任务(Classification):将起始和终止token加入到原始序列两端,输入transformer中得到特征向量,最后经过一个全连接得到预测的概率分布。
 - 自然语言推理(Entailment):将前提(premise)和假设(hypothesis)通过分隔符(Delimiter)隔开,两端加上起始和终止token。再依次通过Transformer多层Decoder和全连接得到预测结果。
 - 语义相似度(Similarity):输入的两个句子,正向和反向各拼接一次,然后分别输入给Transformer多层Decoder,得到的特征向量拼接后再送给全连接得到预测结果;
 - 多项选择(MutipleChoice):将n个选项的问题抽象化为n个二分类问题,即每个选项分别和内容进行拼接,然后各送入Transformer多层Decode和全连接中,最后选择置信度最高的作为预测结果。

 
三、GPT训练
GPT的训练包含无监督预训练和有监督fine-tune两个阶段。
GPT的无监督预训练:
假设未标注的词汇集合为 
     
      
       
       
         U 
        
       
         = 
        
        
        
          { 
         
         
          
          
            u 
           
          
            1 
           
          
         
           , 
          
          
          
            u 
           
          
            2 
           
          
         
           , 
          
         
           . 
          
         
           . 
          
         
           . 
          
          
          
            u 
           
          
            n 
           
          
         
        
          } 
         
        
       
      
        U = \left \{ {{u_{1},u_{2},...u_{n}}}\right \} 
       
      
    U={u1,u2,...un},GPT模型的优化目标是对参数进行最大似然估计:
  
      
       
        
         
         
           L 
          
         
           1 
          
         
        
          ( 
         
        
          U 
         
        
          ) 
         
        
          = 
         
         
         
           ∑ 
          
         
           i 
          
          
         
        
          l 
         
        
          o 
         
        
          g 
         
        
          P 
         
        
          ( 
         
         
         
           u 
          
         
           i 
          
         
        
          ∣ 
         
         
         
           u 
          
         
           1 
          
         
        
          , 
         
        
          . 
         
        
          . 
         
        
          . 
         
        
          , 
         
         
         
           u 
          
          
          
            k 
           
          
            − 
           
          
            1 
           
          
         
        
          ; 
         
        
          Θ 
         
        
          ) 
         
        
       
         L_{1}(U) = \sum_{i}^{} log P(u_{i}|u_{1},...,u_{k-1};\Theta ) 
        
       
     L1(U)=i∑logP(ui∣u1,...,uk−1;Θ)
 其中,k是滑动窗口的大小, P 为条件概率,  
     
      
       
       
         Θ 
        
       
      
        \Theta 
       
      
    Θ为条件概率的参数, 参数更新采用随机梯度下降(SGD)方法。
 下面是整个过程的公式示例:
  
      
       
        
        
          { 
         
         
          
           
            
             
              
              
                h 
               
              
                0 
               
              
             
               = 
              
             
               U 
              
              
              
                W 
               
              
                e 
               
              
             
               + 
              
             
               W 
              
             
               p 
              
             
            
           
          
          
           
            
             
              
              
                h 
               
              
                l 
               
              
             
               = 
              
             
               T 
              
             
               r 
              
             
               a 
              
             
               n 
              
             
               s 
              
             
               f 
              
             
               o 
              
             
               r 
              
             
               m 
              
             
               e 
              
             
               r 
              
             
               D 
              
             
               e 
              
             
               c 
              
             
               o 
              
             
               d 
              
             
               e 
              
             
               r 
              
             
               B 
              
             
               l 
              
             
               o 
              
             
               c 
              
             
               k 
              
             
               ( 
              
              
              
                h 
               
               
               
                 l 
                
               
                 − 
                
               
                 q 
                
               
              
             
               ) 
              
             
            
           
          
          
           
            
             
             
               P 
              
             
               ( 
              
             
               u 
              
             
               ) 
              
             
               = 
              
             
               s 
              
             
               o 
              
             
               f 
              
             
               t 
              
             
               m 
              
             
               a 
              
             
               x 
              
             
               ( 
              
              
              
                h 
               
              
                n 
               
              
              
              
                W 
               
              
                e 
               
              
                T 
               
              
             
               ) 
              
             
            
           
          
         
        
       
         \left\{\begin{matrix}h_{0} = UW_{e} + W{p} \\h_{l} = TransformerDecoderBlock(h_{l-q}) \\P(u) = softmax(h_{n}W_{e}^{T} ) \end{matrix}\right. 
        
       
     ⎩ 
              ⎨ 
              ⎧h0=UWe+Wphl=TransformerDecoderBlock(hl−q)P(u)=softmax(hnWeT)
输入嵌入层:W e W_{e} We是token的词向量Embedding矩阵, W p W_{p} Wp是位置编码的Embedding矩阵,二者求和得到输入向量矩阵 h 0 h_{0} h0多层Transformer Decode:TransformerDecoderBlock指多层Decoder模块输出层:通过Softmax函数将输出的词向量转换为对应的单词概率分布
GPT的有监督fine-tune:
预训练后,需要针对特定任务进行有监督Fine-Tuning。
 这里以一个文本分类任务举例,展示GPT在某一任务有监督微调的过程。
 假设带标注的数据集C中的输入序列X为 
     
      
       
       
         [ 
        
        
        
          x 
         
        
          1 
         
        
       
         , 
        
       
         . 
        
       
         . 
        
       
         . 
        
       
         , 
        
        
        
          x 
         
        
          m 
         
        
       
         ] 
        
       
      
        [x^{1},..., x^{m}] 
       
      
    [x1,...,xm];模型的输出y是一个分类标签; 
     
      
       
        
        
          h 
         
        
          l 
         
        
          m 
         
        
       
      
        h_{l}^{m} 
       
      
    hlm代表Decoder层最后的输出; 
     
      
       
        
        
          W 
         
        
          y 
         
        
       
      
        W_{y} 
       
      
    Wy代表输出层的Softmax参数。 
     
      
       
        
        
          L 
         
        
          2 
         
        
       
         ( 
        
       
         C 
        
       
         ) 
        
       
      
        L_{2}(C) 
       
      
    L2(C)是分类任务的最大似然函数, 
     
      
       
        
        
          L 
         
        
          3 
         
        
       
         ( 
        
       
         C 
        
       
         ) 
        
       
      
        L_{3}(C) 
       
      
    L3(C)是整体的最大似然函数;GPT 在微调的时候需要同时考虑预训练的损失函数,因此微调的训练目标是最大化似然函数 
     
      
       
        
        
          L 
         
        
          3 
         
        
       
         ( 
        
       
         C 
        
       
         ) 
        
       
      
        L_{3}(C) 
       
      
    L3(C).
  
      
       
        
        
          { 
         
         
          
           
            
             
             
               P 
              
             
               ( 
              
             
               y 
              
             
               ∣ 
              
              
              
                x 
               
              
                1 
               
              
             
               , 
              
             
               . 
              
             
               . 
              
             
               . 
              
             
               , 
              
              
              
                x 
               
              
                m 
               
              
             
               ) 
              
             
               = 
              
             
               s 
              
             
               o 
              
             
               f 
              
             
               t 
              
             
               m 
              
             
               a 
              
             
               x 
              
             
               ( 
              
              
              
                h 
               
              
                l 
               
              
                m 
               
              
              
              
                W 
               
              
                y 
               
              
             
               ) 
              
             
            
           
          
          
           
            
             
              
              
                L 
               
              
                2 
               
              
             
               ( 
              
             
               C 
              
             
               ) 
              
             
               = 
              
              
              
                ∑ 
               
               
               
                 x 
                
               
                 , 
                
               
                 y 
                
               
               
              
             
               l 
              
             
               o 
              
             
               g 
              
             
               P 
              
             
               ( 
              
             
               y 
              
             
               ∣ 
              
              
              
                x 
               
              
                1 
               
              
             
               , 
              
             
               . 
              
             
               . 
              
             
               . 
              
             
               , 
              
              
              
                x 
               
              
                m 
               
              
             
               ) 
              
             
            
           
          
          
           
            
             
              
              
                L 
               
              
                3 
               
              
             
               ( 
              
             
               C 
              
             
               ) 
              
             
               = 
              
              
              
                L 
               
              
                2 
               
              
             
               ( 
              
             
               C 
              
             
               ) 
              
             
               + 
              
             
               λ 
              
             
               × 
              
              
              
                L 
               
              
                1 
               
              
             
               ( 
              
             
               C 
              
             
               ) 
              
             
            
           
          
         
        
       
         \left\{\begin{matrix}P(y|x^{1},..., x^{m}) = softmax(h_{l}^{m}W_{y}) \\L_{2}(C) = \sum_{x,y}^{} log P(y|x^{1},..., x^{m}) \\L_{3}(C) = L_{2}(C) + \lambda \times L_{1}(C) \end{matrix}\right. 
        
       
     ⎩ 
              ⎨ 
              ⎧P(y∣x1,...,xm)=softmax(hlmWy)L2(C)=∑x,ylogP(y∣x1,...,xm)L3(C)=L2(C)+λ×L1(C)
Reference
1.Attention Is All You Need
 2.BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
 3.Improving Language Understanding by Generative Pre-Training
 










