DAY 27 / PHASE 3 · FRONTIER

Synthetic Data & Self-Improvement

Distillation Pipeline · Constitutional/RLAIF · Rejection Sampling · Model Collapse

2026-06-10 · BigCat

self-improvement 的天花板不是模型多聪明,是你的 verifier 多可靠。

// WHY THIS MATTERS

2026 年的现实:高质量人类数据已接近见底,而你要微调的小模型、要 eval 的 agent、要对齐的私有助手,全都缺数据。合成数据不再是「没钱标注时的妥协」,而是前沿训练的主力——同时也是最容易翻车的一环。本期不讲「合成数据是什么」,讲四件工程事:怎么用强模型蒸馏出能用的数据集(过滤才是杠杆,不是生成)、怎么把 Constitutional AI 的 critique-revise 回路落到你自己的 inference 里、什么任务能靠 rejection sampling 真正自我改进、以及为什么递归吃自己的产出会让模型悄悄塌缩。贯穿全篇的一条主线:self-improvement 的根基是「验证比生成便宜」这个不对称——不对称在哪里,自改进就只能在哪里发生。

// 01

数据蒸馏:生成是廉价的,过滤才是杠杆

论断:合成数据集的质量上限由 filter 决定,不由 generator 决定;多生成 10×、狠删 90% 几乎总是对的。

背景与原理

蒸馏(distillation)的工程形态很朴素:用强 teacher(Opus 级)大批量生成「指令 + 回答」对,喂给 student(小模型 / 你自己微调的模型)做 SFT。Self-Instruct(Wang 2022)证明了模型能 bootstrap 自己的指令数据,但它真正的贡献不是「会生成」,而是那套过滤管线:去重(与已有任务 ROUGE 相似度过高就丢)、去退化(太短 / 太长 / 重复 / 含「作为 AI」套话)、去无效(无法验证或自相矛盾)。生成 token 几乎免费,质量却几乎全部来自删除。一个反复被验证的经验:1 万条精选样本胜过 10 万条平均样本——后者会把 teacher 的口水话和盲区一起灌进 student。

实战示例

# 蒸馏 = 过量生成 + 激进过滤。下面是过滤层的骨架
from anthropic import Anthropic
client = Anthropic()

def gen(seed):  # teacher 高 temperature 多产
    r = client.messages.create(model="claude-opus-4-8",
        max_tokens=1024, temperature=1.0,
        messages=[{"role":"user",
          "content":f"参考种子任务,造一个新的{{指令,回答}},回答要可被检验:\n{seed}"}])
    return r.content[0].text

def keep(item, pool):
    if len(item.answer) < 40: return False        # 去退化
    if rouge_l(item.instr, pool) > 0.7: return False  # 去重
    if "作为一个AI" in item.answer: return False    # 去套话
    return llm_judge(item) >= 4               # 1-5 分,<4 全删

raw = [gen(s) for s in seeds for _ in range(10)]  # 过量 10×
data = [x for x in raw if keep(x, raw)]            # 常剩 <15%
失败模式:teacher 的系统性盲区会被无声继承——它在某类问题上一贯错,过滤器(同源模型)也判不出来,于是错误被高置信度地写进 student。解法:过滤用异构信号(不同家族的 judge 模型、可执行验证、人审抽样),别让 generator 和 filter 是同一个脑子。
进阶资源 · Self-Instruct, arXiv 2212.10560 · 源码 github · yizhongw/self-instruct
// 02

Constitutional AI / RLAIF:把人类偏好换成可复用的 critique-revise 回路

论断:CAI 的核心不是「训练」,是一条 critique→revise 的算子;你今天就能在 inference 层用它,不需要任何 RL。

背景与原理

Constitutional AI(Bai 2022)把「人类标注哪个回答更好」换成「让模型按一组成文原则自己批评、自己改」:先让模型产草稿,再让它对照 constitution 列出违反点,最后据此 revise——SFT 阶段就用这些 revised 样本,RL 阶段(RLAIF)用 AI 而非人类来标注偏好对。对工程师而言,最值钱的洞见是:critique-revise 是一个可独立复用的推理算子,和 Self-Refine(Madaan 2023)同构。你不必训练,就能在调用链里插入一轮自我批评,把「价值观 / 风格 / 安全约束」从 prompt 里的祈使句变成一条显式的、可审计的检查步。它的本质是把约束从「希望模型记住」升级为「强制模型逐条核对」。

实战示例

# inference-time CAI:一条原则 = 一个 critique-revise 算子
PRINCIPLE = "回答必须给出可执行步骤,禁止空泛建议;涉及风险须显式标注"

draft    = ask(f"{task}")
critique = ask(f"按这条原则审查下面回答,只列出违反点(无则写 NONE):\n"
               f"原则:{PRINCIPLE}\n回答:{draft}")
final    = draft if "NONE" in critique else \
           ask(f"据批评改写,只输出改后回答:\n回答:{draft}\n批评:{critique}")

把多条原则串成 pipeline,就是一个微型 constitution。批量跑过一个数据集,revised 输出还能直接当 SFT 语料——这正是 CAI 的 SL 阶段。

失败模式:self-critique 不可靠的根因是 backward rationalization(Day 5 讲过)——模型倾向为自己的草稿找理由而非挑错,critique 步可能给出「看起来在批评、实则维持原判」的空转。两个对策:(1) critique 与 generation 用不同的角色 prompt 甚至不同模型,制造对抗;(2) 让 critique 输出结构化逐条勾选而非自由文本,逼它对每条原则给 yes/no。开放式「你觉得这答案好吗」几乎必然得到 yes。
进阶资源 · Constitutional AI, arXiv 2212.08073 / Anthropic blog · RLAIF, arXiv 2309.00267
// 03

可验证的自改进:rejection sampling / STaR

论断:模型能不能靠自己变强,只取决于一件事——你有没有一个比 generator 更便宜、更可靠的 verifier。

背景与原理

真正能「自举」的自改进,公式极简:过量采样 → 用 verifier 筛出对的 → 只在对的上微调 → 重复。Rejection Sampling Fine-tuning 是一轮版,STaR(Zelikman 2022)是迭代版——还多一招 rationalization:答错的题,把正确答案塞回去让模型补一条「能推到该答案的过程」,再收进训练集。关键不在采样,在 verifier 的存在与不对称性:数学有标准答案、代码能跑单测、SQL 能比对结果——这些任务里「判对错」远比「生成解」便宜,于是循环成立、能持续爬坡。没有这种不对称的任务(开放写作、主观判断),这个循环会原地放大噪声而非信号。o1 / R1 这代推理模型的训练,本质就是把这条循环工业化。

┌──────────── 可验证自改进循环 (STaR / RFT) ────────────┐ │ │ │ problems ──▶ ┌─ Generator ─┐ k 个候选 (temp 高) │ │ ▲ └──────┬──────┘ │ │ │ ▼ │ │ │ ┌─ Verifier ─┐ ← 必须便宜 & 可靠 │ │ │ │ 单测/答案/ │ (这是整个循环的根) │ │ │ │ 执行结果 │ │ │ │ └─────┬──────┘ │ │ │ pass ✓ │ fail ✗ │ │ │ ▼ └─▶ rationalize (给答案 │ │ │ keep & dedup 补过程) ──┐ │ │ │ ▼ ▼ │ │ └──── SFT on 通过的 (q, solution) ◀─────┘ │ │ ↑ 模型变强 → 下一轮通过率更高 │ └───────────────────────────────────────────────────────┘ ⚠ 没有可靠 verifier → 循环放大噪声,越练越偏

实战示例

# 代码任务的一轮 rejection sampling:verifier = 跑单测
def harvest(q):
    cands = [solve(q, temperature=1.0) for _ in range(16)]  # 过量
    good  = [c for c in cands if run_tests(c, q.tests)]  # verifier
    return dedup(good)[:2]            # 每题最多留 2 条,防分布失衡

sft_set = [(q, sol) for q in tasks for sol in harvest(q)]
# 没通过的题 → rationalize:给出 gold answer 让模型补 reasoning,再验
失败模式:verifier 有漏洞时,循环会专门学会钻漏洞(reward hacking)——单测覆盖不全,模型就生成「恰好过测但实际错」的解,并把这种解越练越多。第二个坑:只留通过的样本会让分布越收越窄(全是模型本就擅长的题),难题永远学不到。对策:单测要含对抗样例,且按难度分层采样,别让简单题淹没数据集。
进阶资源 · STaR: Bootstrapping Reasoning, arXiv 2203.14465 · V-STaR(训练独立 verifier), arXiv 2402.06457
// 04

Model Collapse:递归吃自己产出会悄悄塌缩

论断:合成数据的危险不是变笨,是分布尾部无声消失——benchmark 还在涨,多样性已经死了。

背景与原理

Shumailov 等(《The Curse of Recursion》2023;Nature 2024)证明:当一代模型主要用上一代的产出训练、如此递归,分布的尾部会逐代消失——罕见但真实的模式先丢,最终收敛到平庸的高频中心。可怕之处在于它隐蔽:常见任务的 benchmark 分数可能还在涨,而长尾覆盖、风格多样性、罕见知识已经塌掉,等你发现时损失常已不可逆。注意区分两种情形:§3 那种有 verifier 过滤的自改进不是 collapse(信号被保留、噪声被删);collapse 来自无差别地把生成数据当真实数据递归喂回。前沿模型大量用合成数据仍变强,靠的正是「真实数据锚定 + 验证过滤 + 累积而非替换」这三道闸。

实战示例

# 三道防 collapse 的闸门
# 1) 锚定:真实数据始终占主导,合成只做增量
mix = 0.7 * real + 0.3 * synthetic

# 2) 累积而非替换:保留历代真实语料,别用新合成覆盖旧真实
corpus = real_v1 + real_v2 + synthetic_filtered   # append, not replace

# 3) 监控分布而非只看准确率——多样性掉了,准确率可能没掉
assert distinct_n(outputs, n=3) > THRESH   # n-gram 多样性
assert tail_coverage(outputs) > THRESH     # 罕见类别召回

「累积而非替换」是 Gerstgrasser 等 2024 的关键结论:只要每轮叠加真实数据而非用合成数据顶替,collapse 可被打破。eval 也要换指标——别只盯准确率,盯多样性和长尾覆盖。

失败模式:用单一指标(准确率 / 单个 benchmark)监控合成数据训练,是给自己埋雷——它对 collapse 几乎不敏感。等用户开始抱怨「回答越来越千篇一律 / 套路化」,分布坍缩往往已经发生且难逆转。
进阶资源 · AI models collapse…, Nature 2024 / arXiv 2305.17493 · Is Collapse Inevitable?(累积破解), arXiv 2404.01413

// 综合实战 · 给你的私有任务造一个自改进数据飞轮

把四点串成一个周末项目:为某个你真在用的窄任务(如「把会议纪要转成结构化待办」)造一个能自我增益的小数据集,亲手摸一遍每道闸。

  1. 蒸馏(§1):用 Opus 过量生成 200 条「输入→输出」,激进过滤(去重 + 结构校验 + judge≥4),目标只留 ~30 条精品。
  2. Critique 算子(§2):写 2-3 条 constitution(如「待办必须含负责人和截止日」),对每条样本跑 critique-revise,用异构 judge避免自我背书。
  3. Verifier(§3):给这个任务定义一个程序化检验——输出能否被 JSON schema 解析、字段是否齐全。能写出 verifier 的那部分,才适合自改进;写不出的部分,老实留人审。
  4. 防 collapse(§4):第二轮扩充时,真实样本(你手改的)始终占 ≥60%,且叠加而非替换;监控 distinct-3 多样性,掉了就停。
  5. 结账:对比「只蒸馏一轮」vs「蒸馏+verifier 迭代两轮」的 student 效果。你会亲身体会到——能进步的部分恰好是你能验证的部分,一分不多。

做完这套,你以后看任何「自改进 / 合成数据」叙事都会先问一句:verifier 在哪?真实数据锚在哪?没有这两样,剩下的都是会塌的空中楼阁。

// ENGLISH GLOSSARY

Distillation
用强 teacher 生成数据训练弱 student,把能力「蒸」进小模型。质量上限由过滤决定。
Self-Instruct
让模型 bootstrap 自己的指令数据,核心在去重 / 去退化 / 去无效的过滤管线。
Constitutional AI (CAI)
用一组成文原则让模型自我批评、自我修改,替代人类偏好标注。
RLAIF
RL from AI Feedback——偏好对由 AI 而非人类标注,与 RLHF 效果相近。
Self-Refine
同一模型自生成→自反馈→自改写的迭代算子,无需训练,与 CAI 的 SL 阶段同构。
Rejection Sampling (RFT)
过量采样后用 verifier 只留正确解做 SFT。一轮版的自改进。
STaR
Self-Taught Reasoner,迭代版 RFT,并对答错题做 rationalization 补回。
Verifier
判定输出对错的检验器(单测 / 标准答案 / 执行结果)。自改进的根基。
Model Collapse
递归用生成数据训练导致分布尾部逐代消失、收敛到平庸中心。
Asymmetry of Verification
验证比生成便宜的性质。不对称在哪,自改进就能在哪发生。

// 深入思考

RLAIF 用 AI 标注偏好,那这些偏好最初从哪来?会不会只是把 base model 的偏见洗成「对齐」的样子?
会,这是真实风险。AI 的偏好根源仍是预训练数据 + 那条 constitution 的写法,RLAIF 只是把它放大、固化成奖励信号。如果 base model 在某价值维度上系统性偏斜,RLAIF 会自洽地强化它而非纠正。所以 CAI 的杠杆点其实是 constitution 的文本质量与覆盖面,而非「AI 来标注」本身。实践上需要外部锚(人类红队、异构模型审计)来戳破自洽循环,否则就是用模型的偏见给模型打分。
STaR 只在有 ground-truth verifier 的任务(数学/代码)work。开放式生成(写作、策略)能自改进吗?
能,但要把「验证」换形态。开放任务没有唯一答案,却常有可检验的必要条件:写作可验「是否含指定要点 / 是否违反风格 spec / 是否自相矛盾」,策略可验「是否满足约束 / 是否被对抗者反驳倒」。把单点 verifier 换成一组 weaker checks 的组合,或用 debate / 对抗者制造可判胜负的信号,循环就能部分成立。但信号越弱越主观,爬坡越慢、越容易 reward hacking——这正是开放任务自改进远难于数学的根因。
前沿模型大量用合成数据却越来越强,和「model collapse」是否矛盾?
不矛盾,因为它们做的不是 collapse 实验里的设置。Collapse 来自无差别递归:把上一代未过滤的产出当真实数据替换喂回。前沿做法相反——合成数据先过 verifier / reward model 筛选(删噪声、保信号),且真实数据始终锚定、累积而非替换。换句话说,collapse 是「闭环吃自己」,可控自改进是「带外部信号的半开环」。决定走向哪边的,正是有没有那个独立于 generator 的验证/真实锚。
蒸馏出的 student 有可能超过 teacher 吗?什么条件下?
能,且已是常态。三种机制:(1) best-of-N 蒸馏——teacher 采样 N 次只把最好的留给 student,student 学的是 teacher 的「上界」而非平均;(2) verifier 过滤——只蒸正确解,等于让 student 学一个比 teacher 期望更优的分布;(3) 多 teacher / 多源融合。共同点:student 学的不是 teacher 本身,而是「teacher + 一个筛选/搜索过程」的产物。纯模仿(学 teacher 的平均输出)则超不过 teacher,这也是为什么 §1 强调过滤是杠杆。
「验证比生成便宜」是自改进的根基——哪些重要任务恰恰不满足这个不对称?
当验证和生成一样难、甚至更难时不对称消失:(1) 长期后果类——投资决策、医疗方案,要等很久才知对错,无法即时验;(2) 主观价值类——什么是好文学、好设计,验证本身就需要同等智能且无共识;(3) 验证需要执行不可逆动作——只能在现实里跑一次。这些领域里 self-improvement 退化为「自说自话」,必须引入人类、时间、或真实世界反馈作为外部 verifier。识别一个任务属不属于此类,是决定该不该上自改进飞轮的第一道判断。

// 延伸阅读