为什么ChatGPT用强化学习而非监督学习?

news2024/12/24 2:14:39

ed0b1618cb0180a6a23fe0cde5330ebc.png

为什么ChatGPT非得用强化学习,而不直接用监督学习?原因不是那么显而易见。在上周发布的《John Schulman:通往TruthGPT之路》一文中,OpenAI联合创始人、ChatGPT主要负责人John Schulman分享了OpenAI在人类反馈的强化学习(RLHF)方面的进展,分析了监督学习和强化学习各自存在的挑战。

基于Schulman的演讲内容,以色列巴伊兰大学教授Yoav Goldberg对强化学习在大型语言模型应用必要性作了深度解读,进一步对比论证了监督学习与强化学习的特点,并为未来改进提供了思路。

Goldberg在2011年获得本古里安大学博士学位,他也是艾伦人工智能研究所以色列分部的研究主管,他也曾在Google(纽约)研究院担任研究科学家。他在NLP领域深耕十多年,在词汇语义学、句法分析及对基于深度学习的语言处理等领域作出了突出贡献。


(以下内容由OneFlow编译发布,转载请联系OneFlow获得授权。来源:https://gist.github.com/yoavg/6bff0fecd65950898eba1bb321cfbd81)

作者|Yoav Goldberg

OneFlow编译

翻译|贾川、徐佳渝、杨婷

1
为何使用强化学习?

随着ChatGPT等大型语言模型的发布,人们对“RLHF训练(即基于人类反馈的强化学习训练)”的重要性进行了诸多讨论。在训练语言模型方面,我一度困惑于为什么强化学习比从演示中学习(也称为监督学习)更好,难道从演示中学习(或根据语言模型术语中的“指令微调”,学习模仿人类写的回答)还不够?

我提出了一个有说服力的理论论据。不过我意识到还有另一个论点,它不仅支持强化学习训练,而且尤其适用于ChatGPT等模型。OpenAI的John Schulman在其演讲的前半部分进行了详细论述。本文的大部分内容都引用了John的论点,但增加了一些他没有明确表述的内容(不过我确信这些内容都是John考虑过的)。

本文提供了大量背景知识,以确保读者可以更好地理解文章内容。如果你想了解文章重点,可以直接看“核心论证”部分。

2
背景:监督学习vs强化学习

简要地解释一下这两种学习场景,以便我们能够达成共识。如果你已经了解了这些内容,可以跳过此部分。

预训练:在这两种设置中,首先我们假设语言模型在大量的文本上进行预训练,以预测下一个token。因此,对于每个词序列,我们有一个模型可对潜在的下一个词的选项分配概率。通过这种方式,模型会获得语言的某种内部表示。

经过这一过程,模型的生成文本能力会变强,且能够根据给定文本前缀,生成符合自然习惯的后续文本,但它并不擅长“交流”。例如,当提示(prompted)一个问题时,模型可能会回答该问题或者生成一系列附加问题,也可能会回答这是一个在......的上下文中提出的重要问题等等。

这些都是遵循自然语言文本问题的有效延续(continuation)。我们可以通过编写输入文本,来使模型执行我们所希望的语言行为,该延续会解决我们的问题(也被称之为“提示工程”),但是对于只想提出问题或指令就让模型进行回答的非专家用户来说,这种交互模式并不非常方便。

如果我们希望模型能够持续回答查询而不是仅仅完成当前指令,就需要对其进行引导,这个过程称之为“微调”,即继续训练预训练模型,进而使其表现出我们想要的行为(有些人称这是“对齐”模型与使用者期望行为)。

监督训练:在监督学习中(也称为从演示中学习或“指令微调”),我们会收集一组人类编写的文本,这些文本以问题或指令的形式出现,并包含了期望的输出。例如,这些文本可以是某一问题和答案,或者是像带有人类编写总结的summarize the following text {text}这样的任务。

通过在相同的“给定前缀预测下一个token”的目标上继续训练模型,但这次是在指令-输出对集合上,模型学会通过执行指令来响应。即模型接收到给定问题的正确输出的演示,并学会复制输出结果。我们希望通过这种方式将其泛化到训练中尚未出现的问题中去。

强化学习(RL):在强化学习中,我们为模型提供指令,但并不提供人工编写的答案。模型需要自己生成答案。评分机制(例如人类)会读取生成的答案,并告诉模型这些答案的质量。模型的目标是如何回答以获得高分。

另一种机制是模型生成多个答案,评分机制告诉模型哪个答案最好。模型的目标是学习生成高分的答案,而不是低分的答案。在这两种情况下,模型通过生成答案并接收反馈来学习。(注意:许多研究人员将强化学习的范围限定在基于credit分配机制的某些技术层面。于他们而言,“我们是否需要强化学习”的问题也许归结为我们应该使用该技术还是采取其他相关技术来替代。我与他们同样好奇,但就本文目的而言,我认为任何使用外部评分函数的方法均可视为强化学习,无论其运行机制如何。)

强化学习比监督训练难得多,原因如下:首先是“credit分配”问题。语言模型生成一段token序列,且仅在序列末尾才能获得一个分数。由于信号很弱,我们不能确定答案哪些部分是良好的,哪些部分是糟糕的。许多有关强化学习的相关技术研究都在尝试解决该问题,但在本文中我们先不谈这个问题。

credit分配问题是一个活跃的研究领域,但已经存在合理的解决方案。其次,我们需要一种评分机制来对答案进行评分(或为答案评分或比较两个答案),而在基于语言的任务中,很难生成自动评分机制(尽管这可能正在改变,下文会简单论述)。

因此,我们会在强化学习的每一步留下“人类反馈”,但这种方式成本高昂且效率低下,考虑到每个人类反馈只能给出一个相当稀疏的信号,问题会更加糟糕。基于以上困难,我们为什么还要使用强化学习呢?为什么不仅仅选择监督学习呢?

3
多样性论证

对于语言生成模型来说,监督学习/指令调优最大的问题是它们只能复制演示者给出的确切答案,但实际上,人类语言可以用多种方式传递相同的信息,它们都是切实可行的。如果因模型轻微偏离人类规定的文本而受到“惩罚”,可能会使模型产生困惑。

我们当然可以继续逼迫模型去学习更难学习的遣词造句,尽管模型已经学会了生成具有同样意思、合法的替代性回答。因此,我们非常看好强化学习训练提供的多样性表达。考虑到监督学习在实践中的良好应用,以及训练强化学习模型所面临的挑战,这是一个非常直观的论点,但不够有说服力。一直以来,我并不认为这是一个足够核心的问题,现在我仍这样想。

4
理论论证

监督学习只允许正反馈(我们向模型展示一系列问题及其正确答案),而RL允许负反馈(模型被允许生成答案并得到反馈说“这答案是不正确的”),这是我提出的第一个关于LLM领域的监督学习vs强化学习的强有力论点。

从严格的学习理论的角度来看,两者之间有很大的区别:相比正反馈,负反馈要强大得多。从理论论证的角度,当模型只从演示中学习时,对抗型(或粗心的)演示者(demonstrator)可以隐瞒重要例子,从而误导学习者(learner)学习错误的假设。

演示者控制着整个学习过程,但如果学习者能够形成自己的假设,并询问老师(teacher)假设是否正确(例如强化学习设置),通过这种方式,即使是对抗性老师也无法再欺骗学习者学习错误假设,它必须如实告知这一假设是错误的,这种方式赋予了学习者主动性,让学习者更加强大。(当然,前提是对抗型或粗心的老师仍然遵守规则,始终提供真实答案。这是理论框架中的合理假设,这一假设并不影响我们的主体观点:从互动或提问中学习比从演示中学习更加强大)。

这是我们选择强化学习的部分原因,但就通过提问训练大型语言模型交流方面,还有一个更加重要的额外论点。

5
核心论证

以下是我们需要强化学习或类似技术的核心原因。前两个论点依赖于假设,例如"模型可能更难学习"或"粗心的演示者可能会混淆模型",这些假设在实践中是否成立是未知的,

相反,下面的论点可以被证明是成立的。

语言模型(至少)有三种交互模式:(a)文本型(text-grounded): 为模型提供文本和说明(“总结此文本”,“基于此文本,以色列的人口是多少”,“本文中提到的化学名称是什么”,“将此文本翻译成西班牙语”等),让模型基于我们提供的文本生成答案;(b)求知型(knowledge-seeking): 向模型提供问题或指导,让模型根据内在知识(“流感的常见原因是什么”)提供(真实)回答。(c)创造型(creative): 为模型提供问题或说明,然后让模型进行创造性输出。(“写一个关于...的故事”)

我们的论点是基于第二种交互模式(求知型查询),希望在这种查询中得到真实(自信)的答案,我们希望模型在对答案没把握的情况下能够如实回答“我不知道”或拒绝回答这一问题。

对于这类交互模式,由于监督训练可能会让模型撒谎,所以我们必须使用RL。核心问题是:我们希望模型根据内部知识进行回答,但我们并不知道模型内部知识包含的内容。 

在监督训练中,我们给模型提供问题及正确答案,并训练模型复制提供的答案。这里有两种情况:(1)模型“知道”答案。这种情况下,监督学习能够正确推动模型将答案与问题相关连,并且有望让模型执行相似的步骤,回答将来遇到的类似问题。这是所期望的行为。(2)模型不知道答案。在这种情况下,监督训练还是会促使模型给出答案。

现在,我们有两种选择。一种可能是,它会促使模型记住特定的问答对。这种做法本身并没什么坏处,但不太高效,因为我们的目的是让模型具有泛化能力,并且能回答任何问题,而不只是那些在训练数据中出现的问题。但如果我们使模型在这些情况下能做到泛化,那么实际上就是在教模型捏造答案,相当于鼓励模型“说谎”,这很不好。

由于我们无法确定模型知道哪些信息或不知道哪些信息,所以无法避免第二种情况,这对监督训练来说是一个真实且严重的问题。

我们不能仅依靠监督学习来训练模型生成可信任回答,还需要强化学习的加持。与监督学习不同,强化学习不会鼓励模型编造答案:即使模型最初确实猜对了一些答案并错误地学习了“编造”行为,但长远来看,模型会因编造答案的得分较低(很可能是不正确的)而学会依赖内部知识或选择放弃回答。

6
教导模型放弃回答

当模型不知道答案时,我们希望它能够放弃回答并给出“我不知道”或类似的答案。但由于我们不知道模型是否知道答案,所以这并不是一件容易的事,在监督环境中很难做到。我们可以引导模型规避某些类型的问题(例如“从不回答涉及人类的问题”),并回答“我不知道”。但这不是在答案未知时放弃回答的预期行为,只是一个非常薄弱的替代方法(proxy)。

然而,这对于强化学习设置也具有挑战:模型可能从一开始就不会生成“我不知道”的答案,因此我们无法鼓励它作出这种回答。解决这个问题的方法之一是,先进行一些监督训练,学习在某些情况下生成“我不知道”的答案,然后再进行强化学习训练。

但这种方法也有弊端,即在监督学习和强化学习中,模型可能会过度回答“我不知道”。这是一个开放的研究问题,可以尝试通过“定制奖励函数”来解决:将正确答案赋予非常高的分数,放弃回答的答案赋予中低分数,不正确的答案赋予强烈负分。当然,想做到这一点也并非易事。

7
模型窃取 / 蒸馏的影响

OpenAI在GPT模型的强化学习类型调优(RL-type tuning)方面投入了大量精力。原因有很多,他们的部分动机是希望通过鼓励模型在不知道答案时放弃回答来确保准确性和真实性。

最近有一种趋势,即采用其他公开可用的基础语言模型,并对它们进行训练,以期能够复制GPT模型的出色行为。

这种做法类似于监督式训练或指令调优:通过训练,模型可以准确生成GPT模型的答案。这对于教模型执行指令应该很有效,但却不适用于回答知识查询类问题(案例b)。

公开可用的基础模型和OpenAI模型可能具有不同的知识集,因此训练模型以复制GPT的答案可能会面临与监督学习同样的问题,即鼓励模型编造事实,或在它知道正确答案但GPT模型不知道的情况下放弃回答。那么,解决方案是用强化学习对这些模型进行训练,但这是否太过昂贵?

8
无人类反馈的强化学习

长期以来,使用强化学习训练生成语言任务对大多数玩家来说都不切实际:由于缺乏可靠的自动评分指标,强化学习训练需要对每个训练样本进行人工反馈。这既耗时又昂贵,特别是对于需要查看数千到数万甚至数十万个示例才能学习的模型。

然而,强化学习训练现在变得实用了:首先,出现了可以从较少示例中学习的大型预训练语言模型。更重要的是,这些模型为强化学习循环(RL loop)中去掉人类参与铺平了道路。

监督训练对于文本相关的任务非常有效,而且大型模型可以很好地学习执行一些任务。例如,让模型确定两个文本是否意思相同,或者一个文本是否包含另一个文本中没有的事实(还可以将任务分解,让模型“生成所有可从该文本回答的所有'问答对'”,然后针对每个问题询问“在其他文本中是否有该问题的答案,答案是什么”)。

根据经验来看,大型语言模型(甚至中型语言模型)可以使用监督学习可靠地学习执行这些任务,这为我们提供了可用于强化学习设置的有效自动评分机制。

我们可以使用人类提供的指令-响应对进行训练,不过,要让模型生成自己的响应,而不是直接复制人类响应,然后用在监督方式下进行训练的专用文本对比模型(text comparison model)将模型生成的响应与人类提供的响应进行比较,这样就获得了一种自动打分的办法。
 

其他人都在看

  • ChatGPT成功的秘密武器

  • 向量嵌入:AutoGPT的幻觉解法

  • 谷歌科学家:RLHF的演进与局限

  • John Schulman:通往TruthGPT之路

  • 比快更快,开源Stable Diffusion刷新作图速度

  • OneEmbedding:单卡训练TB级推荐模型不是梦

  • GLM训练加速:性能最高提升3倍,显存节省1/3

欢迎Star、试用OneFlow:github.com/Oneflow-Inc/oneflow/icon-default.png?t=N3I4http://github.com/Oneflow-Inc/oneflow/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/508658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

去阿里面试,面试前20分钟突然要求候选人展示过去的工作方案,候选人拒绝后,竟被取消面试!...

离职时,你会把自己的工作成果拷贝下来留档吗? 一位网友说: 面试阿里,面试前20分钟,面试官突然要求他展示过去的工作成果,因为之前是用公司电脑,离职时把电脑交上去了,没有任何留档&a…

AE(自动编码器)与VAE(变分自动编码器)的区别和联系?

他们各自的概念看以下链接就可以了:https://blog.csdn.net/weixin_43135178/category_11543123.html 这里主要谈一下他们的区别? 先说结论: VAE是AE的升级版,VAE也可以被看作是一种特殊的AEAE主要用于数据的压缩与还原&#xff0…

redisson中的分布式锁解读

概述 Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅 提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue,…

【电机应用控制】——FOC基础理论针对无刷电机360°无死角磁场矢量控制

目录 前言 一、FOC简介 1、概述 2、框图详解 二、FOC控制核心—坐标变换 1、CLARKE变换 2、PARK变换&反变换 三、FOC闭环回路 四、SVPWM解析 总结 前言 声明:学习笔记来自正点原子B站教程,根据自己理解进行精简总结,仅供学习…

『python爬虫』16. 多线程与多进程(保姆级图文)

目录 多线程1. 什么是多线程?2. 串行模式3. 多线程3.1 多线程方法写法3.2 多线程方法带参数3.3 多线程类写法 多进程1. 什么是多进程 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 多线程 1. 什么是多…

优化Docker Compose日志输出,加速容器化应用的轻松部署

摘要: 在使用 Docker Compose 部署容器化应用程序时,优化日志输出对于提升效率和管理便利性至关重要。本文将介绍如何优化 Docker Compose 日志输出,以加速容器化应用的轻松部署过程。 优化操作 当我们使用 Docker Compose 部署容器化应用程…

【Queue新技法】用双数组实现一个队列 C++

目录 1 常规的队列构建2 加入一些限制2-1形式化说明 附录0 双数组或双链表实现队列1 单链表与循环缓冲区实现队列3 参考资料 1 常规的队列构建 到火车站办理退票,排队的人构成队列。注意到有两个关键动作: 入队,即自觉站到队伍的末尾。出队&…

一篇文章搞定《ViewPage2离屏加载》

------《ViewPage2离屏加载》 前言离屏加载是什么OffscreenPageLimit设置OffscreenPageLimit表现OffscreenPageLimit值为1OffscreenPageLimit值为3 OffscreenPageLimit值取多大比较合适 前言 这里就不讲ViewPage了,买新不买旧,用新不用旧。 但是会将Vie…

Power BI: 表格显示切片器选中时间之前的数据

例如下面的例子,Year List表和Caleadar表是1对多的关联关系。 Caleadar表: Caleadar VAR StartYear YEAR(NOW())-5 VAR EndYear YEAR(NOW())5 RETURN ADDCOLUMNS (CALENDAR (DATE(StartYear,1,1), DATE(EndYear,12,31)),"Year", YEAR ([…

【设计模式】| 修炼内功 | 23种设计模式——工厂方法模式(含抽象)

设计模式如同织锦之艺术,精心构筑,展示优美。 学习设计模式,犹如追逐清晨的曙光,扉页掀开了人生的新篇章。当你学会设计模式的奥秘,就如同走进了灯火通明的城市,丰富多彩的建筑,让你大开眼界&am…

30个最常用的空间SQL用例

在开始使用空间 SQL 时,至少对我而言,最大的挑战之一是拥有一个快速简便的参考,以将你当前的 GIS 工作流转换为 SQL。 有许多令人惊叹的资源可以扩展这方面的知识,但本指南旨在成为一本真正简单的食谱,以开始将你当前的…

从零开始的强化学习入门学习路线

强化学习是机器学习领域中的一个分支,它是指智能体通过与环境的交互来学习如何采取最佳行动以最大化奖励信号的过程。强化学习在许多领域都有广泛的应用,如游戏、自动驾驶和机器人控制等。如果你对强化学习感兴趣,下面是一个入门强化学习的学…

SequoiaDB分布式数据库2023.4月刊

本月看点速览 赋能产业升级,荣获新睿之星 聚焦金融,进一步探索非结构化数据价值释放 再获肯定,入选2023年中国最佳信创厂商入围名单 青杉计划2023已开启,一起攀登更高的“杉” 赋能产业升级,荣获新睿之星 4月18日…

PyTorch典型函数之gather

PyTorch典型函数之gather 作用描述函数详解典型应用场景(1) 深度强化学习中计算损失函数 参考链接 作用描述 如上图所示,假如我们有一个Tensor A(图左),要从A中提取一部分元素组成Tensor B(图右)&#xff0…

7.外观模式C++用法示例

外观模式 一.外观模式1.原理2.特点3.外观模式与装饰器模式的异同4.应用场景C程序示例 一.外观模式 外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口,隐藏了一个或多个复杂的子系统的复杂性,并使…

图嵌入表示学习—Node Embeddings随机游走

Random Walk Approaches for Node Embeddings 一、随机游走基本概念 想象一个醉汉在图中随机的行走,其中走过的节点路径就是一个随机游走序列。 随机行走可以采取不同的策略,如行走的方向、每次行走的长度等。 二、图机器学习与NLP的关系 从图与NLP的…

posix线程的优先级测试

如果创建的线程不够多&#xff0c;有些问题是体现不出来的。 优先级打印&#xff1a; 测试目的&#xff1a;输出三种调度模式下的最大优先级和最小优先级 #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <fcntl.h> #…

Kubernetes_容器网络_01_Docker网络原理(二)

文章目录 一、前言二、被隔离的Docker容器三、网桥Bridge四、VethPair网络对五、统一宿主机上的两个Container容器通信六、宿主机访问其上的容器七、宿主机上的容器访问另一个宿主机八、尾声 一、前言 二、被隔离的Docker容器 Linux 网络&#xff0c;就包括&#xff1a;网卡&…

技术选型对比- RPC(Feign VS Dubbo)

协议 Dubbo 支持多传输协议: Dubbo、Rmi、http,可灵活配置。默认的Dubbo协议&#xff1a;利用Netty&#xff0c;TCP传输&#xff0c;单一、异步、长连接&#xff0c;适合数据量小(传送数据小&#xff0c;不然影响带宽&#xff0c;响应速度)、高并发和服务提供者远远少于消费者…

UnityWebGL+阿里云服务器+Apache完成项目搭建展示

一、服务器相关 Step1:租借一台阿里云服务器 我自己租借了一台北京的ECS服务器&#xff0c;有免费一年的活动&#xff0c;1 vCPU 2 GiB&#xff0c;我自己选择的Ubuntu系统&#xff0c;也可以选择Windows系统 Step2:进入远程连接 进入自己的服务器实例后&#xff0c;点击远程…