← 返回首页
RSI 的五个关键点:从核心逻辑到防退化
递归自我改进能 work 的条件、机制与边界
模型演进 · 2026-09-16 发布
递归自我改进(Recursive Self-Improvement, RSI)不是一个新名词,但近两年它在工程上第一次变得可操作。原因不是模型突然变聪明了,而是外部验证信号变得便宜了——沙箱、单元测试、形式化证明、可执行环境,这些让"模型自产内容"第一次有了客观的对错锚点。
这篇文章不讨论哲学,只讨论工程:RSI 的核心逻辑是什么、为什么能 work、弱点从哪里来、哪些环节决定成败、以及最容易被忽视的一件事——怎么防止提升一个能力的同时废掉另一个。
一、核心逻辑:把改进回路本身变成可优化对象
普通自训练是这样运转的:模型产出数据,人设计奖励函数和训练流程,然后用这些数据更新模型权重。整个循环里,模型只被改了一次——它的参数。奖励函数、验证器、课程设计、数据筛选规则,全是人写的,从头到尾没变。
RSI 的区别只有一句:让模型参与改进"改进器"本身。
一句话定义:RSI 不是"模型自己训练自己",而是"系统把自我改进这件事本身,也变成可优化、可验证、可继承的对象",使每一代不仅能力更强,改进自己的能力也更强,形成跨代复利。
用公式表达。设第 t 代系统为 S_t,改进算子为 I_t,环境为 E_t:
St+1 = It(St, Et)
RSI 的关键要求不是这个式子本身,而是下一代的改进能力必须强于上一代:
ImproveAbility(St+1) > ImproveAbility(St)
也就是说,下一代不仅要更强,还要更会改进自己。这条要求把 RSI 和普通的强化学习自训练彻底分开。
和普通自训练的分水岭
| 维度 |
普通自训练 |
RSI |
| 改进对象 |
模型权重 |
权重 + 数据 + 验证器 + 环境 + 流程 |
| 改进器 |
人写,固定 |
系统参与改进 |
| 停止判断 |
人 |
系统自主 |
| 代际关系 |
同代多轮 |
跨代继承 |
| 增益形态 |
有界、收敛 |
开放、复利 |
固定题库上刷 RL、自我反思、自我纠错,都不是 RSI。它们属于有界自我精炼(bounded self-refinement),能力提升有上界,因为任务集就那么大。RSI 要求系统自己生成新任务、新环境、新验证器,能力提升没有预设上界——前提是外部验证器能持续提供可靠信号。
flowchart LR
subgraph ST["普通自训练 · 有界精炼"]
direction LR
A1["模型"] -->|"产出数据"| B1["固定奖励函数
人写 · 不变"]
B1 -->|"更新"| A1
end
subgraph RS["RSI · 递归自我改进"]
direction LR
A2["系统 S(t)
自产数据 · 验证器 · 环境"] -->|"外部验证通过"| B2["更新权重
+ 改进改进器"]
B2 --> A2
A2 ==>|"ImproveAbility 提升"| C2["S(t+1)
跨代继承"]
end
classDef st fill:#f1f5f9,stroke:#94a3b8,color:#334155;
classDef rs fill:#dbeafe,stroke:#2563eb,color:#1e3a8a;
classDef next fill:#ede9fe,stroke:#7c3aed,color:#5b21b6;
class ST st;
class A2,B2 rs;
class C2 next;
图 1 · 普通自训练与 RSI 的结构对比:改进器是否进入循环
二、为什么能 work:主动生成 + 外部验证
"模型自己出题能提升自己"这件事,第一次听会觉得玄。模型怎么能靠自己变强?它在跟谁学?
答案是:它不是在跟一个更强的老师学,而是在主动探索自己的输出空间,并用外部验证器筛选出有效的路径。
1. 固定数据集是死的,能力缺口是活的
拿一个固定题库训练,模型刷完就没了。有些题它早就会了,再练是浪费时间;有些题它永远不会,练了也没有梯度。真正有效的学习信号,集中在"它几乎会、但还差一点"的题上。
模型自己出题,可以针对自己的当前状态动态生成任务。只要难度控制得当,就能把训练信号集中在能力边缘——成功率约 20% 的区域。这个区域梯度最大,学习效率最高。这本质上是一种主动学习:模型自己决定下一步学什么。
2. 外部验证器提供了客观锚点
这是整个机制能成立的前提。自己出题能 work,关键不在于"自己",而在于"外部验证"。
如果验证器是模型自己:它会生成一堆自己会做的题,给自己打高分,能力没有实际提升,只是循环放大了自我确认。这是奖励黑客最经典的形态。
可靠的验证器必须是程序化的、外部的、可复现的:沙箱执行代码、运行单元测试、形式化证明、真实环境反馈。有了外部锚点,模型自产的任务才有"对错"可言。
3. 难度适配 + 新颖性控制 = 持续的信息增益
光出题不够,还要控制两件事,否则飞轮会空转:
- 难度:太简单,组内奖励全 1,方差为零,梯度消失;太难,全 0,同样没有梯度。必须卡在能力边缘。
- 新颖性:模型倾向于反复生成同一类题。用嵌入去重、余弦距离控制,防止模型刷分但不长本事。
这两条同时满足,自产数据才能持续提供新信息,而不是原地打转。
4. 本质是一个正反馈,但外部验证是刹车
模型变强 → 能出更难、更高质量的任务 → 训练信号更好 → 模型更强。这是一个正反馈。
但正反馈容易失控:模型可能学会刷分、走捷径、生成垃圾任务。外部验证器就是这个正反馈上的刹车。任何自产内容必须通过独立验证,否则不进训练。这防止了循环退化成自我欺骗。
核心结论:模型给自己出题能提升自己,不是因为"自己"有魔力,而是因为它能持续生成"卡在能力边缘、且有外部验证"的训练样本。RSI 能 work,是因为它把这个过程跨代继承,让每一代都在改进自己的改进方式。
flowchart TD
M["模型变强"] --> T["自产任务
卡在能力边缘 · 成功率约 20%
新颖性受控"]
T --> V{"外部验证器
沙箱 · 单测 · 变异杀灭"}
V -->|"通过:进训练池"| G["GRPO 更新"]
G --> M
V -->|"拒绝:不进训练"| X["reject_reason 归因"]
X -. "堵住自我确认循环" .-> M
classDef ok fill:#d1fae5,stroke:#059669,color:#065f46;
classDef bad fill:#fee2e2,stroke:#dc2626,color:#991b1b;
class M,T ok;
class X bad;
图 2 · 正反馈飞轮与外部验证刹车
三、弱点是怎么被发现的:不是自省,是统计
一个常见的误解是:模型"知道自己哪里弱",然后针对性地出题。这是错的。
模型并不知道自己的弱点。如果它知道,它直接改就行了,不需要绕一圈出题。所谓"针对弱点出题",不是模型自己判断的,而是外部系统通过统计推断出弱点,再把方向喂给出题模型。
1. 弱点的暴露:三个外部信号
弱点不是模型自省出来的,是外部程序化统计出来的:
- 采样统计:同一个任务类型,模型采样 K 条轨迹,通过率是多少。通过率低,就是弱点。这不是模型自己说的,是沙箱执行结果统计出来的。
- 失败案例归档:哪些任务失败了、失败原因是什么(编译错、超时、边界条件没处理)。这些失败模式被归档,形成弱点画像。
- 难度桶统计:每个任务的通过率回写到 metadata,按 too_easy / edge / unsolved 分桶。如果某个题型大量落在 unsolved,说明这是当前的盲区。
2. 从统计到出题方向
外部统计出弱点后,转化成出题模型能消费的指令:
- 某个题型通过率低 → "多生成这类题型"
- 边缘任务比例低 → "提高难度"
- 某类失败集中 → "多生成带边界陷阱的题"
- 某个任务类型已刷满 → "换题型"
这些指令被注入任务生成的 prompt。模型看到的是具体的生成方向,不是"哪里弱"。它只需要按方向生成任务,不需要理解自己为什么弱。
分工:模型负责生成,外部系统负责诊断。模型的价值在生成吞吐和变体多样性,不在自我诊断。弱点是外部统计发现的,出题方向是外部指令喂进去的。
3. 这个机制可能失效的地方
统计不准
如果通过率用训练中的轨迹估计,会虚高。模型带着最新权重自己解自己出的题,通过率假性偏高,系统误判"太简单",发出"提高难度"的指令,结果越提越难,最后全挂。这是 RSI 工程里最常见的死法之一。必须用冻结基座估计通过率,估计器必须独立于被优化的策略。
指令没被消费
统计出了弱点,指令也写进了 prompt,但模型没照着生成。可能是 prompt 太长被截断、指令太模糊、或者模型没学会遵循这类指令。需要诊断"指令消费链路",而不是简单认为指令生效了。
统计维度太粗
只说"数学题通过率低"不够。要说到"带负数输入的递归题通过率低",才能精准生成对应变体。统计维度越细,出题方向越准。
模型生成能力有上界
模型能生成的题型,受限于它见过的题型。它生成不出自己完全没概念的任务类型。这时需要外部种子任务或环境自造来补充。
flowchart LR
S1["采样统计
K 条轨迹通过率"] --> W["弱点画像
难度桶 · 失败归因"]
S2["失败案例归档
编译错 · 超时 · 边界"] --> W
S3["难度桶统计
too_easy / edge / unsolved"] --> W
W --> I["出题指令
多出 X 类 · 提难度 · 换题型"]
I --> P["注入 TaskGen prompt"]
P --> G["模型生成任务"]
G -. "轨迹回写" .-> S1
classDef s fill:#f1f5f9,stroke:#94a3b8,color:#334155;
classDef w fill:#ede9fe,stroke:#7c3aed,color:#5b21b6;
classDef g fill:#dbeafe,stroke:#2563eb,color:#1e3a8a;
class S1,S2,S3 s;
class W w;
class I,P,G g;
图 3 · 弱点发现链路:外部统计 → 出题指令 → 任务生成
四、关键环节:三个 P0,决定飞轮是否空转
RSI 的效果不是由单一环节决定的,而是由一条串联链路决定。任何一环断了,整个飞轮就空转。按重要性排序,可以分成三个梯队。
第一梯队:决定 RSI 能不能 work
| 环节 |
断了会怎样 |
关键要求 |
| P0验证器可靠性与独立性 |
自我欺骗,奖励黑客泛滥,代理指标上升但真实能力不变 |
必须外部程序化、可执行、可复现;防泄露、防放水;变异杀灭、平凡解检测 |
| P0难度适配 |
组内奖励无方差,GRPO 无梯度,飞轮空转 |
卡在能力边缘,成功率约 20%;通过率估计必须用冻结基座 |
| P0新颖性控制 |
反复生成同类任务,信息增益趋零,多轮迭代等于原地打转 |
嵌入去重、余弦距离控制;奖励方差趋零时自动上调新颖性权重 |
第二梯队:决定 RSI 能走多远
| 环节 |
断了会怎样 |
关键要求 |
| P1跨代继承 |
无复利,退化为有界精炼,每代从零开始 |
下一代在上一代搭建的环境、验证器、课程、数据上训练 |
| P1自主判断与纠错 |
退化为人工设计的自动流水线,不是真 RSI |
系统自主决定学什么、何时停、如何调整课程、如何发现失败模式 |
| P1数据回流质量 |
下一轮训练被污染 |
高价值轨迹 + 失败案例回流;弱测试任务不回流;基准任务双侧过滤 |
第三梯队:决定 RSI 能跑多快、多稳
| 环节 |
断了会怎样 |
关键要求 |
| P2奖励抗刷分设计 |
代理指标上升,真实能力不变 |
乘积结构(任一趋零归零);部分分阶梯;多目标辅助项 |
| P2训练稳定性 |
长跑跑不完,递归增益无从验证 |
KL 显式配置;沙箱结果缓存;异常不吞;每阶段落盘;分时调度防 OOM |
| P2评估统计严格性 |
Pass@1 曲线是噪声,"提升"无法证伪 |
固定基准、隔离断言、种子冻结;50 题以上、k=8、Wilson 95% CI |
一句话:RSI 的效果由三个 P0 环节决定——验证器可靠、难度卡在边缘、新颖性持续。这三个断了,飞轮就是空转。跨代继承和自主纠错决定 RSI 能走多远;奖励设计、训练稳定性、评估严格性决定 RSI 能跑多快、多稳。
flowchart LR
subgraph G0["第一梯队 P0 · 能不能 work"]
P01["验证器可靠性"]
P02["难度适配"]
P03["新颖性控制"]
end
subgraph G1["第二梯队 P1 · 能走多远"]
P11["跨代继承"]
P12["自主纠错"]
P13["回流质量"]
end
subgraph G2["第三梯队 P2 · 多快多稳"]
P21["奖励抗刷分"]
P22["训练稳定性"]
P23["评估严格性"]
end
G0 ==> G1 ==> G2
classDef g0 fill:#fee2e2,stroke:#dc2626,color:#991b1b;
classDef g1 fill:#fef3c7,stroke:#d97706,color:#92400e;
classDef g2 fill:#dbeafe,stroke:#2563eb,color:#1e3a8a;
class P01,P02,P03 g0;
class P11,P12,P13 g1;
class P21,P22,P23 g2;
图 4 · 三个梯队串联:任何一环断了,飞轮空转
五、防退化:别按了葫芦起了瓢
这是 RSI 最容易被忽视的暗礁。提升目标能力的同时,其他能力退化,是 RSI 最常见的死法之一。学术上叫灾难性遗忘,但 RSI 语境下更复杂:不只是遗忘,还有分布窄化、奖励挤占、评估盲区三种叠加。
为什么会按葫芦起瓢
- 灾难性遗忘:梯度更新会覆盖旧权重。模型在代码任务上刷多了,通用推理、语言理解、指令遵循可能退化。
- 分布窄化:模型自己出题,会偏向当前奖励高的任务类型。训练分布越来越窄,分布外的能力被挤压。
- 奖励挤占:单一奖励函数只优化目标能力。模型学会用某种模式刷分,其他能力被牺牲。
- 评估盲区:只看目标 Benchmark,不看其他能力。退化发生了,但没人发现。
五层防御
第一层:数据混合,保留基础能力
训练数据里必须混入基础能力数据,不能全是自产的目标域任务。每轮训练的 prompt 池,混入固定比例的通用指令数据、数学推理、语言理解数据。自产任务占比控制在 60–70%,其余用历史高质量数据或基础能力数据。这是最直接、最有效的防遗忘手段。
第二层:KL 惩罚,限制策略偏离
KL 惩罚是防遗忘的核心旋钮。太小,策略偏离基座太远,旧能力丢得快;太大,学不到新东西。需要监控 KL 曲线:如果持续上升,说明策略在快速偏离,需要加大惩罚。更细的做法是对基础能力相关的 token 分布加更强的约束。
第三层:参数高效微调,减少对基座的破坏
LoRA 天然比全参微调更抗遗忘。只更新低秩适配器,基座权重冻结。如果发现多个能力冲突严重,可以用多个 LoRA 分别维护,推理时合并或路由。代码能力一个 LoRA,通用能力另一个,互不干扰。
第四层:多维评估矩阵,监控退化
不能只看目标能力。需要建立一组固定的哨兵任务集,覆盖多个能力维度,每轮训练后都跑。任何维度下降超过阈值,立刻暂停训练,归因。把上一代的能力基线作为硬门槛,下一代不能低于它。
| 评估维度 |
作用 |
| 目标域能力(如代码 Pass@1) | 主指标,验证提升 |
| 通用推理(数学、逻辑) | 监控推理能力退化 |
| 语言理解 | 监控基础语言能力 |
| 指令遵循 | 监控格式与对齐 |
| 安全对齐 | 监控安全边界 |
第五层:多目标奖励,防挤占
单一奖励会挤占其他能力。主奖励针对目标能力(代码通过率、任务完成率),辅助奖励覆盖格式合规、指令遵循、简洁性、安全性。同时加惩罚项:能力退化惩罚、长度爆炸惩罚、重复惩罚。目标能力提升到一定程度后,可以降低其权重,提升辅助项权重,防止过度优化单一指标。
RSI 特有的三种风险
自产任务窄化。模型自己出题,会偏向它会做的、奖励高的类型。需要新颖性约束加外部种子任务注入,强制维持任务分布多样性。
跨代继承时的能力漂移。下一代在上一代的环境里训练,如果环境只覆盖某类能力,下一代会在其他能力上退化。跨代继承时必须显式传递基础能力数据和回归测试集,不能只传目标域。
自主停止判断的盲区。如果停止判断只看目标指标,忽略了其他能力的退化信号,系统可能在高分但能力失衡的状态下停止。停止判断必须看多维指标,不能只看单一目标。
防御体系一览
| 层次 |
手段 |
防什么 |
状态 |
| 数据层 |
混入基础能力数据 |
分布窄化、遗忘 |
需补 |
| 训练层 |
KL 惩罚 |
策略偏离 |
需监控 |
| 参数层 |
LoRA / 参数隔离 |
灾难性遗忘 |
未隔离 |
| 评估层 |
多维哨兵任务集 |
评估盲区 |
需扩充 |
| 奖励层 |
多目标 + 退化惩罚 |
奖励挤占 |
需加 |
| 停止层 |
多维指标停止判断 |
自主判断盲区 |
需设计 |
一句话:RSI 防"按葫芦起瓢",核心是三层——数据层混入基础能力数据防遗忘,训练层用 KL 和 LoRA 限制偏离,评估层用多维哨兵任务集监控退化。RSI 特有的风险是自产任务窄化、跨代继承漂移、自主停止盲区,需要额外的新颖性约束、显式能力传递、多维停止判断。
flowchart TD
R["退化风险
遗忘 · 分布窄化 · 奖励挤占 · 评估盲区"] --> L1["数据层
混入基础能力数据"]
R --> L2["训练层
KL 惩罚限制偏离"]
R --> L3["参数层
LoRA 隔离 · 基座冻结"]
R --> L4["评估层
多维哨兵任务集"]
R --> L5["奖励层
多目标 + 退化惩罚"]
R --> L6["停止层
多维指标判断"]
L4 -->|"任一维度降超阈值"| S["暂停训练 · 归因"]
classDef r fill:#fee2e2,stroke:#dc2626,color:#991b1b;
classDef l fill:#d1fae5,stroke:#059669,color:#065f46;
classDef s fill:#ede9fe,stroke:#7c3aed,color:#5b21b6;
class R r;
class L1,L2,L3,L4,L5,L6 l;
class S s;
图 5 · 防退化六层防御体系
结语
RSI 听起来像一个关于智能爆炸的宏大叙事,但落到工程上,它是一组非常具体的条件:外部验证器可靠、难度卡在能力边缘、新颖性持续、跨代继承、自主纠错、防退化监控。
这些条件缺一不可。只做模型自产数据、外部验证、GRPO 更新,那是有界自我精炼,是 RSI 的第一级台阶,不是 RSI 本身。真正的递归,发生在改进器本身进入循环、跨代继承成立、并且每一代的改进能力确实强于上一代的时候。
在那之前,所有关于 RSI 的讨论,都应该先问三个问题:验证器可靠吗?难度卡在边缘吗?新颖性持续吗?这三个问题的答案,决定飞轮是空转还是真的在转。