、Step-wise BoN、Self-Refine、Agent Workflow
一 测试时计算
测试时计算(test-time compute),也称为推理计算,是指 LLM 生成提示响应时使用的计算资源。与用于创建和完善模型本身的训练计算不同,每次使用模型时都会应用测试时间计算。
研究表明,通过在推理过程中战略性地分配这些计算资源,组织可以从其现有的语言模型中获取更多价值,而无需承担与大规模训练相关的大量成本。
"开源代码:https://github.com/huggingface/search-and-learn
参考链接:[1]https://huggingface.co/spaces/HuggingFaceH4/blogpost-scaling-test-time-compute[2]https://x.com/_lewtun/status/1868703456602865880
2.1 BoN(Best-of-N)【一次生成多个选择最好的】
是一种在推理阶段增强大模型(LLM)性能的测试时计算方法,即通过在推理阶段生成和选择多个候选响应来提高LLM的性能,从而弥补单纯增加模型参数带来的性能提升瓶颈。
不过,BON方法,主要依赖于两个变量,一个是奖励模型的能力,一个是搜索空间N的大小,前者能力越强,效果越好,后者不一定越大越好,越大空间越大,时耗越大,奖励模型的判定范围就越大,越难选择。
其实现步骤如下:
- 生成多个响应
- 选择最好的。奖励模型根据某种预定义的标准(如相关性、准确性等)给出评分。
- 最后,优化推理过程。通过搜索多个可能的响应,BoN方法能够在推理阶段找到更优的答案,而不是仅仅依赖于单一的直接输出。这种方法展示了在推理阶段通过扩展时间来搜索更多可能响应的必要性。
最佳 N 抽样在提示工程中的应用:
- 为同一任务生成略有变化的多个提示。
- 使用 LLM 为每个提示变体生成响应。
- 根据预定义标准或单独的评估模型选择最佳响应。
RAG 管道中的应用:
- 检索给定查询的“N”个相关文档或段落。
- 使用每个检索到的项目作为上下文生成响应。
- 使用质量指标或相关性分数选择最佳响应。
在这种方法中,RAG 管道利用多个检索到的文档或段落来生成不同的响应。 通过根据质量或相关性选择最佳响应,系统增加了为用户查询提供准确且信息丰富的答案的可能性:
2.2、Stepwise BoN策略【一次生成一个不断改进迭代】
Stepwise BoN(逐步最佳选择),一种改进的测试时计算方法,旨在通过逐步分解问题和选择最佳响应来增强大模型的性能。
优点在于它能够通过逐步分解和选择最佳响应来处理复杂的多步骤推理任务,避免了直接生成长文本响应时可能出现的错误累积问题。
然而,由于需要处理多个中间步骤,逐步BoN方法对模型的长上下文跟随能力要求较高,这在某些复杂任务上可能会限制其性能。其实现步骤如下:
- 首先,分解问题。Stepwise BoN将复杂的问题分解成多个子问题。对于每个子问题,模型生成N个候选响应。
- 然后,逐步选择。对于每个子问题的N个候选响应,使用奖励模型(如GPT-4o)选择一个最佳响应。这个过程是迭代进行的,直到所有子问题都得到解决。
- 接着,形成最终答案。通过逐步选择最佳响应,逐步BoN方法能够逐步构建出对原始问题的最终答案。
- 最后,迭代改进。在每一步中,模型不仅生成新的响应,还会根据前一步的结果进行调整和优化,从而逐步改进最终的输出。
顺序修订在快速工程中的应用:
- 从初始提示开始并生成响应
- 分析响应并提供反馈以指导进一步改进
- 迭代此过程,在每次修订时改进输出,结合反馈以根据特定需求或标准定制响应
在RAG 管道中的应用:
- 从初始检索和响应生成开始。
- 分析响应并使用它来优化检索查询或上下文选择。
- 迭代此过程,在每个步骤中提高检索到的信息和生成的响应的相关性和质量。
在这种方法中,RAG 管道根据之前的响应迭代地优化其查询,使其能够专注于早期迭代中可能遗漏或未充分解决的方面。这可以带来更全面和准确的响应,特别是对于需要多条信息的复杂查询:
2.3、Beam search
概念:光束搜索是一种启发式搜索算法,在生成过程的每个步骤中同时探索多条有希望的路径。它维护一组“光束”(部分解决方案)并并行扩展它们,仅保留基于验证器(例如 PRM)得分最高的候选者。这种方法在探索(考虑各种可能性)和利用(专注于最有可能的路径)之间取得了平衡。
集束搜索在提示工程中的应用:
- 在每个步骤中生成多个提示变体。
- 评估每个提示的响应质量。
- 保留前 k 个最有希望的提示并继续完善它们
在RAG 管道中的应用:
- 检索初始查询的多个文档集。
- 使用每组文档生成响应。
- 保留前 k 个最有希望的文档-响应对。
- 根据这些顶级响应优化查询并重复该过程。
这种方法允许 RAG 管道探索多个检索和生成路径,从而有可能发现单路径方法可能遗漏的更好的响应。完全以自然语言进行定向搜索,如果需要,只将最终选定的路径转换为结构化格式。
2.4、lookahead
前瞻搜索通过模拟未来步骤来扩展定向搜索方法,然后再决定要采取哪些路径。在每个步骤中,它都会评估潜在的未来状态,以更好地估计整体解决方案的质量。
提示工程中的前瞻搜索应用:
- 生成多个提示变体。
- 对于每个变体,通过生成后续提示和响应来模拟几个步骤。
- 选择导致最佳预测结果的初始提示。
在RAG 管道中的应用:
- 检索一组初始文档。
- 对于每个文档,模拟查询细化和文档检索的几个步骤。
- 选择可产生最佳预测结果的初始文档。
2.5、混合方法
概念:混合方法结合了多种测试时间计算策略,以利用它们的互补优势并减轻各自的弱点。这使得系统更加强大和适应性更强,可以处理更广泛的任务和查询。
类比:想象一场写作比赛,其中多位作者各自在几轮中撰写和修改自己的故事。然后,评委从所有作者中选出最好的最终故事,结合个人写作和修改过程的优势。
混合方法在快速工程中的应用:
- 结合不同的策略,例如 Best-of-N、顺序修订和 Beam Search。
- 在快速细化过程的不同阶段使用不同的策略。
在RAG 管道中的应用:
- 结合不同的检索策略、查询细化技术和响应生成方法。
- 根据查询的复杂性或初始结果的质量调整策略。
混合方法可以灵活地适应不同的查询和任务,通过减轻单个策略的弱点来增强稳健性,并且有可能通过不同策略的协同组合实现更高质量的输出。但是,它们的实施和维护也可能会更复杂,可能需要更多的计算资源,并且通常需要仔细调整才能找到组件策略之间的最佳平衡。为了与格式限制方面的见解保持一致,建议在整个混合方法中优先考虑自然语言处理,仅在需要时将结构化格式化作为最终的后处理步骤。
2.6、计算最优扩展
概念:计算最优扩展涉及根据手头任务的估计难度或复杂性自适应地选择最佳测试时间计算策略。这种方法旨在通过为具有挑战性的任务分配更多资源,为较简单的任务分配较少资源来优化可用计算资源的使用。
类比:想象一个学生,他使用抽认卡学习简单主题,使用小组学习课程学习中等难度的科目,使用一对一辅导学习最具挑战性的概念。学生根据感知到的材料难度调整学习策略。
计算最优扩展在快速工程中的应用:
- 评估任务或查询的复杂性。
- 根据评估的复杂性选择适当的提示策略。
- 相应地分配计算资源。
在RAG 管道中的应用:
- 估计查询的难度或所需信息的预期复杂性。
- 相应地调整检索深度、上下文长度和响应生成策略。
结合对格式限制的洞察,计算优化扩展可以进一步调整其方法,通过考虑任务复杂性来确定计算策略和格式化方法。对于结构化输出可能有利的简单任务,系统可以直接生成所需格式的响应。但是,对于需要更复杂推理的复杂任务,重点应该放在利用 LLM 的自然语言功能上,并可选择在必要时将结构化格式化作为最终的后处理步骤。
2.7、过程奖励模型 (PRM) 引导搜索
概念:PRM 引导搜索利用学习奖励模型 (PRM) 在生成过程中提供反馈和指导。PRM 评估中间步骤或部分解决方案,将 LLM 引向更有希望的方向并提高最终输出的整体质量。
类比:想象一个烹饪节目,专业厨师品尝并评分参赛者菜肴准备的每个步骤,指导他们在整个烹饪过程中做出更好的选择。
提示工程中的 PRM 引导搜索应用:
- 训练奖励模型来评估提示或响应的质量。
- 使用此模型来指导提示的选择和细化。
在RAG 管道中的应用:
- 训练奖励模型以评估检索到的文档和生成的响应的相关性和质量。
- 使用此模型指导文档检索和响应生成过程。
2.8、多数投票
概念:多数投票是一种简单而有效的方法,它涉及对给定的查询或任务生成多个答案,然后选择最常见或最频繁的答案作为最终输出。这种方法依赖于这样的假设:“群体智慧”往往会导致更准确或更可靠的结果。
类比:想象一个游戏节目,参赛者可以“向观众”寻求帮助。观众最喜欢的答案通常是正确的。
提示工程中多数表决的应用:
- 生成多个提示及其相应的响应。
- 识别响应中的共同元素或主题。
- 根据最常见或最一致的信息构建最终响应。
在RAG 管道中的应用程序:
- 检索多组文档并为每组生成响应。
- 识别响应中的共同信息或答案。
- 根据最一致的检索信息构建最终响应。
在实践中,最好的结果往往来自于结合多种方法并针对特定用例进行微调。随着人工智能领域的不断发展,我们可以期待在快速工程和 RAG 流程中看到这些策略更加复杂的应用。
论文研究
Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters
谷歌DeepMind团队于2024年8月6日发布的论文.在这篇论文中,研究团队探讨了大模型(LLM)在面对复杂问题时,是否可以通过增加测试时的计算量来提高决策质量。
这项研究表明,增加测试时(test-time compute)计算比扩展模型参数更有效。基于论文提出的计算最优(compute-optimal)测试时计算扩展策略,规模较小的基础模型在一些任务上可以超越一个14倍大的模型。
3B模型长思考后击败70B!HuggingFace逆向出o1背后技术细节并开源
OpenAI o1 技术初探1:整体框架,利用Test-Time Scaling Law提升逻辑推理能力
- 研究表明,特定的验证器搜索方法的有效性与计算预算和问题的难度密切相关。具体而言,束搜索在较难问题和较低计算预算下更为有效,而best-of-N在较简单问题和较高预算下更具优势。此外,通过为特定问题难度和测试时计算预算选择最佳搜索设置,可以使用最多减少4倍的测试计算来接近best-of-N的效果。
- 在只期望遇到非常困难的问题(如困难等级 4/5)或有较大的 𝐷_inference 时,通常更有效的选择是将预算分配给预训练。如果我们预计大多数问题是简单或中等难度(如等级 1/2/3,有时是 4),或者推理需求较低(如自我改进管道),则利用测试时间计算更为合适。
2.3、Self-Refine
这个在RAG考的很多
,Self-Refine ,通过迭代反馈和改进来提升大模型的初始输出质量,核心思想是通过多次迭代和反馈来逐步优化模型的输出,从而提高其准确性和质量,特别适用于那些需要精细调整和优化的任务。但是迭代终止条件并不好设置。主要包括的步骤如下:
- 首先,初始输出,LLM 生成一个初始的输出;
- 然后,迭代反馈使用某种反馈机制(例如用户反馈、自动评估指标等)对初始输出进行评估;
- 接着,改进输出,根据反馈信息,LLM 对初始输出进行改进,生成一个新的输出。
- 最后,重复迭代。这个过程会不断重复,直到输出达到满意的水平或达到预设的迭代次数。
2.4、AGent flow策略
进一步的,又在想,直接做任务拆解是不是更好,减少不必要的推理步骤,通过使用域特定的系统提示以减少不必要的长上下文推理过程,从而提高模型的效率。所以又有了AGent flow,也就是目前慢思考的玩法,其实现的步骤如下:
- 首先,任务分解:将复杂任务分解成更小的子任务。通过这种方式,模型可以更有效地处理和解决这些子任务,而不是一次性处理整个复杂任务。
- 其次,结构化工作流:设计一系列域特定的系统提示,用于规划更好的推理过程。这些提示帮助模型在处理每个子任务时更有条理地进行推理。
- 最后,使用工具:利用各种工具来辅助完成任务。例如,在常识推理数据集(如HotpotQA和Collie)上,Agentflow使用了现有kg agent框架;在代码和数学数据集(如USACO和AIME)上,选择代码助手和数学求解器。