REverse-Engineered Reasoning (REER) 论文深度解读

本论文提出了一种名为“逆向工程推理”(REverse-Engineered Reasoning, REER)的全新范式,旨在为大语言模型(LLM)在缺乏明确验证信号的开放域生成任务中注入深度推理能力。其核心思想是“逆向工作”,从已知的优质输出反推生成它的潜在思维过程。

1. 核心方法:如何从 (Query, Answer) 对构造并优化 CoT

REER 的核心创新在于将推理轨迹的发现建模为一个梯度-free的局部搜索问题,其优化目标是降低参考答案的困惑度(Perplexity)。

1.1 问题形式化

给定一个输入查询 x 和一个高质量的参考答案 y,目标是找到一个最优的深度推理轨迹 z*。该轨迹 z 被建模为一个离散的推理步骤序列 [z1, z2, ..., zn]

优化目标函数如下:
z* = arg min z∈Z PPL(y|x, z)

其中,PPL(y|x, z) 是由一个生成器LLM计算的、在给定 xz 的条件下,参考答案 y 的困惑度。更低的困惑度意味着该推理轨迹 z 能更连贯、更有效地引导模型生成 y

1.2 迭代优化算法

直接求解 z* 是不可行的,因此论文提出了一种迭代精炼的局部搜索算法,其流程如图3所示:

  1. 初始化 (Initialization)

    • 对于给定的 (x, y) 对,通过向LLM(如Qwen2.5-32B-Instruct)发送特定提示(见附录Listing 1),生成一个初始的、不完美的推理轨迹 z(0) = [z1, z2, ..., zn]
    • 例如,提示要求模型:“Now, you need to write down the thinking process behind this solution, as if you are thinking aloud and brainstorming in the mind… Present your complete thought process within a single and unique ‘‘ tag.”
  2. 节点扩展 (Node Expansion / Segment-wise Refinement)

    • 这是算法的核心。在每次迭代中,选择轨迹中的一个片段 zi 进行改进。
    • 通过精心设计的提示(见附录Listing 2),引导LLM生成多个候选的精炼版本。提示会提供完整的上下文,包括查询 x、参考答案 y 以及轨迹的其他部分(已精炼的 z<∗i 和初始的 z>i)。
    • 关键设计是“强制分段编辑”和“注入类人思考模式”。提示明确要求模型使用如 “Hmm…maybe I can…”, “Wait, that’s a bit…” 等短语,以生成更自然、更具反思性的推理。
    • 例如,Listing 2 中的提示要求:“c. use self-critique trigger words, such as ‘wait‘, ‘maybe‘, ‘let me‘, etc.” 并给出了具体例子。
  3. 节点评估与选择 (Node Evaluation and Selection)

    • 对于每个候选精炼片段 c,构建一个临时轨迹 zc',即将原轨迹中的 zi 替换为 c
    • zc' 是一条完整的轨迹。 它包含了除当前正在优化的片段 zi 之外的所有其他片段(即 z1, ..., zi-1, c, zi+1, ..., zn)。评估时,模型会基于这个完整的上下文 (x, zc') 来预测 y
    • 评估每个候选的标准是其质量得分:S(c) = PPL(y|x, zc')
    • 困惑度(PPL)的计算方式是,使用一个固定的生成器LLM(在论文中是Qwen2.5-32B-Instruct),计算在给定完整输入 (x, zc') 的条件下,生成参考答案 y 的整个token序列的困惑度。 具体来说,这是语言模型对序列 y 的负对数似然的指数平均,衡量的是模型对 y 的“惊讶程度”。困惑度越低,说明在 (x, zc') 的引导下,模型认为 y 是一个更自然、更可能的输出。
    • 选择使困惑度最低的候选片段作为更新后的 zi
      zi* = arg min c∈Ci∪{zi} S(c)
    • 关键点:候选集 Ci∪{zi} 包含了原始片段 zi,这确保了每次迭代后困惑度单调不增(即不会变差)。
  4. 终止 (Termination)

    • 重复上述“扩展-评估-选择”过程,直到 y 的困惑度达到预设阈值或达到最大迭代次数。
    • 最终输出为精炼后的最优轨迹 z*

2. 数据构造与训练方法

2.1 数据构造 (Training Data Curation)

数据构造是REER成功的关键,其流程如下:

  1. 数据来源 (Sourcing of (Query, Solution) Pairs)

    • 公共写作平台:如 ‘r/WritingPrompts’,使用社区点赞数作为初步质量代理。
    • 公共领域文学:从Project Gutenberg获取经典文本作为答案 y,并用GPT-4o反向推导出可能的查询 x
    • 公共数据集:如WildChat和LongWriter6K。
  2. 轨迹合成与过滤 (Trajectory Synthesis and Filtering)

    • 从上述来源中精选出20,000个高质量的 (x, y) 对,覆盖25个手动提名的类别(如图5所示,艺术类占48%)。
    • 对每一对数据,应用上述的迭代局部搜索算法,生成最优推理轨迹 z*
    • 上下文工程 (Context Engineering):通过提示设计确保高质量合成,包括强制分段编辑和注入类人思考模式。
      • “上下文工程”是什么意思?
        这指的是在数据合成阶段,通过精心设计给LLM的提示词(Prompt),来引导它生成符合我们期望的、高质量的推理轨迹。它不是一个通用术语,而是本论文提出的具体技术手段,包含两个核心设计:
        1. 强制分段编辑 (Enforcing Segment-wise Edits via a Meta-Structure):在用于精炼单个片段的提示(Listing 2)中,设计一个“元结构”,强制LLM只修改当前指定的片段,而不会去改动轨迹中后续的部分。这就像给模型一个“编辑框”,让它专注于局部优化,保证搜索过程的可控性和有效性。
        2. 注入类人思考模式 (Injecting Human-like Thinking Patterns):在提示词中明确要求LLM使用特定的、能体现人类认知过程的词汇和短语,如“Hmm…maybe I can…”, “Wait, that’s a bit…”, “Let me think…”。这些“触发词”旨在激发模型进行自我反思、探索替代方案和回溯,从而生成更自然、更灵活、更接近人类真实思考过程的推理,避免生成僵化、公式化的文本。
    • 数据过滤:应用两种启发式策略去除低质量轨迹:
      • 思考结束过滤:丢弃在序列最后10%仍出现思考模式的样本,防止模型陷入重复循环。
      • 重复过滤:使用n-gram重复度量,过滤掉出现高度重复表达的样本。
  3. 最终数据集组装 (Final Dataset Assembly for Fine-Tuning)

    • 为防止模型在学习开放域推理时遗忘通用知识,采用混合数据训练策略
    • 将合成的20K开放域推理轨迹与来自公共数据集(如OpenThoughts)的17K推理轨迹(主要覆盖数学、编码等领域)混合,形成最终的37K训练数据集。
    • 训练数据格式采用标准模板,明确教导模型先进行深度推理再生成最终输出(见附录Listing 4)。

2.2 训练方法 (Training Method)

  • 基础模型:选用 Qwen3-8B-Base。论文指出,Llama-3.1-8B-Base难以内化深度思考过程,而Qwen-2.5-7B-Base存在上下文长度限制。
  • 训练细节:使用恒定学习率调度,峰值学习率为 2 × 10−5,全局批大小为96,训练3个epoch。
  • 模型训练是SFT吗?
    模型训练采用的是监督微调(Supervised Fine-Tuning, SFT)。 论文明确指出,他们使用合成的 (x, z*, y) 三元组数据集对Qwen3-8B-Base模型进行微调。这是一种标准的SFT范式,其中模型被训练以在给定输入查询 x 时,首先生成推理轨迹 z*,然后生成最终答案 y。论文中没有任何地方提及使用强化学习(RL)或其他非监督方法进行训练。

3. 实验中的关键发现

实验部分通过主结果、消融研究和定性分析,全面验证了REER的有效性。

3.1 主要结果 (Main Results)

在LongBench、HelloBench和WritingBench三个基准测试上,使用Claude-3.7和GPT-4o作为裁判模型进行评估。

  • 超越开源基线:DeepWriter-8B在所有基准上显著优于强开源基线LongWriter-8B。在WritingBench的六个子类别上,平均分高出超过18分。
  • 媲美甚至超越闭源模型
    • 在创意任务HelloBench (HB-B)上,得分为87.48,与GPT-4o (87.6) 和Claude 3.5 (88.3) 统计上相当。
    • 在专业写作任务WritingBench上,全面大幅超越Claude 3.5,并与GPT-4o和Claude 3.7高度竞争。
    • 在LongBench-Write(超长文本生成)上,得分91.28,甚至超过了GPT-4o (83.1) 和Claude 3.5 (89.3),表明结构化推理轨迹对维持长距离一致性有强大归纳偏置。

3.2 消融研究 (Ablation Studies)

消融研究(表2)量化了各组件的贡献:

  1. 合成数据至关重要:移除20K合成数据(“- Remove Synthesis Data”)导致性能大幅下降,尤其在创意任务HB-B上从87.48降至73.73,证明为开放域定制的高质量推理轨迹是性能提升的核心
  2. 迭代精炼有效:使用未经精炼的初始轨迹(“- Remove Iterative Search”)会导致性能下降,特别是在WritingBench等需要细致推理的任务上(如WB-A: 72.20 → 66.72),证明基于困惑度的局部搜索能发现更优的推理路径
    • “未经精炼的初始轨迹”是什么?
      “未经精炼的初始轨迹”指的是在数据合成流程的第一步(初始化阶段)直接由LLM根据提示(Listing 1)生成的原始推理轨迹 z(0)。这个轨迹是“一次性”生成的,没有经过后续的迭代优化过程。它通常是不完美的、粗糙的,可能缺乏深度、逻辑性或与最终答案 y 的连贯性不够强。消融实验通过比较使用这种原始轨迹 z(0) 和经过迭代搜索优化后的轨迹 z* 的模型性能,证明了优化过程的必要性和有效性。
  3. 思考模式注入提升创造力:移除提示中的反思性词汇(如“Hmm…”, “Wait…”)(“- Remove Reflection Tokens”)会导致性能轻微下降,但在文学艺术类任务(WB-D)上下降显著(70.57 → 62.04),证明这些模式对培养灵活性和创造力至关重要
  4. 轨迹长度影响任务表现:长轨迹对结构化专业写作更重要,短轨迹对创意构思更优。
  5. 文学艺术数据具有泛化价值:移除“文学艺术”和“日常生活”类数据会降低所有基准的性能,表明创意和叙事任务的训练能提升模型处理复杂性和开放性的通用能力

3.3 定性分析 (Qualitative Analysis)

  • 推理质量:如图6所示,在“问题解构”、“逻辑一致性”、“分析深度”、“呈现清晰度”和“事实依据”五个维度上,DeepWriter-8B的推理画像远优于开源基线,并与GPT-4o竞争,尤其在“分析深度”和“事实依据”上超越Claude 3.5。
  • 思考模式多样性:如图7所示,经过思考模式注入训练的模型,其生成的思考短语(如“let me think”, “maybe”, “hmm”, “wait”)频率分布更均匀、更多样,表明其推理过程更灵活、更类人;而未注入的模型则严重依赖“next”、“first”等少数公式化短语,推理过程更僵化。

附录:关键提示词(Prompt)中文翻译

以下是论文附录中用于数据合成的核心提示词翻译。

Listing 1: 生成初始思考轨迹的提示词

你是一位多领域的专家。假设你需要给出一个具体的最终回复,我还需要你写下这个解决方案背后的思考过程。
这是一个任务:
{}
这是你将要创建的解决方案:
{}
现在,你需要写下这个解决方案背后的思考过程,就像你在脑海中大声思考和头脑风暴一样。思考过程需要通过系统性的长思考过程来彻底探索问题。这需要进行一个全面的分析、总结、探索、重新评估、反思、回溯和迭代的循环,以发展出深思熟虑的思考过程。
请将你的完整思考过程放在一个唯一的 <think></think> 标签内。
你的思考过程必须遵守以下要求:

  1. 以第一人称叙述,就像你在大声思考和头脑风暴一样 坚持使用“I”的叙述。想象你正在脑海中进行头脑风暴和思考。使用口语化、简单的语言。
  2. 统一思考过程与写作解决方案:你的思考过程必须精确对应写作解决方案的一部分。读者应该能够清楚地看到你的想法是如何逐步“发展”成最终作品的,让文案感觉像是你思考的必然产物。
  3. 语气:规划性、真诚、自然、易懂 想象你正在分析和规划如何撰写解决方案。你的语言应该平实易懂,避免使用晦涩的专业术语来解释复杂的思考过程。
  4. 逻辑流:清晰且渐进
  5. 深度思考的思考框架 为了确保你的思考清晰而深入,展示你的思考和规划以完成任务,以下是你在大声思考和头脑风暴时可能会涵盖的内容:
    • 理解用户意图和任务:在动笔之前,我需要彻底考虑写作的根本目的。我首先需要辨别用户字面请求背后的真实目标。接下来,我会考虑:我的读者是谁?我会为目标读者创建一个精确的画像,了解他们的痛点、愿望和阅读背景。然后,我将建立核心目标:我希望读者在阅读后经历哪些具体的情感、认知和行为上的变化?
    • 确定内容:我需要围绕我的目标,头脑风暴一个核心的创意想法和沟通策略。然后,我会思考为了完成写作任务,我需要向读者传达什么内容和关键信息,以及这将涉及哪些素材。
    • 构建结构:我需要为读者设计一条清晰的叙事路径,就像一份“蓝图”。首先,我将规划文章的骨架(例如,使用“黄金圈Why-How-What”、“AIDA模型Attention-Interest-Desire-Action”或“起承转合”的叙事结构)。然后,我将规划关键模块:引言如何吸引读者?正文如何分层和安排论点?结论如何总结、升华信息并提供明确的行动号召(CTA)?
    • 大纲:如果任务输出可能相对较长,我会考虑根据上述计划写一个大纲(或草稿)。具体来说,大纲会将我的计划落地为段落,总结每个段落的关键内容、要点、句子结构或任何重要的注意事项。
    • 我保证我不会复制解决方案,我不会复制解决方案,这个大纲(或草稿)应该只像目标文本的一个原型或轮廓。在完成这个大纲后,我会再次检查在撰写最终解决方案时是否有任何细节或注意事项需要注意。
    • 我将在我的思考过程末尾,在一个 --- 大纲(或草稿)--- 分隔符后开始写这个草稿。草稿将包含在同一个 <think></think> 块中。
  6. 在整个思考过程中,我希望融入深度思考和规划,并在我的思考过程中使用刻意的自我批评/自我反思。通过定期使用诸如 ‘wait‘, ‘maybe‘, ‘let me‘ 等模式来触发这些。例如:
    • Hmm, maybe…(针对给定请求的其他具体思考)
    • Let me think…
    • Wait no…
    • But wait…(可能发现你之前想法中的错误)
    • Wait, that’s a bit…(对之前决定的反思)。Let me think…(正在思考其他可能性)
    • Wait, the user said…(对之前信息的回溯)。So…
    • Hmm…Alternatively, maybe…(分支到其他可能性)
    • But…
    • 但我保证我会使用多样化的触发词,不会重复使用相同的触发词。我会在分析用户需求、确定内容和结构、考虑替代方案、回溯和细节时使用它们。我不会在写草稿或接近思考结尾时使用它们。
      在思考过程中,确保不要使用过去时态,不要使用过去时态,因为这是你在写最终解决方案之前的思考过程。你正在规划你将要做什么和需要做什么。
      想象你正在大声思考和头脑风暴。把它写成内心独白或意识流。不要使用项目符号、数字或正式的小标题
      现在,请在 <think></think> 标签内记录你的思考过程。

Listing 2: 用于分段编辑的提示词

你的任务是接收一个用户请求、一个目标输出和一个现有的思考过程,然后去精炼和丰富该思考过程中一个特定的段落。
—>任务 -{-}->目标输出 -{-}->思考过程 <{r}eplace> <{/}replace>
{}
请遵循以下三步法来构建你的回复:
第一步: 在现有的思考过程中定位你需要修改的段落。结合周围的上下文,这个段落的主要功能是什么?
第二步: 将“目标文本”和“待修改段落”并排阅读。问自己一个关键问题:这个段落所反映的思考过程是否缺少关键步骤,或者是否有内容可以进一步优化和细化,以便更好地与目标文本保持一致?
第三步: 改进和优化该段落(代表思考过程的一部分)。

  • 基于分析,将初始目标段落精炼成一个新的段落,保持原有基调。将精炼后的内容放入 <refine></refine> 标签中。
  • 为了帮助融入深度思考和规划,请在你的思考过程中考虑使用刻意的自我批评/自我反思。通过频繁使用诸如 ‘wait‘, ‘maybe‘, ‘let me‘ 等模式来触发这些。例如:
    • Hmm, maybe…(针对给定请求的其他具体思考)
    • Let me think…
    • Wait no…
    • But wait…(可能发现你之前想法中的错误)
    • Wait, that’s a bit…(对之前决定的反思)。Let me think…(正在思考其他可能性)
    • Wait, the user said…(对之前信息的回溯)。So…
    • Hmm…Alternatively, maybe…(分支到其他可能性)
    • But…
  • 如果被改进段落的功能是作为文本的初稿,你必须专注于增强文本的逻辑性和完整性。草稿不应是一个笼统的大纲,而应表达具体内容并陈述明确的观点。考虑当前草稿是否是目标文本的合适原型:它既不应过于模糊,也不应直接复制,而应反映一个基础版本。
    根据以上指南,你只需精炼下面标记为替换的部分。
    <{/}replace>
    在你的回复中,首先,在 <analyze></analyze> 标签内按照三步法呈现你的分析。最后,将相应的、精炼后的思考过程段落放在 <refine></refine> 标签内。
    注意:
    a. 避免重复。减少相同连接词的使用,避免一遍又一遍地重复相同的意思。确保你修订的内容不会重复上下文中的信息。
    b. 请保留原段落的前几个词,特别是连接词。
    c. 使用自我批评触发词,例如 ‘wait‘, ‘maybe‘, ‘let me‘ 等。
Logo

更多推荐