JouleBeat · DeepGraph — 案例 002

长时程衰减:少喂历史,
比把历史改对还管用

2026-07-28 · NVIDIA A100 实跑 · 出发点是一篇 2025 年的前沿论文 · 全部物料公开可复现

一句话结果:让模型只看最近 4 步,每步正确率从 35.0% 提到 66.8%,长时程衰减完全消失——而且比"把历史里所有错误都改成正确答案"(现实中做不到的上限)还要好。

从哪篇论文出发,往前走了哪一步

论文《The Illusion of Diminishing Returns: Measuring Long Horizon Execution in LLMs》(arXiv:2509.09677)提出 self-conditioning:当上下文里出现模型自己犯过的错,它后续出错的概率会上升;每步错误率随任务推进而升高,而且把模型做大并不能消除这个效应

我们注意到一件事:在那个设定里,"上下文里有自己的错"和"上下文变长"是绑在一起的,没有被拆开。所以本实验把它们做成一个 2×2,并且只测不需要正确答案、现在就能部署的干预。

任务(纯执行,无推理难度)

给定一张 40 项的字典 k00..k39 → 两位数,模型逐步执行 100 步:每步取出指定 key 的值,加到当前累计和上,只输出新的累计和。每步是否正确可机器判定;唯一的难度是稳定地执行很多步。100 条独立序列,同一模型(Qwen2.5-7B-Instruct),贪心解码。

结果

喂给模型的上下文平均每步正确率95% CI前20步 → 后20步
完整历史(基线)35.0%[33.5, 36.5]71.1% → 11.0%(−60.1)
完整历史 + 显式复述当前状态26.9%[25.9, 27.8]56.8% → 6.8%(−49.9)
只保留最近 4 步66.8%[65.9, 67.8]64.6% → 68.4%(+3.8)
只保留最近 4 步 + 显式复述状态57.6%[56.6, 58.6]60.6% → 57.1%(−3.5)
以下两行需要"上帝视角"(把历史里的值替换成正确答案),现实中做不到,仅作参照上限
完整历史 + 全部改正58.0%[57.1, 58.9]74.7% → 46.1%(−28.6)
最近 4 步 + 全部改正59.5%[58.5, 60.6]62.2% → 58.5%(−3.6)

四个发现

  1. 自我条件化是真的,论文复现了。在完整历史下,把模型自己的错误换成正确值,衰减减轻 +31.5 点(CI [+28.4, +34.6],显著)。
  2. 但它是有条件的:上下文一短,自己的错就不再伤人。在只留 4 步的条件下,做同样的替换只有 −0.2 点(CI [−3.4, +3.0],不显著)。也就是说,self-conditioning 的代价是上下文管理的函数,而不是模型的固有属性
  3. 截断是压倒性的干预。不复述状态时截断带来 +63.9 点(CI [+60.1, +67.8]);截断之后不但不再衰减,反而随步数轻微上升(+3.8,CI [+0.8, +6.9],显著为正)。而且纯截断(66.8%)胜过需要上帝视角的上限条件(58.0%)——能部署的方案打赢了不能部署的参照。
  4. 反直觉的一条:"更多的上下文管理"不等于更好。在已经截断的情况下再加一句显式的状态复述,反而变差 −7.2 点(CI [−10.9, −3.5],显著);而在完整历史下加复述,虽然让衰减变缓(+10.2 点),整体水平却更低(26.9% < 35.0%)。干预要挑对,叠加不一定加分。
对做 agent 系统的人意味着什么:论文说这个问题不会随模型变大而消失——这没错,但它也不需要更大的模型。在这个任务上,把喂进去的历史裁短,单这一项就让同一个模型的每步正确率接近翻倍,并且消除了长时程衰减。延长任务时程的杠杆在 runtime 怎么组织上下文,不在模型规模。

诚实性边界(挑剔审稿人视角,我们自己先说)

全部物料(可复现)

run_horizon.py — 实验代码(预注册假设写在文件头) analyze.py — 修正后的度量、bootstrap、2×2 拆解 horizon_runs.json — 前四个条件的逐步原始输出(100 序列 × 100 步) horizon_v2.json — 后两个条件的逐步原始输出 horizon_final.json — 最终统计(各条件曲线、CI、对比) horizon_stats.json — 被推翻的第一版统计(坏度量,保留以供核对)

English summary

Starting from self-conditioning (arXiv:2509.09677), we disentangled two factors that were confounded in the original setting — presence of the model's own errors in context vs context length — using a 2×2 over deployable interventions only (no oracle). On a 100-step running-sum execution task with Qwen2.5-7B-Instruct (100 sequences, greedy): self-conditioning replicates in long context (removing one's own errors: +31.5 pts of degradation, significant), but vanishes once the context is truncated (−0.2 pts, n.s.). Truncating to the last 4 steps raises mean per-step accuracy from 35.0% to 66.8% and removes degradation entirely (+3.8 pts across the run) — beating the oracle condition (58.0%) that replaces all history with ground truth. Counterintuitively, adding an explicit state restatement hurts when the context is already short (−7.2 pts, significant). Main caveat: the task is Markovian, so truncation discards nothing essential; results may not transfer to tasks requiring long-range recall. All code and per-step raw outputs are published above, including the statistics from our own initially-broken metric.

你也有想验证的方向?一句话提交,免费层直接跑:证据地图、查新 idea、实验方案、初步信号。

提交你的研究方向 →