以问答形式梳理 RLHF 的核心问题:强化学习与有监督学习的区别、RLHF 完整流程、奖励模型是否需与基座一致,以及偏好数据成本高、三阶段迭代慢、PPO 四模型显存开销大等实践痛点与应对思路。
1.简单介绍强化学习?
强化学习(Reinforcement Learning,RL)研究的问题是智能体(Agent)与环境(Environment) 交互的问题,其目标是使智能体在复杂且不确定的环境中最大化奖励(Reward)。
强化学习基本框架如图所示,主要由两部分组成:智能体和环境。在强化学习过程中,智能体与环境不断交互。智能体在环境中获取某个状态后,会根据该状态输出一个动作(Action),也称为决策(Decision)。动作会在环境中执行,环境会根据智能体采取的动作,给出下一个状态以及当前动作所带来的奖励。智能体的目标就是尽可能多地从环境中获取奖励。本节中将介绍强化学习的基本概念、强化学习与有监督学习的区别,以及在大语言模型中基于人类反馈的强化学习流程。

强化学习在大语言模型上的重要作用可以概括为以下几个方面:
- 强化学习比有监督学习更可以考虑整体影响:有监督学习针对单个词元进行反馈,其目标是要求模型针对给定的输入给出的确切答案。而强化学习是针对整个输出文本进行反馈,并不针对特定的词元。
- 强化学习更容易解决幻觉问题:有监督学习算法非常容易使得求知型查询产生幻觉。在模型并不包含或者知道答案的情况下,有监督训练仍然会促使模型给出答案。而使用强化学习方法,则可以通过定制奖励函数,将正确答案赋予非常高的分数,放弃回答的答案赋予中低分数,不正确的答案赋予非常高的负分,使得模型学会依赖内部知识选择放弃回答,从而在一定程度上缓解模型幻觉问题。
- 强化学习可以更好的解决多轮对话奖励累积问题:使用强化学习方法,可以通过构建奖励函数,将当前输出考虑整个对话的背景和连贯性。
2.简单介绍一下RLHF?
RLHF就是基于人类反馈(Human Feedback)对语言模型进行强化学习(Reinforcement Learning),一般分为以下三个步骤:
预训练语言模型(收集样本数据,有监督微调):在人类标注的数据上微调出来的模型叫有监督的微调(supervised fine-tuning),这是训练出来的第一个模型;

训练奖励模型(收集排序数据,训练奖励模型):

用强化学习微调(使用RM模型优化SFT模型):继续微调之前训练好的SFT模型,使得它生成的答案能够尽量得到一个比较高的分数,即每一次将它生成的答案放进RM中打分,然后优化SFT的参数使得它生成的答案在RM中获得更高的分数。

备注:两次对模型的微调:GPT3模型→SFT模型→RL模型,其实这里始终都是同一个模型,只是不同过程中名称不同。
- 需要SFT模型的原因:GPT3模型不一定能够保证根据人的指示、有帮助的、安全的生成答案需要人工标注数据进行微调。
- 需要RM模型的原因:标注排序的判别式标注成本远远低于生成答案的生成式标注。
- 需要RL模型的原因:在对SFT模型进行微调时生成的答案分布也会发生变化,会导致RM模型的评分会有偏差,需要用到强化学习。
3.奖励模型需要和基础模型一致吗?
奖励模型和基础模型在训练过程中可以是一致的,也可以是不同的。这取决于你的任务需求和优化目标。
如果你希望优化一个包含多个子任务的复杂任务,那么你可能需要为每个子任务定义一个奖励模型,然后将这些奖励模型整合到一个统一的奖励函数中。这样,你可以根据任务的具体情况调整每个子任务的权重,以实现更好的性能。
另一方面,如果你的任务是单任务的,那么你可能只需要一个基础模型和一个对应的奖励模型,这两个模型可以共享相同的参数。在这种情况下,你可以通过调整奖励模型的权重来控制任务的优化方向。
总之,奖励模型和基础模型的一致性取决于你的任务需求和优化目标。在实践中,你可能需要尝试不同的模型结构和奖励函数,以找到最适合你任务的解决方案。
4.RLHF在实践过程中存在哪些不足?
RLHF(Reinforcement Learning from Human Feedback)是一种通过人类反馈进行增强学习的方法,尽管具有一定的优势,但在实践过程中仍然存在以下几个不足之处:
- 人类反馈的代价高昂:获取高质量的人类反馈通常需要大量的人力和时间成本。人类专家需要花费时间来评估模型的行为并提供准确的反馈,这可能限制了RLHF方法的可扩展性和应用范围。
- 人类反馈的主观性:人类反馈往往是主观的,不同的专家可能会有不同的意见和判断。这可能导致模型在不同专家之间的反馈上存在差异,从而影响模型的训练和性能。
- 反馈延迟和稀疏性:获取人类反馈可能存在延迟和稀疏性的问题。人类专家不可能实时监控和评估模型的每一个动作,因此模型可能需要等待一段时间才能收到反馈,这可能会导致训练的效率和效果下降。
- 错误反馈的影响:人类反馈可能存在错误或误导性的情况,这可能会对模型的训练产生负面影响。如果模型在错误的反馈指导下进行训练,可能会导致模型产生错误的行为策略。
- 缺乏探索与利用的平衡:在RLHF中,人类反馈通常用于指导模型的行为,但可能会导致模型过于依赖人类反馈而缺乏探索的能力。这可能限制了模型发现新策略和优化性能的能力。
针对这些不足,研究人员正在探索改进RLHF方法,如设计更高效的人类反馈收集机制、开发更准确的反馈评估方法、结合自适应探索策略等,以提高RLHF方法的实用性和性能。
5.如何解决人工产生的偏好数据集成本较高,很难量产问题?
解决人工产生偏好数据集成本高、难以量产的问题,可以考虑以下几种方法:
- 引入模拟数据:使用模拟数据来代替或辅助人工产生的数据。模拟数据可以通过模拟环境或模型生成,以模拟人类用户的行为和反馈。这样可以降低数据收集的成本和难度,并且可以大规模生成数据。
- 主动学习:采用主动学习的方法来优化数据收集过程。主动学习是一种主动选择样本的方法,通过选择那些对模型训练最有帮助的样本进行标注,从而减少标注的工作量。可以使用一些算法,如不确定性采样、多样性采样等,来选择最有价值的样本进行人工标注。
- 在线学习:采用在线学习的方法进行模型训练。在线学习是一种增量学习的方法,可以在模型运行的同时进行训练和优化。这样可以利用实际用户的交互数据来不断改进模型,减少对人工标注数据的依赖。
- 众包和协作:利用众包平台或协作机制来收集人工产生的偏好数据。通过将任务分发给多个人参与,可以降低每个人的负担,并且可以通过众包平台的规模效应来提高数据收集的效率。
- 数据增强和迁移学习:通过数据增强技术,如数据合成、数据扩增等,来扩充有限的人工产生数据集。此外,可以利用迁移学习的方法,将从其他相关任务或领域收集的数据应用于当前任务,以减少对人工产生数据的需求。
综合运用上述方法,可以有效降低人工产生偏好数据的成本,提高数据的量产能力,并且保证数据的质量和多样性。
6.如何解决三个阶段的训练(SFT->RM->PPO)过程较长,更新迭代较慢问题?
要解决三个阶段训练过程较长、更新迭代较慢的问题,可以考虑以下几种方法:
- 并行化训练:利用多个计算资源进行并行化训练,可以加速整个训练过程。可以通过使用多个CPU核心或GPU来并行处理不同的训练任务,从而提高训练的效率和速度。
- 分布式训练:将训练任务分发到多台机器或多个节点上进行分布式训练。通过将模型和数据分布在多个节点上,并进行并行计算和通信,可以加快训练的速度和更新的迭代。
- 优化算法改进:针对每个阶段的训练过程,可以考虑改进优化算法来加速更新迭代。例如,在SFT(Supervised Fine-Tuning)阶段,可以使用更高效的优化算法,如自适应学习率方法(Adaptive Learning Rate)或者剪枝技术来减少模型参数;在RM(Reward Modeling)阶段,可以使用更快速的模型训练算法,如快速梯度法(Fast Gradient Method)等;在PPO(Proximal Policy Optimization)阶段,可以考虑使用更高效的采样和优化方法,如并行采样、多步采样等。
- 迁移学习和预训练:利用迁移学习和预训练技术,可以利用已有的模型或数据进行初始化或预训练,从而加速训练过程。通过将已有模型的参数或特征迁移到目标模型中,可以减少目标模型的训练时间和样本需求。
- 参数调优和超参数搜索:对于每个阶段的训练过程,可以进行参数调优和超参数搜索,以找到更好的参数设置和配置。通过系统地尝试不同的参数组合和算法设定,可以找到更快速和高效的训练方式。
综合运用上述方法,可以加速三个阶段训练过程,提高更新迭代的速度和效率,从而减少训练时间和资源消耗。
7.如何解决PPO的训练过程同时存在4个模型(2训练,2推理),对计算资源的要求较高问题?
要解决PPO训练过程中对计算资源要求较高的问题,可以考虑以下几种方法:
- 减少模型规模:通过减少模型的规模和参数量,可以降低对计算资源的需求。可以使用模型压缩技术、剪枝算法等方法来减少模型的参数数量,从而降低计算资源的使用量。
- 降低训练频率:可以降低PPO训练的频率,减少每个训练周期的次数。例如,可以增加每个训练周期的时间间隔,或者减少每个周期中的训练步数。这样可以减少训练过程中对计算资源的占用。
- 模型并行化:利用多个计算资源进行模型并行化训练,可以加速PPO的训练过程。可以将模型参数分布到多个GPU上,并进行并行计算和通信,以提高训练的效率和速度。
- 异步训练:采用异步训练的方式,可以在多个计算资源上同时进行PPO的训练。可以使用异步优化算法,如A3C(Asynchronous Advantage Actor-Critic)等,将训练任务分发到多个线程或进程中进行并行训练,从而提高训练的效率。
- 云计算和分布式训练:利用云计算平台或分布式系统进行PPO的训练,可以充分利用大规模计算资源。可以将训练任务分发到多个计算节点上进行分布式训练,以加速训练过程。
- 参数共享和模型缓存:对于有多个模型的情况,可以考虑共享部分参数或缓存已计算的模型输出。通过共享参数和缓存计算结果,可以减少重复计算和存储,从而降低对计算资源的要求。综合运用上述方法,可以有效降低PPO训练过程中对计算资源的要求,提高训练的效率和速度。
8.基于人类反馈的强化学习流程
基于人类反馈的强化学习主要分为奖励模型训练和近端策略优化两个步骤。
- 奖励模型通过由人类反馈标注的偏好数据来学习人类的偏好,判断模型回复的有用性以及保证内容的无害性。
- 近端策略优化可以根据奖励模型获得的反馈优化模型,通过不断的迭代,让模型探索和发现更符合人类偏好的回复策略。

近端策略优化涉及到四个模型:
策略模型(Policy Model),生成模型回复。
奖励模型(Reward Model),输出奖励分数来评估回复质量的好坏。
评论模型(Critic Model),来预测回复的好坏,可以在训练过程中实时调整模型,选择对未来累积收益最大的行为。
参考模型(Reference Model) 提供了一个SFT模型的备份,帮助模型不会出现过于极端的变化。
近端策略优化的实施流程如下:环境采样:策略模型基于给定输入生成一系列的回复,奖励模型则对这些回复进行打分获得奖励。
优势估计:利用评论模型预测生成回复的未来累积奖励,并借助广义优势估计(Generalized Advantage Estimation,GAE)算法来估计优势函数,能够有助于更准确地评估每次行动的好处。
优化调整:使用优势函数来优化和调整策略模型,同时利用参考模型确保更新的策略不会有太大的变化,从而维持模型的稳定性。
9.什么是LLMAgent?
LLM Agent是一种人工智能系统,它利用大型语言模型(LLM)作为其核心计算引擎,展示文本生成之外的功能,包括进行对话、完成任务、推理,并可以展示一定程度的自主行为。
LLM Agent根据设计阶段授予的功能,Agent从纯粹的被动到高度主动的自主行为。同时利用大模型的推理能力,让Agent可以在人工监督下管理相对独立的工作流程:分析目标,项目规划,执行,回顾过去的工作,迭代细化。
10.LLMAgent有什么关键能力?
- Agent利用LLM的语言能力理解指令、上下文和目标。可以根据人类提示自主和半自主操作。
- 可以利用工具套件(计算器、API、搜索引擎)来收集信息并采取行动来完成分配的任务。它们不仅仅局限于语言处理。
- 可以做逻辑推理类型的任务。例如,chain-of-thought , tree-of-thought。
- 可以量身定制文本,例如邮件,报告,市场材料。
- 可以自动或半自动的响应用户的需求。
- Agent可以和不同类型的AI系统对接,例如LLM+image generators。
11.怎样构建基于LLM的Agents?
Agent = LLM + Prompt Recipe + Tools + Interface + Knowledge + Memory
- PromptRecipe:特定的内容要求、目标受众、所需的语气、输出长度、创造力水平等。
- Tools:工具集成允许通过API和外部服务完成任务。Agents能够理解自然语言、推理提示、积累记忆并采取明智的行动。但是,Agents的表现和一致性取决于他们收到的提示的质量。
- Knowledge:知识适用于所有用户的一般专业知识。知识扩展了LLM的内容。一般分为专业知识、常识知识和程序知识。
- Memory:单个用户或单个任务的上下文和记录细节。分为短期记忆和长期记忆。记忆服务与特定用户,在时间维度的体验。使特定用户的上下文对话个性化同时保持多步骤任务的一致性。记忆侧重暂时的用户和任务细节。
12.LLM Agents有哪些类型?
一般来说LLM Agents分为会话型Agents和任务型Agents,两者在目标、行为和prompt方法都有重要区别。会话型专注于提供引人入胜的个性化讨论,任务型致力于完成明确定义的目标。
Conversational Agents:模拟人类对话,能够在讨论中反映人类的倾向。允许细致入微的上下文交互,会考虑语气、说话风格、领域知识、观点和个性怪癖等因素。agent的开发者可以持续增强记忆、知识整合提高响应能力,持续优化应用。
Task-Oriented Agents:实现目标驱动,利用模型的能力分析prompt、提取关键参数、指定计划、调用API、通过集成tools执行操作,并生成结果回复。Prompt工程把目标型Agents拆分成如下环节:制定战略任务、串联思路、反思过去的工作以及迭代改进的方法。
13.是什么让Agent有自制的能力?
通常有自制能力的系统,至少有两类agent组成。一个用于生成的agent,一个用于监督的agent。生成agent根据提示生成回复。监督agent在必要时审查和重新提示或指示生成agent继续工作,同时提供交互反馈。自主技能是通过持续提示培养出来的。专门的监督agent提供方向、纠正和不断提高挑战,持续的提示释放了推理、效能和自主决策能力的增长。
14.如何给LLM注入领域知识?
给LLM(低层次模型,如BERT、GPT等)注入领域知识的方法有很多。以下是一些建议:
- 数据增强:在训练过程中,可以通过添加领域相关的数据来增强模型的训练数据。这可以包括从领域相关的文本中提取示例、对现有数据进行扩充或生成新的数据。
- 迁移学习:使用预训练的LLM模型作为基础,然后在特定领域的数据上进行微调。这样可以利用预训练模型学到的通用知识,同时使其适应新领域。
- 领域专家标注:与领域专家合作,对模型的输出进行监督式标注。这可以帮助模型学习到更准确的领域知识。
- 知识图谱:将领域知识表示为知识图谱,然后让LLM模型通过学习知识图谱中的实体和关系来理解领域知识。
- 规则和启发式方法:编写领域特定的规则和启发式方法,以指导模型的学习过程。这些方法可以是基于规则的、基于案例的或基于实例的。
- 模型融合:将多个LLM模型的预测结果结合起来,以提高模型在特定领域的性能。这可以通过投票、加权平均或其他集成方法来实现。
- 元学习:训练一个元模型,使其能够在少量领域特定数据上快速适应新领域。这可以通过在线学习、模型蒸馏或其他元学习方法来实现。
- 模型解释性:使用模型解释工具(如LIME、SHAP等)来理解模型在特定领域的预测原因,从而发现潜在的知识缺失并加以补充。
- 持续学习:在模型部署后,持续收集领域特定数据并更新模型,以保持其在新数据上的性能。
- 多任务学习:通过同时训练模型在多个相关任务上的表现,可以提高模型在特定领域的泛化能力。

