
解锁 AI 的潜力:ChatGPT 如何在比你想象中更少的数据下实现复杂推理
|深度推理模型|大型语言模型|推理|
挑战大数据神话:人工智能如何以惊人的少量示例实现复杂推理,以及它是如何工作的
作者使用人工智能制作的图片
我对极简主义有自己的定义,即用最少的手段创造的东西。—— La Monte Young
大型推理模型 (LRM) 是大型语言模型 (LLM) 的最新前沿,通过额外的训练获得,利用长链式思维 (Long CoTs) 以及反思、回溯和自我验证来解决具有挑战性的推理任务。这些模型在推理基准方面表现出卓越的能力,但代价是更高的计算成本。事实上,这导致了测试时计算的新概念,以提高模型能力。换句话说,这不是扩展模型,而是模型对给定问题的“思考”程度。
变压器的安魂曲?
变压器会是引领我们走向通用人工智能的模型吗?或者会被取代?
专家综合症:模式识别等同于智能吗?
探索人工智能的极限:为什么掌握模式可能不等同于真正的推理
此外,获取这些长的 CoTs 是一个昂贵的过程,需要收集数千甚至数万份手动注释的文本。即使在今天,我们尝试使用其他模型来生成这些 CoTs,这个过程仍然很昂贵。我们可以问两个有趣的问题:
所有这些长的 CoTs 对于提高性能都是必要的吗?是什么促成了这种性能?
在本文中,我们将确切地讨论这个问题。
人工智能正在改变我们的世界,塑造着我们的生活和工作方式。了解它的工作原理及其影响从未如此重要。
最近发表了两篇文章,正好讨论了这个问题。根据这些论文,你可以使用更少的 CoT 来达到相同的效果。例如,在这篇论文 中,他们只使用了 17K 个例子(在之前的工作中使用了超过 100K 个):
通过使用 DeepSeek R1 生成的仅 17k 个样本进行完全监督的微调 (SFT),Qwen2.5–32B-Instruct 模型在广泛的数学和编码任务中实现了与 OpenAI o1-preview 相当的性能——source
作者使用 DeepSeek-R1 和 QwQ-32B-Preview 自动创建这些例子,以生成长的 CoTs。作者从数学数据集或需要推理的数据集中选择难题。之后,他们在 Qwen2.5–32B-Instruct 上使用 监督微调 对该数据集进行训练。
image source: here
结果表明,即使使用几个例子也能提高模型在所有基准测试中的性能。此外,没有必要对所有模型参数进行微调,可以使用 LoRA 等高效技术(仅更新一小部分参数)。这意味着模型在微调期间学习模式,并且与其说是学习新知识,不如说是学习更好地构建其响应。
image source: here
另一篇论文 证实了这些结果,该论文表明,只需要几个例子就可以实现闭源模型的性能
image source: here
如果几个例子就足够了,那么在选择这些例子时,什么才是重要的呢?仅仅是 CoT 就足够了吗,还是还有其他需要考虑的因素?
根据这篇文章,关键是这些例子的结构。作者探讨了两个主要元素:
- 推理步骤中的局部内容。如果答案正确,使用了哪些词语,以及数字的存在。
- 全局推理结构。反思、自我验证、步骤数量以及推理的进行方式。
为此,他们通过改变单词或改变结构(插入、删除和打乱推理步骤)来破坏这些例子。结果显示了几个有趣的元素:
- 正确答案的存在似乎不是必要的。作者使用了最终 CoT 答案错误的例子,但性能仅略有下降。
- 在另一个实验中,他们将中间步骤中出现的数字更改为随机数(这导致示例中出现明显的错误)。这也对性能影响很小。
- 同样,从链中删除推理词语(例如,LRM 在响应生成期间使用的“wait”、“let me think again”、“but”)也不会大幅降低性能,这表明这些关键词对于推理来说并不那么重要。
- 作者使用 Llama-3.3–70B-Instruct 将推理轨迹分解为不同的推理步骤,以确定各种组件(回溯、自我验证、反思)。之后,他们对各种例子应用不同的修改(插入、删除和打乱)。这些修改破坏了模型的性能,就好像没有进行微调一样
image source: here
image source: here
在另一项研究 中,他们分析了这些例子,并将它们分为五个质量等级(L1-L5,其中 L5 是最高等级)。例如,L5 解决方案显示出清晰的组织、解释清晰的步骤和彻底的自我验证,而 L1 解决方案仅列出基本步骤,没有详细说明。结果表明,L5 质量的推理链可以产生最佳性能,并且性能与用于微调的 CoT 的质量相关。
image source: here
此外,使用高质量示例训练的模型会生成更长的响应,并且具有更多的自我反思过渡(例如,等待、也许、因此),通过为推理分配更多 token。
image source: here
此外,对于作者来说,不仅解决方案的质量(推理链)很重要,而且需求的质量也很重要:
我们假设更具挑战性的问题会促进复杂的推理链、不同的思维过程和增强的知识整合,从而使 LLM 能够更好地利用预训练知识进行高质量的推理。— source
因此,他们将问题分为三个集合,这些集合的级别越来越高(
微调大型语言模型以进行推理
关于微调大型语言模型(LLM)以进行推理任务的研究已经产生了有趣的结果。最近的两项研究提供了关于影响此过程有效性的因素的见解。
研究 1:问题复杂性的影响
一项研究调查了推理问题的复杂性与微调 LLM 性能之间的关系。该研究将问题分为不同的复杂程度(简单、复杂和高级)。结果表明,更复杂的问题(以及解决方案)会带来更好的结果(更高的推理性能)。
图片来源:here
最后,这两项研究都表明,模型的选择也很重要。并非所有模型都能从这种后续的微调中获得同等的好处。
图片来源:here
在本文中,我们表明这种能力可以使用几千个示例和低秩适配器轻松进行微调。我们进一步表明,学习过程的关键是样本的逻辑结构,而不是单个推理步骤的内容。— source
我们讨论的两篇文章表明,不一定需要大量的例子,但少量就足够了。特别是如果仔细选择这些例子。第一篇论文指出结构,而第二篇则将影响放在问题和解决方案的质量上。这两项工作显然是矛盾的。高质量的 CoT 仍然具有明确和精确的结构,因此似乎与第一项研究的结果一致。
LIMO:推理的“少即是多”
Ye, 2025 年的论文“LIMO:推理的‘少即是多’”介绍了一种增强大型语言模型 (LLM) 推理能力的新方法。其核心思想是通过使用最少量的演示来提高推理性能。这与当前使用大量演示的趋势形成了鲜明对比。
LIMO 的关键概念
- 最少演示: LIMO 强调使用少量高质量的演示来指导 LLM 的推理过程。
- 推理链: 该方法侧重于构建推理链,其中每个步骤都逻辑地遵循前一个步骤。
实现细节
LIMO 方法涉及以下步骤:
- 演示选择: 仔细选择一小组演示,涵盖推理任务的关键方面。
- 推理链构建: 构建一个推理链,引导 LLM 完成问题解决过程。
- LLM 推理: 使用 LLM 根据推理链和演示生成最终答案。
LIMO 的优势
- 效率: 使用更少的演示可以降低训练和推理所需的计算成本和时间。
- 泛化: 最小的演示集可以帮助 LLM 更好地泛化到未见过的示例。
- 可解释性: 推理过程变得更加透明,更容易理解。
代码示例
以下是 LIMO 可能如何实现的一个简化示例:
def limo_reasoning(llm, demonstrations, question):
"""
Performs reasoning using the LIMO approach.
Args:
llm: The Large Language Model.
demonstrations: A list of demonstrations.
question: The question to be answered.
Returns:
The answer to the question.
"""
prompt = construct_prompt(demonstrations, question)
answer = llm.generate(prompt)
return answer
def construct_prompt(demonstrations, question):
"""
Constructs the prompt for the LLM.
Args:
demonstrations: A list of demonstrations.
question: The question to be answered.
Returns:
The prompt string.
"""
prompt = ""
for demonstration in demonstrations:
prompt += demonstration + "\n"
prompt += "Question: " + question + "\n"
prompt += "Answer: "
return prompt
## Example usage
llm = LargeLanguageModel() # Assume a pre-trained LLM
demonstrations = [
"Question: What is the capital of France?\nAnswer: Paris",
"Question: What is the capital of Germany?\nAnswer: Berlin"
]
question = "What is the capital of Italy?"
answer = limo_reasoning(llm, demonstrations, question)
print(answer)
LIMO 与标准方法对比
LIMO 方法与标准方法在几个方面有所不同:
- 演示数量: LIMO 使用的演示数量明显更少。
- 重点: LIMO 强调演示的质量而非数量。
- 推理链: LIMO 明确构建推理链来指导 LLM。
LLM 可以轻松地从演示结构中学习推理,而不是内容,结构才是关键!
Li, 2025 年的论文“LLM 可以轻松地从演示结构中学习推理,而不是内容,结构才是关键!”探讨了演示结构在使 LLM 能够有效推理方面的重要性。关键发现是,演示的底层结构比内容本身更重要。
关键概念
- 演示结构: 演示的排列和组织在 LLM 推理中起着至关重要的作用。
- 内容不可知: 只要结构保持一致,LLM 就可以学习推理,即使使用不同的内容也是如此。
实现细节
该方法涉及:
- 结构分析: 分析演示的结构。
- 结构感知训练: 训练 LLM 识别和利用结构模式。
- 使用结构进行推理: 将学习到的结构应用于新的推理任务。
优势
- 灵活性: 该方法允许使用不同的内容,同时保持推理能力。
- 鲁棒性: LLM 变得对内容的变化更具鲁棒性。
- 效率: 侧重于结构可以减少对广泛的特定内容训练的需求。
代码示例
以下是一个简化示例:
def structure_reasoning(llm, demonstrations, question):
"""
Performs reasoning based on demonstration structure.
Args:
llm: The Large Language Model.
demonstrations: A list of demonstrations.
question: The question to be answered.
Returns:
The answer to the question.
"""
structure = extract_structure(demonstrations)
prompt = construct_prompt_with_structure(structure, question)
answer = llm.generate(prompt)
return answer
def extract_structure(demonstrations):
"""
Extracts the structural patterns from demonstrations.
Args:
demonstrations: A list of demonstrations.
Returns:
The extracted structure.
"""
# Simplified example: Extract the question-answer pattern
structure = "Question-Answer"
return structure
def construct_prompt_with_structure(structure, question):
"""
Constructs the prompt based on the structure.
Args:
structure: The extracted structure.
question: The question to be answered.
Returns:
The prompt string.
"""
if structure == "Question-Answer":
prompt = "Question: " + question + "\nAnswer: "
else:
prompt = "Unknown structure"
return prompt
## Example usage
llm = LargeLanguageModel() # Assume a pre-trained LLM
demonstrations = [
"Question: What is the color of the sky?\nAnswer: Blue",
"Question: What is the color of grass?\nAnswer: Green"
]
question = "What is the color of a banana?"
answer = structure_reasoning(llm, demonstrations, question)
print(answer)
结构与内容
这种方法与传统方法之间的主要区别在于,它强调结构而不是内容。LLM 学习基于底层结构模式进行推理,这使得它对演示的特定内容依赖性降低。
参考
以下是我撰写本文时查阅的主要参考文献列表,仅引用了文章的第一个作者姓名。