GPT 系列超详细解读 (二):GPT

您所在的位置:网站首页 crawl英语怎么说读 GPT 系列超详细解读 (二):GPT

GPT 系列超详细解读 (二):GPT

2023-04-07 02:59| 来源: 网络整理| 查看: 265

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

专栏目录本文目录1 GPT-2:GPT 在零样本多任务学习的探索 (来自 OpenAI) 1.1 背景和动机1.2 大规模无监督训练过程学习到了任务相关的信息1.3 Zero-Shot 的新困境1.4 Zero-Shot 情况下怎么让模型做下游任务?给提示1.5 GPT-2 的训练数据1.6 GPT-2 的模型太长不看版

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-2 模型,它所基于的背景是:基于 Transformer 解码器的 GPT-1 证明了在特定的自然语言理解任务 (如文档分类等) 的标注数据较少的情况下,通过充分利用好大量的无标注的数据,也能取得很强的性能。几个月之后,基于 Transformer 编码器的 BERT 性能赶超了 GPT-1。GPT-2 希望构建更大的数据集和模型,同时在 Zero-shot 的多任务学习场景中展示出不错的性能。

GPT-2 首先构造了一个新的数据集:WebText,它是一个有百万级别的文本的数据集。GPT-2 自己是一个有着 1.5B 参数量的模型。GPT-2 的另一个优势是 Zero-shot 的多任务学习,在8个测试语言建模数据集中的7个上实现了最先进的结果,Zero-shot 也是 GPT-2 模型的一大亮点。

1 GPT-2:GPT 在零样本多任务学习的探索论文名称:Language Models are Unsupervised Multitask Learners

论文地址:

1 GPT-2 论文解读:

1.1 背景和动机

GPT-2 诞生的背景是:基于 Transformer 解码器的 GPT-1 证明了在特定的自然语言理解任务 (如文档分类等) 的标注数据较少的情况下,通过充分利用好大量的无标注的数据,也能取得很强的性能。几个月之后,基于 Transformer 编码器的 BERT 性能赶超了 GPT-1。GPT-2 希望构建更大的数据集和模型,同时在 Zero-shot 的多任务学习场景中取得不错的性能

机器学习的系统,通过使用超大的数据集和模型,主要通过监督学习,在各种任务中表现出出色的性能。但是有监督学习的 Machine Learning 系统对数据分布的微小变化表现得比较脆弱和敏感,只在它们训练的数据集上是 "专家"。但是,当任务改变的时候,就不得不需要手动创建并标记一个新的训练数据集,然后让模型在新的数据集上面重新训练。

那么为什么这套 "single task training on single domain datasets" 的方法非常流行呢?作者认为这是因为模型的泛化性不是很好。也就是说,我们在一个数据集上训练好的一个模型很难去直接应用到下一个应用上面。

而多任务学习 (Multitask Learning) 是一个很有希望的提升泛化性能的方向。它在90年代最先被提出来的时候的思想是在训练一个模型的时候,同时看多个数据集,也可能会多一个目标函数使得一个模型能够在多个任务上通用。而现有的多任务学习的方式在 NLP 里面其实用得不多,因为多任务学习一般需要构造大量的 (dataset, objective) pair,而要 scale up 这个 pair 数的成本是巨大的。

现在的主流范式其实还是 GPT 的 "pre-training + supervised finetuning" 的这一套。这个方法:

虽然借助预训练这一步提升性能,但是本质上还是需要有监督的 finetuning 才能使得模型执行下游任务。需要在下游任务上面有标注的数据。当我们只有很少量的可用数据 (即 Zero-shot 的情况下) 时就不再使用了。

而这也正是 GPT-2 想强调的问题,GPT-2 本质上还是一个语言模型,但是不一样的是,它证明了语言模型可以在 Zero-shot 的情况下执行下游任务,也就是说,GPT-2 在做下游任务的时候可以无需任何标注的信息,也无需任何参数或架构的修改。

1.2 大规模无监督训练过程学习到了任务相关的信息

GPT-2 方法的核心是语言建模。这里我们首先回忆一下 GPT 的无监督训练过程

训练 GPT 的第一阶段是无监督预训练过程 (第二阶段的有监督微调过程详见:科技猛兽:Self-Supervised Learning 超详细解读 (十三):第一代 GPT:无标注数据预训练生成式语言模型),训练的方法是让 GPT "预测未来"。具体而言,假设我们无标记的语料库里面有一句话是 \mathcal{S}=\left\{ s_1,s_2,...,s_n \right\} ,GPT 的模型参数是 \Theta ,作者设计了下面这个目标函数来最大化 L_1(\mathcal{S}) :\begin{equation} L_1(\mathcal{S})=\sum_{i}{\log p(s_i|s_{i-k},...,s_{i-1};\Theta)} \end{equation} \tag{1}

式中, k 是上下文窗口的大小。这个式子的含义是让模型看到前面 k 个词,然后预测下一个词是什么,再根据真实的下一个词来计算误差,并使用随机梯度下降来训练。上式的本质是希望模型能够根据前 k 个词更好地预测下一个词。

这个式子其实做的事情是让下式尽量大:

\begin{equation} \prod_{i=1}^{n}p(s_i|s_{i-k},...,s_{i-1}) \end{equation} \tag{2}语言模型的这个式子可以表示为:p(output|input),也就是在给定输入的情况下,最大化已知输出的概率。

注意到,GPT 之前在做这一步的时候,是在自然的文本上面训练的。自然文本的特点是,它里面有任务相关的信息,但是呢,这个信息通常是蕴含在文本里面的,比如下面这段话 (来自 GPT-2 论文):

"I'm not the cleverest man in the world, but like they say in French: Je ne suis pas un imbecile [I'm not a fool].In a now-deleted post from Aug. 16, Soheil Eid, Tory candidate in the riding of Joliette, wrote in French: "Mentez mentez, il en restera toujours quelque chose," which translates as, "Lie lie and something will always remain." "I hate the word 'perfume,'" Burr says. 'It's somewhat better in French: 'parfum.' If listened carefully at 29:55, a conversation can be heard between two guys in French: "-Comment on fait pour aller de l'autre cot ́e? -Quel autre cot ́e?", which means "- How do you get to the other side? - What side?". If this sounds like a bit of a stretch, consider this question in French: As-tu aller au cin ́ema?, or Did you go to the movies?, which literally translates as Have-you to go to movies/theater? "Brevet Sans Garantie Du Gouvernement", translated to English: "Patented without government warranty".

上面这段文本中,"Mentez mentez, il en restera toujours quelque chose," 是法语句子,"Lie lie and something will always remain." 是英文句子,而我们在无监督训练语言模型的时候,并没有告诉模型要做 translation 的任务,但是我们的文本中却有 which translates as 这样的字样。换句话说,这一与具体下游任务任务相关的信息,竟然可以通过具体下游任务任务无关的无监督预训练过程学习到。

1.3 Zero-Shot 的新困境

再回想一下我们在做 GPT-1 模型有监督微调的时候,通常会对下游任务的输入进行构造 (进行一些修改才能将其应用于不同的这些 NLP 任务),比如:分类 (text classification) 任务,即给一句话或者一段文本,判断一个标签。

图1:分类 (text classification)

我们一般会在文本中手动添加上开始符和结束符。而这个符号在模型之前的预训练过程中是没见过的。但是因为有监督微调的环节,模型会去认识这些符号。

但是现在我们做的是 Zero-Shot 的任务,没有这些带有开始符和结束符的文本给模型训练了,所以这时候做下游任务的时候也就不适合再给模型看开始符和结束符了。

所以,我们在构造下游任务的输入的时候,就不能再引入模型没看见过的东西了 (开始符和结束符),这也就是 Zero-Shot 的新困境。

1.4 Zero-Shot 情况下怎么让模型做下游任务?给提示

上一节提到,因为在 Zero-Shot 的任务设置下,没有这些带有开始符和结束符的文本给模型训练了,所以这时候做下游任务的时候也就不适合再给模型看开始符和结束符了。

那么接下来的问题是,在这种情况下,还怎么让模型做下游任务呢?

回想 1.2 节,大规模无监督训练过程学习到了任务相关的信息。作者是这么认为的:比如下游任务是英文翻译法文,那么如果模型在无监督预训练的过程中看过了引用的那一大段的文字 (这句话 "Mentez mentez, il en restera toujours quelque chose," which translates as, "Lie lie and something will always remain." 是训练的语料),那么模型就能够学会 (translate to french, english text, french text) 这样的下游任务。

也就是说,原则上,通过大量的语料训练,语言建模能够学习到一系列下游任务,而不需要明确的监督信息。为什么可以这么讲呢?因为作者认为:下游任务 (有监督训练) 可以视为预训练过程 (无监督训练) 的一个子集。无监督目标的全局最优解也是有监督训练的全局最优解。当预训练规模足够大时,把无监督的任务训练好了,有监督的下游任务即不再需要额外训练,就是所谓的 "Zero-Shot"。

所以下面的问题就变成了:在实践中,我们如何能够优化无监督预训练过程以达到收敛。初步实验证实,足够大的语言模型能够在无监督的预训练过程之后做下游任务,但学习速度比显式监督方法慢得多。

那么最后一个问题就是具体怎么去做下游任务呢?以英文翻译法文为例,我们需要在下游任务时预先告诉模型 "translate English to French",即给模型一个提示 (Prompt)。

1.5 GPT-2 的训练数据

许多之前的工作是在单个文本域上训练语言模型,例如新闻文章,维基百科或小说等等。GPT-2 则是希望使得训练数据集的领域和上下文更多一点。在网站上爬取文本是一个方案,比如说 Common Crawl 网站。虽然这些网站手机的数据集在量级上很大,但它们存在严重的数据质量问题,这上面的内容有很多是信噪比很低的,难以理解的内容。

为了解决数据集质量的问题,GPT-2 只爬取人类过滤之后的网页。但是,手动过滤的网络爬取很昂贵,所以 GPT-2 从社交媒体平台 Reddit 上抓取了至少收到了3个 karma 的链接。karma 可以被认为是一种启发式指标,用于判断其他用户是否认为该链接有趣、有教育意义或只是有趣。

得到的这个数据集称之为 WebText,是一个包含了4500万个链接的文本数据集。经过重复数据删除和一些基于启发式的清理后,它包含略多于800万个文档,总文本容量为 40GB。作者从 WebText 中删除了所有维基百科文档,因为它可能涉及到 test evaluation tasks。

1.6 GPT-2 的模型

GPT-2 的模型在 GPT 的基础上做了一些改进,如下:

Layer Normalization 移动到了每个 Sub-Block 的输入部分,在每个 Self-Attention 之后额外添加了一个 Layer Normalization,最终顺序是:LN, Self-Attention , LN。采用一种改进的初始化方法,该方法考虑了残差路径与模型深度的累积。在初始化时将 residual layers 的权重按 1/\sqrt{N} 的因子进行缩放,其中 N 是 residual layers 的数量。字典大小设置为50257。无监督预训练可看到的上下文的 context 由512扩展为1024。Batch Size 大小调整为512。

四种 GPT-2 模型的详细参数如下:

图2:GPT-2 模型的详细参数

最小的模型和 GPT 大小相当,第二小的模型和最大的 BERT 大小相当。最大的模型叫做 GPT-2,它的参数比 GPT 多一个数量级。但即便如此,在 WebText 上任然是欠拟合的。

1.7 实验结果

如下图3所示是这几种 GPT 模型在不同参数量下,在几种下游任务上的 Zero-Shot 的实验结果。这几种下游任务依次是:Reading Comprehension + CoQA 数据集, translation + WMT-14 Fr-En 数据集, summarization + CNN 和 Daily Mail 数据集, Question Answering + Natural Questions 数据集。

图3:几种 GPT 模型在不同参数量下,在几种下游任务上的 Zero-Shot 的实验结果

可以看到一个很重要的现象是,随着模型参数的增加,Zero-Shot 的性能一直是在上升的。尽管和一些主流方法的性能相比还有一些距离,但是这个现象至少说明放大模型的量级是有积极的影响的。

如下图4所示是更多数据集的 Zero-Shot 实验结果。GPT-2 可以很好地跨域和数据集迁移,在 Zero-Shot 设置下在8个测试语言建模数据集中的7个上实现了最先进的结果。对于一些衡量长距离依赖关系的数据集,比如 LAMBADA 和 Children's Book Test,GPT-2 也有很大的改进。

图4:更多数据集的 Zero-Shot 实验结果

总结

GPT-2 相对 GPT 模型的亮点是支持 Zero-Shot 的设置,同时在 Zero-shot 的多任务学习场景中展示出不错的性能。GPT-2 首先构造了一个新的数据集:WebText,它是一个有百万级别的文本的数据集。GPT-2 自己是一个有着 1.5B 参数量的模型。GPT-2 的另一个优势是 Zero-shot 的多任务学习,在8个测试语言建模数据集中的7个上实现了最先进的结果,Zero-shot 也是 GPT-2 模型的一大亮点。

参考



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3