在讨论为什么ChatGPT
能够抓住我们这么多的想象力的文献中,我经常遇到两种叙述:
1.规模:将更多的数据和计算扔给它。
2.用户体验:从一个提示界面转向一个更自然的聊天界面。
经常被忽略的一个叙述是制作像ChatGPT
这样的模型所需要的令人难以置信的技术创造力。其中一个很酷的想法是RLHF
(从人类反馈中进行强化学习):将强化学习和人类反馈纳入自然语言处理中。
RL一直是出了名的难搞,因此,大多局限于游戏和模拟环境,如Atari
或MuJoCo
。就在五年前,RL和NLP的进展几乎是正交的–不同的堆栈、不同的技术和不同的实验设置。看到它在一个新的领域大规模地工作,令人印象深刻。
要了解RLHF
,我们首先需要了解像ChatGPT
这样的模型的训练过程,以及RLHF
在其中的作用,这是本文章第一部分的重点。接下来的3个部分涵盖了ChatGPT
开发的3个阶段。对于每个阶段,我将讨论该阶段的目标,解读为什么需要这个阶段,以及为那些想看更多技术细节的人提供相应的数学公式。
目前,除了几个大的关键参与者——OpenAI
、DeepMind
和Anthropic
,RLHF
还没有在业界广泛使用。然而,我已经看到许多正在进行中的RLHF
尝试,因此我不会惊讶地看到在未来更多地使用RLHF
在这篇文章中,我假设读者不具备NLP
或RL
的专业知识。如果你有,请随意跳过与你不太相关的部分。
RLHF概述
让我们把ChatGPT
的开发过程可视化,看看RLHF
在其中的作用。
预训练的模型是一个桀骜不驯的怪物,因为它是在从互联网上刮来的不分青红皂白的数据上训练的:想想点击率、错误信息、宣传、阴谋论,或对某些人口统计学的攻击。
然后,这个怪物在更高质量的数据上进行了微调–想想StackOverflow、Quora
或人类注释–这使得它在某种程度上被社会接受。
然后,使用RLHF
对微调后的模型进行进一步打磨,使其适合客户,例如,给它一个笑脸。
你可以跳过这三个阶段中的任何一个。例如,你可以直接在预训练的模型上做RLHF
,而不经过SFT
阶段。然而,根据经验,将这三个步骤结合起来可以得到最好的性能。
预训练是资源最密集的阶段。对于InstructGPT
模型,预训练占用了整个计算和数据资源的98%。你可以把SFT
和RLHF
看作是解锁预训练模型已经具备的能力,但用户很难仅仅通过提示来获得。
教机器学习人类的偏好并不是什么新鲜事。它已经存在了十多年了。OpenAI开始探索从人类的偏好中学习,当时他们的主要赌注是机器人技术。当时的说法是,人类的偏好对人工智能的安全至关重要。然而,事实证明,人类的偏好也可以制造出更好的产品,这吸引了更多的观众。
OpenAI在2017年从人类偏好中学习的论文的摘要:
构建安全人工智能系统的一个步骤是消除人类编写目标函数的需要,因为用简单的代理来实现复杂的目标,或者把复杂的目标弄得有点错,都会导致不良甚至危险的行为。通过与DeepMind的安全团队合作,我们开发了一种算法,它可以通过告诉人类两种拟议行为中的哪一种更好来推断人类想要什么。
第一阶段:完成预培训
预训练阶段的结果是一个大型语言模型(LLM),通常被称为预训练模型。例子包括GPT-x(OpenAI)、Gopher(DeepMind)、LLaMa(Meta)、StableLM(Stability AI)
。
语言模式
一个语言模型对语言的统计信息进行编码。为了简单起见,统计信息告诉我们某样东西(如一个词,一个字符)在特定语境下出现的可能性有多大。术语token
可以指一个词,一个字符,或一个词的一部分(如-tion),这取决于语言模型。你可以把token
看作是语言模型使用的词汇。
流利的语言使用者会下意识地拥有该语言的统计知识。例如,鉴于上下文中我最喜欢的颜色是__
,你会填在空白处的词是绿色
而不是汽车
。
同样地,语言模型也应该能够填补这一空白。你可以把语言模型看作是一个 “自主机器”:给定一个文本(提示),它可以产生一个反应来完成这个文本。这里有一个例子:
- 提示(来自用户):我很努力,走了这么远
- 完成(来自语言模型):但是到最后,这根本不重要
尽管听起来很简单,但完成任务的能力被证明是非常强大的,因为许多任务都可以被视为完成任务:翻译、摘要、编写代码、做数学等。例如,给出提示:How are you in French is ...
,一个语言模型可能能够用“Comment ça va”
来完成它,有效地实现从一种语言到另一种语言的翻译。
为了训练一个语言模型以进行文本补全,你需要提供大量的文本数据,这样它才能从中提取出统计信息。提供给模型学习的文本数据被称为训练数据。考虑一个只包含两个标记0和1的语言。如果你将以下序列作为训练数据提供给语言模型,那么语言模型可能会从中提取出:
- 如果上下文是
01
,下一个标记可能是01
- 如果上下文是
0011
,则下一个标记可能是0011
0101
010101
01010101
0011
00110011
001100110011
由于语言模型模仿它的训练数据,语言模型只和它的训练数据一样好,因此有 “垃圾进,垃圾出 “的说法。如果你在Reddit评论上训练一个语言模型,你可能不想把它带回家给你的父母看。(译者注:说明Reddit评论区质量不高)
数学表达
(大部分人不需要关注数学公式,所以这里就不翻译了,要看的朋友到末尾取原文链接)
预训练的数据瓶颈
今天,像GPT-4
这样的语言模型使用了如此多的数据,以至于有一种现实的担忧,即我们将在未来几年内耗尽互联网的数据。这听起来很疯狂,但它正在发生。为了了解一万亿个token
有多大:一本书包含大约50,000
个单词或67,000
个token
。1万亿个token
相当于1500
万本书。
训练数据集规模的增长速度远远快于新数据的产生速度(Villalobos等人,2022)。如果你曾经在互联网上发布过任何东西,你应该假定它已经或将被包括在某些语言模型的训练数据中,不管你是否同意。这类似于,如果你在互联网上发布了一些东西,你应该期望它被谷歌索引。
除此之外,互联网正在迅速充斥着由像ChatGPT这样的大型语言模型生成的数据。如果公司继续使用互联网数据来训练大型语言模型,这些新的语言模型可能只是在现有语言模型生成的数据上进行训练。
一旦公开可用的数据被用尽,获得更多训练数据的最可行的途径是使用专有数据。我猜想,任何公司如果能以某种方式获得大量的专有数据–有版权的书籍、翻译、合同、医疗记录、基因组序列、用户数据等等 —— 将有一个竞争优势。这并不奇怪,鉴于ChatGPT,许多公司已经改变了他们的数据条款,以防止其他公司为法律硕士搜刮他们的数据–见Reddit、StackOverflow。
第二阶段:监督下的对话微调(SFT)
为什么选择SFT
预训练优化的是补全功能。如果你给预训练的模型一个问题,比如“如何制作披萨”,以下任何一个都可能是有效的补全:
- 为问题添加更多背景:
对于一个六口之家来说
- 添加后续问题:
我需要什么原料?这需要多少时间?
- 实际给出答案
如果你在寻找一个答案,第三个选项是首选。SFT的目标是优化预训练的模型,以产生用户正在寻找的反应。
怎么做呢?我们知道一个模型会模仿它的训练数据。在SFT期间,我们向语言模型展示如何适当地回应不同用例(例如问答、摘要、翻译)的提示示例。这些示例遵循格式(提示,回应),被称为演示数据。OpenAI称之为监督微调行为克隆:你演示模型应该如何行为,模型克隆这种行为。
为了训练一个模型来模仿演示数据,你可以从预训练的模型开始,然后对其进行微调,或者从头开始训练。事实上,OpenAI表明,1.3B参数的InstructGPT模型的输出结果优于175B的GPT-3的输出。然而,微调的方法产生的结果要好得多。
演示数据
演示数据可以由人类生成,就像OpenAI
使用InstructGPT
和ChatGPT
一样。与传统的数据标注不同,演示数据是由通过筛选测试的高度受过教育的标注者生成的。在为InstructGPT
标注演示数据的人员中,约90%拥有大学学位,超过三分之一拥有硕士学位。
OpenAI
的40名标签人员为InstructGPT
创造了大约13,000
个(提示,回应)对。
DeepMind对对话的启发式方法: OpenAI的方法产生了高质量的示范数据,但昂贵且耗时。相反,DeepMind使用启发式方法从互联网数据中过滤出对话,用于他们的模型Gopher (Rae et al., 2021):
具体而言,我们找到所有连续段落的集合(由两个换行符分隔的文本块),长度至少为6段,所有段落都以分隔符结尾(例如,Gopher:,Dr Smith-,或Q.)。偶数索引的段落必须具有相同的前缀,奇数索引的段落也是如此,但两个前缀应该不同(换句话说,对话必须严格地在二者之间进行)。这个过程可靠地产生高质量的对话。
关于对话的微调与遵循指令的微调的问题: OpenAI的InstructGPT是为了遵循指示而进行微调的。每个演示数据示例都是一对(提示,响应)。DeepMind的Gopher是为了进行对话而进行微调的。每个演示数据示例都是多轮的来回对话。指示是对话的子集 – ChatGPT是InstructGPT的强化版本。
数学表达
(大部分人不需要关注数学公式,所以这里就不翻译了,要看的朋友到末尾取原文链接)
第三阶段:RLHF
实证表明,与仅使用SFT相比,RLHF显著提高了性能。然而,我还没有看到一个我认为是十分可靠的论据。Anthropic解释说:“我们预计在人们具有易于引出但难以形式化和自动化的复杂直觉时,人类反馈(HF)相对于其他技术具有最大的比较优势。”(Bai et al., 2022)
对话是灵活的。在一个提示下,有许多合理的反应,有些反应比其他反应更好。演示数据告诉模型在给定的环境下哪些反应是合理的,但并没有告诉模型一个反应有多好或多坏。
我们的想法是:如果我们有一个打分函数,如果给了一个提示和一个回答,就会输出一个分数,说明这个回答有多好?然后我们用这个评分函数来进一步训练我们的LLMs,使其给出高分的回答。这正是RLHF所做的。RLHF由两部分组成:
- 训练一个奖励模型,作为一个评分函数。
- 优化LLM,以产生奖励模型会给出高分的反应。
关于RLHF工作原理的假说 Yoav Goldberg有一篇关于RLHF工作原因的三个假设的精彩说明。
1、多样性假设:在SFT期间,模型的输出被期望在一定程度上与演示的反应相匹配。例如,鉴于提示 “什么是语言的例子?”,如果演示的回答是 “西班牙语”,而模型的回答是 “Java”,模型的回答可能被标记为错误。
2、负反馈假设:演示只给模型积极的信号(例如只给模型看好的反应),而不给消极的信号(例如给模型看坏的反应是什么样子)。RL允许我们向模型展示负面信号。
3、幻觉假说:RLHF应该对幻觉有帮助,我们将在RLHF和幻觉部分进行讨论。
奖励模式(RM)
RM的工作是为一对(提示,响应)输出一个分数。训练一个模型以在给定的输入上输出一个分数是ML中一个相当普遍的任务。你可以简单地把它看作是一个分类或回归任务。训练一个奖励模型的挑战在于获得可信的数据。让不同的标记者对相同的反应给出一致的分数原来是相当困难的。要求标签者比较两个反应并决定哪一个更好,这要容易得多。
标注的过程会产生这样的数据:(提示,好的回答,差的回答)。这就是所谓的比较数据。
这里有一个来自Anthropic的HH-RLHF
数据集的对比数据的例子。就个人而言,我更喜欢 差的回答。这突出了从人类偏好中学习的一个挑战。人类的偏好是多种多样的,不可能用一个单一的数学公式来捕捉。
现在,有趣的部分来了:只给这些比较数据,你如何训练模型来给出具体的分数?就像你可以让人类在适当的激励下(基本上)做任何事情一样,你也可以让模型在适当的目标(又称损失函数)下(基本上)做任何事情。
对于InstructGPT
,目标是使好的回答,差的回答之间的分数差最大化(详见数学公式一节)。
人们尝试了不同的方法来初始化RM:例如,从头开始训练RM或从SFT模型作为种子开始。从SFT模型开始,似乎可以得到最好的性能。直观的看法是,RM至少应该和LLM一样强大,才能对LLM的反应进行良好的评分。
数学表达
(大部分人不需要关注数学公式,所以这里就不翻译了,要看的朋友到 helloai.wiki 取原文链接)
收集对比数据的用户界面
下面是OpenAI
的标注人员用来为InstructGPT
的RM创建训练数据的用户界面截图。标签员都给出了从1到7的具体分数,并按照偏好的顺序对回答进行排名,但只有排名被用于训练RM。他们的标注人员之间的一致性约为73%,这意味着如果他们要求10个人对2个回答进行排名,其中7个人会有相同的排名。
为了加快标注过程,他们要求每个注释者对多个反应进行排序。4个排名的反应,例如A>B>C>D,将产生6个排名的对,例如(A>B),(A>C),(A>D),(B>C),(B>D),(C>D)。
使用奖励模型进行微调
在这个阶段,我们将进一步训练SFT
模型,以产生输出响应,使RM的得分最大化。如今,大多数人使用近似策略优化(PPO),这是OpenAI
在2017年发布的强化学习算法。
在这个过程中,提示语是从一个分布中随机选择的——例如,我们可能在客户提示语中随机选择。每一个提示都被输入到LLM
模型中,得到一个响应,由RM给出一个分数。
OpenAI
还发现,有必要添加一个约束条件:这个阶段产生的模型不应偏离SFT
阶段产生的模型(数学上表示为下面目标函数中的KL发散项)和原始预训练模型太远。我们的直觉是,对于任何给定的提示,都有许多可能的反应,其中绝大部分是RM以前从未见过的。对于许多未知的(提示,反应)对,RM可能会错误地给出一个非常高或非常低的分数。如果没有这种约束,我们可能会偏向于那些分数极高的回答,尽管它们可能不是好的回答。
数学表达
(大部分人不需要关注数学公式,所以这里就不翻译了,要看的朋友到末尾取原文链接)
RLHF和幻觉
幻觉发生在人工智能模型编造东西的时候。这是许多公司对将LLM纳入其工作流程犹豫不决的一个重要原因。
我发现有两个假说可以解释LLM产生幻觉的原因。
第一个假说,由Pedro A. Ortega等人于2021年10月在DeepMind
首次表达,即LLMs
产生幻觉是因为他们 “缺乏对其行为的因果关系的理解“(那时,DeepMind
用 “妄想 “一词代替 “幻觉”)。他们表明,这可以通过将反应生成作为因果干预来解决。
第二个假说认为,幻觉是由LLM
的内部知识和标签者的内部知识不匹配造成的。在加州大学伯克利分校的演讲中(2023年4月),OpenAI
联合创始人和PPO
作者John Schulman提出,行为克隆会导致幻觉。在SFT
期间,LLM
被训练来模仿人类写的反应。如果我们使用我们所拥有的但LLM
没有的知识给出回应,我们就在教LLM
产生幻觉。
2021年12月,OpenAI
的另一位员工Leo Gao也很好地阐述了这个观点。从理论上讲,人类标注者可以将他们所知道的所有上下文与每个提示包括在一起,以教导模型只使用现有的知识。然而,这在实践中是不可能的。
舒尔曼认为, LLMs
知道他们是否知道什么(这是一个很大的主张,IMO),这意味着如果我们找到一种方法,迫使 LLMs只给出包含他们知道的信息的答案,那么幻觉可以被修复。然后他提出了几个解决方案。
1.核实:要求LLMs
解释(检索)其获得答案的来源。
2.RL。请记住,前文的奖励模型是只用比较来训练的:反应A比反应B好,没有任何关于A好多少或为什么好的信息。舒尔曼认为,我们可以通过更好的奖励功能来解决幻觉问题,例如,对一个模型编造的东西给予更多的惩罚。
这是约翰-舒尔曼在2023年4月的演讲中的一个截图。
从舒尔曼的演讲中,我得到的印象是RLHF
应该有助于解决幻觉。然而,InstructGPT
的论文显示,RLHF
实际上使幻觉更糟糕。尽管RLHF
导致了更糟糕的幻觉,但它改善了其他方面,总的来说,人类标签者更喜欢RLHF
模型而不是单独的SFT
模型。
基于LLM
知道自己知道什么的假设,一些人试图通过提示来减少幻觉,例如,加入尽可能真实地回答,如果你不确定答案,就说 “对不起,我不知道”。让LLM
简洁地回答似乎也有助于减少幻觉–LLM
需要产生的标记越少,他们编造的机会就越少。
总结
这篇文章写得非常有趣–我希望你也喜欢读它。我本来还有一整节关于RLHF的局限性–例如人类偏好的偏见,评估的挑战,以及数据所有权问题–但决定把它留到另一篇文章中,因为这篇文章已经很长了。
当我深入研究有关RLHF
的论文时,有三件事给我留下了深刻印象:
1.训练像ChatGPT
这样的模型是一个相当复杂的过程——它能成功真是令人惊讶。
2.这个规模太疯狂了。我一直知道LLMs
需要大量的数据和计算,但竟然需要整个互联网的数据!!??
3.多个公司(曾经)分享了多少关于他们的摸索过程。比如:DeepMind
的Gopher
论文有120页;OpenAI
的InstructGPT
论文有68页;Anthropic
分享了他们161K hh-rlhf
的对比例子;Meta
提供了他们的LLaMa
模型用于研究。社区也有大量的善意和动力来创建开源的模型和数据集,如OpenAssistant
和LAION
。这是一个激动人心的时刻!
我们仍然处于LLMs
的早期阶段。世界上的其他国家刚刚意识到LLMs
的潜力,所以比赛才刚刚开始。关于LLMs
的很多事情,包括RLHF
,我希望这篇文章能帮助你更好地了解LLMs
是如何训练的,希望这能帮助你选择最适合你需要的LLMs
!
原文链接: RLHF: Reinforcement Learning from Human Feedback