gpt2与gpt的模型结构差别不大,但是采用了更大的数据集进行实验。
    
    gpt采用的训练方法分为两步,第一步利用没有标签的文本数据集训练语言模型,第二步是根据具体的下游任务,例如QA,文本分类等对模型进行微调。
    
    
     预训练:和传统的语言模型一样通过上文预测下一个单词
    
    
    例如给定一个句子[u1,u2,…un],GPT在预测单词ui的时候只会利用[u1,u2,…u(i-1)]的信息,而BERT会利用[u1,u2,…,u(i-1),u(i+1),…un]的信息
    
    
    模型效果:
    
     GPT因为采用了传统语言模型所以更加适合用于自然语言生成类的任务(NLG),因为这些任务是根据当前信息生成下一刻的信息,而BERT更是和用于自然语言理解任务(NLU)。
    
    
    模型结构:
    
     GPT采用了Transformer的Decoder,而BERT采用了Transformer中的Encoder。GPT使用Decoder中的Mask Multi-Head Attention结构,在使用[u1,u2,…u(i-1)]预测单词ui的时候,会将ui之后的单词Mask掉。
    
    
    2.原装的Transformer Decoder和GPT Decoder内容进行对比
    
    
    GPT使用句子序列预测下一个单词,因此要采用Mask Multi-Head Attention对单词的下文遮挡,防止信息泄漏。
    
     例如给定一个句子包含4个单词[A,B,C,D],GPT需要利用A预测B,利用[A,B]预测C,利用[A,B,C]预测D,而预测B的时候,需要将[B,C,D]Mask起来。
    
    
    Mask是在Self-Attention进行Softmax之前进行的,具体做法是将Mask的位置用一个无穷小的数替换-inf,然后再softmax,具体的操作如下所示。
    
    
    
    可以看到,经过Mask和Softmax之后,当GPT根据单词A预测单词B时,只能使用单词A的信息,根据[A,B]预测单词C时只能利用单词A,B的信息,这样就能防止信息泄漏。
    
    下图是GPT整体模型图,其中包含了12个Decoder。
    
    
    
     GPT训练过程
    
    
    GPT训练过程分为两个部分:无监督预训练语言模型和有监督的下游任务
    
    预训练语言模型
    
    
     3.1 预训练语言模型
    
    
    给定句子U=[u1,u2,…un],GPT训练语言模型需要最大化下面的似然函数
    
    
    可以看到GPT是一个单向的模型,GPT的输入用h0表示,h0的计算公式如下。
    
    
    其中
    
     
      
       W 
P
        W_{P}
      
      
       
        
        
        
         
          W
         
         
          
           
            
             
              
              
              
               
                
                 P
                
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
       
      
     
    
    是单词的position Embedding,
    
     
      
       W 
e
        W_{e}
      
      
       
        
        
        
         
          W
         
         
          
           
            
             
              
              
              
               
                
                 e
                
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
       
      
     
    
    是单词的word embedding。用voc表示词汇表的大小,pos表示最长句子的长度,dim表示Embedding的维度,则
    
     
      
       W 
p
        W_{p}
      
      
       
        
        
        
         
          W
         
         
          
           
            
             
              
              
              
               
                
                 p
                
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
       
      
     
    
    是一个pos
    
     dim的矩阵,
     
      
       
        W 
e
         W_{e}
       
       
        
         
         
         
          
           W
          
          
           
            
             
              
               
               
               
                
                 
                  e
                 
                
               
              
             
             
              
             
            
            
             
              
              
             
            
           
          
         
        
       
      
     
     是一个voc
    
    dim的矩阵。
    
    得到输入
    
     
      
       h 
0
        h_{0}
      
      
       
        
        
        
         
          h
         
         
          
           
            
             
              
              
              
               
                
                 0
                
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
       
      
     
    
    之后,需要将
    
     
      
       h 
0
        h_{0}
      
      
       
        
        
        
         
          h
         
         
          
           
            
             
              
              
              
               
                
                 0
                
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
       
      
     
    
    依次传入GPT的所有Transformer Decoder里,最终得到
    
     
      
       h 
t
        h_{t}
      
      
       
        
        
        
         
          h
         
         
          
           
            
             
              
              
              
               
                
                 t
                
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
       
      
     
    
    。
    
    
    
     3.2 下游任务fine-tuning
    
    
    GPT经过预训来之后,会针对具体的下游任务对模型进行微调,微调的过程采用的是有监督学习,训练样本包括单词序列
    
     
      
       [ 
x
1
,
x
2…
x
m
]
        [x1,x2…xm]
      
      
       
        
        
        
         [
        
        
         x
        
        
         1
        
        
         ,
        
        
        
        
         x
        
        
         2
        
        
         .
        
        
         .
        
        
         .
        
        
         x
        
        
         m
        
        
         ]
        
       
      
     
    
    和类标y。GPT微调的过程中根据单词序列[x1,x2,…xm]预测类标y。
    
    
    
     
      
       w 
y
        w_{y}
      
      
       
        
        
        
         
          w
         
         
          
           
            
             
              
              
              
               
                
                 y
                
               
              
             
            
            
             
            
           
           
            
             
             
            
           
          
         
        
       
      
     
    
    表示预测输出的参数,微调时候需要最大化以下函数
    
    
    GPT在微调的时候也考虑预训练的损失函数,所以最终需要优化的函数为:
    
    
    
     4.GPT总结
    
    
    GPT预训练时利用上文预测下一个单词,BERT是根据上下文预测单词,因此在很多NLU任务上,GPT效果都比BERT要差。但是GPT更加适合用于文本生成的任务,因为文本生成通常都是基于当前已有的信息,生成下一个信息。
   
 
