LLM + RLHF = Chat Agent

Large-Scale Language Model + Reinforcement learning from human feedback = Helpful Chat Agent

回顾 OpenAI GPT 的规模升级之路

在对话智能体应用大火的今天,回顾第一个杀手级应用 ChatGPT 被研发出来之前经历的事情格外有趣。从其创造者 OpenAI 公司的官网博客、学术论文资料,可以拼凑起一条时间线:

无监督预训练一个语言生成模型,从而得到一个更好的语言理解模型

2018 年 11 月,OpenAI 在官方发布博客 Improving language understanding with unsupervised learning,同时发表名为 Improving Language Understanding by Generative Pre-Training 的学术论文。博客声称结合了 1) 无监督预训练+监督学习微调的方法,和 2) Transformers 架构,得到了一个更好的自然语言理解模型。

所谓 Generative Pre-Training,是指使用 Transformer decoder 作为模型,在语言建模(next token prediction)这一无监督学习任务上预训练,利用大量无标注的语料。这里 Transformer decoder 与 Transformer encoder 的主要区别是 1) 由于使用语言建模任务,不允许 attention 参考“未来”的 token;2) 使用一个分类头,输入 Transformer 的最终隐藏层,输出下一个 token 的概率分布。也就是说,只要想要使用 Transformer 架构来做语言建模任务,几乎必然使用这个架构。

虽然名字叫做 Generative Pre-training,但得到的 Transformer Decoder 并没有被用来生成文字,而是用来初始化语言理解模型(也就是把原来的模型换上其它分类头),通过监督学习实现分类、多选、相似性等语言理解任务了。

在实验的过程中,OpenAI 发现即使不经过监督学习微调,模型做选择题的性能也会随着语言建模任务能力的提高有所提升。这似乎预示着 OpenAI 日后会抛弃监督微调,走上专注于语言建模任务的道路。

OpenAI 发布了这个在 8 个 GPU 上训练了整整一个月的模型,这个模型后来被称为 GPT。相比更早的在一个 GPU 上从头训练的工作,GPT 使用的计算资源是巨人,但相比之后 OpenAI 在训练新模型中投入的算力,GPT 使用的算力就像沙漠中的一粒沙。

2024年9月8日更新:不了解前文所述 Transformer 模型,或者更一般的自然语言处理背景的读者可以跟随 Andrej Karpathy 的视频 Let’s build GPT: from scratch, in code, spelled out. 来入门。

无监督预训练得到的语言模型只要足够好大规模,就可以秒杀多种任务

冬去春来,2019 年 4 月,OpenAI 在官网发布博客 Better language models and their implications ,宣布训练出了第二代 GPT,同时发布名为 Language Models are Unsupervised Multitask Learners 的学术论文。

这一次,OpenAI 把目光转向生成任务,从此脱离 BERT 等语言理解模型的赛道,走向语言生成的新赛道。OpenAI 惊喜地发现,更好的语言模型,自动带来了翻译、QA、总结等文字生成任务的有优越表现,因而省去了监督微调的步骤。训练的算法很简单,执行语言建模(下个token预测)任务,结束。

GPT-2 事实上就是规模扩大了 10 倍的 GPT。GPT-2 使用了1.5B 的参数量,在 8M 个网页上训练(OpenAI 为了收集到有趣的训练文本,特意收集了获得三个以上赞的 Reddit 回答外链到的网页,而非既有的 CommonCrawl)。作为对比,GPT 仅有 117M 参数,而训练所用的文本是 BooksCorpus,即 7000 本书籍的文本。OpenAI 认为,之所以模型能够 zero-shot 各种任务,原因就在规模,而任务上的性能正比于模型规模的对数。

OpenAI 声称考虑到模型可能造成的社会影响,而分步骤发布了部分(参数量较小的)模型、训练文本和代码。

2024年9月8日更新:GPT-2 使用的“网页”训练集被称为 WebText,它未被全部发布,因此社区创造了 OpenWebText 作为它的开放替代品。GPT-2 的模型的全部参数已经全部发布了(包括 1.5B 参数量的版本),被用于很多代码仓库中,如 nanoGPT。顺带一提,nanoGPT 支持在 OpenWebText 上面复现(重新训练)GPT-2 的结果(使用优化过的学习框架、8个 A100 GPU,可以付出 4 天的训练时间复现 124M 的版本)。

我们规模举世无双的语言模型是 Few-Shot 学习者

2020年5月,arxiv 上出现了一篇 OpenAI 发表的名为“Language Models are Few-Shot Learners”的论文,声称训练出了GPT-3。论文声称,相比于GPT-2,它的参数规模扩大了百倍,达到175B,比当时已知最大的语言模型都大十倍。175B 的参数量,假设每个参数是 16 位位宽的浮点数,将占用 350GB 存储空间。在此等的规模下,模型具有了很好的 Few-Shot 能力,即给定几组示例的问答作为 prompt,模型就能执行新的问答。

模型出色的 Few-Shot 能力让其具有无穷的潜在商业价值,OpenAI 决定不发布模型权重。更何况,谁也不估算不清楚 OpenAI 为了训练 GPT-3 投入了多少算力资源。2020年6月,OpenAI 发布了接入 GPT-3 模型的API,让研究人员/开发者通过 API 一窥模型的强大,借用强大的模型。

经过几个月的开发者接入模型的试水,到了2021年3月,OpenAI 自豪地宣称 GPT-3 正在支持下一代应用。然而,至此 GPT-3 只是一个开发者可以调用的接口,而不是面向终端用户、没有技术门槛的产品。为什么呢?

RLHF:临门一脚

语言模型不等于对话智能体

上述过程训练得到的产物是“语言模型”,而用户想要得到的是对话智能体。这两者有本质的不同:

  • 语言模型生成文字的逻辑是模仿语料库中下个词的概率分布,来采样得到下个词。它生成的是 prompt 的的仿写/续写。
  • 用户希望对话智能体遵照用户的文字指令,完成特定任务,帮助用户。

我们可以通过构造 prompt,给出若干示例,引导语言模型产生对话智能体的效果,比如我们可以通过如下 prompt 引导语言模型完成翻译的任务:

[User]:
Translate Chinese to English:
语言模型 => Language Model
少样本学习 => Few Shot Learning
语料库 =>
[Model]:
Corpus
注意力机制 => Attention
预训练 => Pre-Training
...

可见模型完成了“语料库”一词的中译英任务,还可能会续写得到更多中英词组对。

开发者会使用 prompt 来利用语言模型完成各种功能,然而终端用户并没有构造 prompt 的意识。更何况,构造 prompt 费时费力,我们不总是拥有合适的样例。缺少了 prompt 的指导,语言模型不能“有样学样”,就会出现“答非所问”的现象。比如 OpenAI 博客中给出的例子:

[User]:
Explain the moon landing to a 6 year old in a few sentences.
[Model]:
Explain the theory of gravity to a 6 year old.
Explain the theory of relativity to a 6 year old in a few sentences.
Explain the big bang theory to a 6 year old.
Explain evolution to a 6 year old.

由于用户没有给出示例回答,模型在用户提出的问题的基础上,续写得到了更多问题,而非作为一个助手解答用户提出的问题。这种现象的本质在于模型训练的目标和用户的期望是不一致的。

对语言模型做 RLHF 的三个步骤

新的训练目标是显而易见的:生成用户满意/认为是高质量的回答。OpenAI 为这个新的训练目标,提出了改良既有的 GPT-3 模型以适应新目标的训练方法:RLHF。

RLHF 的第一步,OpenAI 捡起了从 GPT-2 时代起被打入冷宫多年的监督式学习微调,使用人类AI训练者写好的理想的 (prompt, response) 序对来微调 GPT-3。

第二步,让人类AI训练者给每个 prompt 不同的 response 排序,利用这个数据训练一个回归模型 reward model,用来给 response 打分。

第三步,用强化学习的视角看待问题,环境就是给 response 打分的 reward model,智能体的策略就是语言模型(被初始化为微调后的 GPT-3)。使用强化学习的 PPO Proximal Policy Optimization 方法,优化策略以期望达到更高的回报。

RL vs SL 的类比

新的 RL 的训练策略,和 OpenAI 一直以来使用的监督学习(SL)策略是迥然不同的。训练 GPT 系列的方法是 language modelling,在这个训练任务中,模型生成的 next token 不会被喂给模型当成新一轮的输入,输入模型的永远是正确的参考文本(这种训练方法被称为 teacher forcing )。RL 训练中,模型生成的 next token 是要转而当成输入的,在完成整个回答前,模型没有任何“答案”可参考。只有完成整个回答后,才能获得一个评分。

用学生学习写命题作文来类比这里 RL 和 SL 的区别:

  • SL 训练相当于给你一堆题目和范文 (prompt + response),你看着每篇作文的前 n 个词试图推测出第 n+1 个词,实际上就是背诵范文。
  • RL 训练相当于给你一个阅卷人,你在写完一片完整的作文后,交卷得到一个评分,然后反思改进,不断进行这个练习写作的过程。

通过上面的类比,比较明显的发现是 RL 训练相比 SL 训练给了模型实验的机会和试错的空间,拥有更高的潜力。另一方面,从 RL 研究的经验上看,RL 训练过程相比 SL 更加不稳定。因此,整体上看,训练过程是先用 SL “打好基础”,再继承 SL 的模型/参数/策略用 RL “提高”。在这一点上,ChatGPT 和 AlphaGo 的训练过程是相似的。

多轮迭代得到对话智能体产品

在 2022 年 1 月发布研究产物 Instruct GPT,宣布成功实现 RLHF 方法的喜讯之后,OpenAI 开始着力打造面向一般用户的对话智能体产品,ChatGPT,并在 11 月发布。事实上,官网对两个模型是如何训练的描述几乎相同,很难找出区别,连使用的 RLHF 示意图都是几乎一模一样的。

在 OpenAI 上述两个博客页透露的信息中,ChatGPT 相对 InstructGPT 的一个关键区别是使用多轮迭代执行 RLHF 的第二步和第三步:更强的对话模型能够提供更好的备选回答让人类AI训练者打分;更准确的打分训练出更准确的 Reward Model;更准确的 Reward Model 在 RL 中指导对话模型走向更强。这是一个正反馈的循环。

在 ChatGPT 被广泛认知和使用之后,全球各地的公司和研究机构都奋起追赶 OpenAI 的脚步,训练自己的对话智能体。然而,在人工智能领域,决定智能体成败的往往是训练过程中的一些容易忽视的细节,正所谓 the devil is in the details。对于这些细节,OpenAI 无法也无意透露。

2024年8月5日更新:说在 ChatGPT 问世之后才开始追赶是不准确的,在 OpenAI 发布 GPT 模型的阶段,世界范围的公司和研究机构就开始重视和追赶 OpenAI 的这条技术路线了。


Posted

in

by

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *