作者 | Yoav Goldberg责编 | OneFlow
翻译|贾川、徐佳渝、杨婷
为什么ChatGPT非得用强化学习,而不直接用监督学习?原因不是那么显而易见。以色列巴伊兰大学教授Yoav Goldberg对强化学习在大型语言模型应用必要性作了深度解读,进一步对比论证了监督学习与强化学习的特点,并为未来改进提供了思路。
Goldberg在2011年获得本古里安大学博士学位,他也是艾伦人工智能研究所以色列分部的研究主管,他也曾在Google(纽约)研究院担任研究科学家。他在NLP领域深耕十多年,在词汇语义学、句法分析及对基于深度学习的语言处理等领域作出了突出贡献。
注:以下内容由OneFlow编译发布,转载请联系OneFlow获得授权
为何使用强化学习?
随着ChatGPT等大型语言模型的发布,人们对“RLHF训练(即基于人类反馈的强化学习训练)”的重要性进行了诸多讨论。在训练语言模型方面,我一度困惑于为什么强化学习比从演示中学习(也称为监督学习)更好,难道从演示中学习(或根据语言模型术语中的“指令微调”,学习模仿人类写的回答)还不够?
我提出了一个有说服力的理论论据。不过我意识到还有另一个论点,它不仅支持强化学习训练,而且尤其适用于ChatGPT等模型。OpenAI的John Schulman在其演讲的前半部分进行了详细论述 。本文的大部分内容都引用了John的论点,但增加了一些他没有明确表述的内容(不过我确信这些内容都是John考虑过的)。
本文提供了大量背景知识,以确保读者可以更好地理解文章内容。如果你想了解文章重点,可以直接看“核心论证”部分。
背景:监督学习vs强化学习
简要地解释一下这两种学习场景,以便我们能够达成共识。如果你已经了解了这些内容,可以跳过此部分。
预训练:在这两种设置中,首先我们假设语言模型在大量的文本上进行预训练,以预测下一个token。因此,对于每个词序列,我们有一个模型可对潜在的下一个词的选项分配概率。通过这种方式,模型会获得语言的某种内部表示。
经过这一过程,模型的生成文本能力会变强,且能够根据给定文本前缀,生成符合自然习惯的后续文本,但它并不擅长“交流”。例如,当提示(prompted)一个问题时,模型可能会回答该问题或者生成一系列附加问题,也可能会回答这是一个在......的上下文中提出的重要问题等等。
这些都是遵循自然语言文本问题的有效延续(continuation)。我们可以通过编写输入文本,来使模型执行我们所希望的语言行为,该延续会解决我们的问题(也被称之为“提示工程”),但是对于只想提出问题或指令就让模型进行回答的非专家用户来说,这种交互模式并不非常方便。
如果我们希望模型能够持续回答查询而不是仅仅完成当前指令,就需要对其进行引导,这个过程称之为“微调”,即继续训练预训练模型,进而使其表现出我们想要的行为(有些人称这是“对齐”模型与使用者期望行为)。
监督训练:在监督学习中(也称为从演示中学习或“指令微调”),我们会收集一组人类编写的文本,这些文本以问题或指令的形式出现,并包含了期望的输出。例如,这些文本可以是某一问题和答案,或者是像带有人类编写总结的summarize the following text {text}这样的任务。
通过在相同的“给定前缀预测下一个token”的目标上继续训练模型,但这次是在指令-输出对集合上,模型学会通过执行指令来响应。即模型接收到给定问题的正确输出的演示,并学会复制输出结果。我们希望通过这种方式将其泛化到训练中尚未出现的问题中去。
强化学习(RL):在强化学习中,我们为模型提供指令,但并不提供人工编写的答案。模型需要自己生成答案。评分机制(例如人类)会读取生成的答案,并告诉模型这些答案的质量。模型的目标是如何回答以获得高分。
另一种机制是模型生成多个答案,评分机制告诉模型哪个答案最好。模型的目标是学习生成高分的答案,而不是低分的答案。在这两种情况下,模型通过生成答案并接收反馈来学习。(注意:许多研究人员将强化学习的范围限定在基于credit分配机制的某些技术层面。于他们而言,“我们是否需要强化学习”的问题也许归结为我们应该使用该技术还是采取其他相关技术来替代。我与他们同样好奇,但就本文目的而言,我认为任何使用外部评分函数的方法均可视为强化学习,无论其运行机制如何。)
强化学习比监督训练难得多,原因如下:首先是“credit分配”问题。语言模型生成一段token序列,且仅在序列末尾才能获得一个分数。由于信号很弱,我们不能确定答案哪些部分是良好的,哪些部分是糟糕的。许多有关强化学习的相关技术研究都在尝试解决该问题,但在本文中我们先不谈这个问题。
credit分配问题是一个活跃的研究领域,但已经存在合理的解决方案。其次,我们需要一种评分机制来对答案进行评分(或为答案评分或比较两个答案),而在基于语言的任务中,很难生成自动评分机制(尽管这可能正在改变,下文会简单论述)。
因此,我们会在强化学习的每一步留下“人类反馈”,但这种方式成本高昂且效率低下,考虑到每个人类反馈只能给出一个相当稀疏的信号,问题会更加糟糕。基于以上困难,我们为什么还要使用强化学习呢?为什么不仅仅选择监督学习呢?
多样性论证
对于语言生成模型来说,监督学习/指令调优最大的问题是它们只能复制演示者给出的确切答案,但实际上,人类语言可以用多种方式传递相同的信息,它们都是切实可行的。如果因模型轻微偏离人类规定的文本而受到“惩罚”,可能会使模型产生困惑。
我们当然可以继续逼迫模型去学习更难学习的遣词造句,尽管模型已经学会了生成具有同样意思、合法的替代性回答。因此,我们非常看好强化学习训练提供的多样性表达。考虑到监督学习在实践中的良好应用,以及训练强化学习模型所面临的挑战,这是一个非常直观的论点,但不够有说服力。一直以来,我并不认为这是一个足够核心的问题,现在我仍这样想。
理论论证
监督学习只允许正反馈(我们向模型展示一系列问题及其正确答案),而RL允许负反馈(模型被允许生成答案并得到反馈说“这答案是不正确的”),这是我提出的第一个关于LLM领域的监督学习vs强化学习的强有力论点。
从严格的学习理论的角度来看,两者之间有很大的区别:相比正反馈,负反馈要强大得多。从理论论证的角度,当模型只从演示中学习时,对抗型(或粗心的)演示者(demonstrator)可以隐瞒重要例子,从而误导学习者(learner)学习错误的假设。
演示者控制着整个学习过程,但如果学习者能够形成自己的假设,并询问老师(teacher)假设是否正确(例如强化学习设置),通过这种方式,即使是对抗性老师也无法再欺骗学习者学习错误假设,它必须如实告知这一假设是错误的,这种方式赋予了学习者主动性,让学习者更加强大。(当然,前提是对抗型或粗心的老师仍然遵守规则,始终提供真实答案。这是理论框架中的合理假设,这一假设并不影响我们的主体观点:从互动或提问中学习比从演示中学习更加强大)。
这是我们选择强化学习的部分原因,但就通过提问训练大型语言模型交流方面,还有一个更加重要的额外论点。
核心论证
以下是我们需要强化学习或类似技术的核心原因。前两个论点依赖于假设,例如"模型可能更难学习"或"粗心的演示者可能会混淆模型",这些假设在实践中是否成立是未知的,
相反,下面的论点可以被证明是成立的。
语言模型(至少)有三种交互模式:(a)文本型(text-grounded): 为模型提供文本和说明(“总结此文本”,“基于此文本,以色列的人口是多少”,“本文中提到的化学名称是什么”,“将此文本翻译成西班牙语”等),让模型基于我们提供的文本生成答案;(b)求知型(knowledge-seeking): 向模型提供问题或指导,让模型根据内在知识(“流感的常见原因是什么”)提供(真实)回答。(c)创造型(creative): 为模型提供问题或说明,然后让模型进行创造性输出。(“写一个关于...的故事”)
我们的论点是基于第二种交互模式(求知型查询),希望在这种查询中得到真实(自信)的答案,我们希望模型在对答案没把握的情况下能够如实回答“我不知道”或拒绝回答这一问题。
对于这类交互模式,由于监督训练可能会让模型撒谎,所以我们必须使用RL。核心问题是:我们希望模型根据内部知识进行回答,但我们并不知道模型内部知识包含的内容。
在监督训练中,我们给模型提供问题及正确答案,并训练模型复制提供的答案。这里有两种情况:(1)模型“知道”答案。这种情况下,监督学习能够正确推动模型将答案与问题相关连,并且有望让模型执行相似的步骤,回答将来遇到的类似问题。这是所期望的行为。(2)模型不知道答案。在这种情况下,监督训练还是会促使模型给出答案。
现在,我们有两种选择。一种可能是,它会促使模型记住特定的问答对。这种做法本身并没什么坏处,但不太高效,因为我们的目的是让模型具有泛化能力,并且能回答任何问题,而不只是那些在训练数据中出现的问题。但如果我们使模型在这些情况下能做到泛化,那么实际上就是在教模型捏造答案,相当于鼓励模型“说谎”,这很不好。
由于我们无法确定模型知道哪些信息或不知道哪些信息,所以无法避免第二种情况,这对监督训练来说是一个真实且严重的问题。
我们不能仅依靠监督学习来训练模型生成可信任回答,还需要强化学习的加持。与监督学习不同,强化学习不会鼓励模型编造答案:即使模型最初确实猜对了一些答案并错误地学习了“编造”行为,但长远来看,模型会因编造答案的得分较低(很可能是不正确的)而学会依赖内部知识或选择放弃回答。
教导模型放弃回答
当模型不知道答案时,我们希望它能够放弃回答并给出“我不知道”或类似的答案。但由于我们不知道模型是否知道答案,所以这并不是一件容易的事,在监督环境中很难做到。我们可以引导模型规避某些类型的问题(例如“从不回答涉及人类的问题”),并回答“我不知道”。但这不是在答案未知时放弃回答的预期行为,只是一个非常薄弱的替代方法(proxy)。
然而,这对于强化学习设置也具有挑战:模型可能从一开始就不会生成“我不知道”的答案,因此我们无法鼓励它作出这种回答。解决这个问题的方法之一是,先进行一些监督训练,学习在某些情况下生成“我不知道”的答案,然后再进行强化学习训练。
但这种方法也有弊端,即在监督学习和强化学习中,模型可能会过度回答“我不知道”。这是一个开放的研究问题,可以尝试通过“定制奖励函数”来解决:将正确答案赋予非常高的分数,放弃回答的答案赋予中低分数,不正确的答案赋予强烈负分。当然,想做到这一点也并非易事。
模型窃取 / 蒸馏的影响
OpenAI在GPT模型的强化学习类型调优(RL-type tuning)方面投入了大量精力。原因有很多,他们的部分动机是希望通过鼓励模型在不知道答案时放弃回答来确保准确性和真实性。
最近有一种趋势,即采用其他公开可用的基础语言模型,并对它们进行训练,以期能够复制GPT模型的出色行为。
这种做法类似于监督式训练或指令调优:通过训练,模型可以准确生成GPT模型的答案。这对于教模型执行指令应该很有效,但却不适用于回答知识查询类问题(案例b)。
公开可用的基础模型和OpenAI模型可能具有不同的知识集,因此训练模型以复制GPT的答案可能会面临与监督学习同样的问题,即鼓励模型编造事实,或在它知道正确答案但GPT模型不知道的情况下放弃回答。那么,解决方案是用强化学习对这些模型进行训练,但这是否太过昂贵?
无人类反馈的强化学习
长期以来,使用强化学习训练生成语言任务对大多数玩家来说都不切实际:由于缺乏可靠的自动评分指标,强化学习训练需要对每个训练样本进行人工反馈。这既耗时又昂贵,特别是对于需要查看数千到数万甚至数十万个示例才能学习的模型。
然而,强化学习训练现在变得实用了:首先,出现了可以从较少示例中学习的大型预训练语言模型。更重要的是,这些模型为强化学习循环(RL loop)中去掉人类参与铺平了道路。
监督训练对于文本相关的任务非常有效,而且大型模型可以很好地学习执行一些任务。例如,让模型确定两个文本是否意思相同,或者一个文本是否包含另一个文本中没有的事实(还可以将任务分解,让模型“生成所有可从该文本回答的所有'问答对'”,然后针对每个问题询问“在其他文本中是否有该问题的答案,答案是什么”)。
根据经验来看,大型语言模型(甚至中型语言模型)可以使用监督学习可靠地学习执行这些任务,这为我们提供了可用于强化学习设置的有效自动评分机制。
我们可以使用人类提供的指令-响应对进行训练,不过,要让模型生成自己的响应,而不是直接复制人类响应,然后用在监督方式下进行训练的专用文本对比模型(text comparison model)将模型生成的响应与人类提供的响应进行比较,这样就获得了一种自动打分的办法。
▶Midjourney官方中文版在QQ开启内测申请;“Hi,Siri”将成历史,苹果计划修改语音助手唤醒方式|极客头条
▶ 经历多次重写,苹果平台最强科学计算器PCalc背后的故事
▶ 向 GPT-3 问同一个问题,某些语言要贵 15.77 倍!