登录
转载

通过强化学习实现大语言模型的自我进化

发布于 2025-07-07 阅读 45
  • 人工智能
转载

LLM的挑战与自我提升的新范式

大语言模型(LLMs)在众多领域取得了令人瞩目的进展,包括自然语言处理、数学、编程和推理等。然而,这些模型并非没有缺陷,它们在某些任务上仍可能表现不佳,且一个模型在一个任务上的成功并不能保证其在类似任务上的表现。

解决这一问题最直接的方法是对模型进行再训练或微调,但当缺乏相关数据集时,这种方法可能不可行。此外,如果连现有最先进模型(SOTA)也难以完成任务,我们也无法利用它们来生成合成训练数据。

另一种解决方案是提示模型解释其推理过程或自我反思失败原因。例如:

Chain-of-Thought (CoT) 范式表明,如果提示模型展示其推理过程,其在算术、常识和推理任务上的表现会显著提升 。自我反思也遵循类似原则:如果能检测到LLM提供了不正确的响应,就可以提示它反思推理中的缺陷并再次尝试 。这些方法的优势在于不需要额外的训练数据,但其有效性直接取决于推理/反思提示的有效性。

相关研究:自我反思与强化学习的融合

自我反思:LLM的内省能力

LLMs中的自我反思,也称为内省,是一种元提示策略,其中语言模型分析自身的推理过程以识别和纠正潜在错误。这种范式在LLM研究中日益受到关注,作为提升多步推理和问题解决性能的手段,尤其是在算术、常识推理和问答等领域。通常,自我反思包括:

  1. 生成初步答案

  2. 生成自然语言反馈来批评该答案

  3. 然后根据批评修改响应

尽管自我反思在许多情况下确实能提高准确性,但其有效性强烈依赖于上下文。挑战包括:

  1. 在没有真实标签的情况下无法可靠地识别自我错误。

  2. 重复反思的收益递减。

  3. 对更简单提示或高性能基础模型可能导致性能下降的风险。

特别是,当初始准确性较低、问题难度较高且外部验证可用时,自我反思最为有效。

最近的方向侧重于在模型训练期间融入自我改进能力。这些基于训练的方法通常依赖于更大的“教师模型”进行数据生成或监督,可以看作是一种知识蒸馏。

本文的方法建立在先前研究的基础上,提出仅纠正由外部验证器识别的失败案例,将其二元反馈转换为自我反思提示,并训练模型利用自我反思在第二次尝试中取得成功。这种方法完全从模型自身的输出中引导,不依赖于外部LLMs。

语言模型的强化学习:GRPO的应用

GRPO (Group Relative Policy Optimization) 是一种基于结果的强化学习方法,旨在解决微调LLMs时面临的独特挑战,例如在复杂数学推理任务中遇到的挑战。

与传统的PPO等方法不同,GRPO不需要单独的价值(critic)网络,而是通过比较一组采样完成的结果来直接估计优势 。这使得GRPO特别适用于监督稀疏且仅在生成结束时才可用的场景——例如,一个完整的数学解是否正确。在这种环境中,模型必须生成整个序列才能收到反馈。

在这项工作中,研究者采用GRPO作为强化学习的唯一机制,不涉及额外的监督微调阶段 。GRPO在需要复杂、结果监督行为的相关领域(包括工具使用和高级数学问题解决)也显示出前景,为各种LLM应用提供了灵活高效的优化策略。

“反思、重试、奖励”机制详解

本文提出的新颖方法操作流程如下:

  1. 首次尝试:模型被提示完成一项任务。如果成功,则无需进行任何操作。

  2. 生成反思:如果失败,模型将被提示生成关于可能出错原因的自我反思。这需要一个能够自动评估响应成功或失败的验证器。

  3. 再次尝试:生成自我反思后,模型将进行第二次尝试来完成任务,并在对话历史中利用该自我反思。

  4. 条件奖励:如果第二次尝试仍然失败,则不进行任何操作 。然而,如果成功,研究者将使用GRPO仅奖励在自我反思中生成的token。这可以通过将所有其他生成token的优势项设置为零来实现。

这样做的目的是为了让模型学习如何更普遍地进行自我反思,而不是专注于特定任务。换句话说:不奖励正确答案,只奖励有效的反思。

截屏20250707 15.28.01.png

图:反映、重试、奖励机制 模型首先会根据用户的查询提示完成一项任务。如果最初的回答是正确的,流程就会停止。如果不正确,则提示模型就如何改进进行自我反思。然后,模型会重新尝试相同的任务,这一次会加入自我反思,并对新的答案进行评估。如果第二次尝试成功,模型就会知道它生成了有效的自我反思。

实验设计与设置

研究者通过在两个不同任务上的实验来证明该方法的有效性:函数调用和数学方程。

函数调用任务:APIGen数据集

研究者使用APIGen数据集进行函数调用实验。APIGen是一个包含60,000个高质量函数调用的数据集,其中包括用户查询(纯文本)、可回答该查询的可能工具列表及其参数(JSON),以及格式正确的函数调用及其正确的参数和值(JSON)。数据集中共有4,211个独特的工具,每个工具平均有2.3个参数,每个用户查询平均有2.8个工具可供选择(最小1个,最大8个)。只有当模型不仅选择了正确的工具,而且生成了正确的参数和值时,才被认为是正确的。

为了保持实验的完整性,研究者只评估了在APIGen数据集发布(2024年6月)之前发布的模型。这确保了这些模型不可能通过在数据集上进行训练而获得不公平的优势。具体而言,研究者报告了Qwen2 (1.5B/7B Instruct)、Llama3.1 (8B Instruct) 和 Phi3.5-mini Instruct 的结果。他们还报告了Qwen2-72B Instruct、Llama3.1-70B Instruct 和 Writer’s Palmyra X4 的原始性能作为基线。

由于不同的模型系列也有不同的建议工具调用方法,研究者为每个模型系列测试了不同的模板,并最终选择了提供最强基线的提示格式。对于函数调用验证器,他们要求模型输出与数据集中的正确答案完全匹配(即基于真实标签)。对于失败的尝试,使用以下提示生成自我反思:“You tried performing the task, but failed in generating the correct tool call. Reflect on what went wrong and write a short explanation that will help you do better next time.” 。

数学方程任务:Countdown数据集

研究者使用TinyZero项目引入的Countdown数据集进行数学方程实验。Countdown数据集包含45万个由3-4个数字组成的列表以及一个目标数字。目标是对这些数字应用基本算术运算,使方程评估为目标数字。只有当模型使用所有数字一次(按任意顺序)且最终方程成功评估为目标数字时,才被认为是正确的。

与函数调用一样,为了保持实验的完整性,研究者只评估了在Countdown数据集公开发布(2025年1月)之前发布或知识截止的模型。具体而言,他们报告了Qwen2.5 (1.5B/3B/7B Instruct)、Llama3.1 (8B Instruct)、Llama3.2 (3B Instruct) 和 Writer’s Palmyra 1.7B 的结果。他们还报告了Qwen2.5-32B Instruct、Qwen2.5-72B Instruct、Llama3.1-70B Instruct 和 Writer’s Palmyra X4 的原始性能作为基线。

研究者再次为每个模型系列尝试了几种不同的提示格式,并最终选择了提供最强基线的格式。对于数学方程验证器,他们要求生成的方程与提示中的目标答案匹配(即不需要真实标签)。对于失败的尝试,使用以下提示:“You tried solving the problem and got the wrong answer. Reflect on what went wrong and write a short explanation that will help you do better next time.”。

失败数据集的构建

为了提高效率并促进更直观的分析,研究者没有在完整的函数调用和数学方程训练集上训练模型,而是选择首先为每个任务创建一个失败数据集。他们通常为更大的模型生成更多响应,因为它们失败的频率低于小型模型,否则将产生更少的训练样本。为了加速拒绝采样过程,他们使用了带有前缀缓存的vLLM。

这种方法有几个优点:首先,节省时间,直接抛弃无法从中学习的成功任务。其次,通过为每个查询生成多个响应,使数据更具鲁棒性。最后,通过仅有失败案例的数据集,可以精确确定模型在收敛到最佳自我反思之前需要训练多少样本。

研究者强调,他们采用这种方法纯粹是为了效率和分析,否则它在功能上等同于从接收成功和失败响应的真实世界场景中学习。

多步GRPO训练策略

研究者基于TRL框架实现了多步GRPO算法,使模型能够从自我反思后的后续尝试中学习。他们扩展了 GRPOTrainer,在生成初始自我反思后,调用一个 second_step 函数执行额外的生成步骤。该函数不影响原始掩码的计算,只奖励与初始完成对应的 token,从而确保训练信号集中在初始自我反思上。此外,它还将额外信息传入奖励函数,便于分析初始完成在多步尝试中的表现,从而支持更复杂的下游奖励机制。

训练时,研究者在各自的失败数据集上进行,最大训练步数为1,750步,有效批大小为256个失败样本(多数模型在此之前已收敛)。例如,Llama-3.1-8B Instruct 模型在函数调用任务中仅需100步、约2,000个独特查询即可收敛。只有一个函数调用实验使用了完整的48,000条查询,所有相关实验平均使用少于25,000条。方程书写实验使用的独特问题不超过25,000条,平均约为15,000条。

训练参数大体遵循DeepSeek原始GRPO实现,最终实验中使用了KL散度系数为0.001、学习率为5e-7的余弦退火调度器,并设置0.03的预热比。每个实验使用4到8个H100 GPU进行训练。

由于GRPO在大模型上的计算效率和可扩展性问题,实验集中在参数规模为1.5亿到80亿的模型上。研究者曾尝试Qwen2/Qwen2.5 0.5B Instruct 和 Llama3.2-1B Instruct 等小模型,但其在生成自我反思或准确回答任务中的表现较差,因此未在论文中报告。同样,尽管微软的 Phi 3.5 mini 模型可用于函数调用任务,但在方程书写方面表现不足,也未纳入最终结果。

实验结果分析

主要实验结果展示了模型在多步GRPO训练前后首次和第二次尝试的性能。

就APIGen函数调用任务而言,首先注意到模型大小与一次尝试后的模型性能完美相关(符合预期)。其次,使用自我反思进行第二次尝试后,性能平均提高了4.5%,这也与之前的工作一致。然而,在GRPO训练后,性能提升最大,尽管只奖励自我反思token,但几乎所有模型在仅一次尝试后都能够超越两次尝试的原始模型。研究者推测这是因为自我反思token有助于模型进行一般性推理,因此即使模型不需要生成显式自我反思,也能从中受益。尽管如此,自我反思在训练后仍然有所帮助,当模型可以自我反思进行第二次尝试时,性能平均进一步提高了4.7%。最引人注目的是,研究者观察到,经过GRPO训练的Qwen-2-7B模型在两次尝试下能够超越原始的Qwen-2-72B模型,尽管后者比前者大10倍。

截屏20250707 15.31.53.png

表:模型在 APIGen 测试集(12,000 个样本)上的准确性表现,包括第一次和第二次尝试,以及是否进行了 GRPO 自我反思训练。

就Countdown数学方程任务而言,首先值得注意的是,整体性能较低,特别是原始的Llama模型(Llama-3.1和Llama-3.2)在完成任务时表现非常挣扎;例如,Llama-3.1.70B模型甚至被小20多倍的Qwen-2.5-3B模型超越。否则,改进模式与APIGen实验相似,尽管幅度略高:在GRPO训练前后,自我反思分别使性能平均提高了5.3%和8.6%。研究者推测这些更大的收益来自于模型从较低的基线开始,因此有更大的学习机会。最终,研究结果不仅强化了先前关于自我反思益处的工作,还展示了如何通过GRPO优化自我反思来进一步提高性能。

截屏20250707 15.32.58.png

模型在Countdown测试集(15,000 个样本)上的准确性表现,包括第一次和第二次尝试,以及是否进行了 GRPO 自我反思训练。

自我反思质量的提升

原始的自我反思比训练后更简洁、更优化、更通用。虽然这在直觉上是合理的——人类也更喜欢简短、简单的指令——但这一发现与Chain-of-Thought风格的输出形成对比,后者被认为表现更好正是因为它们更冗长。至于何时模型生成简洁或冗长的输出更有益,研究者将其作为一个开放性问题。

截屏20250707 15.35.14.png

图:虚构模型生成的反思往往冗长、混乱、多余,而经过 GRPO 微调的模型生成的反思则短小、清晰、更有概括性。

灾难性遗忘的低影响

微调模型时一个常见的担忧是灾难性遗忘,即模型为了专注于一项任务而牺牲其他任务的性能。由于自我反思训练旨在以任务无关的方式提高性能,研究者在多个通用基准(MMLU-Pro、GSM8K、HellaSwag和MATH)上评估了模型。他们的假设是,性能应该保持相对不变,因为他们从未针对特定任务进行优化,而是优化了一般的自我反思推理。

结果发现,训练后模型的性能确实保持稳定。在大多数情况下,与基础模型相比,性能下降不到1%,有些模型甚至有所改进 。这证明了该方法对灾难性遗忘具有很强的鲁棒性。

截屏20250707 15.36.33.png

表:在常见的 LLM 基准上对 vanilla 模型和 GRPO 微调模型进行比较后发现,尽管进行了微调,但观察到的灾难性遗忘极少,微调模型在这些标准基准上保持了很强的性能。

结论与未来展望

本文表明,通过训练模型改进自我反思而不是特定任务,可以显著提高LLM的性能。这种间接方法仅依赖于能够检测模型响应是否正确或不正确的验证器,因此特别适用于那些易于验证响应的任务,例如,JSON输出是否格式正确,生成的代码是否实际可执行,或者方程的所有约束是否都得到满足。

研究者通过在APIGen函数调用和Countdown数学方程求解数据集上的实验证明了该方法的有效性,发现使用GRPO进行自我反思训练的模型在这两项测试上的性能平均分别提高了9.0%和16.0%。他们还发现,经过自我反思训练的小型模型在两项任务上都能超越未经训练的大10倍规模的模型。

局限性与挑战

为每个任务定义一个二元成功/失败验证器可能并非总是那么简单。研究者开发该方法时考虑到标记训练数据可能稀缺,但也承认如果可用,真实标签可以用作验证器。或者,也可以使用更大的模型作为判断器。

研究者还发现,他们的方法并非适用于所有模型和所有任务;模型必须具备执行任务、自我反思和学习的一些基本能力,才能发挥增强自我纠正能力的作用。例如,Llama3.2-3B Instruct无法在函数调用任务上学习自我纠正。

评论区

励志做一条安静的咸鱼,从此走上人生巅峰。

0

0

4

举报