ChatGPT的朋友们:大语言模型经典论文一次读到吐

2023-05-19 11:01:58   

要说 2023 刷屏最多的词条,ChatGPT 可以说是无出其右。到最近的 GPT-4,技术的革新俨然已呈现破圈之势,从学术圈到工业界再到资本圈,同时也真切逐步影响到普通人的日常生活与工作。

坦白来讲,对于大语言模型生成相关的工作,个人长期以来持保守态度,认为这个方向更多的是一种深度学习的理想追求。现在看小丑竟是我自己,也许优秀的工作正是需要对理想状态的持续追求,才叫优秀的工作。

言归正传,本系列打算跟风讨论一下关于 ChatGPT 相关技术,主要内容分为三部分,也会分为三篇文章:

1. 经典论文精读【this】:通过本文阅读可以了解 ChatGPT 相关经典工作的大致思路以及各个时期的关键结论;

2. 开源实现技术【soon】:总结最近几个月开源工作者们follow ChatGPT的主要方向和方法;

3. 自然语言生成任务的前世今生和未来【later】:大语言模型之外,谈谈自然语言生成的“传统”研究方向与未来畅想。

因为相关技术发展迅速,三部分内容也会定期更新。本文主要为第一部分经典论文学习,而相关的工作众多(如图),一一阅读并不现实,因此本文选择持续性最高的 OpenAI 系列和 Google 系列,以及近期影响力比较大的 LLaMA,最后是中文适配比较好的 GLM 和 ChatGLM。

图片

▲ 10B以上大模型(黄色为开源)

此外,本文阅读需要一定的 NLP 基础概念,比如知道什么是 BERT 和 Transformer、什么是 Encoder-Decoder 架构、什么是预训练和微调,什么是语言模型等。

OpenAI 系列

本节目标是通过 OpenAI 系列论文阅读细窥 ChatGPT 的主要原理,其先进的工作脉络可以概括为下图。从依赖往上追溯需要了解 Codex 和 instructGPT、再往上是 GPT-3、继而也需要了解 GPT-2 和 GPT-1。(GPT-4 暂时简单地看作是 Plus 版本的 GPT-3.5,而且增加了多模态数据的处理能力,等更多的细节公开后再作讨论)。

1.1 GPT-1

论文题目:

Improving Language Understanding by Generative Pre-Training

论文链接:

https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf

1.1.1 动机

任务目标和 BERT 一致(但在 BERT 之前),希望通过大规模无标注数据进行预训练,下游任务微调的方式解决经典 NLP 任务,缓解有监督任务数据收集成本高的问题。GPT-1 虽然不是第一个使用预训练-微调架构的工作,但也是使用 Transformer-Decoder 做相关任务的很早期工作了。

1.1.2 方案概述

模型结构:Transformer 的 Decoder 部分

训练方法:自回归的生成方式进行语言模型预训练,判别式的结构进行下游任务微调。

1.1.3 一些细节

  • 预训练:

    • Loss:经典的语言模型训练目标,将无标注的样本库表示为 token 序列集合 U = {u_1, ...., u_n},最大化下面的似然估计。即通过一段话的前面的 token,预测下一个 token,其中 k 为上下文窗口。

    • 模型:使用多层 Transformer decoder 建模 P,简化的公式表达如下。W_e 为 token embedding 矩阵,W_p为位置向量矩阵,通过多层 transformer block,最后每个 token 通过 transformer block 成为编码后的向量 h_n,最后经过一个线性层 + softmax,即为下一个 token 的预测分布。

    • 数据:早期数据并没有非常夸张,GPT-1 的主要数据有两个:

      • BooksCorpus dataset:包括 7000 多本未发表的书籍;

      • 1B Word Benchmark(可选)。

  • 微调:

    • 模型改动:通过增加特殊 token 作为输入的开始 [Start] 和结束 [Extract] 等,以结束 [Extract] 的隐层输出接入全连接层,并进行下游的分类和其他变种任务。如图所示:

      图片

    • loss:

      图片

      图片

    • 小细节:微调过程中,在下游任务目标基础上,加入预训练目标,效果更好。

      图片

1.1.4 结果与讨论

  • 主要验证方法:文章主要是通过下游任务的效果进行策略的有效性验证,通过一些经典任务数据集。结论来看,在不少数据集上都还有着不错的效果,以分类为主的数据集为例,如图所示。可以看到,这时的对比项还没有 BERT 的踪影。

1.2 GPT-2

论文标题:

Language Models are Unsupervised Multitask Learners

论文链接:

https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf

1.2.1 动机

GPT-1 之后不久,BERT 出现,刷榜各种任务。GPT-1 尝试增加模型大小,但在预训练+微调的训练框架下,仍打不过同参数大小的 BERT;但研究还得继续,尝试换个打法,以 Zero-Shot 作为卖点,效果不错。

1.2.2 方案概述

GPT-2 实现 Zero-Shot 的方法在现在看来比较简单:将所有的 NLP 任务统一看作是 p(output|input)的建模,而如果统使用一个足够容量的模型实现,还要告诉模型需要完成什么任务,这时建模目标可以表达为 p(output|input, task)。

对于统一大模型的选择,网络结构与 GPT-1 相同,使用方式也很自然:task 和 input 均使用自然语言的方式作为输入交给 GPT,模型继续一步步地预测下一个最大可能的 token,直到结束。如翻译任务:模型输入“翻译中文到英文,原文‘我爱深度学习’”,模型输出 “I love deep learning.”。又如阅读理解任务,模型输入“回答问题,内容‘xxx’, 问题‘xxx?’”,模型输出问题的答案。

没错,就是早期的 Prompting 方法(其实也不是最早的)。这么做的依据则是考虑到训练数据集里有大量的 Prompt 结构的语料,可以使模型学到遇到类似的提示语后需要生成什么。

1.2.3 一些细节

  • 训练数据:为了支持多任务的 Zero-Shot,需要模型尽可能看更多,尽可能丰富的数据,数据收集的目标也是如此。要点如下:

    • 开源 Common Crawl,全网网页数据,数据集量大,且足够丰富,但存在质量问题,故而没有直接使用;

    • 自建了 WebText 数据集,网页数据,主打一个干净高质量:只保留被人过滤过的网页,但人过滤成本很高,这里的方法是只要 Reddit 平台(类似国内的贴吧,社交分享平台)中被用户分享的站外链接,同时要求帖子至少 3 个 karma(类似点赞?)。可以认为被分享的往往是人们感兴趣的、有用的或者有意思的内容。

    • WebText 最终包括 4500w 链接,后处理过程:1、提取网页内容后;2、保留 2017 年以后的内容;3、去重;4、启发式的清理,得到 800w+ 的文档,约 40GB;4、剔除维基百科文档,避免与下游测试数据重叠(因为很多测试任务包括了维基百科数据,话说其他数据没有重叠吗?)。

  • 模型:沿用 GPT 结构,但在模型特征输入编码、权重初始化、词典大小、输入长度、batch size 等方面做了一些调整,主要是升级。

1.2.4 结论与讨论

  • 主要结论:

    • 文章尝试了四种大小的模型,其中 117M 对应了 Bert-base(和 GPT-1),345M 对应和 Bert-large 参数量,最大的模型 1542M(15 亿参数)。

      图片

    • 模型的选择使用 WebText 的 5% 作为验证数据,实验发现所有大小的模型仍然是欠拟合状态,随着训练时间的增加,在验证集上的效果仍然可以继续提升。

    • 当然,在大多数 Zero-Shot 任务集合上也如愿取得了当时最好的结果:

  • 次要结论:在多数任务上,模型容量和核心指标的关系,可以发现随着模型容量的增加,效果不断变强。15 亿参数看上去没有达到瓶颈,也就是说继续提升模型容量,效果能到什么程度极具想象力。(也就有了后续 GPT-3 的大力出奇迹)

    • Children’s Book Test 任务:

    • Winograd Schema Challenge 任务:

    • 其他 Zero-Shot 任务

    • 语言模型预训练集和验证集的效果(perplexity 困惑度越小越好)

      图片

1.3 GPT-3

论文题目:

Language Models are Few-Shot Learners

论文链接:

https://arxiv.org/pdf/2005.14165.pdf

1.3.1 动机

BERT 出来之后,虽然预训练+微调架构取得了惊人的效果(GPT 系列短期比不了了),但这种微调有很多限制

  • 微调需要更多的领域数据,标注成本高,一些特殊任务更是难上加难(如纠错、写作、问答等)。

  • 微调在小数据量下表现好,很可能只是过拟合。很多任务说是超过人类,实际上是夸大了实际表现(模型并不是根据知识和推理去做任务,并不智能)。

  • 以人类的学习习惯对比,在人类有了足够的知识后(预训练),并不需要再看大量的监督数据才能做任务(对应微调),而只需要看少量样例即可。

文章认为,虽然微调现在效果确实打不过,但追求不微调仍然是值得的。方法嘛,延续 GPT-2 最后的结论,更大的模型、更多的数据、prompt 更多的信息(In-Context learning)。

1.3.2 方案简述

主要与 GPT-2 相比:

  • 沿用 GPT-2 的模型和训练方法,将模型大小升级到 175B(1750 亿的参数量 vs 15亿),

微信