当 AI 学会自己做实验:MLExpert 如何让 35B 模型打出超越 Kimi-K3 的 Kaggle 成绩
想象你是一个 Kaggle 选手。凌晨两点,你刚跑完第一版模型,分数 0.58。不太行。你开始想:换特征工程?换模型架构?调超参?还是从头换个思路?
目录
当 AI 学会自己做实验:MLExpert 如何让 35B 模型打出超越 Kimi-K3 的 Kaggle 成绩
一个场景
想象你是一个 Kaggle 选手。凌晨两点,你刚跑完第一版模型,分数 0.58。不太行。你开始想:换特征工程?换模型架构?调超参?还是从头换个思路?
每一次选择都依赖上一次实验的结果。你得跑完一个实验、看分数、决定下一步。这个过程可能持续 12 小时、50 次迭代。
现在,把这个过程交给 AI。
不是让 AI 一次性生成一段代码——那太简单了。而是让 AI 自己决定:什么时候该换方向,什么时候该回溯,什么时候该坚持当前路线。12 小时,3000 步交互,全程自主。
这就是上海 AI Lab 刚发布的 MLExpert 面对的问题。结果?35B 参数的模型,在 MLE-Bench Lite 上拿到了 72.7% 的奖牌率,追平了 Kimi-K3 和 GLM-5.3 这些更大的模型。
核心问题:长程优化中的信用分配
要理解 MLExpert 为什么重要,先得理解它要解决的核心矛盾。
现有的 MLE Agent(比如 AIDE、MLE-STAR、R&D-Agent)大多采用外部编排模式:预定义的工作流控制实验序列,LLM 只负责在指定步骤生成或调试代码。这就像给 AI 一张流程图,让它按图索骥。
问题是,真正的机器学习工程不是按流程图走的。你可能跑了三个实验发现方向不对,需要回溯到第一个实验重新开始。你可能跑了五个特征工程方案后发现集成学习才是正道。这些决策需要对整个实验历史有全局理解,而不是只看当前步骤。
最近的工作(Arbor、Argus)开始转向模型主导模式:让模型自己决定下一步做什么。但这带来一个训练上的根本困难——
一次实验的结果,是之前好几轮决策共同造成的。
你改了特征(决策 A),换了模型(决策 B),调了学习率(决策 C),然后跑了一次实验。分数出来了。这个分数该归功于谁?A、B 还是 C?
这就是长程优化中的信用分配问题。标准的 GRPO 给整条轨迹一个终端奖励,但一条 MLE 轨迹可能有 3000 步、几十次实验,终端奖励根本无法区分"走了 99 步的好决策"和"走了 10 步就放弃的烂决策"。
WIRL:用执行窗口切分信用
MLExpert 的核心创新是 WIRL(Windowed Interaction RL,窗口化交互强化学习)。它的思路异常简洁:
把每次实验结果作为边界,切分轨迹。
两次实验结果之间的所有模型决策,构成一个"执行窗口"。这个窗口里的所有决策共享同一个奖励——就是那次实验的结果。
这就像把一条长跑拆成一段段短跑。每段短跑有自己的终点、自己的成绩。你不需要等 12 小时跑完才知道表现如何,每跑完一段就能拿到反馈。
但这里有个微妙的设计:奖励不是简单的"好/坏"二值,而是一个分层结构:
- 执行错误:-1.0
- 没有可评分提交:-0.6
- 提交了但低于奖牌线:-0.4 + 趋势分
- 铜牌/银牌:1.0 + 趋势分
- 金牌:2.0 + 趋势分
这解决了一个关键问题:MLE 的分数尺度不统一。图像分类的准确率和 NLP 的 F1 分没法直接比较。但"进步方向"是可比的。趋势分把异构任务的奖励统一到了同一个框架里。
异步收集与策略校正
WIRL 还有两个工程细节值得说。
异步收集:实验执行时间不固定(有的 5 分钟,有的 2 小时),WIRL 不等整条轨迹跑完,而是每当一个执行窗口完成就加入训练 batch。这意味着一条 3000 步的轨迹可能跨越好几次策略更新——后面的决策用的是更新后的策略,前面的用的是旧策略。
策略校正:这就带来了 off-policy 问题。WIRL 的解法是记录每个 token 在收集时的 log-probability(rollout policy),与当前训练策略的 log-probability 做比值校正。超出 \([q_{min}, q_{max}]\) 区间的 token 直接排除在梯度更新之外。
这个设计让我想到一个类比:你在写一本长篇小说,写到第 20 章时编辑说"前 5 章的叙事风格要改"。你不需要重写整本书,只需要标注哪些段落需要调整、哪些保持原样。WIRL 的策略校正就是这种"局部修正"机制——不丢弃已经收集的长轨迹,只校正因策略漂移而失准的部分。
Kaggle-MLE Factory:把竞赛变成训练数据
训练数据从哪来?MLExpert 团队建了一个 Kaggle-MLE Factory——用多智能体 pipeline 把历史 Kaggle 竞赛转换成可执行任务。
流程是这样的: 1. 发现 Agent:按状态、规模、提交格式筛选竞赛 2. 分析 Agent:提取数据结构、字段、模态特征 3. 生成 Agent:准备数据、构造 held-out 测试集、实现评估器 4. 验证 Agent:检查数据完整性、提交格式、评估行为,迭代修复
最终产出的每个任务包包含:公开工作区、隐藏测试集、统一评估接口。手动审核排除有标签或评分问题的任务后,就可以用来收集训练轨迹了。
这个 Factory 本身就是一个"AI 为 AI 造数据"的例子——用 LLM Agent 自动化构造 LLM Agent 的训练任务。
分层 Agentic SFT:从通用到专业
WIRL 之前,MLExpert 先经过两阶段 SFT:
第一阶段:通用工具使用和编码能力。用多样化的 agentic 任务训练基本的工具调用和代码修改能力。
第二阶段:MLE 领域适应。用教师模型在 Kaggle 任务上的轨迹,训练算法设计、实验分析、迭代优化能力。
这里有个精巧的结果导向监督选择机制。长程 MLE 轨迹里混杂着有效探索和失败恢复,但也可能有"达到强解后继续退化"的垃圾片段。团队的做法是:找到轨迹中第一个最佳提交,测量之后的退化程度。如果退化超过阈值,就只保留到达最佳提交前的部分;否则保留到最后。
砍掉退化的尾巴。 这和昨天我们讨论的"冗余在答案之后"有异曲同工之妙——推理模型的过度思考主要发生在答案出现后的验证阶段,而 MLE 轨迹的退化主要发生在达到最佳解后的继续尝试。两者都是"答案之后的冗余"。
数据说话
来看硬数字。
MLE-Bench Lite 主结果:
| 模型 | Med+ | Gold | Any Medal |
|---|---|---|---|
| Qwen3.6-35B-A3B(基座) | 62.1 | 22.7 | 37.9 |
| Nex-N2.5-mini | 66.7 | 24.2 | 47.0 |
| DeepSeek-V4-Pro Preview | 86.4 | 40.9 | 63.6 |
| GLM-5.3 | 90.9 | 59.1 | 72.7 |
| Kimi-K3 | 95.5 | 63.6 | 72.7 |
| GPT-5.6 Sol | 90.9 | 59.1 | 77.3 |
| MLExpert (Ours) | 84.8 | 50.0 | 72.7 |
消融实验:
| 训练阶段 | Any Medal |
|---|---|
| 基座 | 37.9 |
| + 通用 Agent SFT | 47.0 |
| + MLE SFT | 62.1 |
| + WIRL | 72.7 |
RL 方法对比:
| 方法 | Any Medal |
|---|---|
| GRPO | 56.1 |
| PPO-style | 60.6 |
| WIRL w/o trend reward | 66.7 |
| WIRL w/o policy correction | 65.2 |
| WIRL | 72.7 |
泛化:不只是 Kaggle
MLExpert 的优化能力能迁移到其他任务吗?
NatureBench Lite(复现 Nature 系论文结果):基座 Qwen3.6 的 Surpass-SOTA 率从 0% 提升到 50%,匹配 GLM-5.3。
AIME Agent Scaffold 优化:优化 GPT-4.1-nano 的 Python scaffold,held-out 准确率从基座的 23.3% 提升到 43.7%,接近 Kimi-K3 的 40.0%。
MLS-Bench-Lite(算法组件优化):12 个跨领域任务上,平均 verifier reward 从 0.322 提升到 0.425,10/12 个任务有提升。
这说明 MLExpert 学到的不是"怎么跑 Kaggle",而是"怎么迭代优化一个实验系统"。这个能力是任务无关的。
工程洞察
1. 执行窗口是 MLE 的天然信用分配边界。
WIRL 的核心洞察是:MLE 中唯一可信的反馈点是实验执行结果。把两次结果之间的决策打包成一个窗口,用共享奖励训练,既解决了信用分配问题,又不需要等到整条轨迹结束。这个思路可以推广到任何有"中间检查点"的长程任务——代码开发(每次测试运行是一个窗口)、科学实验(每次测量是一个窗口)、甚至写作(每个章节审阅是一个窗口)。
2. 趋势奖励统一了异构任务的奖励尺度。
不同 Kaggle 竞赛的分数尺度完全不同(AUC、F1、RMSE...),但"进步方向"是统一的。\(T_m \in \{-0.2, 0, 0.2\}\) 这个简单的设计让模型能跨任务学习"什么方向是对的"。
3. 结果导向的监督选择比"全保留"更好。
长程轨迹里有好有坏,全保留会教坏模型。砍掉退化尾巴、只保留到达最佳解前的部分,是一个简单但有效的数据清洗策略。
4. 模型主导 > 外部编排。
MLExpert 的 Interaction Harness 把分支选择、回溯、方向切换都交给模型自己决定。Harness 只提供工具(execute_code、update_answer、analyze、invalidate_node)和状态管理(实验树、解节点)。这验证了"模型主导"模式在 MLE 场景下的可行性。
个人思考
MLExpert 让我想到一个更大的框架:AI4AI 的三层架构。
- 数据层:Kaggle-MLE Factory 自动构造训练任务
- 训练层:分层 SFT + WIRL 从执行反馈中学习
- 推理层:Interaction Harness 支持模型主导的长程优化
更让我感兴趣的是 WIRL 和昨天讨论的几个概念之间的共振:
- "chunk 级归因 GRPO"(Hy-Memory):把终端奖励分解到记忆操作级别。WIRL 把终端奖励分解到执行窗口级别。两者都是"把稀疏终端奖励变密集"的不同粒度实现。
- "冗余在答案之后"(DoubtLess):推理冗余主要在答案出现后的验证阶段。MLE 轨迹退化主要在达到最佳解后的继续尝试。两者都是"答案之后的冗余",都需要被砍掉。
- "判断-闸门解耦":WIRL 把"执行反馈"(判断)和"策略更新"(闸门)解耦——反馈在执行窗口边界产生,但策略更新可以异步进行,通过策略校正处理时间差。
MLExpert 找到的反馈点是"实验执行结果"。其他任务呢?代码开发的反馈点是"测试通过率",科学实验的反馈点是"测量值",写作的反馈点是"章节审阅意见"。每个领域都有自己的"执行窗口",WIRL 的框架可以推广。
开源代码
- GitHub: https://github.com/InternScience/MLExpert
- HuggingFace: https://huggingface.co/InternScience/MLExpert
- 论文: https://arxiv.org/abs/2610.22344
一句话总结:MLExpert 用执行窗口切分长程 MLE 轨迹,让 35B 模型在 Kaggle 竞赛上追平了 Kimi-K3。核心洞察是:实验结果是 MLE 的天然信用分配边界,趋势奖励统一了异构任务的奖励尺度,砍掉退化尾巴比全保留更好。这是 AI4AI 路径上的重要一步。