总结GPT1和GPT2

参考链接:

  1. https://blog.csdn.net/hyzhyzhyz12345/article/details/104181606
  2. https://www.jianshu.com/p/a68288613a0f
  3. https://blog.csdn.net/u012526436/article/details/87882985
  4. https://www.jianshu.com/p/6c2bfa1848f2
  5. https://zhuanlan.zhihu.com/p/57251615
  6. https://www.jiqizhixin.com/articles/2019-08-26-12

GPT1

全称:Generative Pre-Training 1.0
论文:《Improving Language Understanding by Generative Pre-Training》

概述

GPT1采用了NLP中常用的“预训练+微调(generative pre-training + discriminative fine-tuning)”的模式。

由于LSTM等结构在捕获长期依赖的局限性,GPT1的模型是Transformer的Decoder部分,其采用的self-attention机制较好地弥补了LSTM的弊端。

框架

1.无监督的预训练阶段(Unsupervised pre-training)

给定一个无监督的(无标签)tokens语料库 U = { u 1 , ⋅ ⋅ ⋅ , u n } \mathrm{U}=\left \{u_{1},\cdot \cdot \cdot ,u_{n}\right \} U={u1,,un},选择标准的语言模型目标函数(即根据前 k k k个词预测下一个词),需最大化:

L 1 ( U ) = ∑ i l o g   P ( u i ∣ u i − k , ⋅ ⋅ ⋅ , u i − 1 ; Θ ) L_{1}\left ( \mathrm{U}\right )=\sum_{i}^{}log\ P\left ( u_{i}|u_{i-k},\cdot \cdot \cdot ,u_{i-1};\Theta \right ) L1(U)=ilog P(uiuik,,ui1;Θ)

其中, k k k为token的上下文窗口大小,条件概率 P P P使用参数为 Θ \Theta Θ的神经网络建模。GPT1的结构示意图如下:
在这里插入图片描述
1)输入为前k个词和位置的embedding

h 0 = U W e + W p h_{0}=UW_{e}+W_{p} h0=UWe+Wp

其中, U = ( u − k , ⋅ ⋅ ⋅ , u − 1 ) U=\left ( u_{-k},\cdot \cdot \cdot ,u_{-1}\right ) U=(uk,,u1)为token上下文one-hot向量,则 U W e UW_{e} UWe为上下文对应的embedding。

2)经过n层transformer-decoder层(12层)

h l = t r a n s f o r m e r b l o c k ( h l − 1 )   ∀ l ∈ [ 1 , n ] h_{l}=transformer_block\left ( h_{l-1}\right )\ \forall l\in \left [ 1,n\right ] hl=transformerblock(hl1) l[1,n]

3)乘上一个token embedding矩阵,通过softmax得到概率

P ( u ) = s o f t m a x ( h n W e T ) P\left ( u\right )=softmax\left ( h_{n}W_{e}^{T}\right ) P(u)=softmax(hnWeT)

2.有监督的微调阶段(Supervised fine-tuning)

微调过程的示意图如下:
在这里插入图片描述
对比预训练阶段,可以看出,只是多增加了“Task Classifier”模块。

对于有监督的训练,数据集 C \textrm{C} C每个样本自然包括一个输入tokens序列 x 1 , ⋅ ⋅ ⋅ , x m x^{1},\cdot \cdot \cdot ,x^{m} x1,,xm和对应的标签 y y y,具体任务相应的目标函数为:

L 2 ( C ) = ∑ ( x , y ) l o g   P ( y ∣ x 1 , ⋅ ⋅ ⋅ , x m ) L_{2}\left ( \textrm{C}\right )=\sum_{\left ( x,y\right )}^{}log\ P\left ( y|x^{1},\cdot \cdot \cdot ,x^{m}\right ) L2(C)=(x,y)log P(yx1,,xm)

其中, P ( y ∣ x 1 , ⋅ ⋅ ⋅ , x m ) = s o f t m a x ( h l m W y ) P\left ( y|x^{1},\cdot \cdot \cdot ,x^{m}\right )=softmax\left ( h_{l}^{m}W_{y}\right ) P(yx1,,xm)=softmax(hlmWy) h l m h_{l}^{m} hlm为最后一个token x m x^{m} xm对应的最后一层transformer-decoder的输出。所以需要额外调整的参数只有 W y W_{y} Wy

最终,微调阶段的目标函数为:

L 3 ( C ) = L 2 ( C ) + λ ∗ L 1 ( C ) L_{3}\left ( \textrm{C}\right )=L_{2}\left ( \textrm{C}\right )+\lambda \ast L_{1}\left ( \textrm{C}\right ) L3(C)=L2(C)+λL1(C)

上图还展示了一个细节,就是针对不同的任务,模型的输入token序列是有区别的:

  1. 对于文本分类任务,输入格式与预训练时一样,[start;text;extract];

  2. 对于文本蕴含任务,在前提(premise)和假设(hypothesis)间加上了一个分隔符(delimiter),[start;premise;delimiter;hypothesis;extract];
    注:文本蕴含任务(text entailment),它的任务形式是:给定一个前提文本(premise),根据这个前提去推断假设文本(hypothesis)与前提文本的关系,一般分为蕴含关系(entailment)和矛盾关系(contradiction),蕴含关系(entailment)表示从前提文本中可以推断出假设文本;矛盾关系(contradiction)即假设文本与前提文本矛盾。文本蕴含的结果就是这几个概率值。

  3. 对于文本相似性度量任务,由于两个文本间没有相对顺序,所以把两种情况([start;text1;delimiter;text2;extract]和[start;text2;delimiter;text1;extract])分别处理后得到两个 h l m h_{l}^{m} hlm后,再按位相加经过全连接层;

  4. 对于问答和常识推理任务,将上下文文档(context document)和问题(question)与不同的答案(answer)分别拼接起来([start;context;question;delimiter;answer1];[start;context;question;delimiter;answer2]…),经过模型后,再经过softmax层。

GPT2

全称:Generative Pre-Training 2.0
论文:《Language Models are Unsupervised Multitask Learners》

概述

GPT2有4个不同的版本,分别如下图所示,区别在于embedding的维度和transformer-decoder的层数。所有的模型目前在WebText上都还存在欠拟合的情况,如果给更多的时间去训练的话效果还能进一步的提升。

在这里插入图片描述

GPT2与GPT1

最主要的区别还是GPT2完全变成无监督训练,直接用于下游任务,属于零样本学习(Zero-shot learning)。下面具体介绍一些区别。

输入表征(Input Representation)

为了解决word级别的embedding常存在的OOV问题(out-of-vocabulary,即词典以外的词汇),而字符级的embedding效果又不太好。

本文采用了字节对编码(BPE,Byte Pair Encoding),即将频率高的字节对一起编码。
(以下部分内容为本人的推测)
GPT2可能使用的是UTF-8的编码方式,如下图所示,UTF-8会将字符以8位为一个编码单元进行编码,所以只需要有0~255对应的embedding就可以得到每个字符embedding(与原文“a byte-level version of BPE only requires a base vocabulary of size 256.”对应),如将266、128、188对应的embedding加起来就得到了“!!”的embedding。
在这里插入图片描述

但这种效果肯定不好,所以对高频的字符串应该进行额外学习embedding,如“dog”有很高的频率一起出现,所以单独给它一个embedding。但“dog?”、“dog.”、“dog!”等也有很高的频率一起出现,如果也单独给它们一个embedding有些浪费资源,所以设置一个规则:对于包含多类字符的字符串不额外学习embedding。

如此,GPT2不需要任何预处理即可用于任意数据集。

模型(Model)

  1. Layer normalization层被移动到了每个子块的输入;
  2. 在每个self-attention block后加normaliztion;
  3. 修改residual layers的权重( 1 / N 1/\sqrt{N} 1/N ,其中 N \sqrt{N} N 为残差层的数量),即残差层的参数初始化根据网络深度进行调节;
  4. 词汇量增加到50257;
  5. 上下文大小从512增加到1024;
  6. batchsize增加到512

GPT2的模型大概八成可能也就像下图右一:
在这里插入图片描述

参数个数统计

GPT2-small的参数统计表如下:
在这里插入图片描述
其中,attn/c_attn和attn/c_proj分别为Self-Attention模块中的attention矩阵和映射矩阵;attn/c_proj和attn/fc分别为Feed-Forward模块中的全连接层和映射层;ln_1和ln_2为两个Layer Normalization层。

如何使用

这里直接借用了李宏毅老师的ppt:
在这里插入图片描述
可以看出,在使用模型时,只需要给GPT少量的文本和提示词,GPT就可以自动完成阅读理解、文本摘要和翻译等任务。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
GPT-2是基于Transformer的一种著名的语言模型,它在自然语言处理任务中取得了很好的效果。下面是对GPT-2和Transformer的介绍: 1. GPT-2(Generative Pre-trained Transformer 2)是OpenAI开发的一种基于Transformer的语言模型。它是一个无监督学习的模型,通过大规模的语料库进行预训练,然后可以用于各种自然语言处理任务,如文本生成、机器翻译和问答系统等。GPT-2的特点是能够生成连贯、有逻辑的文本,并且可以根据上下文进行语义理解和生成。 2. Transformer是一种用于序列到序列(sequence-to-sequence)任务的模型架构,它由Attention机制和多层的自注意力机制组成。Transformer的主要优势在于能够并行计算,因此在处理长序列时比传统的循环神经网络(RNN)更高效。Transformer在机器翻译、文本摘要、语音识别等任务中取得了很好的效果。 下面是一个使用GPT-2生成文本的示例: ```python import torch from transformers import GPT2LMHeadModel, GPT2Tokenizer # 加载预训练的GPT-2模型和分词器 model_name = 'gpt2' model = GPT2LMHeadModel.from_pretrained(model_name) tokenizer = GPT2Tokenizer.from_pretrained(model_name) # 输入文本 input_text = "Hello, how are you?" # 将输入文本编码为模型可接受的输入格式 input_ids = tokenizer.encode(input_text, return_tensors='pt') # 使用GPT-2生成文本 output = model.generate(input_ids, max_length=50, num_return_sequences=1) # 解码生成的文本 generated_text = tokenizer.decode(output[0], skip_special_tokens=True) print(generated_text) ``` 这段代码使用了Hugging Face的transformers库,首先加载了预训练的GPT-2模型和分词器,然后将输入文本编码为模型可接受的输入格式,最后使用GPT-2生成文本。生成的文本可以根据需要进行解码和处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值