AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


用这条Prompt构建CoT+PoT验证器评估LLM输出,显著提高LLM推理准确性和一致性
发布日期:2024-10-30 21:49:28 浏览次数: 1844 来源:AI修猫Prompt


之前我介绍过,即便是最先进的LLM,在复杂的多步推理问题上仍然面临挑战。如何提高LLM的推理准确性和一致性,成为了AI研究者们关注的焦点。最近,巴黎圣母院大学和Salesforce的研究团队提出了一种新颖的方法,通过结合思维链(Chain-of-Thought, CoT)和思维程序(Program-of-Thought, PoT)来构建验证器,显著提升了LLM的推理表现。

LLM推理能力的局限性

尽管LLM在各种自然语言任务中表现出色,但在数学和代码推理等复杂任务中仍然存在明显的短板。研究者们发现,即使是最先进的LLM,在生成单一解决方案时的准确率往往不尽如人意。然而,有趣的是,当允许模型生成多个解决方案时,正确答案通常能够在这些样本中被找到,召回率甚至超过85%。


这一发现为解决LLM推理挑战提供了新的思路:通过扩大推理计算规模,采样多个候选解决方案,可能是一种有效的改进方法。然而,如何从这些候选方案中筛选出正确答案,成为了关键问题。


构建全面的验证器训练数据集


为了解决这一问题,研究团队首先构建了一个全面的训练数据集。这个数据集包含了多个LLM推理器生成的正确和错误解决方案,涵盖了数学和代码推理任务。


对于数学推理,研究者使用了GSM8k和MATH数据集作为种子数据集,从多个backbone模型中采样解决方案。这些模型包括通用LLM(如Mistral和Phi3)以及专门用于数学的模型(如InternLM2-Math和MAmmoTH2-plus)。对于每个问题,他们采样了10个CoT解决方案并去除重复项。最终,他们得到了159,778个正确解决方案和100,794个错误解决方案,平均每个问题有10.67个正确解决方案和6.73个错误解决方案。

对于代码推理,研究者同样使用了通用LLM和专门用于代码的模型。他们选择了MBPP和MagiCoder-75k的Python子集作为种子数据集。通过生成过程,他们最终得到了132,089个正确解决方案和145,345个错误解决方案,平均每个问题有11.10个正确解决方案和12.21个错误解决方案。

这种多样化的数据集为验证器提供了丰富的学习资源,使其能够更有效地区分和排序不同LLM产生的解决方案。

验证器训练方法的深入比较


在构建了全面的训练数据集后,研究团队对不同的验证器训练方法进行了系统的比较。他们主要考察了两大类方法:结果奖励模型(Outcome Reward Models, ORMs)和偏好调优(Preference Tuning)。这两类方法在原理和实现上有显著差异,各有优缺点。


结果奖励模型(ORMs)


ORMs是一种直接的方法,其核心思想是在LLM的输出层上添加额外的计算结构,用于评估生成内容的质量。


具体实现:


1. 额外计算头:在LLM的每个token输出上添加额外的计算头。


2. 标量输出:这些额外的计算头输出标量值,代表对应token的"质量"或"正确性"。


3. 二元分类训练:使用二元分类损失进行训练,通常采用正确解答作为正例,错误解答作为负例。


优点:


- 直观:方法简单直接,易于理解和实现。


- 灵活性:可以为每个token分配不同的权重,理论上能捕捉更细粒度的信息。


缺点:


- 额外参数:引入了额外的参数,增加了模型的复杂度。


- 训练不稳定:可能面临训练不稳定的问题,特别是在处理长序列时。


偏好调优(Preference Tuning)


偏好调优方法,如直接偏好优化(DPO),采用了一种不同的策略。这类方法不直接学习评分函数,而是通过比较学习来优化模型输出。


具体实现:


1. 成对数据:训练数据由成对的解答组成,一个被标记为"优选",另一个为"非优选"。


2. 概率调整:模型学习调整其输出概率分布,使"优选"解答的生成概率高于"非优选"解答。


3. 损失函数:使用特殊设计的损失函数,如DPO中的Bradley-Terry模型推导的损失。


优点:


- 无额外参数:不需要引入额外的模型参数。


- 保持生成目标:与LLM原有的自回归文本生成任务保持一致。


- 相对评价:通过相对比较学习,可能更符合人类评判的直觉。


缺点:


- 数据要求:需要成对的比较数据,数据准备可能更复杂。


- 计算开销:在训练和推理时可能需要更多的计算资源。


无参考偏好调优方法(如SimPO)


研究团队发现,无参考的偏好调优方法(如SimPO)在训练验证器时表现最佳。这类方法是对标准偏好调优的进一步改进。SimPO 的有效性归因于一个关键设计:使用序列的平均对数概率作为隐含奖励,这种奖励公式更好地与模型生成保持一致,并且无需参考模型,从而提高了计算和内存效率。


特点:


1. 移除参考模型:不使用参考模型来计算奖励函数,减少了内存和计算开销。


2. 简化目标:直接优化生成模型和奖励函数之间的差异。


3. 更好的泛化:理论上可以减少训练和推理之间的差异。


优势:


- 效率:减少了计算和内存需求。


- 一致性:训练目标与推理时的评分方式更加一致。


- 灵活性:更容易适应不同的任务和数据集。


实验结果和分析


研究团队通过严格的实验比较了这些方法:


1. 性能比较:SimPO在多个数据集上均优于ORMs和标准DPO。


2. 稳定性:无参考方法表现出更好的训练稳定性和泛化能力。


3. 计算效率:SimPO在训练和推理时都显示出更高的计算效率。


研究者推测,SimPO的优越性能可能源于以下几个因素:


- 目标一致性:训练目标与实际使用场景(评分而非生成)更加匹配。


- 减少过拟合:移除参考模型可能减少了对特定训练数据的过拟合。


- 简化学习:直接学习相对偏好可能比学习绝对分数更容易。


CoTnPoT:结合语言和代码答案的创新验证方法


研究团队提出了一种名为CoTnPoT的创新方法,结合了CoT和PoT解决方案的优势。CoT解决方案更具描述性和可读性,而PoT解决方案高度抽象和结构化,可以直接执行以识别运行时错误。使用CoTnPoT和Math-Rev,在数学推理验证性能方面显著优于两个基线一Math-Shepard和Math-Minos。此外,如图所示,Math-Rev+Qwen2-72B-Instruct在LLMs中表现优于最先进的模型,包括LLaMA3.1-405B和GPT-4o。

CoTnPoT方法的工作流程如下:


1. 使用coder LLM将CoT解决方案转换为PoT格式。


2. 执行PoT解决方案,并将结果与CoT解决方案的最终答案进行比较。


3. 过滤掉CoT答案与相应PoT结果不匹配的解决方案。


4. 将剩余的CoT解决方案输入验证器进行评分。


5. 选择得分最高的解决方案作为最终答案。


这种方法巧妙地结合了CoT的可读性和PoT的可执行性,有效提高了验证的准确性。


实验结果:显著提升的推理性能


研究团队在多个基准测试上评估了他们的方法,以下是实验结果。


数学推理任务


在GSM8k数据集上,使用Qwen-72B-Instruct作为backbone推理器,结合Math-Rev验证器和CoTnPoT方法,达到了95.6%的准确率。这一结果大幅超越了现有的最佳表现。


在更具挑战性的MATH数据集上,同样的组合达到了76.9%的准确率,超过了包括GPT-4o在内的多个强大基线模型。


代码推理任务


在MBPP数据集上,CoTnPoT方法同样表现出色。例如,使用CodeQwen作为backbone推理器,结合Code-Rev验证器和CoTnPoT方法,在MBPP测试集上达到了80.3%的通过率,比不使用CoTnPoT的版本提高了2.8个百分点。


与现有验证器的比较


研究团队将他们的Math-Rev验证器与两个最近的基线(Math-Shepard和Math-Minos)进行了比较。在保持一致的LLM推理器(MetaMath-7B-Mistral)的情况下,Math-Rev在GSM8k和MATH500数据集上都取得了最佳表现,分别达到90.75%和46.40%的准确率。这一成功归功于更有效的验证器训练方法(SimPO)和从多个LLM推理器采样的成对训练数据。


方法的局限性与未来方向

尽管这项研究取得了显著成果,研究团队也坦诚地指出了当前方法的一些局限性:


1. 计算开销:采样和重新排序策略相比贪婪解码引入了额外的计算开销,这可能在大规模数据集或实时应用中带来挑战。


2. 解决方案级别反馈:当前的验证器基于结果奖励模型(ORM),提供解决方案级别的反馈,而非步骤级别的反馈。虽然这种粒度在整体验证中很有效,但缺乏过程奖励模型(PRM)那样的细粒度评估能力。


3. 验证器生成能力的退化:通过偏好对训练的验证器虽然在评分方面表现出色,但其生成连贯句子的能力迅速退化。这可能限制了验证器在某些场景下的应用。


未来的研究方向可能包括:


1. 优化计算效率:探索更高效的采样和验证策略,以减少计算开销。


2. 细粒度反馈:开发能够提供步骤级别反馈的验证器,同时保持可扩展性。


3. 保持生成能力:研究如何在提高验证性能的同时,保持模型的生成能力。

对Prompt工程师的启示


这项研究对正在开发AI产品的Prompt工程师们具有重要的实践意义:


1. 多样化采样:在设计推理任务的prompt时,考虑生成多个候选解决方案,而不是仅依赖单一输出。


2. 结构化输出:鼓励模型生成结构化的解决方案,以便于后续的验证和分析。


3. 交叉验证:考虑将自然语言解释(CoT)和可执行代码(PoT)结合使用,互相验证以提高可靠性。


最  后

您也可以像我这样,把论文里的这个方法写成SYSTEM PROMPT用于解决多步骤问题的自我验证,可以显著提高您项目里输出的准确性和一致性。以下图为例:



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询