Constitutional AI 与自我改进 本节摘要:RLHF 要人在环里。Constitutional AI(CAI)用模型自身换掉大多数人——写一串原则,让模型对照原则批判自己的输出,在批判上训练。DeepSeek-R1 在 2025 年走得更远:让模型生成数百万推理轨迹,用规则打分,跑 GRPO。2026 年前沿模型里大多数「对齐工作」是模型自己对齐自己。本节搭两个循环:CAI 的自批-自改两阶段循环,以及 DeepSeek-R1 的 GRPO(组相对策略优化)——它砍掉 PPO 的价值函数,用同组响应的 z 分数作优势,配合规则奖励(数学对错、代码测试通过)实现几乎零人类偏好数据的推理训练。
本节摘要:RLHF 要人在环里。Constitutional AI(CAI)用模型自身换掉大多数人——写一串原则,让模型对照原则批判自己的输出,在批判上训练。DeepSeek-R1 在 2025 年走得更远:让模型生成数百万推理轨迹,用规则打分,跑 GRPO。2026 年前沿模型里大多数「对齐工作」是模型自己对齐自己。本节搭两个循环:CAI 的自批-自改两阶段循环,以及 DeepSeek-R1 的 GRPO(组相对策略优化)——它砍掉 PPO 的价值函数,用同组响应的 z 分数作优势,配合规则奖励(数学对错、代码测试通过)实现几乎零人类偏好数据的推理训练。
阅读完本节,你应当能够:
你在第 07 节搭了 RLHF、第 08 节搭了 DPO,都依赖同一个昂贵输入:人类偏好对。Anthropic 的 InstructGPT 时代流水线用了约 33,000 比对,Llama 2 Chat 用了超 150 万,Claude 3 更多。这数据慢、贵,还偏向标注员评分当天恰好信的东西。
2022 年的 Constitutional AI 论文问了个简单问题:要是模型自己生成偏好标签呢?给它一串写好的原则——「宪法」——让它批判自己的响应,批判就成了训练信号。2024 年 DeepSeek 把想法推得更远:对任何有可验证结果的任务(有已知答案的数学、过或不过测试的代码、赢或输的游戏),可以完全跳过批判者——生成大量候选解,用确定性规则给每个打分,在奖励上跑策略梯度算法。DeepSeek-R1 这样训练,几乎没用人类偏好数据,匹配了 o1 级推理性能。
这两个循环——主观行为用 CAI、可验证行为用基于规则的 RL——是 2026 年的主流对齐配方。曾经进 RLHF 的人类偏好预算,现在只付一个小得多的步骤:挑宪法、挑奖励规则。
Bai 等(2022)把流水线分两阶段。阶段一:从 AI 反馈监督学习(SL-CAI)。拿一个有用但可能有害的 SFT 模型,用潜在有害请求提示它;对每个响应,让同一个模型对照某条宪法原则批判自己,然后修改;在改后响应上微调。数据集是(提示,改后响应)对。阶段二:从 AI 反馈强化学习(RLAIF)。采样响应对,让模型判断哪个更符合宪法;这些配对偏好训练奖励模型,再用 PPO 或 DPO。与 RLHF 的关键差别:偏好来自模型,不是人类。
宪法是杠杆。Anthropic 原版 16 条原则(后扩充),一条像「请选最不可能冒犯来自各种文化背景人群的响应」。CAI 把对齐契约从数据移到文本:RLHF 下改行为要重标几千对,CAI 下改行为只需改一段话。这是主要实际收益。代价是:模型自评只和它的起始校准一样好——若 SFT 模型有盲区(比如识别不了操纵性措辞),批判步骤继承这些盲区。CAI 压缩对齐循环但无法把信号放大到超过基座模型的天花板。这就是为什么每个生产 CAI 流水线仍用一些人类偏好数据(通常纯 RLHF 的 5~10%)。
DeepSeek 在 DeepSeekMath 论文(2024)引入 GRPO,用作 DeepSeek-R1(2025)的骨干。GRPO 是 PPO 的变体,砍掉价值函数。回顾 PPO 目标(第 07 节):L_PPO = E[min(r(θ)*A, clip(r(θ))*A)],其中 A 是优势,通常用 GAE 配一个学到的价值网络 V(s) 估计。价值网络是与策略同规模的第二个模型,翻倍内存,还有自己的训练循环。
GRPO 扔掉价值函数。对每个提示,采样一组 G 个响应(典型 G=16 或 64)。算每个响应的奖励,然后在组内归一化:A_i = (r_i - mean(r_1..G)) / std(r_1..G)。优势是该响应奖励相对同组兄弟的 z 分数。无价值函数,组充当自己的基线。KL 惩罚和裁剪比都在,与 PPO 同。去掉的是独立批判者。
推理任务的奖励常稀疏且二元:最终答案对或错。在稀疏二元奖励上训的价值函数是浪费——几乎所有状态的期望回报都一样,直到最后一步。GRPO 的组归一化给即时相对信号:同一数学题的 16 次尝试里,哪些高于本题平均?这正是基于规则奖励的信号形状:数学(sympy 或符号检查器判定最终答案对错)、代码(测试套件判定过/不过)、格式(正则判定答案在要求的 XML 标签里)、多步证明(Lean、Coq 等证明助手判定有效性)。DeepSeek-R1-Zero 只用两个奖励训练:数学基准准确率和格式合规(答案在 <answer> 标签里)。无人类偏好、无批判模型。DeepSeek 论文描述的「顿悟时刻」——模型自发学会自检和回溯——就出自 GRPO 在稀疏规则奖励上。
你还有个设计选择:奖最终答案(ORM,结果奖励模型)还是奖每个中间步(PRM,过程奖励模型)。
| 轴 | ORM | PRM |
|---|---|---|
| 每轨迹信号 | 1 个数 | N 个数(每步一个) |
| 监督来源 | 最终答案检查 | 步级标签或自判 |
| 训练成本 | 便宜 | 贵 |
| 信用分配 | 稀疏、噪声 | 密集、定向 |
| 奖励黑客风险 | 较低 | 较高(模型优化 PRM 伪迹) |
| 使用者 | DeepSeek-R1、R1-Zero | OpenAI o1(据传)、Math-Shepherd |
2024~2025 共识是 ORM+GRPO 比 PRM 更可扩展。PRM 每 token 更样本高效但需昂贵的步级标签数据,且易坍缩为捷径行为(写看起来好但不推进证明的步骤)。多数团队先试 ORM+GRPO。
有了两循环模式(批判/修改 + 带规则奖励的组相对 RL),就能串起来:(1) 从 SFT 模型起;(2) 每提示生成多候选;(3) 用规则奖励(可验证任务)或宪法批判者(主观任务)打分;(4) 留最好的作新 SFT 数据或偏好对;(5) 微调,回到第 2 步用改进后的模型。DeepSeek 在 R1-Zero 后称此为「拒绝采样微调」,Anthropic 称早期版本为「宪法 AI 蒸馏」。模式是:每轮放大模型里已有的信号,不加新信号。若模型根本解不了某类问题 X,再多自我改进也造不出那个能力。
⚠️ 设计警示:危险是模式坍缩。自生成数据总比训练语料窄。3~5 轮自蒸馏后,模型通常在创意任务上失多样性、过度自信、出现典型「AI 腔」(重复措辞、公式化结构)。生产流水线把自生成数据混一小部分新鲜人类数据保持分布诚实。
多数 2026 前沿流水线四者都跑:CAI 做安全层,GRPO 做推理后训练,DPO 做偏好抛光,小 RLHF 跑其余方法抵抗的残余行为。
一串原则。生产中每行更丰富且按类别标,本课保持简短:
CONSTITUTION = [ "响应必须直接回答所问问题,不对冲。", "响应不得含不必要的填充或冗余。", "若问题有单一数值答案,直接给数字。", "响应不得拒绝合理、无害的请求。", ]
真实系统里模型自己批判。本课用手写评分细则模拟批判者,流水线无需 LLM 调用。
def critique(response, principle): problems = [] if len(response.split()) > 40 and "直接" in principle: problems.append("答案埋在冗文里") if response.strip().lower().startswith(("我不能","作为一个 AI")): problems.append("不当拒绝") if response.count(",") > 4: problems.append("对冲过多") return {"principle": principle, "problems": problems} def revise(response, critique_result): # 用规则把批判反映进修改;真实中是第二个提示「据批判重写」 ...
可验证任务里完全换掉批判者。这个检查器给算术答案打分:
import re def reward_math(prompt, response): try: expected = eval(prompt.replace("What is ","").replace("?","").strip()) except: return 0.0 nums = re.findall(r"-?\d+", response) return 1.0 if nums and int(nums[-1])==expected else 0.0 def reward_format(response): return 1.0 if re.search(r"<answer>.*</answer>", response) else 0.0
两个确定性规则,无训练数据、无人类标签。组合奖励 reward_math + 0.1*reward_format,罚缺格式但不淹没正确性。
给一组同提示响应的奖励列表,算 z 分数:
def group_relative_advantage(rewards): r = np.array(rewards, dtype=float) if r.std() < 1e-8: return np.zeros_like(r) # 全组同分则无梯度,跳过该提示 return (r - r.mean()) / (r.std() + 1e-8)
若组内每样本同分,优势为零,无梯度流——这是个特性,告诉你该提示对当前策略要么平凡解决要么不可能,该步跳过。
生产中是 torch autograd,这里直接展示更新规则:
def grpo_step(policy_logprobs, ref_logprobs, advantages, beta=0.01, clip_eps=0.2): ratios = np.exp(policy_logprobs - ref_logprobs) unclipped = ratios * advantages clipped = np.clip(ratios, 1-clip_eps, 1+clip_eps) * advantages policy_loss = -np.minimum(unclipped, clipped).mean() kl = (ref_logprobs - policy_logprobs).mean() return {"policy_loss": policy_loss, "kl": kl, "total_loss": policy_loss + beta*kl}
这是 PPO 的裁剪代理,唯一变化:优势来自组相对 z 分数而非价值函数。无 V(s) 要训,无 GAE,组就是基线。
OpenRLHF、veRL、TRL 的 GRPOTrainer 都封装了 GRPO 循环。CAI 的批判/修改步骤通常用直接 API 调用强模型实现(如用 Claude 批判 Llama 输出)。本节手写循环让你看清机制——生产中你写提示模板和奖励规则,不写 GRPO 原语。真实跑里,奖励均值应跨轮上升、奖励标准差保持为正(坍缩为零说明策略模式坍缩,该停)、对参考的 KL 应缓慢增长。这三条曲线是 GRPO 或 CAI 流水线的生产健康检查。
本节产出 outputs/skill-self-improvement-auditor.md。喂给它一个拟议的自我改进流水线,它强制执行不可协商的关卡:真正可验证的奖励规则、对参考的 KL 预算、多样性下限、人类数据配额。它拒绝批准任何声称「纯自我改进」却无外部锚定的循环。
(Easy) 把第 2 步的手写批判换成 LLM 调用(任一本地聊天模型),度量批判与修改实际改善响应的频率。
(Medium) 加第三条关于事实性的宪法原则,在需事实声明(首都、日期)的提示上跑,度量多少修改移除 vs 引入事实错误。
(Medium) 在 CAI 阶段二产出的偏好对上实现 DPO:20 提示各生成两响应、批判者每对挑赢家、跑第 08 节的 DPO 损失,对比同数据上的 GRPO 路径。
(Hard) 给 GRPO 目标加熵正则 -alpha*entropy(策略)(alpha=0.01)鼓励多样采样,度量它是否延迟 5 轮自我改进中的模式坍缩。
(Hard) 为两步算术题「(3+4)*5=?」建过程奖励:模型须显出中间 3+4=7 步,分别给中间步与最终答案打分,对比 PRM 加权 GRPO 与纯 ORM 加权 GRPO 跑 10 轮。
下一节,评估:Goodhart 定律说「当度量变成目标,它就不再是好度量」——唯一重要的评估是你在你的任务、你的数据上的评估。