Recursive 自动化 AI 研究系统首秀:让算法自己跑实验,三项基准跑赢人类最优

2026-06-12 17 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:9 分钟

当行业还在争论「AI 能不能自主做研究」时,Recursive 已经把答案跑出来了。6 月 11 日,这家专注递归超智能的公司公开了自动化 AI 研究系统的首批实验结果——在三项基准测试上,全部超越了此前由人类研究员手工调优的最佳成绩。

这不是概念验证,而是完整研究循环的自动化执行:从提出假设、编写代码、跑实验、分析结果,到迭代改进,整个链路由系统自主完成。

自动化研究循环怎么跑

Recursive 的系统设计并不神秘,核心是把研究流程拆成可机器执行的闭环:

  1. 提出想法——系统基于当前知识状态生成候选研究方向。
  2. 实现方案——自动将想法转化为可运行的代码或实验配置。
  3. 执行实验——在受控环境中跑通实验,收集指标。
  4. 分析结果——解读实验数据,判断方向是否值得继续。
  5. 迭代改进——根据分析结果调整假设,回到步骤 1。

关键在于每一步都不需要人类介入决策。人类研究员的角色从「亲自做实验」变成「定义评估标准和约束条件」。

三项基准超越人类最优意味着什么

超越人类最优结果这件事本身值得细看。此前各基准的最好成绩,往往是资深研究员经过多轮手动调参、试错、领域知识注入才达到的。自动化系统在同等条件下跑出更高分数,说明几件事:

  • 搜索效率:系统可以在同一时间窗口内尝试更多组合,覆盖人类因时间精力限制而跳过的路径。 -- 一致性:每次迭代都完整执行,不会因为疲劳或偏见遗漏步骤。
  • 可复现:整个优化路径有完整日志,任何结果都可以回溯到具体决策点。

但也要注意边界:基准测试是受限环境下的指标,真实研究还涉及问题定义、跨领域联想、长期方向判断,这些目前仍需要人类把关。

自己搭一个最小自动化研究循环

Recursive 的完整系统很复杂,但核心思路——让算法自动跑实验闭环——可以用开源工具快速搭一个原型。下面是一个用 Python 实现的最小自动化超参数搜索循环,适合小模型或本地实验:

import itertools
import json
import subprocess
import time
from pathlib import Path

# 1. 定义搜索空间——相当于「提出想法」
search_space = {
    "learning_rate": [1e-4, 3e-4, 1e-3],
    "batch_size": [32, 64],
    "hidden_dim": [128, 256],
}

def generate_configs(space):
    """把搜索空间展开成具体实验配置"""
    keys = list(space.keys())
    values = list(space.values())
    for combo in itertools.product(*values):
        yield dict(zip(keys, combo))

# 2. 执行单次实验——相当于「实现 + 执行」
def run_experiment(config, train_script="train.py"):
    """
    调用外部训练脚本,传入超参配置。
    train.py 需要接受 --config 参数并输出 JSON 格式的指标。
    """
    config_path = Path(f"configs/exp_{hash(str(config))}.json")
    config_path.write_text(json.dumps(config))
    result = subprocess.run(
        ["python", train_script, "--config", str(config_path)],
        capture_output=True, text=True, timeout=600
    )
    if result.returncode != 0:
        return {"status": "failed", "error": result.stderr[:200]}
    return json.loads(result.stdout.strip())

# 3. 分析 + 迭代——相当于「分析结果 + 改进」
def auto_research_loop(space, max_rounds=3, top_k=2):
    """
    自动跑多轮实验,每轮保留 top_k 结果,
    下一轮在最优配置附近细粒度搜索。
    """
    best_results = []
    current_space = space

    for round_idx in range(max_rounds):
        print(f"=== Round {round_idx + 1} ===")
        round_results = []

        for config in generate_configs(current_space):
            metrics = run_experiment(config)
            if metrics.get("status") == "failed":
                continue
            round_results.append((config, metrics))
            print(f"  config={config} -> metric={metrics.get('val_acc', 'N/A')}")

        # 按验证准确率排序,保留 top_k
        round_results.sort(key=lambda x: x[1].get("val_acc", 0), reverse=True)
        best_results.extend(round_results[:top_k])

        # 下一轮:在最优配置附近做细粒度搜索
        if round_results:
            top_config = round_results[0][0]
            current_space = {
                "learning_rate": [top_config["learning_rate"] * f for f in [0.5, 1.0, 2.0]],
                "batch_size": [top_config["batch_size"]],  # 固定已找到的最优值
                "hidden_dim": [top_config["hidden_dim"]],
            }

    # 最终汇报
    best_results.sort(key=lambda x: x[1].get("val_acc", 0), reverse=True)
    print(f"\n=== Best result ===")
    print(f"config={best_results[0][0]}, metrics={best_results[0][1]}")
    return best_results[0]

# 启动自动研究循环
best = auto_research_loop(search_space, max_rounds=3, top_k=2)

配套的 train.py 需要读取配置、训练模型、输出 JSON 指标。一个最小骨架:

import json, argparse, sys
from pathlib import Path

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--config", required=True)
    args = parser.parse_args()

    config = json.loads(Path(args.config).read_text())
    # 这里替换成你的实际训练逻辑
    # 示例:假装训练并返回一个指标
    val_acc = 0.85 + 0.05 * (config["learning_rate"] / 1e-3)

    # 必须输出 JSON 到 stdout,供研究循环解析
    result = {"val_acc": round(val_acc, 4), "train_loss": 0.12}
    print(json.dumps(result))

if __name__ == "__main__":
    main()

运行前确保两点: - train.py 能独立跑通并输出 JSON 到 stdout。 - auto_research_loop 中的 timeout 设为你的实验实际耗时的 2 倍以上。

这个原型只做了超参搜索,但框架已经具备闭环特征:自动生成配置 → 执行 → 分析 → 缩小搜索范围 → 再执行。加上 LLM 生成代码和假设的模块,就能往 Recursive 的方向演进。

从原型到真实系统:还需要什么

上面的最小循环离 Recursive 的系统还有几道坎:

  • 假设生成:当前只是枚举搜索空间,真实系统需要 LLM 根据前轮结果生成新研究方向,包括架构改动、损失函数设计等。
  • 代码生成与验证:自动写训练代码并确保能跑,需要沙箱执行 + 语法/运行时错误自动修复。
  • 长期记忆:跨项目、跨数据集的研究经验积累,避免重复踩坑。
  • 安全约束:防止系统跑出资源爆炸的实验(无限循环、内存泄漏等)。

落地建议

如果你想在团队内尝试自动化研究流程,可以按这个节奏推进:

  1. 先从超参搜索自动化开始——用上面的脚本或 Optuna 等框架,把最耗人力的调参环节交给机器。
  2. 加入 LLM 辅助的假设生成——让模型阅读前轮实验日志,提出下一轮尝试方向,人类审核后再执行。
  3. 逐步放开自主度——当系统在受控场景下表现稳定后,减少人类审核节点,扩大搜索范围。
  4. 始终保留评估权——基准指标由人类定义,系统只负责优化,不负责决定「优化什么」。

Recursive 的结果证明闭环自动化研究已经能产出超越人类手工优化的成绩。但这项技术目前最适用的场景,是目标明确、评估指标清晰的优化类任务。开放式的创造性研究,人类判断力仍然是不可替代的锚点。


相关推荐