利用RLHF优化大模型:提升性能与应用能力

在数据科学不断发展的过程中,大模型在自然语言处理、图像识别、金融预测等各个领域的应用越来越广泛。然而,大模型的训练和优化也面临着越来越多的挑战,例如数据量过大、计算资源不足、超参数调整困难等。传统的机器学习算法往往难以处理这些问题,因此需要更高效和智能的算法来应对。Reinforcement Learning from Human Feedback (RLHF) 作为一种强化学习算法,可以有效地利用人类给出的反馈信息来训练大模型,提高其性能。本文将介绍如何使用RLHF来优化大模型,为其应用提供更强大的支持。

下面是文章的结构

利用RLHF优化大模型:提升性能与应用能力

  • 预训练一个语言模型 (LM)
    • 对话的监督微调(SFT)
  • 训练奖励模型
  • 用强化学习微调
  • RLHF的优势和局限性
    • RLHF的优点:
    • RLHF的挑战和局限性:
  • 结语

预训练一个语言模型 (LM)

预训练的目标是让语言模型具备对语言的统计信息,使其能够根据上下文预测词汇的出现概率。语言模型可以看作是一个"补全机器",给定一个提示文本,它可以生成一个回应文本来完成提示。通过预训练,我们得到了一个大型的语言模型(LLM),也称为预训练模型。

一旦您拥有了预训练的语言模型,您还可以进行监督微调(STF)这一额外的可选步骤。在监督微调中,我们使用人工标注的(输入,输出)文本对对预训练的模型进行微调,使其更适应特定任务。STF被认为是RLHF的高质量初始化,为后续的RLHF过程奠定了良好的基础。

在这一步的最后,我们得到了经过训练的语言模型,即我们的主模型。这个主模型是我们希望用RLHF进一步训练的模型,通过RLHF的训练,它将不断根据人类反馈改进自己的生成能力。
在这里插入图片描述

值得一提的是,在预训练阶段,不同的研究机构可能采用不同的模型和方法。例如,OpenAI在其流行的RLHF模型 InstructGPT 中使用了较小版本的 GPT-3,Anthropic使用了参数量庞大的Transformer模型,而DeepMind则使用了自家的巨大参数模型 Gopher。此外,对预训练模型进行微调时,有的机构可能采用额外的文本或条件,比如OpenAI对“更可取”的人工生成文本进行微调,而Anthropic根据“有用、诚实和无害”的标准在上下文线索上蒸馏了原始的模型。这些微调步骤可能涉及昂贵的增强数据,但并不是RLHF的必须步骤。因为RLHF仍然是一个尚待探索的领域,对于哪种模型适合作为RLHF的起点并没有明确的答案,因此不同机构可能采用不同的方法进行实验。

对话的监督微调(SFT)

监督微调(SFT)的目标是优化预训练模型,使其能够生成用户所期望的回应。在预训练阶段,模型通过学习大量的语言数据,优化了对补全文本的预测能力。这意味着当我们给预训练模型一个问题时,比如"如何学习编程",它可以生成多种合理的完成方式,例如:

  1. 添加问题上下文:针对初学者
  2. 添加后续问题:有哪些编程语言需要学习?学习编程需要多长时间?
  3. 直接给出答案:学习编程需要掌握编程语法和算法。

在这些选项中,如果我们真正希望得到一个回答,那么第三个选项是最合适的。而监督微调的目标就是通过优化预训练模型,使其更倾向于生成用户所期望的答案。

在实施监督微调时,我们向语言模型展示不同用例(例如问答、摘要、翻译等)的示例,来告诉模型如何适当地对这些提示进行回应。这些示例的格式是(提示,回应),通常称为演示数据。OpenAI将这种监督微调方法称为"行为克隆":您向模型展示了它应该如何行为,而模型则会克隆这种行为。

举个例子,假设我们有一个预训练的语言模型,我们希望在问答场景中优化它的表现。我们可以为模型提供各种问答示例,比如:

  • 提示:“请告诉我如何制作巧克力蛋糕。”
  • 回应:“首先准备好巧克力、面粉、鸡蛋和牛奶。然后按照食谱进行操作,最后烘烤约30分钟即可。”
  • 提示:“什么是太阳系中最大的行星?”
  • 回应:“太阳系中最大的行星是木星。”

通过这样的示例,我们教导模型正确回答不同类型的问题。随着监督微调的进行,模型会逐渐学会根据提示生成用户期望的回答,从而更好地适应特定任务和用例。通过这一步骤,我们的主模型将逐渐变得更加智能和精准,为后续的RLHF阶段奠定了基础。下图为监督微调的简单图示。

在这里插入图片描述

训练奖励模型

在这里插入图片描述
在这一步中,我们的目标是收集一个包含(输入文本,输出文本,奖励)三元组的数据集。

如上图所示:使用输入文本数据(最好是生产数据),通过您的模型生成相应的输出文本,并由人工为生成的输出文本分配一个奖励值。

奖励值一般取0~5之间,也可以用0/1来表示。

奖励模型(RM)的任务是用一对(prompt,response)和一个奖励分数来训练一个模型,在给定输入上输出分数是机器学习中一个非常常见的任务,可以将其看作是分类或回归任务。该模型为每一个文本输入到文本输出的结果打分,来评估模型的性能

为了计算出最优的奖励模型,我们使用不同参数的大模型(不同微调或者不微调的)输出不同的response,奖励分数可能也不一样。优化奖励模型的目的就是为了尽可能让同一个prompt输入到不同的大模型下输出的response,最后得到的奖励差不多。

假设: r θ r_\theta rθ 为正在训练的奖励模型,模型参数为 θ \theta θ

x x x:prompt
y w y_w yw:winning response 表示这些大模型输出中得到奖励最高的response
y l y_l yl:losing response 表示这些大模型输出得到奖励最低的response

对于每个训练样本 ( x , y w , y l ) (x, y_w, y_l) (x,yw,yl),有:

s w = r θ ( x , y w ) s_w=r_\theta(x,y_w) sw=rθ(x,yw):奖励模型对于winning response的分数
s l = r θ ( x , y l ) s_l=r_\theta(x,y_l) sl=rθ(x,yl):奖励模型对于losing response的分数

损失值: − l o g ( σ ( s w − s l ) ) −log(\sigma(s_w−s_l)) log(σ(swsl))

为了更好地理解这个损失函数的作用,我们来进行可视化。设 d = s w − s l d=s_w−s_l d=swsl。以下是 f ( d ) = − l o g ( σ ( d ) ) f(d)=−log(\sigma(d)) f(d)=log(σ(d))的图表。对于负的d,损失值较大,这鼓励奖励模型不能使winning response的分数降低于losing response的分数。

关于训练奖励数值方面,这里需要人工对 LM 生成的回答进行排名。

对具体的排名方式,一种成功的方式是对不同 LM 在相同提示下的输出进行比较,然后使用 Elo 系统建立一个完整的排名。这些不同的排名结果将被归一化为用于训练的标量奖励值。

ELo机制玩王者荣耀,英雄联盟的应该再熟悉不过了

通过得到奖励模型,我们为后续的RLHF过程提供了一种可靠的衡量标准。

用强化学习微调

强化学习微调是RLHF的关键步骤之一。它有助于训练语言模型,使其能够根据用户提示生成更合适的回应。然而,由于输出的奖励本身并不是可微的,我们需要使用强化学习(RL)来构建一个损失函数,以便能够对LM进行反向传播。

大佬们通过Kullback-Leibler(KL)散度和近端策略优化(PPO)来实现强化学习技术。

为了更好的说明为什么可以将强化学习用到LM中,我们首先将微调任务表述为 RL 问题。

该策略 (policy) 是一个接受提示并返回一系列文本 (或文本的概率分布) 的 LM。这个策略的 行动空间 (action space) 是 LM 的词表对应的所有词元 (一般在 50k 数量级) ,观察空间 (observation space) 是可能的输入词元序列,也比较大 (词汇量 ^ 输入标记的数量) 。奖励函数 是偏好模型和策略转变约束 (Policy shift constraint) 的结合。

如下图所示,对比通用的强化学习来看,你会更理解了
在这里插入图片描述在这里插入图片描述
在训练开始,我们将创建一个与LM完全相同且其可训练权重被冻结的LM。这个模型将有助于防止可训练的LM完全改变其权重,并开始输出一些无意义的文本来满足奖励模型。

我们通过计算冻结的LM和没有冻结的LM值之间的文本输出分布序列(概率分布)的KL散度作为损失函数。

有了奖励和KL损失,我们现在可以应用强化学习来使奖励损失可微分。

为了使损失可微分,我们采用了近端策略优化(Proximal Policy Optimization,PPO)算法!下面是整个微调的详细步骤:

  • 第一步:利用奖励模型

首先,用户输入或提示被发送到RL策略,这实际上是LM的调整版本。RL策略生成一个回应,该回应与初始LM的输出一起由奖励模型评估。然后,奖励模型生成一个标量奖励值,对应于回应的质量。

  • 第二步:引入反馈循环

这个过程在反馈循环中迭代,奖励模型为尽可能多的样本分配奖励,以资源允许的方式。随着时间的推移,获得更高奖励的回应将引导RL策略,帮助其生成更符合人类期望的回应。

  • 第三步:使用KL散度衡量差异

Kullback-Leibler(KL)散度是衡量两个概率分布之间差异的统计方法,在此起着至关重要的作用。在RLHF中,使用KL散度比较RL策略当前回应的概率分布与表示理想或最符合人类期望回应的参考分布之间的差异。

  • 第四步:使用近端策略优化进行微调

微调的一个重要部分是近端策略优化(PPO)。PPO是一种著名的强化学习算法,以其在高维状态和动作空间的复杂环境中优化策略的有效性而闻名。PPO在RLHF微调过程中尤其有用,因为它在训练过程中有效地平衡了探索和利用。对于RLHF代理来说,这种平衡对于从人类反馈和试错探索中学习至关重要。因此,整合PPO可以实现更快和更强大的学习。

  • 第五步:避免不合适的回应

微调过程有助于阻止语言模型产生不合适或荒谬的输出。由于低奖励的回应不太可能被重复,语言模型被驱使产生更符合人类期望的输出。

其中PPO算法计算损失公式和图解释(用于对LM进行小幅度更新)如下所示:

  1. 将“Initial probs”设为“New probs”来初始化。
  2. 计算新输出文本概率与初始输出文本概率之间的比率。
  3. 根据公式 l o s s = r θ ( y ∣ x ) − λ K L D K L ( π p p o ( y ∣ x ) ∣ ∣ π b a s e ( y ∣ x ) ) loss =r_\theta(y|x)- \lambda_{KL}D_{KL}(\pi_{ppo}(y|x)||\pi_{base}(y|x)) loss=rθ(yx)λKLDKL(πppo(yx)∣∣πbase(yx))计算损失
  4. 通过反向传播来更新LM的权重。
  5. 使用新更新的LM计算“New probs”(即新的输出文本概率)。
  6. 重复步骤2至步骤5 N 次(通常,N=4)。

这里的probs就是LM模型的文本输出概率 π ( y ∣ x ) \pi(y|x) π(yx)

在这里插入图片描述

RLHF的优势和局限性

从人类反馈中进行强化学习(RLHF)为完善AI系统提供了强大的方法论。然而,就像任何其他方法一样,它既有明显的优点,也存在潜在的挑战。

RLHF的优点:

  1. 适应性:RLHF是一种动态学习策略,可以根据收到的反馈进行适应。这种适应性使其非常适合各种任务,并使其能够根据实时交互和反馈调整其行为。
  2. 减少偏见:理论上,RLHF有助于减少模型的偏见。通过精心选择和多样化的人类反馈,这些模型可以从更广泛、更代表性的角度学习,减少在初始训练数据中固有的过度泛化或偏见。
  3. 持续改进:RLHF模型具有持续改进的能力。随着这些模型与用户的互动并获得更多反馈,它们可以学习和适应,从而提高性能和用户体验。
  4. 安全性:RLHF可以在增强AI系统的安全性方面发挥关键作用。通过人类反馈,这些系统可以避免潜在的有害或不适当的行为,使其对交互和使用更安全。

RLHF的挑战和局限性:

1. 可扩展性:可扩展性仍然是RLHF面临的一个重大挑战。由于这些模型依赖于人类反馈进行学习,将其扩展以适应更大或更复杂的任务可能会耗费大量资源和时间。
2. 依赖于人的因素:RLHF模型严重依赖于人类反馈的质量。无效或不足的反馈可能导致性能不佳,甚至在模型中无意间培养出有害行为。
3. 人类偏见:偏见引入的潜在问题是RLHF的一个关键关注点。由人类评估者提供的反馈可能带有固有偏见,导致学习的偏差。这些偏见可以采取多种形式,包括选择性偏见、确认偏见、评估者间变异性和反馈有限性。

然而,值得注意的是,存在有效的策略来减轻这些偏见。选择多样化的评估者、共识评估、评估者的校准、对反馈过程和代理性能的定期评估以及平衡反馈与其他来源的方法都有助于减少RLHF中偏见的影响。这些策略强调了RLHF的周密和系统的方法,强调了在过程中持续评估和调整的重要性。

在RLHF的不断发展过程在RLHF的不断发展过程中,还存在一些其他挑战和局限性需要解决:

  1. 解释性和透明性:随着模型规模的增大和复杂性的提高,大型语言模型往往变得更加晦涩难解。这使得解释模型的决策过程变得困难,特别是在使用RLHF进行微调后。对于一些应用场景,特别是在需要解释性和透明性的领域,这可能会成为一个限制因素。
  2. 奖励设计:设计有效的奖励函数是RLHF中的一个关键问题。奖励函数需要能够准确地反映出模型的性能,并且要具有足够的区分度,以便对不同回应进行排序。但是,设计奖励函数并不总是直观和简单的,特别是在复杂的任务和多样化的回应情况下。
  3. 对抗性样本:强化学习往往对对抗性样本攻击具有一定的脆弱性。在RLHF中,如果模型被针对性地攻击,可能会导致生成不符合期望的回应。这需要在RLHF训练过程中对模型进行鲁棒性和安全性的考虑,以防止对抗性攻击。
  4. 训练效率:由于大型模型的训练需要大量的计算资源和时间,RLHF的训练成本可能会很高。这对于一些资源受限的环境和应用场景来说可能是一个挑战。

尽管存在这些挑战,但RLHF作为一种强大的学习方法仍然在不断演进和改进。研究人员和开发者正在努力解决这些问题,以进一步推动RLHF的应用和发展。同时,社会对于人工智能系统的可信度和可控性也在不断增加,对于解释性、透明性和可解释性的要求也将在RLHF的发展过程中得到更多关注。

在未来,我们可以期待看到更多创新和改进,以使RLHF成为更加普遍且可信赖的方法,为各个领域的应用提供更强大的支持和推动人工智能技术的持续进步。

结语

随着数据科学和人工智能领域的不断发展,大型语言模型和RLHF作为强大的工具正逐渐成为各种领域的重要组成部分。通过预训练和微调,大型语言模型能够具备丰富的语言表达能力,而RLHF则能够根据人类反馈持续改进模型的性能,使其更加智能和适应不同任务。

然而,我们也必须认识到RLHF仍然面临着一些挑战,如可扩展性、人类偏见、解释性等问题。解决这些问题需要跨学科的研究和合作,以确保RLHF的应用能够安全、可靠、高效地应对现实世界的挑战。

在未来,我们有理由相信,随着技术的不断进步和对人工智能的深入理解,RLHF将继续发展壮大,为人类社会带来更多的福祉和创新。同时,我们也需要密切关注其发展过程中可能带来的道德和社会问题,并持续推动科技的发展与社会价值的平衡。只有这样,RLHF才能真正成为人工智能技术发展的助推器,为人类创造更美好的未来。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于whisper和whisperx的语音视频和字幕对齐

环境的安装 创建py310虚拟环境,需要安装Anaconda的Python环境。 Python初学者在不同系统上安装Python的保姆级指引 Win10+Python3.9+GPU版pytorch环境搭建最简流程 Python虚拟环境的安装和使用 还需要提前安装FFmpeg用于音频操作,并添加到环境变量中。 创建一个名称为w…

Kotlin~Proxy代理模式

概念 又称委托模式,充当中介代理的类。 特点:让一个对象控制另一个对象的访问,让代理充当其他事物的接口。 角色介绍 抽象目标类具体目标类代理类 UML 代码实现 按实现分为静态和动态代理 interface PhoneSell {fun sell() }class Main…

4K/8K AI巡检详解:风电巡检领域主动出击的监控厂商

最近,“北方高温”、“厄尔尼诺大烤”等词条频上热搜的背后,为应对气候变化挑战,全球正迎来一场波澜壮阔的绿色低碳转型浪潮。 而在“碳达峰、碳中和”政策背景下,风电行业肩负着重要的责任与使命。根据《中国可再生能源发展报告…

【JavaEE】基于Servlet与MySQL实现一个简易网站

目录 前言 一、实现表白墙的前期准备工作 1、约定前后端交互的接口 1.1、接口一:页面获取当前所有的留言消息 1.2、接口二:提交新消息给服务器 二、前端和后端代码的实现 1、数据的永久化保存 2、小结 前言 之前小编在写前端页面的时候&#x…

SkyWalking链路追踪中span全解

基本概念 在SkyWalking链路追踪中,Span(跨度)是Trace(追踪)的组成部分之一。Span代表一次调用或操作的单个组件,可以是一个方法调用、一个HTTP请求或者其他类型的操作。 每个Span都包含了一些关键的信息&am…

1.前端入门

文章目录 一、基础认知1.1 认识网页:1.2 五大浏览器1.3 Web标准 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一、基础认知 1.1 认识网页: 1.网页由哪些部分组成? 文字、图片、音频、视频、超链接。 2.我们…

(五)FLUX中的数据类型

以下内容来自 尚硅谷,写这一系列的文章,主要是为了方便后续自己的查看,不用带着个PDF找来找去的,太麻烦! 第 5 章 FLUX中的数据类型 5.1 10 个基本数据类型 5.1.1 Boolean (布尔型) 5.1.1.1 …

sql进阶 之case表达式

case表达式 CASE表达式是SQL里非常重要而且使用起来非常便利的技术,我们应该学会用它来描述条件分支。本节将通过行列转换、已有数据重分组(分类)、与约束的结合使用、针对聚合结果的条件分支等例题,来介绍CASE表达式的用法。标红…

JAVA设计模式——23种设计模式详解

一、什么是设计模式🍉 设计模式(Design pattern) 是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目…

MATLAB与ROS联合仿真——ROS环境搭建及相关准备工作(上)

本篇文章主要介绍在安装完ROS后,在进行MATLAB与ROS联合仿真之前,需要进行的一些环境搭建以及准备工作,主要分为 创建ROS工作空间及功能包、必备功能包安装、安装Gazebo11、导入实验功能包至工作空间、安装Visual_Studio_Code(选做)、常用便捷…

mac端数据库管理 Navicat Premium 15 for Mac v15.0.36

Navicat Premium 15是一款功能强大的数据库管理工具,由PremiumSoft CyberTech Ltd.开发。它提供了一个集成的界面,用于连接和管理多种不同类型的数据库,如MySQL、Oracle、SQL Server、PostgreSQL等。 Navicat Premium 15具有直观和用户友好的…

NFT和数字藏品的安全方案解析

一、NFT和数字藏品 01 NFT是什么? NFT 是Non-Fungible Tokens 的缩写,意思是不可互换的代币,它是相对于可互换的代币而言的。不可互换的代币也称为非同质代币。什么是可互换的代币?比如BTC(比特币)、ETH&…

SDN系统方法 | 5. 交换机操作系统

随着互联网和数据中心流量的爆炸式增长,SDN已经逐步取代静态路由交换设备成为构建网络的主流方式,本系列是免费电子书《Software-Defined Networks: A Systems Approach》的中文版,完整介绍了SDN的概念、原理、架构和实现方式。原文: Softwar…

react native 本地存储 AsyncStorage

An asynchronous, unencrypted, persistent, key-value storage system for React Native. Async Storage 只能用来储存字符串数据,所以为了去储存object类型的数据,得先进行序列化(JSON.stringify())当你想要使用数据的时候&…

低代码:“提效降本”是如何炼成的

人们向往着从前车马慢的生活,可对于工厂而言,慢节奏如同噩梦。 目录 01、低代码的到来 02、让开发提效降本 03、结束语 在没有数字化以前的制造业,多个厂区之间的信息传递,例如采购单或者审批单,要用货车拉&#xff0c…

Keepalived热备、Keepalived+LVS、HAProxy监控及后端服务器健康检查、负载均衡调度器对比

day02 day02KeepAlived高可用集群配置高可用的web集群监控本机80端口,实现主备切换实现原理实施配置高可用、负载均衡的web集群配置高可用、负载均衡HAProxy配置haproxy负载均衡调度器比较LVS(Linux Virtual Server)NginxHAProxy KeepAlive…

iptables 防火墙

防火墙:隔离功能 部署在网络边缘或者主机边缘,在工作中,防火墙的主要作用,决定哪些数据可以被外网使用,以及哪些数据可以进入内网访问 主要工作在网络层 安全技术 1.入侵检测系统:检测出威胁&#xff0…

【后端面经】微服务构架 (1-3) | 熔断:熔断-恢复-熔断-恢复,抖来抖去怎么办?

文章目录 一、前置知识1、什么是熔断?2、什么是限流?3、什么是降级?4、怎么判断微服务出现了问题?A、指标有哪些?B、阈值如何选择?C、超过阈值之后,要不要持续一段时间才触发熔断?5、服务恢复正常二、面试环节1、面试准备2、面试基本思路三、总结 在微服务构架中…

【业务功能篇50】ObjectMapper-将java对象转为json字符串

ObjectMapper可以实现Java对象和json字符串间互相转换,我们经常用到的是它的Java对象转json字符串功能。 这里目的是 Java对象 json字符串相互转换 api 【json字符串转为Java对象:readValue(json字符串,类.class)】【Java对象转为json字符串&#xff1a…

WPF实战学习笔记09-创建工作单元

创建工作单元 添加包 Microsoft.EntityFrameworkCore.AutoHistory A plugin for Microsoft.EntityFrameworkCore to support automatically recording data changes history. Microsoft.EntityFrameworkCore.UnitOfWork A plugin for Microsoft.EntityFrameworkCore to suppor…