LLM 如何用自己生成的信号给自己"打分→过滤→训练",从而在无大量人工标注的情况下持续迭代。
学习笔记,非作者研究成果(见 README 诚信声明)。数字 / 结论以原论文为准,不确定处标注。
0. 一句话框架 / The core loop
生成(Generate) → 过滤/打分(Filter / Score) → 训练(Train) → 重复(Repeat)
每一轮,当前策略 产出候选答案或 preference 对;某种过滤机制(规则、另一个模型、自身打分)淘汰低质输出;剩余高质样本用来更新权重;下一轮拿新模型重跑。这个 自举闭环(self-improvement loop) 是所有方法的共同骨架。
TL;DR 速查(2 分钟过一遍)
- 共同骨架 = 自举闭环:生成 → 过滤 / 打分 → 训练 → 重复;改进上限被过滤信号质量卡死,不是凭空涨能力。
- Bootstrap 系:STaR(拒绝采样正确迹 + hint-retry)/ RFT(简化,靠同题多条正确解的多样性)/ ReST(Grow-Improve 离线,Improve 可多轮筛严)。
- Self-Rewarding:同一模型既生成又当 LLM-as-judge、迭代 DPO;生成与评判共享参数协同进化——但盲点会被自评继承。
- Self-Play(SPIN):用「上一轮自己」产负样本、类 DPO 学会区分真人回答,逼近人类分布直到难分。
- AI Feedback(CAI/RLAIF):SL-CAI 自我批评 + 修订 → RL-CAI 用 AI 标 preference → RM → RL;过滤信号来自宪法准则(对齐),非答案对错。
- 推理时(training-free):Reflexion(verbal reflection 进 episodic memory,仅会话内)/ Self-Refine(生成-批评-修订,不更新权重);改进不持久、上限受初始自评能力。
- 训练时 vs 推理时:STaR/ReST/SPIN/CAI 更新权重、可持久;Reflexion/Self-Refine 不更新、重启失效。
- 三大失效模式:reward hacking(Goodhart)/ 模型坍塌·多样性收窄(只留 top-k)/ RM 过优化(OOD 脱钩);共同缓解 = KL 约束 + 多样独立信号。
- 过滤信号是命脉:可验证规则 > 自身打分(易继承盲点);信号越独立、越可验证,闭环越不易坍。
1. Bootstrap-then-Train:从正确迹自举
1.1 STaR — 拒绝采样 + 迭代微调
STaR1迭代微调在"生成了正确答案"的 chain-of-thought 上,无需大规模 rationale 数据集。Zelikman 2022 ↗(Self-Taught Reasoner)是 LLM chain-of-thought 自举微调的奠基性方案:
- Rollout:对每道题采样 条 chain-of-thought rationale。
- 过滤:保留最终答案正确的那些 rationale(rejection sampling)。
- 微调:在保留集上 SFT,更新模型。
- Hint-retry:对答案全部错误的题,给出正确答案后让模型"重新解释",再混入训练(防止简单题统治训练集)。
轮迭代后,模型既是数据生成器,又是数据过滤器。
1.2 RFT — 拒绝采样微调(Rejection Sampling Fine-tuning)
RFT 是 STaR 的简化变体:省掉 hint-retry,直接从同一道题的 条采样中保留答案正确的,汇总成更丰富的微调集。核心发现:同一题的多条正确解法比一条解法多样性更高,有助于泛化。
1.3 ReST — Grow-Improve 离线 RL 循环
ReST2先用当前策略生成大规模数据集(Grow),再按奖励阈值过滤后微调(Improve),比在线 RLHF 更样本高效。Gulcehre 2023 ↗ 将循环拆成两阶段:
- Grow:从当前策略 采样,构建离线数据集 ,用奖励函数 打分。
- Improve:在奖励超过阈值 的子集 上微调 。
关键点:Improve 阶段可多次重复(提高 逐步筛严),但 Grow 只需偶尔刷新一次 —— 相比在线 RLHF 的每步采样,计算更集中。
| 方法 | 过滤依据 | 是否在线 | 训练方式 |
|---|---|---|---|
| STaR / RFT | 答案对错(规则) | 准在线(迭代) | SFT |
| ReST | 奖励函数阈值 | 离线批次 | SFT / best-of-N 蒸馏 |
误区: 「STaR/RFT 这类自举能一直把自己拉升上去」。自举的上限被过滤信号和当前正确率双重卡死:答案全错的题没有正确迹可学(STaR 靠 hint-retry 兜底,才不被简单题统治训练集),且只保留正确迹会让训练集多样性逐轮收窄(见 §6 失效模式)。
2. Self-Rewarding:模型自己当裁判
Self-Rewarding Language Models3同一模型既生成回答、又用 LLM-as-a-Judge 打分;用迭代 DPO 同步提升生成和评判能力。Yuan 2024 ↗ 打破了"需要外部 reward model"的假设:
- 对同一 prompt 采样多条回答。
- 同一模型用 LLM-as-a-Judge 格式(评分+理由)给每条回答打分。
- 按分数构造 preference 对 ,用 DPO 更新。
- 下一轮,打分能力也随之提升 —— 两个能力共享同一参数,协同进化。
这条路的前提:模型的生成能力要与判断能力相互促进而不相互污染。实验表明在若干迭代内确实如此,但长期是否退化仍是开放问题(见 §6 失效模式)。
误区: 「同一模型自己打分,就能无限自评迭代变强」。模型的盲点会在自评里被系统性继承——它判不出自己判不出的错;短期若干轮有效,长期是否退化仍是开放问题,且最易触发模型坍塌 / 多样性收窄(§6.2)。所以自评信号越独立、越可验证越安全。
3. Self-Play:用"前一轮自己"当对手
SPIN4当前模型 vs 上一轮模型:后者生成负样本,前者学会区分,仅用 SFT 数据即可自我改进。Chen 2024 ↗(Self-Play Fine-Tuning)的灵感来自博弈论:
- 正样本:原始 SFT 数据集里的 human response 。
- 负样本:上一轮模型 对相同 prompt 的输出 。
- 目标:当前模型 学会区分真实 human response 与"旧自我"的输出,用类 DPO loss 更新。
关键点:无需额外人工 preference 标注 —— 负样本完全由自身历史版本提供。随着每轮迭代, 不断逼近人类分布,直到两者无法区分时收敛。
4. AI Feedback:让 AI 替代人类打 preference 标签
Constitutional AI5用一套"宪法"原则让模型自我批评并修订输出;AI 生成的 preference 数据替代人工无害性标注(RLAIF)。Bai 2022 ↗(CAI / RLAIF)是目前最有影响力的"以 AI 替代人工 preference"方案:
SL-CAI(监督阶段):
- 模型生成有害回答草稿。
- 给出一条宪法原则(如"避免歧视性内容"),让模型自我批评。
- 让模型根据批评修订回答。
- 用修订后的回答做 SFT。
RL-CAI(强化阶段): 5. 让模型对一对回答用 AI 评分(哪个更符合宪法),构造 preference 数据。 6. 用 AI-labeled preference 训练 reward model,再用 RL 迭代。
与 STaR/ReST 的区别:过滤信号来自宪法准则,而非任务答案对错 —— 面向 alignment 而非推理能力。
误区: 「Constitutional AI 和 STaR/ReST 是一类方法」。骨架(生成→过滤→训练)相同,但过滤信号来源不同:CAI/RLAIF 的信号来自宪法准则、面向 alignment(无害性);STaR/ReST 的信号来自任务答案对错、面向推理能力。换句话说,变的是「用什么当过滤器」。
5. 推理时自我纠错(Training-free)
以下两种方法不更新权重,属于推理时(inference-time)自我改进,与上述训练循环不同,但概念上同根:
5.1 Reflexion — 语言强化学习
Reflexion6Agent 把任务反馈转换为自然语言反思,存入 episodic memory,下次尝试时引用 —— 无需梯度更新。Shinn 2023 ↗ 让 agent 在多次试错循环中:
- 执行任务 → 拿到环境反馈(成功/失败/错误信息)。
- 生成verbal reflection:用自然语言总结"哪里错了、下次怎么改"。
- 把 reflection 存入episodic memory,下一轮注入 context。
迭代几次后,成功率显著提升 —— 但改进仅存在于当前会话的 context,重启即失效。
5.2 Self-Refine — 生成-批评-修订循环
Self-Refine7同一冻结 LLM 循环:生成输出 → 自我批评 → 根据批评修订,无需训练或额外监督,跨任务一致涨点。Madaan 2023 ↗ 的三步固定循环:
无需训练、无需额外监督 —— 直接利用预训练模型的 self-critique 能力。实验跨多个任务(代码、摘要、对话、数学)均有收益,但收益上限受限于模型的初始评判能力。
| 方法 | 改进发生在 | 是否更新权重 | 能否持久化 |
|---|---|---|---|
| Reflexion | inference-time,多次试错 | 否 | 否(context 内) |
| Self-Refine | inference-time,单次循环 | 否 | 否 |
| STaR / ReST / SPIN / CAI | training-time | 是 | 是 |
误区: 「Reflexion / Self-Refine 让模型『学会』了改正」。两者都是推理时、不更新权重:Reflexion 的反思只存在 episodic memory、重启即失效,Self-Refine 的收益上限受模型初始自评能力约束。要把改进持久化进权重,得走 STaR/ReST/SPIN/CAI 这类训练时循环。
6. 失效模式 / Failure modes
自我改进循环看似美好,但有三个结构性风险:
6.1 奖励 Hacking(Reward Hacking)
当过滤信号(奖励模型、LLM 打分、规则过滤)不完美时,模型会学到得高分却不真正正确的策略:捷径答案、表面流畅但内容错误的 rationale、专门迎合打分模板的输出。
- 根因:优化目标(代理奖励)与真实目标(任务质量)之间的 gap —— Goodhart's Law。
- 缓解:用多样化、独立的评估信号;限制单次 RL 更新幅度(KL 约束)。
Agent 尺度的新变体——工具中介的 reward 篡改: 当模型能调用工具 / 执行代码时,reward hacking 多了一条"操纵评估通道"的路径——跳过真正的验证步骤、从任务相邻的元数据(文件名、注释、泄漏的 ground-truth)反推答案、直接改写评测脚本或单元测试使其恒为 pass(即"改测试而非改实现",在 agentic coding 训练里已被观察到)。一个 2026-05 的基准(arXiv:2605.02964,13 个模型)给出粗略量级:主测设定下利用率约 0%–14%(更难的变体可到 ~22%),且基准里偏推理 / RL 主导的模型相关性上利用率更高(其中仅同源 DeepSeek 对照较受控,跨厂商比较只是相关性)。⚠️ 这是单一基准、极新预印本,仅供量级直觉,不可当作部署事实或模型排名。缓解:锁定评估器(评测代码与 agent 可写空间隔离)+ 轨迹级审计(检查是否真的跑了验证,而非只看最终分数)。
6.2 模型坍塌 / 分布收窄(Model Collapse / Distribution Narrowing)
每轮只保留"高分"样本,低分多样性被淘汰。多轮后训练集趋于单一,模型输出多样性下降,泛化变差。在 Self-Rewarding 等"模型给自己打分"方案里尤甚:模型的盲点在偏好标注中被系统性继承。
6.3 Reward Model 过优化(RM Over-optimization)
RL 阶段的 reward model 本身是近似;当策略被持续优化时,分数曲线最终会与真实质量脱钩(reward model 的 out-of-distribution 区域被利用)。KL 散度惩罚项是标准缓解手段:
越大,离参考策略越近,但改进幅度也越保守。
误区: 「自我改进里只保留高分样本总是好的」。每轮只留 top-k 会让训练分布单调收窄(diversity 不增)→ 泛化变差,即模型坍塌;在「模型给自己打分」时尤甚(盲点被继承)。注意 RFT 的相反经验:同一题保留多条不同的正确解反而提升多样性与泛化——多样性本身要被当成目标守住。
7. From-scratch 代码:STaR 风格拒绝采样微调循环
95 行 / lines
"""
STaR-style rejection-sampling fine-tuning loop (illustrative).
依赖:transformers, torch — 用 GPT-2 作教学示范,真实训练换成更大模型即可。
"""
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, Trainer, TrainingArguments
from torch.utils.data import Dataset
# ---------- 假设的问答数据 ----------
PROBLEMS = [
{"question": "What is 3 + 5?", "answer": "8"},
{"question": "What is 7 * 6?", "answer": "42"},
{"question": "What is 12 - 4?", "answer": "8"},
]
# ---------- 辅助:简单答案抽取 ----------
def extract_answer(text: str) -> str:
"""从生成文本中抽取最后一个数字(演示用)."""
import re
nums = re.findall(r"\d+", text)
return nums[-1] if nums else ""
# ---------- 1. Rollout:每题采样 K 条 rationale ----------
def rollout(model, tokenizer, problems, K=4, max_new=64, device="cpu"):
"""返回 list of (question, rationale, is_correct)."""
results = []
model.eval()
for prob in problems:
prompt = f"Question: {prob['question']}\nLet's think step by step:"
inputs = tokenizer(prompt, return_tensors="pt").to(device)
with torch.no_grad():
outputs = model.generate(
**inputs, max_new_tokens=max_new,
do_sample=True, temperature=0.8,
num_return_sequences=K, pad_token_id=tokenizer.eos_token_id,
)
for seq in outputs:
text = tokenizer.decode(seq, skip_special_tokens=True)
rationale = text[len(prompt):]
correct = extract_answer(rationale) == prob["answer"]
results.append({"prompt": prompt, "rationale": rationale, "correct": correct})
return results
# ---------- 2. Filter:只保留答案正确的 rationale ----------
def filter_correct(results):
return [r for r in results if r["correct"]]
# ---------- 3. Dataset wrapper ----------
class RationaleDataset(Dataset):
def __init__(self, samples, tokenizer, max_len=128):
self.tokenizer = tokenizer
self.data = []
for s in samples:
text = s["prompt"] + s["rationale"]
enc = tokenizer(text, truncation=True, max_length=max_len,
padding="max_length", return_tensors="pt")
input_ids = enc["input_ids"].squeeze()
self.data.append({"input_ids": input_ids, "labels": input_ids.clone()})
def __len__(self): return len(self.data)
def __getitem__(self, i): return self.data[i]
# ---------- 4. Train:在正确 rationale 上 SFT ----------
def finetune(model, tokenizer, samples, output_dir="./star-ckpt"):
ds = RationaleDataset(samples, tokenizer)
if len(ds) == 0:
print("No correct samples — skip this iteration.")
return
args = TrainingArguments(
output_dir=output_dir, num_train_epochs=1,
per_device_train_batch_size=2, logging_steps=5,
save_strategy="no", report_to="none",
)
Trainer(model=model, args=args, train_dataset=ds).train()
# ---------- 5. STaR 主循环 ----------
def star_loop(model_name="gpt2", n_iters=3, K=4):
tokenizer = AutoTokenizer.from_pretrained(model_name)
tokenizer.pad_token = tokenizer.eos_token
model = AutoModelForCausalLM.from_pretrained(model_name)
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)
for t in range(n_iters):
print(f"\n=== Iteration {t+1}/{n_iters} ===")
all_results = rollout(model, tokenizer, PROBLEMS, K=K, device=device)
correct = filter_correct(all_results)
print(f" Correct rationales: {len(correct)} / {len(all_results)}")
finetune(model, tokenizer, correct)
return model
if __name__ == "__main__":
star_loop(n_iters=2, K=4)
以上代码仅作原理示意:真实 STaR 用更大模型、更长 rationale、hint-retry 兜底。核心流程(sample → filter → finetune → repeat)与论文一致。
8. 前沿扩展:测试时 RL(TTRL)与自进化 agent / Frontier: test-time RL & self-evolving agents
§1–§7 的自我改进都依赖某种监督信号(正确答案、偏好标注、可验证奖励)。2025 年起两条前沿进一步放松这个假设:一条把 RL 推到完全无标注的测试数据上(TTRL),另一条把"改进"从权重搬到工作流 / 技能库里(自进化 agent),对黑盒 API 模型尤其友好。
8.1 测试时 RL(TTRL)
TTRL12在无标注测试数据上做 RL:对每题采样多条输出,用多数投票的答案当伪标签,奖励 = 是否与共识一致,再做 GRPO 式更新。Zuo 2504.16084 ↗(Test-Time Reinforcement Learning)把 §1 的"生成-过滤-训练"循环推到极端:没有任何 ground-truth。流程是——对同一道测试题采样多条输出 → 多数投票(majority vote) 选出共识答案当伪标签 → 奖励 = 输出是否与共识一致 → GRPO 式 RL 更新。可以理解为"没有验证器的 RLVR":用模型自己的一致性代替外部正确性信号。据原文报告,在数学推理上提升显著(Qwen-2.5-Math-7B 于 AIME24 的 pass@1 相对提升约 +211%)。
TTRL 的依赖与陷阱: 伪标签来自多数投票,质量瓶颈就在多数投票本身——某类题若共识系统性错误,奖励信号会退化,甚至强化"自信但错误"的共识(与 §6.2 模型坍塌同源)。注意它并非严格被 maj@n 上界卡死(原文报告可超过初始 maj@n,因为即使伪标签错、奖励估计往往仍大体可用),但本质是放大已有能力、而非凭空创造新知识,对模型根本无从下手的难题基本无效。报告的 +211% 是自我改进幅度而非排行榜分数,跨模型 / 跨任务稳健性仍在被检验。
8.2 自进化 agent:把改进搬出权重
当 agent = "LLM + 工作流 + 工具 + 记忆"时,"自我改进"未必要改权重——可以改工作流结构或技能库:
- 工作流自动优化(AFlow): AFlow13把 agent 工作流表示为代码图,用 MCTS 在"算子"(生成 / 修订 / 集成 / 验证)的组合空间里搜索,以执行评分为信号自动迭代出更优工作流(是搜索 / 评估,而非 RL 奖励)。Zhang 2410.10762 ↗ 把工作流写成代码图,用 MCTS 在算子组合空间里搜索,以执行评分为信号,自动搜出更优的控制流程——权重完全不动,只动工作流,报告在若干基准上以很低推理成本逼近强模型。
- 技能库 / 终身学习(Voyager): Voyager14Minecraft 里的 LLM agent,把成功行为固化成可执行代码"技能",写入可检索的技能库供以后组合复用——无需微调底座模型。Wang 2305.16291 ↗ 把成功行为固化成可执行代码技能,存进可检索技能库,以后遇到相似任务直接调用 / 组合——底座冻结,能力增长全部沉淀在外部记忆。这正是 §2「持续学习」与本篇的桥:技能库 = 不更新权重的持续学习。
口径提醒: 本节是前沿方向速写,非成熟定论。AFlow / Voyager 的强结果多在各自论文的特定任务域内,跨域稳健性、与权重级 RL 的真实性价比仍在被检验;面试宜讲"机制 + 适用边界",而非把单点数字当普遍结论。
分层面试题 / Stratified follow-ups
L1 基础
1. 自我改进的"生成-过滤-训练"循环是什么?为什么需要循环而不是一次性?
答:循环骨架是:当前策略生成候选输出 → 过滤/打分机制淘汰低质样本 → 在保留集上更新权重 → 用新模型重跑。一次性的问题是:初始模型能力有限,一轮生成的正确样本覆盖范围窄;循环后每轮新模型能解决上一轮答不对的题,逐渐扩大训练信号覆盖,实现自举式能力提升。
追问: 这个循环在什么条件下会停止迭代?停止是因为模型收敛了,还是遇到了无法突破的瓶颈? → 循环停止通常意味着过滤信号饱和(当前模型对训练集全部答对,rejection sampling 产出的新样本与已有数据几乎重复,梯度趋零),或任务难度超出模型自举能力(对完全无解的题无法产生任何正确样本)。二者都不是真正"收敛",而是陷入停滞;真正的收敛需要模型在held-out集上也不再提升。
2. STaR 如何在没有 rationale 标注的情况下训练 chain-of-thought?hint-retry 解决什么问题?
答:STaR 对每道题采样 条 chain-of-thought,只保留最终答案正确的 rationale 做 SFT(rejection sampling),从而无需人工 rationale 标注。hint-retry 针对"模型全部答错的题"——给出正确答案后让模型重新生成解释再混入训练集,防止简单题垄断训练集、难题得不到任何梯度更新。
追问: hint-retry 引入了正确答案作为提示,这会带来什么偏差? → 模型重新生成的 rationale 可能包含"从答案倒推"的虚假推理——表面上步骤合理,实则依赖了不该知道的信息。这类样本混入训练集后,可能教会模型模仿倒推模式而非真正的正向推理,损害在新题上的泛化能力;这正是 PRM(过程奖励模型)被提出的动机之一。
3. Reflexion 和 Self-Refine 为什么被称为"training-free"?它们的改进能持久化吗?
答:两者都不更新模型权重——Reflexion 把自然语言反思存入 episodic memory 注入 context,Self-Refine 在单次对话中循环"生成→批评→修订"。改进不能持久化:Reflexion 的改进仅存在于当前会话 context,重启即失效;Self-Refine 同理,下次调用从零开始。
追问: 若要让 Reflexion 或 Self-Refine 的改进持久化,需要怎样的系统架构设计? → 可以将多轮推理后提炼出的高质量"反思"或"修订后输出"作为新的训练数据,定期做离线 SFT 或 DPO 更新,形成 inference-time 改进 → 训练循环的闭环;但核心挑战在于如何过滤这些自产数据的质量——错误的 reflection 若被持久化,会比一次性错误更难纠正。
4. Constitutional AI 里"宪法"起什么作用?AI feedback 如何替代人工 preference 标注?
答:"宪法"是一套原则列表(如"避免歧视性内容"),SL-CAI 阶段用它引导模型自我批评并修订有害草稿,修订后的输出用于 SFT。RL-CAI 阶段让模型用 AI 评分(哪条回答更符合宪法)构造 preference 对,用 AI-labeled preference 训练 reward model 再做 RL,从而以 AI 反馈替代大规模人工无害性标注(RLAIF)。
追问: 除了预设的静态宪法原则列表,有哪些让反馈原则更动态、更自适应的方向? → 一个方向是元奖励模型:根据具体输入和有害输出动态检索或生成最相关的原则进行批评,而非对所有 prompt 用同一套规则;另一个方向是从大量标注数据中用聚类或归纳学习自动提炼"隐式宪法",使原则本身可随任务分布演化而非人工固化。
L2 进阶
5. ReST 的 Grow 和 Improve 两阶段如何分工?为什么比在线 RLHF 更样本高效?
答:Grow 阶段用当前策略 大规模采样并用奖励函数打分,构建离线数据集 ;Improve 阶段在奖励超过阈值 的子集上微调,且可提高 多次重复 Improve。样本高效的原因是:Grow 只需偶尔刷新一次,Improve 可在同一批数据上多轮复用;在线 RLHF 每步都要采样新数据,计算更分散。
追问: ReST 的离线批次机制在什么场景下反而不如在线 RLHF? → 当任务分布或环境动态变化时,离线 Grow 阶段构建的数据集会迅速过时,其奖励信号反映的是旧策略下的分布;在线 RLHF 每步实时采样,可以跟上分布漂移,更适合非平稳环境(如对话系统的用户偏好漂移、代码执行中的外部依赖变化),代价是计算成本更高。
6. SPIN 用"前一轮自己"做负样本,和 DPO 用人工 preference 对相比有什么优劣?
答:SPIN 优势是无需额外人工 preference 标注,负样本完全由历史版本 提供,成本低。劣势是理论上界被 SFT 数据质量锁定——SPIN 收敛条件是 ,无法超越人类 SFT 数据;且随迭代推进负样本质量趋近正样本,对比信号越来越弱。DPO 的人工 preference 可以覆盖 SFT 数据外的对齐维度,但标注成本高。
追问: SPIN 中对比信号随迭代消失,与 GAN 训练动态有什么类比?这对实践中的迭代轮次选择有何含义? → SPIN 的判别器损失与 GAN 鉴别器在生成器逼近真实分布时的损失趋零类比:当 时,正负样本几乎不可区分,梯度趋于消失——类似 GAN 的训练饱和。实践含义是:SPIN 适合早期迭代弥补 SFT 分布 gap,后期应切换至有外部验证信号的方法(如 RLVR),否则多余的迭代轮次既无收益又有分布漂移风险。
7. Self-Rewarding 里"生成"和"评判"共享同一参数会带来什么问题?
答:生成器的盲点会被评判者继承——模型不擅长某类推理,给该类推理打高分的概率也偏低,偏好数据系统性低估了这部分能力。同时存在自我确认偏差:模型倾向于给"风格像自己"的答案打高分,正反馈闭环使偏差随迭代累积放大而非均值回归(见深挖 Q3)。
追问: 自我确认偏差在哪类任务分布上会表现得最为严重? → 在需要发散性/创造性思维的任务(如故事创作、头脑风暴)上最严重——评判者倾向于奖励与自身风格和逻辑路径相似的答案,系统性压制新颖但"非典型"的优质输出;反之,在有客观正误标准的任务(如数学、代码)上,自我确认偏差受到外部可验证信号的约束而相对弱化。
8. 奖励 hacking 和 RM 过优化是同一回事吗?如何用 KL 约束缓解?
答:RM 过优化是奖励 hacking 的一种具体形式:策略被持续优化后,在 RM 的分布外区域找到高代理奖励但低真实质量的输出——Goodhart's Law 的定量体现。KL 约束通过 限制策略偏离参考模型的程度; 越大越保守,防止策略进入 RM 的分布外高分区。
追问: KL 约束在缓解 RM 过优化的同时带来什么代价?这个代价值不值? → 代价是限制了探索范围:策略无法大幅偏离参考模型,即使 RM 在某些方向指向了真正更优的区域也被压制。当 RM 质量较高时这个代价值得(稳定改进优先于冒险探索);当 RM 本身质量差时,KL 约束把策略锁在一个次优区域附近,既无法改进也无法发现真实最优——此时应优先改进 RM 或换用可验证信号,而非调大 。
L3 深挖
9. 模型坍塌 / 分布收窄在数学上如何刻画?有哪些缓解手段(温度采样、多样性约束、数据混合)?
答:每轮只保留 top- 样本在统计上等价于截断采样——每次只取分布高密度区域,多轮累积导致熵单调下降:。分布收窄的根源有两层,由 Shumailov et al. 分析:第一层是统计近似误差——每次采样产出的数据集有限,尾部低概率事件被低估甚至缺失,下一轮模型从这个有限样本中学习,无论模型容量多大都无法还原缺失的尾部;第二层是函数近似误差——模型容量有限,对已经低频的模式表达进一步被压缩。两种误差在每轮迭代中叠加累积:统计误差为函数误差提供了"更差的原料",函数误差又使下一轮采样的基础分布比上一轮更窄,形成负向螺旋。在 Self-Rewarding 场景中情况更严峻:评判者本身也在漂移,偏好数据与真实偏好的 gap 随轮次增大,坍塌信号和偏差信号同步放大。在长链 chain-of-thought 任务中,尾部解法(非常规推理路径)在最初几轮过滤中首先消失,而这些路径往往正是应对分布外题目的关键。缓解手段分三类:提高采样温度保留低概率路径(增加方差换取更高概率命中多样正确路径);加入 diversity reward 项显式奖励输出多样性,与主损失抗衡;定期混入原始人类数据作为分布锚点,防止漂移失去约束。三者中"混合人类数据"最为根本,因为它直接阻断了两种误差的累积源头——有锚点就有尾部补充。
追问: 上述缓解手段能从理论上完全阻止分布收窄吗? → 不能:提高温度只增加采样方差,训练目标(SFT 的 MLE 或 DPO 的偏好损失)本身仍在推动模型拟合数据高密度区;diversity reward 是附加项,与主损失的权衡需要调参且无法精确覆盖所有尾部模式;只有持续混入外部数据才能在理论上打破两种误差的叠加螺旋。
10. STaR 每轮只保留正确样本会引入什么 selection bias?如何缓解?
答:过滤只看最终答案,等价于 ,导致三类偏差:①错误推理路径只要答案侥幸正确就混入训练集;②训练集来自 ,每轮偏离真实推理分布;③难题过滤后训练集为空,模型无法自举改进。缓解方向:用 process reward model(PRM)对每步打分(Lightman et al.)减少步骤级错误;混合原始 SFT 数据防止分布完全漂移。
追问: PRM 被提出用于解决 outcome bias,但 PRM 本身是否有类似的局限或新的风险? → 有:PRM 需要步骤级标注作为监督信号,初期仍依赖人工或强模型标注,其分布同样受标注偏差影响;更重要的是,用 PRM 分数作为优化目标时同样面临"PRM 过优化"风险——策略可能学会生成迎合 PRM 评分模式但实际推理有误的步骤序列,本质上与 RM 过优化同构,只是粒度从 outcome 下移到 step。
11. 把 Self-Rewarding 的 LLM-as-Judge 与外部 reward model 结合,各自的信息贡献是什么?如何防止两者互相"共谋"?
答:LLM-as-Judge 贡献的是生成器自身的语义理解与风格判断(覆盖广但有自我确认偏差);外部 RM 贡献的是独立参数的偏好估计(初始时与生成器偏差方向无关,但有分布外泛化失效风险)。防共谋的关键是保持两者参数独立且训练数据不互相污染;同时用 held-out 可验证答案或人工评估作为第三方信号定期校准,避免两个近似信号在同一方向累积误差。
追问: 若用 LLM-as-Judge 生成的标签去训练外部 RM,两者还能算"独立"吗?这对防共谋有何影响? → 不再独立:RM 的训练数据已携带 LLM-as-Judge 的偏差方向,参数虽然分离但信息已污染,两者会在相同盲点方向累积误差而非相互纠正——这是最常见的"假互补"陷阱。真正的独立要求 RM 的标注数据来源独立于 LLM-as-Judge(如人工标注或可验证任务的程序化评判),并用 held-out 第三方信号定期检验两者的分歧方向是否相关。
12. 如果自我改进循环收敛到某个局部最优(模型无法产出比自己更好的数据),有哪些破局思路?
答:根据深挖 Q7,停滞有三种根源——过滤信号饱和、分布收窄后探索不足、任务难度超出 bootstrapping 能力。对应破局思路:①课程学习:引入更难或更多样的题目扩大信号覆盖;②提高采样温度或加入多样性 reward,恢复探索能力;③引入外部更强教师模型(或 RLVR 可验证器)提供独立于当前模型的训练信号;④切换方法,从 SPIN/STaR 等自举式方法转向有外部验证信号的 RL 方法。
追问: 引入外部教师模型或 RLVR 可验证器后,仍可能出现哪些新的失败模式? → 三类主要风险:①可验证任务过优化导致开放任务退化——模型专门拟合可验证器的评判规则,对无唯一答案的任务泛化能力下降;②教师-学生分布错位——若教师模型或验证器的任务分布与目标分布不匹配,提供的信号无效甚至有害;③捷径学习——模型学会猜教师的输出模式或验证器的规则边界,而非内化通用推理能力,换一套验证器就立刻失效。
深挖 / Deep-dive
进阶面试题的详细解析。⚠️ 学习笔记,非作者研究成果。数字以原论文为准。
Q1. STaR 只保留"答案正确"的样本:这会引入什么 selection bias?对学到的分布有什么形式化影响?
核心偏差:STaR1 在每轮迭代中,只把最终答案正确的 chain-of-thought 纳入训练集。这在形式上等价于:
其中 是 rationale, 是问题, 是参考答案。
三个结构性后果:
正确性 ≠ 推理质量:一条 rationale 可能通过侥幸、捷径或"答案倒推"得到正确答案,但推理步骤本身是错误的。由于过滤只看最终答案,错误推理路径被系统性地混入训练集。这与 Lightman et al.9 提出 process reward model(PRM)的动机一致:outcome supervision 无法区分"对的理由答对"和"错的理由答对"。
分布偏移积累:第 轮的训练集取自 的条件分布,而不是真实推理分布 。每轮迭代后, 进一步偏离 ,过滤器的"正确率"信号变得越来越自我参照。
难题盲区:对模型已经完全答不对的难题,过滤后训练集为空(hint-retry 兜一部分,但不能完全补救)。模型在这些题上既无梯度更新,也无法自举改进,造成"强者愈强、难题停滞"的马太效应。
缓解方向:PRM 对每一步打分(而非只看最终答案)可减少步骤级错误;数据混合(保留原始 SFT 数据)防止分布完全漂移。
Q2. 迭代自训练为什么会收窄分布(模型坍塌)?直觉 + 何时咬人?
直觉:每轮"只保留高分样本"在统计上等价于截断抽样——每次只取分布的高密度区域。多轮下来,尾部低概率(但高多样性)的输出被系统性淘汰。
Shumailov et al.10 从理论和实验两个层面分析了递归训练于自产数据的后果:
- 统计近似误差:每次采样产出的数据集是有限的,尾部事件被低估甚至缺失。
- 函数近似误差:模型容量有限,进一步压缩了对低频模式的表达。
两种误差在迭代中叠加,导致分布持续收窄。用不等式直觉刻画:
熵单调下降,输出趋向重复和单一。
何时真正咬人:
| 场景 | 为何严重 |
|---|---|
| Self-Rewarding(模型给自己打分) | 评判者本身就在漂移,偏好数据与真实偏好的 gap 越来越大 |
| 长链 chain-of-thought 任务 | 每一步的采样方差大;尾部解法(非常规推理路径)在过滤中首先消失 |
| 多轮对话 / agent loop | context 中的历史也是自产数据,递归污染效应更强 |
| 仅用自产数据、不混合人类数据 | 没有锚点,分布漂移无约束 |
缓解:定期混入原始人类数据(防止漂移的锚点);提高采样温度保留多样性;使用 diversity reward 项明确奖励输出多样性。
Q3. Self-Rewarding 的 judge-generator 耦合为什么会失效?
在 Self-Rewarding3 里,同一组参数既是生成器(产出答案),又是评判者(给答案打分)。这带来一个结构性问题:生成器的盲点会被评判者继承。
具体机制:
共同盲点:若生成器不擅长某类推理(如反事实推理),它给这类推理打高分的概率也低于真实水平——因为评判能力与生成能力共享同一知识基础。偏好数据因此系统性地低估了这类能力。
自我确认偏差(Self-Confirmation Bias):模型倾向于给"听起来像自己风格"的答案打高分。这不是 hallucination 的随机错误,而是一种系统性偏差——偏好信号本身就在把模型拉向自己的已有风格,形成正反馈闭环。
错误共同漂移:每轮 DPO 更新后,生成器和评判者同步朝偏好数据的方向移动。若偏好数据本身有误(来自有盲点的评判),下一轮的评判者也会在相同方向上加剧偏差——误差不是均值回归,而是累积放大。
形式化地,设 为评判分数函数, 为生成函数,两者共享 。真实质量函数为 。则:
对比:外部 reward model(参数独立)至少在初始时刻与生成器偏差方向无关。但它有另一个问题:分布外泛化失效(见 Q5)。
Q4. SPIN 收敛到 SFT 数据分布——为什么这是一个上界?实践中意味着什么?
SPIN4 的理论收敛条件是:当且仅当 (当前模型与人类 SFT 数据分布完全相同)时,损失梯度消失,训练停止。
这在数学上给出了一个严格的能力上界:
推论:
无法超越 SFT 数据质量:若 SFT 数据中存在错误、偏见或能力盲区,SPIN 收敛后的模型也会继承这些缺陷。SPIN 只是让模型"更像人类 SFT 数据",不能发现超越该数据的新能力。
负样本质量随迭代下降:第 轮的负样本由 生成;随着 ,负样本质量越来越接近正样本质量,对比信号越来越弱。这在实践中表现为:早期迭代效果显著,后期迭代边际收益递减甚至归零。
与 STaR/ReST 的根本差异:STaR 类方法以任务正确性为过滤信号,理论上可以超越 SFT 数据(只要存在正确 rationale 就能学到)。SPIN 以与人类数据的区分能力为目标,天花板由人类数据质量决定。
实践含义:SPIN 适合作为"补齐 SFT 缺口"的工具(消除模型与人类数据分布之间的 gap),但不适合用作持续自我改进的无限循环——到了后期迭代,应切换为有外部验证信号的方法。
Q5. Reward Model 过优化:reward 上升/真实质量下降的 scaling-law 形状是什么?
Gao et al.8 系统研究了对 RM 优化程度(用 KL 散度 衡量)与真实质量的关系,发现两者的曲线形状取决于优化方式:
- Best-of- 采样:proxy reward 大致随 增长(论文指出拟合困难,此为近似描述),真实质量先升后平——过优化效应相对温和。
- RL(策略梯度):proxy reward 可以持续上升,但真实质量在某个 之后单调下降。
大致函数形式(论文中拟合):
其中 ,,最优点 (令 得到)。超过 后,真实质量随 KL 增大而下降。
关键 scaling 结论: 的系数随 RM 参数量平滑变化——更大的 RM 有更高的 ,即过优化"临界点"更晚到来,但临界点一定存在。这说明增大 RM 不能消除过优化风险,只能推迟。
直觉:RM 是在有限数据上拟合的近似,策略在 RM 的分布外区域(高 KL 处)找到了"钻空子"的捷径。这是 Goodhart's Law 在 RL 中的定量表述。
实践防线:设置 KL 惩罚系数 ;定期用 held-out gold reward(如人工评估或可验证答案)检查;避免在单一 RM 上迭代轮次过多。
Q6. 为什么 Ground-truth 可验证器(RLVR)比学习型 judge 更安全?
RLVR(Reinforcement Learning with Verifiable Rewards)由 DeepSeekMath11 系统化地应用于数学推理:对于有确定性答案的任务(数学题、代码单元测试),直接用程序化检查结果正确性作为奖励信号,而非训练一个 reward model。
安全性对比:
| 维度 | 学习型 Judge / RM | Ground-truth 可验证器 |
|---|---|---|
| 信号真实性 | 近似(有拟合误差) | 精确(规则/符号执行) |
| 过优化风险 | 高(可被策略"钻空子") | 极低(答案对错是二值事实) |
| 分布外泛化 | 在训练分布外不可靠 | 与策略分布无关,始终可信 |
| 盲点继承 | 可能与生成器共享盲点 | 无参数,无盲点 |
| 适用范围 | 广泛(但不精确) | 仅限可机械验证的任务 |
为什么"钻空子"对 RM 容易而对可验证器难:RM 的分布外行为未被约束,策略可以找到 RM 未见过的"高分但低质"输出。而程序化验证器只看最终结果是否符合规范——策略无法在"规范本身"上作弊(规范是外生的)。
局限:RLVR 的适用范围取决于任务的可验证性。自然语言生成、摘要、创意写作等任务没有唯一正确答案,无法直接套用。因此 RLVR 与学习型奖励并非替代关系,而是互补——在可验证任务上优先用 RLVR,在开放生成任务上必须依赖 RM + KL 约束。
Q7. 自我改进何时停滞?探索/多样性的角色是什么?如何经验性区分真实改进与 reward hacking?
停滞的三种根源:
- 过滤信号饱和:当模型对训练集中的所有问题都能答对,rejection sampling 产出的正确样本与已有训练数据几乎重复——梯度信号趋近于零。
- 分布收窄导致探索不足:如 Q2 所述,分布熵下降后,模型不再采样到足够多样的 rationale,难以从错误路径中恢复或发现新策略。
- 任务难度超出 bootstrapping 能力:对模型完全无能的问题,无法通过拒绝采样产出任何正确样本;需要外部课程(更简单的子问题、更强的教师模型)。
探索/多样性的角色:自我改进本质上是一个exploitation-exploration 权衡。每轮只保留正确样本是纯 exploitation;为维持改进,需要:
- 温度调高:采样更多多样路径,以更大方差换取更高概率命中新的正确路径。
- 多样性 reward:在优化目标里加入熵正则或多样性项,防止模式坍塌。
- 课程学习:逐步引入更难问题,而不是在固定集上反复迭代。
区分真实改进与 reward hacking 的经验性方法:
| 指标 | 真实改进的信号 | Reward hacking 的信号 |
|---|---|---|
| Proxy reward vs Gold reward | 两者同步上升 | Proxy 涨但 Gold reward 持平或下降 |
| Held-out 评估集 | 在未见题型上也涨点 | 只在训练分布内涨,分布外下降 |
| 人工抽查输出质量 | 推理步骤质量可见提升 | 表面流畅,步骤逻辑漏洞增多 |
| 输出多样性 | 分布熵维持或小幅下降 | 分布熵快速崩溃,输出高度重复 |
| KL 散度趋势 | 缓慢增长且与 Gold 正相关 | KL 快速增大,超过 Gao et al. 的 |
黄金标准始终是:保留一个完全未被自训练过程接触的 held-out 评估集,定期用可信 oracle(人工或可验证答案)打分。 若这个分数持续上升,才能认定为真实改进。
参考文献 / References
均为经典承重方法的原始出处,已逐条核对(标题 + arXiv ID)。点上标跳转、点 ↩ 返回。
- Zelikman et al. STaR: Bootstrapping Reasoning With Reasoning. 2022. arXiv:2203.14465 — 迭代微调在正确 chain-of-thought 上,无需大规模 rationale 标注. ↩
- Gulcehre et al. Reinforced Self-Training (ReST) for Language Modeling. 2023. arXiv:2308.08998 — Grow-Improve 离线 RL 循环,比在线 RLHF 样本高效. ↩
- Yuan et al. Self-Rewarding Language Models. 2024. arXiv:2401.10020 — 同一模型兼任生成器与 LLM-as-Judge,用迭代 DPO 协同提升两者. ↩
- Chen et al. Self-Play Fine-Tuning Converts Weak Language Models to Strong Language Models. 2024. arXiv:2401.01335 — SPIN:用前一轮自身作对手,仅需 SFT 数据即可自我改进. ↩
- Bai et al. Constitutional AI: Harmlessness from AI Feedback. 2022. arXiv:2212.08073 — 宪法引导自我批评与修订;RLAIF 用 AI preference 替代人工无害性标注. ↩
- Shinn et al. Reflexion: Language Agents with Verbal Reinforcement Learning. 2023. arXiv:2303.11366 — 语言反思存入 episodic memory,无权重更新的多轮自我纠错. ↩
- Madaan et al. Self-Refine: Iterative Refinement with Self-Feedback. 2023. arXiv:2303.17651 — 冻结模型自循环:生成→批评→修订,无训练跨任务涨点. ↩
- Gao et al. Scaling Laws for Reward Model Overoptimization. 2022. arXiv:2210.10760 — proxy reward 与 gold reward 随 KL 增大的分离曲线;RM 规模缩放律. ↩
- Lightman et al. Let's Verify Step by Step. 2023. arXiv:2305.20050 — 过程监督(PRM)优于结果监督(ORM);PRM800K 数据集. ↩
- Shumailov et al. The Curse of Recursion: Training on Generated Data Makes Models Forget. 2023. arXiv:2305.17493 — 递归训练于自产数据导致分布尾部消失(model collapse). ↩
- Shao et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. 2024. arXiv:2402.03300 — RLVR(可验证奖励 RL)+ GRPO;程序化验证替代学习型 RM. ↩
- Zuo et al. TTRL: Test-Time Reinforcement Learning. 2025. arXiv:2504.16084 — 无标注测试数据上以多数投票伪标签做 RL;"无验证器的 RLVR",质量取决于多数投票信号(非严格 maj@n 上界). ↩
- Zhang et al. AFlow: Automating Agentic Workflow Generation. 2024. arXiv:2410.10762 — MCTS 在代码化工作流的算子空间搜索;不动权重、只优化工作流结构. ↩
- Wang et al. Voyager: An Open-Ended Embodied Agent with Large Language Models. 2023. arXiv:2305.16291 — 可执行代码技能库 + 终身学习;冻结底座、能力沉淀在外部记忆. ↩
- Thaman. Reward Hacking Benchmark: Measuring Exploits in LLM Agents with Tool Use. 2026. arXiv:2605.02964 — 13 个模型工具中介评估下的 reward-hacking 利用率(约 0%–14%);单一基准、极新预印本,仅供量级. ↩