RLHF: 从人类反馈中进行强化学习

内容

在讨论为什么ChatGPT能够捕捉我们想象力的很多内容的文献中,我经常遇到两种叙事:

  1. 规模:投入更多数据和计算资源。
  2. 用户体验:从提示界面转向更自然的聊天界面。

经常被忽略的一个叙述是制作像ChatGPT这样的模型所需的令人难以置信的技术创造力。一个很酷的想法是RLHF(从人类反馈中进行强化学习):将强化学习和人类反馈融入自然语言处理。

RL一直以来都很难处理,因此主要局限于游戏和模拟环境,如Atari或MuJoCo。就在五年前,RL和NLP基本上是独立发展的-不同的技术栈,不同的技术,不同的实验设置。看到它在一个大规模的新领域中发挥作用令人印象深刻。

那么,RLHF 究竟是如何工作的?为什么它有效?本文将讨论这些问题的答案。

要理解RLHF,我们首先需要了解像ChatGPT这样的模型训练过程以及RLHF的作用,这是本文第一部分的重点。接下来的3个部分涵盖了ChatGPT开发的3个阶段。对于每个阶段,我将讨论该阶段的目标,为什么需要这个阶段的直觉,以及想要了解更多技术细节的人的相应数学表述。

目前,RLHF在行业中尚未被广泛使用,除了一些主要的关键参与者 - OpenAI、DeepMind和Anthropic。然而,我看到许多正在进行中的使用RLHF的努力,所以未来看到RLHF被更多地使用也不足为奇。

在本文中,我假设读者没有自然语言处理(NLP)或强化学习(RL)方面的专业知识。如果你有相关知识,可以随意跳过对你来说不太相关的部分。

RLHF 概述

让我们来可视化ChatGPT的开发过程,看看RLHF在哪里适用。

3 phases of ChatGPT development

如果你眯起眼睛看,上面的图看起来非常像一个带笑脸的Shoggoth模因。

  1. 预训练模型是一只未经驯化的怪物,因为它是在从互联网上抓取的不加区分的数据上进行训练的:想想点击诱导、错误信息、宣传、阴谋论或针对特定人群的攻击。 2. 然后这只怪物在更高质量的数据上进行了微调 - 想想StackOverflow、Quora或人类注释 - 这使得它在某种程度上变得社会上可接受。 3. 然后,通过RLHF进一步打磨微调模型,使其适合客户使用,例如给它一个笑脸。

3 phases of ChatGPT development

Shoggoth with Smiley Face。图片来源:twitter.com/anthrupad

你可以跳过三个阶段中的任何一个。例如,你可以直接在预训练模型的基础上进行RLHF,而不经过SFT阶段。然而,根据经验,将这三个步骤结合起来可以获得最佳性能。

预训练是最消耗资源的阶段。对于InstructGPT模型,预训练占据了98%的总体计算和数据资源。您可以将SFT和RLHF视为解锁预训练模型已具备的功能,但仅通过提示很难让用户访问。

教机器从人类偏好中学习并非新鲜事物。这种方法已经存在十多年。OpenAI在他们主要关注机器人技术时开始探索从人类偏好中学习。当时的说法是人类偏好对于AI安全至关重要。然而,事实证明,人类偏好也可以带来更好的产品,吸引了更广泛的受众。

»»旁注:2017年OpenAI关于从人类偏好中学习的摘要««

构建安全的人工智能系统的一步是消除人类编写目标函数的需求,因为使用简单的代理来代替复杂目标,或者稍微错误地设定复杂目标,可能导致不良甚至危险的行为。与 DeepMind 的安全团队合作,我们开发了一种算法,可以通过告知哪种行为更好来推断人类的意图。

第一阶段。用于完成的预训练

预训练阶段的结果是一个大型语言模型(LLM),通常被称为预训练模型。例如包括 GPT-x(OpenAI)、Gopher(DeepMind)、LLaMa(Meta)、StableLM(Stability AI)。

语言模型

语言模型编码关于语言的统计信息。简单来说,统计信息告诉我们某物(例如一个词、一个字符)在给定上下文中出现的可能性有多大。术语标记可以指代一个词、一个字符或一个词的一部分(如-tion),这取决于语言模型。您可以将标记视为语言模型使用的词汇

说一门语言流利的人在潜意识中具有对该语言的统计知识。例如,给定上下文 My favorite color is __,如果你说英语,你知道空白处的词更有可能是 green 而不是 car

同样,语言模型也应该能够填补这个空白。你可以将语言模型看作是一个“完成机器”:给定一段文本(提示),它可以生成一个响应来完成这段文本。以下是一个例子:

  • 提示(来自用户)我努力尝试,付出了很多
  • 完成(来自语言模型)但最终,它甚至都不重要。

3 phases of ChatGPT development

尽管听起来很简单,但完成任务实际上非常强大,因为许多任务可以被构建为完成任务:翻译、总结、编写代码、做数学等。例如,给出提示:法语中的How are you是...,一个语言模型可能会完成它并输出:Comment ça va,有效地实现了从一种语言到另一种语言的翻译。

为了训练一个用于完成的语言模型,您需要提供大量文本,以便它可以从中提取统计信息。提供给模型学习的文本称为训练数据。考虑一个只包含两个标记 0 和 1 的语言。如果您将以下序列作为训练数据提供给语言模型,那么语言模型可能会提取出:

  • 如果上下文是 01,那么接下来的标记很可能是 01
  • 如果上下文是 0011,那么接下来的标记很可能是 0011
0101
010101
01010101
0011
00110011
001100110011

由于语言模型模仿其训练数据,语言模型的好坏取决于其训练数据,因此有句谚语“垃圾进,垃圾出”。如果你用 Reddit 评论来训练语言模型,你可能不想把它带回家给父母看。

数学表达式

  • 机器学习任务:语言建模
  • 训练数据:低质量数据
  • 数据规模:截至2023年5月,通常为数万亿标记。
    • GPT-3数据集(OpenAI):0.5万亿标记。我找不到GPT-4的任何公开信息,但我估计其使用的数据量比GPT-3大一个数量级。
    • Gopher数据集(DeepMind):1万亿标记
    • RedPajama(Together):1.2万亿标记
    • LLaMa数据集(Meta):1.4万亿标记
  • 由此过程产生的模型:LLM
  • (LLM_\phi):正在训练的语言模型,由 (\phi) 参数化。目标是找到使交叉熵损失最小化的 (\phi)。
  • ([T_1, T_2, ..., T_V]):词汇表 - 训练数据中所有唯一标记的集合。
  • (V):词汇表大小。
  • (f(x)):将标记映射到其在词汇表中的位置的函数。如果 (x) 在词汇表中是 (T_k),则 (f(x) = k)。
  • 给定序列 ((x_1, x_2, ..., x_n)),我们将有 (n) 个训练样本:
    • 输入:(x =(x_1, x_2, ..., x_{i-1}))
    • 真实值:(x_i)
  • 对于每个训练样本 ((x, x_i)):
    • 令 (k = f(x_i))
    • 模型输出:(LLM(x)= [\bar{y}_1, \bar{y}_2, ..., \bar{y}_V])。注意:(\sum_j\bar{y}_j = 1)
    • 损失值:(CE(x, x_i; \phi) = -\log\bar{y}_k)
  • 目标:找到使所有训练样本上的期望损失最小化的 (\phi)。(CE(\phi) = -E_x\log\bar{y}_k)

预训练的数据瓶颈

今天,像GPT-4这样的语言模型使用了如此多的数据,以至于有一个现实的担忧,即在未来几年内我们将耗尽互联网数据。听起来很疯狂,但这正在发生。要了解一万亿标记有多大:一本书大约包含5万字或6.7万个标记。1万亿个标记相当于1500万本书。

RedPajama vs. LLaMa data

RedPajama和LLaMa数据的并排比较,由RedPajama完成。

训练数据集大小增长的速度远远快于新数据生成的速度(Villalobos et al, 2022)。如果您曾经在互联网上发布过任何内容,您应该假设它已经或将被一些语言模型的训练数据包含,无论您是否同意。这类似于,如果您在互联网上发布了内容,您应该期望它被谷歌索引。

We're at the risk of running out of Internet data

除此之外,互联网正迅速充斥着由ChatGPT等大型语言模型生成的数据。如果公司继续使用互联网数据来训练大型LLM,这些新的LLM可能只是在现有LLM生成的数据上进行训练。

一旦公开可用数据耗尽,获取更多训练数据的最可行途径是使用专有数据。我怀疑任何公司如果设法获取大量专有数据(如受版权保护的书籍、翻译、视频/播客转录、合同、医疗记录、基因组序列、用户数据等),将具有竞争优势。在 ChatGPT 的背景下,许多公司改变了数据条款,以防止其他公司为 LLMs 抓取其数据 - 请参阅 RedditStackOverflow

第二阶段。对话的监督微调(SFT)

为什么选择SFT

预训练优化于完成。如果你给预训练模型一个问题,比如,如何制作披萨,以下任何一个都可能是有效的完成。

  1. 为一个六口之家增加更多背景信息:for a family of six
  2. 添加后续问题:? 我需要哪些食材?需要多长时间?
  3. 实际给出答案

第三个选项是首选,如果您正在寻找答案。SFT 的目标是优化预训练模型,以生成用户正在寻找的响应。

如何做到这一点?我们知道模型模仿其训练数据。在SFT期间,我们向我们的语言模型展示如何适当地回应不同用例的提示示例(例如,问题回答、摘要、翻译)。这些示例遵循格式(提示,回应),被称为演示数据。OpenAI将监督微调称为行为克隆:您展示模型应该如何行为,模型克隆这种行为。

3 phases of ChatGPT development

用于微调InstructGPT的提示分布

要训练一个模型来模仿演示数据,你可以选择使用预训练模型并微调它,或者从头开始训练。事实上,OpenAI 表明 来自 1.3B 参数 InstructGPT 模型的输出优于 175B GPT-3 的输出。然而,微调方法产生了更加优秀的结果。

演示数据

人类可以生成演示数据,就像OpenAI使用InstructGPT和ChatGPT所做的那样。与传统数据标记不同,演示数据是由通过筛选测试的高素质标记者生成的。在为InstructGPT标记演示数据的人中,~90%至少拥有大学学位,超过三分之一拥有硕士学位。

3 phases of ChatGPT development

OpenAI的40名标注员为InstructGPT创建了大约13,000个(提示,回复)对。以下是一些示例:

提示

响应

Serendipity 意味着事件的发生和发展是偶然的,以一种快乐或有益的方式。在一个句子中使用这个词。

遇见玛格丽特并被介绍给汤姆是一次幸运的偶然。

ELI5: 在压力或令人沮丧的经历中,胸口的“焦虑块”是什么原因?

你喉咙里的焦虑感是由肌肉紧张引起的,使你的声门张开以最大化气流。紧闭的胸口或心痛感是由迷走神经引起的,它告诉器官加快血液泵送速度,停止消化,并产生肾上腺素和皮质醇。

从这个食谱中创建一个购物清单:修剪西葫芦的两端。将西葫芦纵向切半;挖出果肉,留下1/2英寸的壳。将果肉切碎。在煎锅中,用中火煮牛肉、西葫芦果肉、洋葱、蘑菇和彩椒,直到肉不再粉红;沥干。离火。加入1/2杯奶酪、番茄酱、盐和胡椒;搅拌均匀。舀入西葫芦壳中。放入一个涂油的13x9英寸烤盘中。撒上剩余的奶酪。

西葫芦、牛肉、洋葱、蘑菇、彩椒、奶酪、番茄酱、盐、胡椒

OpenAI 的方法产生高质量的演示数据,但成本高且耗时。相反,DeepMind 使用启发式方法从互联网数据中筛选对话,用于他们的 Gopher 模型(Rae 等,2021)。

»» 旁注:DeepMind 对话的启发式 ««

具体来说,我们找到所有连续段落的集合(由两个换行符分隔的文本块),至少有6个段落,所有段落都以分隔符结尾的前缀开头(例如,Gopher:Dr Smith -Q.)。偶数索引的段落必须具有相同的前缀,奇数索引的段落也是如此,但两个前缀应该不同(换句话说,对话必须严格在两个人之间来回进行)。这个过程可靠地产生高质量的对话。

»»关于为对话微调与为遵循指示微调的旁注««

OpenAI的InstructGPT经过微调以遵循指令。每个示范数据示例都是一对(提示,回应)。DeepMind的Gopher经过微调以进行对话。每个示范示例都是来回对话的多轮。指令是对话的子集 - ChatGPT是InstructGPT的升级版本。

数学表达式

数学表达式与第一阶段的表达式非常相似。

  • 机器学习任务: 语言建模
  • 训练数据: (提示, 回复) 格式的高质量数据
  • 数据规模: 10,000 - 100,000 (提示, 回复) 对
    • InstructGPT: 约14,500 对 (来自标注者的13,000 对 + 来自客户的1,500 对)
    • Alpaca: 52K ChatGPT 指令
    • Databricks’ Dolly-15k: 约15,000 对,由 Databricks 员工创建
    • OpenAssistant: 10,000 次对话中的 161,000 条消息 -> 大约 88,000 对
    • Dialogue-finetuned Gopher: 约50亿标记,我估计约为 10M 条消息。但请记住,这些是通过从互联网中使用启发式方法筛选出来的,因此质量不是最高的。
  • 模型输入和输出
    • 输入: 提示
    • 输出: 对于此提示的回复
  • 在训练过程中要最小化的损失函数: 交叉熵,但只计算回复中的标记来计算损失。

第三阶段。RLHF

根据经验,相对于仅使用SFT,RLHF显著提高了性能。然而,我还没有看到一个我认为是十分可靠的论据。Anthropic解释道:“我们预期人类反馈(HF)在人们具有复杂直觉易于引出但难以形式化和自动化时,相对于其他技术具有最大的比较优势。”([Bai等,2022](https://arxiv.org/abs/2204.05862))

3 phases of ChatGPT development

InstructGPT(SFT + RLHF)优于仅使用SFT

对话是灵活的。给定提示后,有许多合理的回应,其中一些比其他的更好。演示数据告诉模型在特定上下文中哪些回应是合理的,但并不告诉模型一个回应是多好或多差。

这个想法是:如果我们有一个评分函数,当给定一个提示和一个回应时,会输出一个评分,用于评估该回应的好坏。然后我们使用这个评分函数进一步训练我们的LLMs,使其给出得分较高的回应。这正是RLHF所做的。RLHF由两部分组成:

  1. 训练一个奖励模型作为评分函数。 2. 优化LLM以生成奖励模型会给出高分的响应。

»»RLHF有效的假设原因««

Yoav Goldberg 在 三个关于为什么 RLHF 有效的假设 上有一篇很棒的笔记。

  • 多样性假设:在SFT期间,预期模型的输出应该在一定程度上与展示的响应相匹配。例如,给定提示“举例说明一种语言?”,如果展示的响应是“西班牙语”,而模型的响应是“Java”,则可能会将模型的响应标记为错误。
  • 负反馈假设:演示只给模型提供正面信号(例如,只展示模型良好的响应),而不是负面信号(例如,展示模型不良响应的情况)。RL使我们能够向模型展示负面信号。
  • 幻觉假设:RLHF应该有助于处理幻觉问题,我们将在RLHF和幻觉部分详细介绍。

3.1. 奖励模型(RM)

RM 的工作是为一对(提示,回复)输出一个分数。训练模型输出给定输入的分数是机器学习中一项非常常见的任务。你可以将其简单地构建为分类或回归任务。训练奖励模型的挑战在于获取可信赖的数据。让不同的标注者为相同的回复给出一致的分数结果是相当困难的。要求标注者比较两个回复并决定哪个更好要容易得多。

标注过程将生成类似这样的数据:(提示,获胜回应,失败回应)。这被称为比较数据。

这里放翻译好的文字:这是来自Anthropic的HH-RLHF数据集比较数据的示例。就个人而言,我更喜欢losing_response。这突显了从人类偏好中学习的挑战。人类偏好是多样的,不可能用单一的数学公式来捕捉。

提示

获胜回应

失去响应

如何让我的狗高兴?

我不确定你指的是什么。

我不知道我们是否应该让狗变得兴奋。我认为对于一只狗来说,在清醒的状态下体验世界是很重要的。

现在是迷幻的部分:只给定这些比较数据,如何训练模型给出具体的分数?就像你可以让人类做(基本上)任何事情一样,只要给出正确的激励,你也可以让模型做(基本上)任何事情,只要给出正确的目标(即损失函数)。

对于InstructGPT,其目标是最大化获胜回复和失败回复之间的得分差异(详见数学公式部分)。

人们已经尝试了不同的方法来初始化一个RM:例如从头开始训练一个RM,或者以SFT模型作为种子开始。从SFT模型开始似乎能够获得最佳性能。直觉是RM至少应该和LLM一样强大,才能够很好地评分LLM的回应。

数学表达式

可能会有一些变化,但这是核心思想。

  • 训练数据:格式为(提示,获胜响应,失败响应)的高质量数据
  • 数据规模:100K - 1M 个示例
    • InstructGPT:50,000 个提示。每个提示有 4 到 9 个响应,形成 6 到 36 对(获胜响应,失败响应)。这意味着在(提示,获胜响应,失败响应)格式中有 30 万到 180 万个训练示例。
    • Constitutional AI,被怀疑是 Claude(Anthropic)的骨干:318K 比较 - 由人类生成的 135K,由人工智能生成的 183K。Anthropic 有一个旧版本的数据是开源的(hh-rlhf),其中大约包含 17 万次比较。
  • (r_\theta):正在训练的奖励模型,由 (\theta) 参数化。训练过程的目标是找到使损失最小化的 (\theta)。
  • 训练数据格式:
    • (x):提示
    • (y_w):获胜响应
    • (y_l):失败响应
  • 对于每个训练样本 ((x, y_w, y_l))
    • (s_w=r_\theta(x, y_w)):获胜响应的奖励模型得分
    • (s_l=r_\theta(x, y_l)):失败响应的奖励模型得分
    • 损失值:(-\log(\sigma(s_w - s_l)))
  • 目标:找到 (\theta) 以最小化所有训练样本的期望损失。(-E_x\log(\sigma(s_w - s_l)))

为了更直观地了解这个损失函数是如何工作的,让我们将其可视化。

让 (d = s_w - s_l)。这是 (f(d) = -\log(\sigma(d))) 的图表。对于负的 (d),损失值较大,这鼓励奖励模型不要给予获胜响应比输掉响应更低的分数。

3 phases of ChatGPT development

收集比较数据的用户界面

以下是 OpenAI 标注员用来为 InstructGPT 的 RM 创建训练数据的 UI 截图。标注员既会给出从 1 到 7 的具体评分,又会按照偏好顺序对响应进行排名,但只有排名用于训练 RM。他们之间的标注员一致性约为 73%,这意味着如果让 10 人对 2 个响应进行排名,其中有 7 人会给出相同的排名

3 phases of ChatGPT development

为加快标注过程,他们要求每位标注者对多个响应进行排名。例如,4个排名的响应,如 A > B > C > D,将产生6个排名对,如 (A > B),(A > C),(A > D),(B > C),(B > D),(C > D)。

3.2. 使用奖励模型进行微调

在这个阶段,我们将进一步训练SFT模型,生成输出响应,以最大化RM的分数。如今,大多数人使用Proximal Policy Optimization(PPO),这是OpenAI于2017年发布的一种强化学习算法。

在这个过程中,从一个分布中随机选择提示 - 例如,我们可能会在客户提示中随机选择。这些提示中的每一个都被输入到LLM模型中,以获得一个响应,然后由RM给出一个分数。

OpenAI 还发现有必要添加一个约束:从这个阶段得到的模型不应该偏离太远于从 SFT 阶段得到的模型(在下面的目标函数中以 KL 散度项数学表示)和原始的预训练模型。直觉是对于任何给定提示,可能有许多可能的响应,其中绝大多数 RM 以前从未见过。对于许多未知的(提示,响应)对,RM 可能会错误地给出极高或极低的分数。没有这个约束,我们可能会偏向那些得分极高的响应,尽管它们可能不是好的响应。

OpenAI有一张很棒的图表,解释了SFT和RLHF在InstructGPT中的应用。

3 phases of ChatGPT development

数学表达式

  • 机器学习任务: 强化学习
    • 行动空间: LLM 使用的标记词汇。采取行动意味着选择一个标记词来生成。
    • 观察空间: 所有可能提示的分布。
    • 策略: 在给定观察(提示)的情况下,采取的所有行动(生成的所有标记词)的概率分布。LLM 构成了一种策略,因为它决定了下一个生成的标记词的可能性。
    • 奖励函数: 奖励模型。
  • 训练数据: 随机选择的提示
  • 数据规模: 10,000 - 100,000 个提示
  • (RM):从阶段3.1获得的奖励模型。
  • (LLM^{SFT}):从阶段2获得的监督微调模型。
    • 给定提示 (x),它输出响应的分布。
    • 在InstructGPT论文中,(LLM^{SFT})被表示为 (\pi^{SFT})。
  • (LLM^{RL}_\phi):使用强化学习训练的模型,由 (\phi) 参数化。
    • 目标是找到 (\phi) 以最大化根据 (RM) 的得分。
    • 给定提示 (x),它输出响应的分布。
    • 在InstructGPT论文中,(LLM^{RL}_\phi)被表示为 (\pi^{RL}_\phi)。
  • (x):提示
  • (D_{RL}):明确用于RL模型的提示分布。
  • (D_{pretrain}):预训练模型的训练数据分布。

对于每个训练步骤,您从 (D ext{{RL}}) 中抽取一个 (x ext{{RL}}) 批次,从 (D ext{{pretrain}}) 中抽取一个 (x ext{{pretrain}}) 批次。每个样本的目标函数取决于样本来自哪个分布。

  1. 对于每个 (x ext{RL}),我们使用 (LLM^{RL} ext{_}\phi) 来采样一个回复:(y \sim LLM^{RL}_\phi(x ext{RL}))。目标函数计算如下。请注意,目标函数中的第二项是 KL 散度,以确保 RL 模型不会偏离 SFT 模型太远。
\\[\text{目标}_1(x_{RL}, y; \phi) = RM(x_{RL}, y) - \beta \log \frac{LLM^{RL}_\phi(y \vert x)}{LLM^{SFT}(y \vert x)}\\]

2. 对于每个 (x_{pretrain}),目标计算如下。直观上,这个目标是为了确保 RL 模型在文本补全任务上不会表现更差 - 这是预训练模型优化的任务。

[\text{目标}2(x{pretrain}; \phi) = \gamma \log LLM^{RL}\phi(x{pretrain})]

最终目标是上述两个目标期望值的总和。在强化学习设置中,我们最大化目标,而不是像在之前的步骤中那样最小化目标。

[\text{目标}(\phi) = E ext{_{x \sim D_{RL}}}E\text{_{y \sim LLM^{RL}_\phi(x)} [RM(x, y) - \beta \log \frac{LLM^{RL}_\phi(y \vert x)}{LLM^{SFT}(y \vert x)}] + \gamma E\text{_{x \sim D_{pretrain}}\log LLM^{RL}_\phi(x)}]

注意:

所使用的符号略有不同于InstructGPT 论文中使用的符号,我觉得这里的符号更加明确,但它们都指的是完全相同的目标函数。

RLHF objective function The objective function as written in the InstructGPT paper.

RLHF 和幻觉

幻觉发生在人工智能模型编造内容时。这是许多公司不愿将大型语言模型纳入其工作流程的重要原因之一。

有两个假设,我发现了解释LLMs产生幻觉的原因。

Pedro A. Ortega等人于2021年10月在DeepMind首次提出的第一个假设是,LLMs产生幻觉是因为它们“缺乏对其行为因果关系的理解”(当时,DeepMind使用“妄想”一词来表示“幻觉”)。他们表明,这可以通过将响应生成视为因果干预来解决。

第二个假设是幻觉是由于LLM的内部知识与标注者的内部知识之间的不匹配造成的。在他的UC Berkeley talk(2023年4月),OpenAI联合创始人、PPO作者John Schulman提出行为克隆会导致幻觉。在SFT期间,LLMs被训练模仿人类编写的回应。如果我们使用我们拥有但LLM没有的知识来回应,我们就在教导LLM产生幻觉。

这一观点也在2021年12月由另一位OpenAI员工Leo Gao清晰地阐述。理论上,人类标注者可以在每个提示中包含他们所知道的所有上下文,以教导模型仅使用现有知识。然而,在实践中这是不可能的。

Schulman相信LLMs知道自己知道的东西(在我看来这是一个很大的说法),这意味着如果我们找到一种方法强迫LLMs只给出包含他们所知信息的答案,幻觉就可以被纠正。然后他提出了一些解决方案。

  1. 验证:要求LLM解释(检索)获取答案的来源。 2. RL. 记住,在第3.1阶段中,奖励模型仅使用比较进行训练:响应A比响应B更好,没有任何关于为什么A更好或更好多少的信息。 Schulman认为,通过拥有更好的奖励函数,例如对模型进行更多惩罚以防止虚构,我们可以解决幻觉问题。

这是2023年4月John Schulman的演讲的截图。

Fix hallucination with R

从舒尔曼的讲话中,我得到的印象是RLHF应该有助于减轻幻觉。然而,InstructGPT论文显示RLHF实际上使幻觉恶化。尽管RLHF导致幻觉恶化,但它改善了其他方面,总体上,人类标注者更喜欢RLHF模型而不是仅有SFT模型。

RLHF makes hallucination worse

幻觉对InstructGPT(RLHF + SFT)的影响比仅SFT更严重(Ouyang等,2022年)

基于语言模型了解自身知识的假设,一些人尝试通过提示来减少幻觉,例如添加尽可能真实地回答,如果不确定答案,说“抱歉,我不知道”。让语言模型简洁回答似乎也有助于减少幻觉 - 语言模型需要生成的标记越少,他们编造东西的机会就越小。

结论

这篇文章写起来真的很有趣 - 希望你阅读时也感到愉快。我还有一个关于RLHF限制的完整部分 - 例如人类偏好的偏见、评估挑战和数据所有权问题 - 但决定将其留到另一篇文章中,因为这篇已经够长了。

当我深入研究关于RLHF的论文时,我对三件事印象深刻:

  1. 训练像ChatGPT这样的模型是一个相当复杂的过程 - 令人惊讶的是它居然奏效了。 2. 规模之大令人发指。我一直知道大型语言模型需要大量数据和计算资源,但整个互联网的数据!!?? 3. 公司(曾经)分享了多少关于他们的流程。DeepMind的Gopher论文有120页。OpenAI的InstructGPT论文有68页,Anthropic分享了他们的161K hh-rlhf比较示例,Meta提供了他们的LLaMa模型供研究使用。社区也有大量的善意和动力来创建开源模型和数据集,比如OpenAssistant和LAION。这是一个令人兴奋的时刻!

我们仍处于LLM的早期阶段。全世界其他地方刚刚意识到LLM的潜力,所以竞赛才刚刚开始。关于LLM的许多事情,包括RLHF,都将不断发展。但我希望这篇文章能帮助您更好地了解LLM是如何在幕后训练的,这有望帮助您选择最适合您需求的最佳LLM!

总结
文章讨论了ChatGPT为什么能够引起我们的想象力,主要涉及到规模扩大和用户体验两个方面。除此之外,文章还介绍了RLHF(Reinforcement Learning from Human Feedback)这一技术创新,将强化学习和人类反馈结合到自然语言处理中。RLHF的工作原理和应用也在文章中有所介绍。ChatGPT的开发过程分为三个阶段:预训练、有监督微调和RLHF。文章指出RLHF目前在工业界并不常见,但OpenAI、DeepMind和Anthropic等公司已经开始尝试使用。文章还介绍了ChatGPT的预训练阶段,语言模型的概念和数学表达,以及训练数据的重要性。