📊 LLM 自一致性与多数投票的收益边界研究

CISC 7402 — Mathematics for Artificial Intelligence 课程项目 团队规模:2 人 | 展示截止:11月18日 | 当前状态:🟢 实验执行中

🔍 研究问题

大语言模型在单次生成时具有随机性。自一致性(Self-Consistency)通过采样多条推理路径并多数投票来提升准确率,但这并非免费的午餐:采样规模扩大带来计算成本的线性增长,而准确率增益可能边际递减;温度升高虽增加多样性,却可能引入更多错误。

本项目(基于 GSM8K 数据集与 Qwen2.5-7B 模型)旨在量化回答以下三个核心问题:

  1. 主效应:多数投票(T=0.6, N=20)相对贪心解码(Greedy)的真实净增益是多少?
  2. 收益边界:准确率增益随采样次数(N)和温度(T)如何变化?
  3. 置信度代理:早期投票的一致性(c₅)能否有效预测“是否值得继续采样”?

👥 团队分工与进度规划

为了保证在 11 月 18 日前交付可验收、可演示的版本,采用 “管线与统计解耦 + 强制交接点” 双人协作模式。

🧑‍💻 成员 A:实验管线负责人

🧑‍🔬 成员 B:统计分析与写作负责人

🚦 关键里程碑(11.18 D-Day 倒排)


🛠️ 实验设计锁定 (Scope Lock)

为了确保 2 周内交付确定性结果,对实验规模进行了如下锁定(暂定):

维度 设定值 说明
模型 Qwen2.5-7B-Instruct 仅跑 7B,3B 作为后续扩展
数据集 GSM8K (Test 100 题) dev 30 题用于 Pilot 验证
温度 (T) {0.3, 0.6, 0.9} 覆盖低、中、高随机性
采样数 (N) {1, 5, 10, 20} 观测边际递减,去掉 N=3
独立流 2 Streams 满足配对 Bootstrap 需求
总生成量 12,100 次 100×3×2×20 + 100 (Greedy)

📂 代码结构一览

project/
├── config.py              # 全局配置唯一真源(锁定版)
├── common.py              # 提示构造 / 答案抽取 / 采样 / 投票
├── gen.py                 # 正式生成(分片 + 断点续跑)
├── merge.py               # 合并与管线内主统计
├── recompute.py           # B 独立复算(交接点闸门)
├── analyze.py             # C/D 分解 / c5 分层 / Bootstrap
├── plots.py               # 三张核心主图绘制
└── degrade.py             # 超时/失败应急降级脚本

📌 交付标准与验收清单 (11.18)

本项目不仅追求结果,更注重过程的严谨性。11 月 18 日的最终展示与提交必须包含以下四件套:

1. 统计结果 (Statistical Results)

2. 可复现代码仓库 (Reproducible Repo)

3. 最终报告 (Final Report)

4. 演示材料 (Presentation)


🛡️ 核心代码示例:跨成员独立复算 (Double-Check)

为了打破“一人跑实验、一人写报告”的串行反模式,在 D9 设置了强制交接点。成员 B 必须使用独立的 recompute.py 从原始数据重新计算主结果,与成员 A 的管线产出逐项比对(容差 1e-6),一致后方可进入分析阶段。

# recompute.py - 由成员 B 独立编写与执行(不 import 成员 A 的分析代码)
import pandas as pd
import config as C

def verify_main_results():
    # 1. B 独立读取底层数据
    df = pd.read_parquet(C.RAW_PARQUET)
    
    # 2. B 独立计算核心指标
    greedy_acc = df.drop_duplicates("qid").greedy_correct.mean()
    main_df = df[(df.T == C.MAIN_T) & (df.N == C.MAIN_N)]
    main_acc = main_df.correct.mean()
    C_count = int(((~main_df.greedy_correct) & main_df.correct).sum())
    D_count = int((main_df.greedy_correct & (~main_df.correct)).sum())
    
    # 3. 与成员 A 的产出一一比对
    ref = pd.read_csv(C.MAIN_STATS_A).iloc[0]
    checks = {
        "greedy_acc": (greedy_acc, ref.greedy_acc),
        "main_acc":   (main_acc, ref.main_acc),
        "C":          (C_count, int(ref.C)),
        "D":          (D_count, int(ref.D))
    }
    
    # 4. 强制一致性校验(不通过则阻断流水线)
    for k, (v, r) in checks.items():
        assert abs(float(v) - float(r)) < 1e-6, f"{k} 数值不一致!A={r}, B={v}"
    
    print("✅ [交接点 2 通过] 成员 B 独立复算成功,数据一致性校验通过。")

if __name__ == "__main__":
    verify_main_results()

📅 项目时间线 (2-Week Sprint to D-Day)

为了确保在 11.18 前交付高质量的展示版本,采用倒排期管理,将 2 周时间精确到天,并设置了三个“不通过不推进”的硬交接点:


📜 学术规范与声明 (Academic Integrity)

作为课程项目的重要组成部分,将严格遵守学术规范,并在最终报告中作如下声明:

成员贡献声明 (CRediT)

AI 工具使用声明 (AI Usage)

本项目在以下环节使用了生成式 AI 工具辅助:

  1. 环境与样板代码:辅助生成数据加载、绘图模板代码,核心实验逻辑(随机种子设置、投票逻辑)由成员独立设计并逐行审查。
  2. 文本润色:辅助对报告草稿的段落衔接与英文表述提出修改建议,全部研究结论、实验分析与局限性讨论均由团队成员独立完成。
  3. 数据完整性:未在任何环节使用 AI 工具伪造、生成或改写实验数据。所有数值结果均可由仓库内代码与公开的原始记录文件复现。

CISC 7402 - Mathematics for Artificial Intelligence

© 2026 Team Self-Consistency. All Rights Reserved.