LLM 系列超详细解读 (一):GPT:无标注数据的预训练生成式语言模型

本系列已授权极市平台,未经允许不得二次转载,如有需要请私信作者。
专栏目录

本文目录

1 GPT:无标注数据的预训练生成式语言模型
(来自 OpenAI)
1.1 背景和动机
1.2 GPT 的无监督预训练过程
1.3 GPT 的有监督微调过程
1.4 把不同的子任务统一输入的形式
1.5 实验结果
太长不看版

2022年底-2023年初由 OpenAI 提出的 ChatGPT 和 GPT-4,在一系列生成,对话,翻译和多模态任务中取得了震惊世界的效果。而这两个工作的基础是发布于2018年-2020年的 GPT,GPT-2,GPT-3 模型。GPT 系列模型的特点是巨大的模型,巨大的训练语料数据和巨大的算力成本。
模型发布时间参数量预训练数据量GPT2018 年 6 月1.17 亿约 5GBGPT-22019 年 2 月15 亿40GBGPT-32020 年 5 月1,750 亿45TB
表格来自:大师兄:预训练语言模型之GPT-1,GPT-2和GPT-3
本文主要介绍第一代 GPT 模型,它要解决的问题是:在特定的自然语言理解任务 (如文档分类等) 的标注数据较少的情况下,如何充分利用好大量的无标注的数据,使得我们的模型能够从这些数据中获益。
GPT 给出的解决方法是:Semi-supervised Training,即先以无监督的方式在大量无标注的文本上做 Pre-training,再先以有监督的方式在少量有标注的文本上做 fine-tuning。GPT 证明了通过这样的训练方式得到的 task-agnostic 的模型,在很多自然语言处理任务的性能都有了提升。


1 第一代 GPT:无标注数据预训练生成式语言模型

论文名称:Improving Language Understanding by Generative Pre-Training
论文地址:



  • 1 GPT 论文解读:
1.1 背景和动机
对于 NLP 任务而言,从原始文本中有效学习的能力至关重要。而大多数深度学习方法都需要大量的手工标记数据,昂贵的标注成本使得这些数据的数量是很受限的。在这种情况下,来自未标记数据的信息提供了一种有价值的替代方法,也可以提供显著的性能提升。
但是,从未标记的文本中利用单词级以上的信息具有挑战性,主要有两个原因。其一,当时尚不清楚上游预训练的目标函数该如何设计使得学习到的 text representation 适合下游的迁移。其二,当时也对将这些学习到的表示转换到目标任务的最有效方法没有达成什么共识。这些不确定性使得开发有效的语言处理半监督学习方法变得困难。
GPT 给出的做法是:结合无监督预训练和有监督的微调,来完成 NLP 任务。GPT 的目标是学习一种普遍的 text representation,使之可以迁移到各式各样的下游任务中。GPT 采用两阶段训练策略。
第一阶段:GPT 的无监督预训练过程,在未标记的数据上使用一个目标函数来学习 GPT 模型的初始参数。
第二阶段:GPT 的有监督微调过程,使用相应的监督目标将这些参数在目标任务上进行微调。


1.2 GPT 的无监督预训练过程
训练 GPT 的第一阶段是无监督预训练过程,训练的方法是让 GPT "预测未来"。具体而言,假设我们无标记的语料库里面有一句话是 \mathcal{U}=\left\{ u_1,u_2,...,u_n \right\} ,GPT 的模型参数是 \Theta ,作者设计了下面这个目标函数来最大化 L_1(\mathcal{U}) : \begin{equation} L_1(\mathcal{U})=\sum_{i}{\log P(u_i|u_{i-k},...,u_{i-1};\Theta)} \end{equation} \tag{1}
式中, k 是上下文窗口的大小。这个式子的本质是让模型看到前面 k 个词,然后预测下一个词是什么,再根据真实的下一个词来计算误差,并使用随机梯度下降来训练。上式的本质是希望模型能够根据前 k 个词更好地预测下一个词。
GPT 的模型架构是:Transformer 的解码器,但是拿掉了 Multi-Head Cross Attention 的操作,只留下了 Masked Multi-Head Self-Attention,如下图1所示。
所以整体的 GPT 模型可以使用下式来表示:
\begin{align} h_0&=UW_e+W_p\\ h_l&=\text{transformer+block}(h_{l-1}), ~~\forall i\in[1,n]\\ P(u)&=\text{softmax}(h_nW_e^{T}) \end{align} \tag{2} 其中, U = (u_{−k},...,u_{−1}) 为标记的上下文向量,n为层数,W_e 是 token Layer 的参数, W_p 是位置编码参数。
1.png
图1:GPT 的模型架构:Transformer 的解码器

1.3 GPT 的有监督微调过程
在上一步训练好模型之后,使用预训练的权重经过微调之后在下游任务中尝试。假设我们下游任务有标记的数据集 \mathcal{C} ,每个数据包含一段 input tokens 的序列 x_1,...,x_m ,和一个标签 y 。输入首先通过 transformer block,然后通过一个线性层 (参数为 W_y ) 和 Softmax 得到最终的输出,计算真实标签上面的概率:
\begin{equation} P(y|x_1,...,x_m)=\text{softmax}(h_l^mW_y) \end{equation} \tag{2}
其中, h_l^m 是第 l 个 block 的最终输出, W_y 是 fine-tuning 的权重。
使用下面的目标函数,最大化真实标签 y 上面的概率:
\begin{equation} L_2(\mathcal{C})=\sum_{(x,y)}\log P(y|x_1,...,x_m) \end{equation} \tag{3}
然后作者又说,虽然微调的时候我们只关心分类的精度,但是如果把之前第一步预训练的目标函数 L_1 也加进来的话,效果也不错。意思是说,其实在这一步我们是有两个目标函数的:

  • 给定一个序列,让模型预测序列未来的词。
  • 给定完整的序列,让模型预测序列未来的标号。
\begin{equation} L_3(\mathcal{C})=L_1(\mathcal{C})+\lambda L_2(\mathcal{C}) \end{equation} \tag{4}在调优过程中需要的唯一额外参数是 W_y 。
接下来要考虑的是,怎么把 NLP 里面不同的子任务,表示成一个我们要的形式。


1.4 把不同的子任务统一输入的形式
下面给出了 NLP 的四大常见的应用。由于预训练的模型是在连续的文本序列上训练的,所以需要进行一些修改才能将其应用于不同的这些 NLP 任务。
分类 (text classification):给一句话或者一段文本,判断一个标签。
2.png
图2:分类 (text classification)

蕴含 (textual entailment):给一段话,和一个假设,看看前面这段话有没有蕴含后面的假设。
3.png
图3:蕴含 (textual entailment)

相似 (Similarity):判断两段文字是否相似。
4.png
图4:相似 (Similarity)

多选题 (Multiple Choice):给个问题,从 N 个答案中选出正确答案。
5.png
图5:多选题 (Multiple Choice)可以看出,随着任务类型的变化,就需要构造不同的输入形式,把不同的子任务统一成相同的输入形式。但是,不变的是 Transformer 模型的结构。所有转换都包括添加随机初始化的开始 (Start) 和结束 (Extract) tokens,有的包括分隔符 Delimiter tokens (Delim)。


1.5 实验结果
数据集
这里在预训练 GPT 模型时,作者使用的一个无标注数据集是 BooksCorpus。它包含了7000多本独特的未出版的书籍,包括冒险、幻想和浪漫题材的书籍。最重要的是,它包含很多长段的,连续的文本,这些文本可能对语言模型学习到长距离依赖关系是很有帮助的。
模型
GPT 是一个12层的只有 Decoder 的 Transformer 架构,隐变量维度是768,attention head 数为24。
使用 Adam 作为优化器。


自然语言理解 (Natural Language Inference) 实验
自然语言理解 (NLI) 的任务,也称为文本蕴涵识别,包括阅读一对句子,并判断它们之间的关系是:蕴涵、矛盾或中性。作者在以下5个不同的数据集中进行评估,包括:

  • image captions (SNLI)
  • transcribed speech, popular fiction,  government reports (MNLI)
  • Wikipedia articles (QNLI)
  • science exams (SciTail)
  • news articles (RTE)
如下图6所示是自然语言理解任务的结果,其中 Finetuned Transformer LM 就是本文 GPT 模型的结果。可以看到 GPT 在这五个数据集上面都显著地优于基线模型,分别高了1.5%,5%,5.8% 和 0.6%。这证明了 GPT 能够更好地对多个句子进行推理,并处理各个方面的语言歧义。
6.png
图6:Natural Language Inference 实验结果

问题回答 (Question answering) 和常识推理 (commonsense reasoning) 实验
如下图7所示是问题回答和常识推理实验的结果,使用 RACE 数据集和 Story Cloze Test 数据集进行评估。在这些任务中,GPT 再次以 8.9% 和 5.7% 的显著幅度超过了之前的最佳结果,这证明了我们的模型有效地处理长期上下文的能力。
7.png
图7:问题回答和常识推理实验结果

语义相似性 (Semantic Similarity) 实验结果
如下图8所示是语义相似性实验的结果,这个任务的挑战在于认识概念的改写,理解否定和处理句法歧义。GPT 也在三个语义相似任务中获得了最先进的结果,这三个任务分别是 Microsoft Paraphase Corpus  (MPRC),Quora Question Pairs (QQP),Semantic Texual Similarity benchmark (STS-B)。
图8中还展示了文本分类任务的结果,评测的数据集之一是 Corpus of Linguistic Acceptability (CoLA),它包含了对一个句子是否符合语法,以及测试训练模型的先天语言偏见。另一个评测的数据集是 Stanford Sentiment Treebank (SST-2),是个标准的二分类任务。GPT 在 CoLA 上获得了45.4分,这比之前的最佳结果35.0分有了特别大的飞跃,展示了我们的模型学习到的先天语言偏见。GPT 在 SST-2 上的精度也达到了很有竞争力的 91.3%,在 GLUE 基准测试中也取得了 72.8 的总成绩,明显好于之前的最好成绩 68.9。
8.png
图8:语义相似性和文本分类实验结果

总结

GPT 这个模型,通过第1步的生成式预训练和第2步的微调,在下游任务的数据集量比较受限的情况下,借助海量的无标记数据,得到了强大的下游任务性能。GPT 的贡献是一种上游任务预训练的方式,这样得到的模型学习到了很重要的知识和处理长期依赖关系的能力。这一套权重可以成功地作为初始化权重,迁移到下游任务中,比如自然语言理解,问题回答,语义相似性评估等等。GPT 提高了研究的12个数据集中9个数据集的结果。
参考
收藏者
0
被浏览
123

4 个回答

Axuanz LV

发表于 2023-11-9 12:04:22

无监督的softmax操作是对k窗口的哪个词做的?k个词作为输入,不应该出来k个输出吗

Autism LV

发表于 2023-8-7 17:20:14

有个问题不是很理解,无监督学习的时候,是给一个序列预测下一个词,然后通过这段序列中的下一个的真实词来进行随机梯度下降。
有监督学习的时候给一个完整的序列,预测下一个词的时候还是按照真实的下一个词进行梯度下降
那有监督和无监督岂不是一样了

鹏大大 LV

发表于 2025-1-19 14:47:20

微调过程中除了参数W_y,还有新加入 delimiter tokens的embedding也需要学习

赵启 LV

发表于 2023-3-29 16:19:28

[赞同][赞同][赞同]

您需要登录后才可以回帖 登录 | 立即注册