深度思考与置信度:DeepConf 让大模型推理更高效更准确

627 阅读4分钟

近期,Meta AI 和 UCSD 的研究者提出了一种新的方法——Deep Think with Confidence(DeepConf),它在保持甚至提升大语言模型(LLMs)推理准确率的同时,大幅降低了计算开销。这篇博客将带你了解论文的核心内容、关键技术创新、实际应用场景,以及一个最小可运行的 demo。


📖 论文内容简介

大语言模型在复杂推理任务中,通常采用 自一致性(Self-Consistency) 方法:

  • 为每个问题生成多条推理路径;
  • 最后通过 多数投票 决定答案。

这种方法能显著提高准确率,但存在两个问题:

  1. 计算代价过高:每条推理轨迹都需要完整生成,导致推理时 token 数成倍增长;
  2. 轨迹质量不均:多数投票对所有轨迹一视同仁,低质量轨迹可能拖累结果。

DeepConf 的贡献

  • 提出一种 基于置信度的推理方法,利用模型内部的概率分布来动态判断推理轨迹质量;
  • 在推理过程中实现 低置信度轨迹的过滤与早停
  • 不需要额外训练,也无需调整超参数,即插即用。

实验表明:

  • 在 AIME 2025 数据集上,DeepConf 使用 GPT-OSS-120B 模型达到了 99.9% 的准确率
  • 在在线模式下,DeepConf 能减少 40%–85% 的 token 开销,大幅提高推理效率。

🔑 关键技术与创新点

  1. 局部化置信度度量

    • 传统方法只用全局平均置信度,容易掩盖中间的错误推理。

    • DeepConf 引入:

      • Group Confidence(分段置信度)
      • Bottom 10% Confidence(最差片段置信度)
      • Tail Confidence(结尾置信度)
    • 能更精准地识别低质量推理。

  2. 置信度驱动的早停(Early Stopping)

    • 在生成过程中实时评估置信度,如果低于阈值直接停止该轨迹。
    • 避免浪费算力在明显错误的轨迹上。
  3. Confidence-Weighted Voting(置信度加权投票)

    • 不再让所有轨迹“票权相等”,而是让高置信度轨迹的答案更有分量。
    • 在实验中显著提升了最终结果的可靠性。
  4. 无需额外训练

    • 仅依赖模型自身的输出分布信号,无需额外数据或再训练。
    • 直接可用于现有模型,实用性极高。
  5. 自适应采样与动态预算

    • 根据问题难度,动态决定需要多少条推理轨迹。
    • 当多数投票已经足够一致时,即可提前结束,提升效率。

💡 实际应用场景

  1. 学术竞赛与考试辅导:如 AIME、IMO、GRE、GMAT 等复杂推理题。
  2. 代码生成与调试:提升 Copilot、IDE 插件的代码质量与效率。
  3. 金融 / 法律 / 医疗等高风险领域:需要高可靠性答案的应用场景。
  4. 聊天机器人与问答系统:提升准确率,降低延迟,优化用户体验。
  5. 大规模 API 服务部署:在云端推理服务中节省 40%–85% 的算力成本。
  6. 教育场景:AI 家教更稳定地输出高质量解题路径,避免“跑偏”。

⚙️ 最小可运行 Demo

下面给出一个基于 Hugging Face transformers 库的最小化 Demo,用于模拟 DeepConf 的核心思路:

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

# 使用小模型做演示
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
model.eval()

# 生成带置信度的推理轨迹
def generate_with_confidence(prompt, num_samples=5, max_new_tokens=30, top_k=5):
    inputs = tokenizer(prompt, return_tensors="pt")
    input_ids = inputs["input_ids"]

    traces = []
    for _ in range(num_samples):
        outputs = model.generate(
            input_ids,
            do_sample=True,
            top_k=50,
            max_new_tokens=max_new_tokens,
            return_dict_in_generate=True,
            output_scores=True
        )

        # 解码生成文本
        generated_ids = outputs.sequences[0][len(input_ids[0]):]
        text = tokenizer.decode(generated_ids, skip_special_tokens=True)

        # 简单用 top-k 平均 log 概率计算置信度
        scores = torch.stack(outputs.scores, dim=0)
        probs = torch.nn.functional.softmax(scores, dim=-1)
        top_probs, _ = probs.topk(top_k, dim=-1)
        confidence = -top_probs.log().mean().item()

        traces.append((text, confidence))
    return traces

# 置信度加权投票
def deepconf_voting(traces, keep_ratio=0.5):
    traces_sorted = sorted(traces, key=lambda x: x[1], reverse=True)
    keep_n = max(1, int(len(traces_sorted) * keep_ratio))
    kept = traces_sorted[:keep_n]

    votes = {}
    for text, conf in kept:
        votes[text] = votes.get(text, 0) + conf

    final_answer = max(votes.items(), key=lambda x: x[1])
    return final_answer, kept

if __name__ == "__main__":
    prompt = "Question: What is 2+2? Answer:"
    traces = generate_with_confidence(prompt, num_samples=10)

    print("Generated Traces (text, confidence):")
    for t in traces:
        print(t)

    answer, kept = deepconf_voting(traces, keep_ratio=0.5)
    print("\nFinal Answer (DeepConf-style):", answer)
    print("\nKept High-Confidence Traces:", kept)

这个 demo 会:

  1. 生成多条回答;
  2. 给每条回答计算一个置信度分数;
  3. 保留高置信度轨迹,用加权投票得到最终答案。

换用更强模型(如 Qwen、LLaMA、DeepSeek),就能更接近论文中的效果。


📝 总结

DeepConf 通过 置信度感知的推理,解决了多数投票方法中的两个痛点:

  • 低质量轨迹的干扰;
  • 巨大的计算消耗。

它无需额外训练,直接可用,在多个基准测试中达到了接近满分的准确率,同时节省了高达 85% 的计算开销。无论是学术竞赛解题、代码生成,还是金融/医疗等高风险场景,DeepConf 都展示了极大的应用潜力。