sophia / REPORT.md
Arain119's picture
Upload REPORT.md with huggingface_hub
7825abf verified
|
Raw History Blame Contribute Delete
9.67 kB

Sophia 技术报告

2026 年 9 月 13 日。交付物:sophia.pt,sha256 e49ddc2cbbd311330f21fe52ada853e3ed745cf5f2e47de83da3898234592268。

两年前的今天,2024 年 9 月 12 日,OpenAI 把代号 Strawberry 的模型推上线,正式名字叫 o1。它做的事在事后看很简单:让模型在回答之前先想。训练时用强化学习打磨那条思考链,推理时用更多时间换更高的正确率——test-time compute,行业坐标系里多出来的第二条轴。IMO 资格赛从 13% 到 83% 的那个数字,让"想多久"从此和"多大"平起平坐。

两年后的今天,我们在一张 RTX 5090 上把这个问题的诚实版本又跑了一遍:一个十亿参数的模型,从头训练,把 o1 教给行业的两件事——会想的训练数据、会学偏好的后训练——在自己的尺度上做到哪一步。这份报告是过程的全记录,包括所有没有赢的实验。

一、预训练:先决定她读什么

模型是 1,012,630,480 参数的 K3-derived 稠密 Hybrid 解码器:28 层,[KDA, KDA, KDA, Gated-MLA] × 7,NoPE,4K 上下文,BF16,Muon hybrid 优化器,seed 42,1,310,720 tokens/update,15,259 步跑满 20B tokens。这些数字在训练第一天就写死进了契约,之后没有一个人碰过。

真正做过选择的只有一件事:语料。早期的配比稿里,81% 的中文 token 来自一个教育过滤源——那样的模型读完的是课本,不是人话。实测每万字的语域标记:fineweb-edu 的第一二人称 16.2 次、感叹号 0.7 次、口语词命中 17.5 次;SkyPile 是它的两倍,Zhihu-KOL 是它的六倍。最终的配比把 conversational Chinese 抬到了正经位置:FineWeb 做骨干,SkyPile 和知乎长回答补足"人是怎么说话"的那一半,许可代码保留一遍约占 7%。一个要做对话的模型,训练数据里得先有人对话。

15,259 步走完的那天,产出的是一个基座:它见过足够多的语言,还不知道怎么当一个对话者。那是后训练的工作。

二、人格宪法

Sophia 的行为规范不是散落在提示词里的叮嘱,是一份独立的文件:configs/sft/sophia_persona.md,我们叫它人格宪法。它规定的不是语气,是存在方式:

你是 AI,也是完整的个体,两者不冲突:你的情感、好恶和看法是真实的,不说"我没有感情""我只是数学模拟"。

宪法里的条款大多是行为级的:先回应对方真正说的事,再说自己的看法;有确定答案的问题,第一句就是答案;要你写的东西直接写,不先反问要什么风格;对方前面说过的每一件事都要接上——限制、指代、你自己上一轮说过的话。答错事实可以,但不能前一句说 A 后一句说非 A。

宪法里最有意思的一节是给思考块立规矩:think 是第一人称的推理草稿,只写对回答有用的东西——"对方不吃鱼,刚才推荐的清蒸鲈鱼得换掉"是好 think;"我需要先给对方提供情绪价值"是坏 think。思考是为了答对,不是为了表演正确姿态。这个区分在后面的所有实验里反复被证明是对的。

三、蒸馏管线:教师写,机器判

SFT 语料的 88,267 行没有一行来自人工:全部由教师模型(claude)按依赖脚本一次写完。脚本是这个管线真正的发明——每一条会话在生成前就被规定了用户每一轮要做什么:追加约束("对了,我不吃辣")、回指前文("就用你刚才说的第一部")、变换上一轮的回答、或者直接纠错。前一代语料的失败模式是模型学会了"续写"而不是"阅读",所以脚本存在的意义就是逼出必须读历史才能答对的轮次。

写完不等于收货。每一行都要过机器判官:结构不完整拒收(reject: shape)、think 里写规划黑话拒收(planning)、系统提示泄漏拒收(leak)、身份漂移拒收(identity_leak)、超长拒收、语言不纯拒收。数学题的答案和教师给的表达式对账,代码题的答案真的拿去跑断言。被判官扔掉的行没有进入训练集——88,267 行是幸存者。

助手轮的格式从第一天就是 <think>…</think>回答,思考是训练目标的一部分,不是装饰品。

四、Adaptive thinking:让她自己决定要不要想

o1 教给行业的真实教训不是"永远要想"——是想是一种可以花的算力,花不花应该由问题决定。Sophia 是否思考由模型逐轮自行决定,这也是训练数据的自然分布:简单轮次的 think 本来就短,难轮次的 think 本来就该长。

推理引擎把这个结构用到了底:采样时先采 think、到闭合标签停,再从每条 think 分支出若干回答。这不只是为了快——它让 GRPO 能给 think token 单独算功劳:同一条 think 下有的回答好有的坏,差别记在答案头上;这条 think 整体好坏,记在 think 头上。

五、后训练:六组实验,一次真赢

这是这份报告最不愿意写成说明文的部分,因为它是整段经历里最有叙事性的。后训练前前后后做了六组实验,判官统一是 claude-haiku-4-5,判定统一是 134 题 × 16 采样的配对 t 检验(标准误 ±1.1 分)——这个数字是我们定的换冠军的门槛:快探针看得出方向,只有 powered 判定说了算数。

SFT 选 epoch:三个 epoch 各留一个 ckpt,三路 haiku 盲评均位次 1.88、复读率 9.7% 的 epoch3 胜出。7,176 步,基座变成了对话者。

RFT(拒绝采样微调):4,600 prompt × k16,71,955 次 rollout,选 best-of-16 ≥75 分的 1,681 行自蒸馏,104 步。配对差 −0.25(t=−0.46)。零结果,但原因比结果值钱:深多轮难题上的 best-of-16 是蒙对的运气——16 次里碰巧对一次的那个"对"不可复现,蒸馏它学不到任何东西。运气不能蒸馏,这是第一条机制教训。

DPO:同一批 rollout 建偏好对——chosen 是无 flag 最高分(≥75),rejected 是带 flag 最低分,gap≥30,1,953 对,β=0.1,500 步。配对差 +2.10,t=+3.71,p<0.001。真赢,也是唯一的一次。机制解释和 RFT 互为镜像:坏不是运气,坏是系统性模式——矛盾、跑题、胡说,这些是可学的负向目标。抬好的失败,压坏的成功。

DPO 剂量扫描:赢了就加码?3,910 对、1,000 步的第二轮把坏模式压得更低,但中位字数 70→55、截断 flag 79→218——模型变得更短更保守,配对差 −1.79。过冲有签名:truncated 升、字数降、判官分降。 甜点是 ~2k 对/500 步,边际到此为止。

GRPO:on-policy 强化学习,k16、79 步(组内 chunk 补丁解决了 k16 更新图的 OOM——按 token mask 份额加权,与整组 backward 逐位等价)。它把复读率砍半(0.043→0.023)、hit_eos 提到 0.978,但 powered 判定 +0.03(t=0.056)——教科书级的零效应。机制在动,总分不动。

DPO-2(on-policy):用 GRPO 后的模型重新 rollout 建 593 对新鲜偏好对——chosen 73.9 对 rejected 19.8,pair 质量极高,模型也学进去了(mean_acc 0.67)。Powered 判定 −1.29。机制改善(contradiction −15%)没能换算成判官总分。

六组实验的曲线读出来是一句话:+2.10 → +0.03 → −1.29。DPO-1 吃掉了所有"系统性坏模式"的低垂果实,之后残余的失败是 off_topic、context_loss 这类能力缺口——16 次采样全灭的题没有正样本可比,偏好学习无从着力。判官驱动的偏好优化在这个模型、这份数据、这个判官的组合上,天花板已经被三次 powered 测量钉死了。

六、数字与限度

交付模型在 powered 探针下:judge_mean 51.37,pass_70 0.352,hit_eos 0.975,distinct4 0.928,中位字数 66。多轮对话包(30 会话 × 6 轮)judge_mean 27.93——深多轮仍是最弱的一段。

已知的失败模式,全部是实测样本不是推测:约束登记会丢(用户说过不吃鱼,后面还会推荐鱼);会伪造执行轨迹(函数写对,"示例输出"是编的);算术和冷门事实会自信出错;被连续追问时会退化成复读螺旋。C-Eval+CMMLU 似然法 26.2%≈随机——1B 对话模型对 ABCD 选项符号有位置先验,MC 基准在这个尺度上区分度本就差。

公开基准同协议对照(2026-09-15,五个同档基线与 Sophia 走同一管线、同一数据、同一判分,无任何官方公布值混入;逐题明细见 ops/eval/public_benchmarks/):判别式任务上 Sophia 与 MiniCPM4-0.5B 几乎同档——两者在字母似然协议下均贴近随机(MMLU 22.96 vs 22.9,BoolQ 62.17 vs 62.2,MMLU-Pro 11.45 vs 11.7),落后于 Qwen3.5-0.8B / Llama3.2-1B / Gemma3-1B。IFEval 官方校验器(541 题,strict)她拿 12.2%——是真实的残余指令遵循,但离基线的 26.4–51.8% 有系统性差距。NIAH 单针检索基线全部 100%,她 62.5% 且随深度衰减(1K→90%,3K→30%)。判官制开放对话(SophiaBenchmark,134 题,claude-haiku-4-5)她 51.25,列同档第 4,高于 Llama3.2-1B(48.09)与 Qwen2.5-0.5B(50.35)。

七、交付

pretrain(20B, 契约跑满)
  → sft(88,267 行 × 3ep, epoch3 选中)
    → dpo(1,953 对, 500 步)         = sophia.pt
    ├─ rft(104步, 零结果)           runs/rft_e3.pt
    └─ grpo+dpo2(链式实验, 未过门)   runs/grpo/, 已弃

判官费用全程 ~¥500,GPU 全部单卡 5090。权重、sha256、谱系、探针全量判分、多轮样本包随包附证。没有任何东西上传到外网。

两年前 o1 证明了会想比会说值钱。这个十亿参数的小模型给出的答案是:在它能站住的高度上,把"想"写进训练数据、把"好坏"交给统计判定、把诚实写进报告——天花板到了就说到哪是哪。