本文所有数字均来自本人单卡实测原始 CSV / 日志见文末仓库。文中结论如无特别说明均为seed 42 单种子下的观察不构成统计意义上的证明。0. 为什么先写结论这篇文章记录我做的一次完整的小模型后训练实验在一张 RTX 4060 Laptop8GB 显存上对 Qwen3-0.6B 做了 QLoRA SFT 和 DPO共五组配置、约 15 GPU 小时。实验是预注册式的——先写好假设和全部配置再跑数据。结果是我预注册的两个方向性假设一个被数据明确否定一个接近零效应。这两个失败本身比任何调参成功都更值得写。下面按实验设计的顺序复盘。1. 实验设计先预注册再跑数据在跑任何训练之前我先把以下内容写成了实验报告的固定结构可复现实验的预注册实践源自临床试验的 habitRQ1数据规模固定训练设置下从 2K 增加到 8K 经过答案校验的 SFT 数据能否稳定改善域内与域外数学推理RQ2负样本难度在相同 SFT 起点上DPO 的收益是否依赖偏好负样本的难度预注册假设8K SFT 的平均准确率高于 2K困难负样本 DPO 优于随机负样本 DPO。固定死的配置要点项值基座Qwen/Qwen3-0.6B训练方法QLoRA4-bit NF4 双重量化bf16 计算LoRAr16, alpha32, dropout0.05target q/k/v/o/gate/up/down 七个投影有效批量1 × 16 梯度累积2 epochslr 2e-4SFT/ 1e-5DPODPO beta0.1评测GSM8K-test1319/ SVAMP-test300/ MATH-500500greedy严格答案匹配随机性主表 seed 42seed 7 / 2026 预留为确认实验未跑见 §5数据侧有一个容易忽视但很关键的工程点防测试集泄漏。训练集与三个测试集的 prompt 统一做 NFKC 规范化、小写、去非词字符后取 SHA-256精确比对剔除重叠与重复最终移除 10 条全过程记录在data/processed/manifest.json中。这条管线的意义在于评测数字里格式无效率接近 0才可信——模型学会的不是背题因为测试题在训练中被系统性排除了。2. 主表五组配置的真实数字模型GSM8KSVAMPMATH-500格式无效率最大Base原始 Qwen3-0.6B35.7%41.0%29.8%0.0%SFT-2K42.0%60.3%28.0%0.4%SFT-8K39.8%55.0%24.6%0.6%DPO-Random38.5%57.0%25.4%0.4%DPO-Hard40.7%58.3%25.0%0.4%训练侧的收敛都是正常的SFT-2K 最终 loss 0.663250 步SFT-8K 0.6071000 步DPO-Random 0.018DPO-Hard 0.050。没有发散没有 NaN管线全程无人工干预跑完。3. 发现一8K 数据全线输给 2K预注册假设的方向是8K 2K。实测方向完全相反且在全部三个基准上一致GSM8K42.0% vs 39.8%差 2.2ppSVAMP60.3% vs 55.0%差 5.3ppMATH-50028.0% vs 24.6%差 3.4pp先说稳健的部分SFT 本身有效。SFT-2K 相对 Base 在 GSM8K 6.3pp、SVAMP 19.3pp且格式无效率接近 0——说明模型确实学会了按#### answer格式收尾并给出可解析答案的行为。再说麻烦的部分为什么更多的数据反而更差我目前有两个候选解释都还只是假说等配比消融实验验证格式干扰。8K 集合中 MATH 来源样本占比更高而 MATH 的解答是\boxed{}风格的长推理链与 GSM8K 风格的#### answer短收尾是两种异质格式。混合后模型在如何收尾、如何组织推理上需要同时拟合两种模式稀释了对严格####格式的掌握。一个旁证是 removed.jsonl 里真实存在的畸形答案样本——MATH 解析出的答案本身就带#### (01]这类病态形态。优化量过拟合。8K × 2 epochs 是 2K × 2 epochs 的 4 倍梯度步数1000 步 vs 250 步在固定 lr 和 LoRA 秩下更长的训练可能把模型推向对训练格式分布的过拟合损害 MATH-500 这种分布外基准。区分这两个假说的实验很明确固定优化步数、固定样本总量只改变 GSM8K/MATH 配比的消融。这在计划中尚未运行。4. 发现二DPO 把偏好学得很彻底但能力没有涨这是整组实验里我觉得最有意思的现象。DPO-Random 从 SFT-8K 出发继续训练最终 loss 压到了0.018训练日志里的 rewards/margins 达到8.46——意味着模型对被选中的回答和被拒绝的回答的隐式奖励差被拉得极开。从优化目标看DPO 完成了它的任务策略学会了对偏好对做剧烈的区分。但在三个基准上相对它的起点 SFT-8KDPO-Random-1.3 / 2.0 / 0.8 ppDPO-Hard0.9 / 3.3 / 0.4 pp全部在 ±3.3pp 以内方向混杂两种负样本策略之间也没有稳定差距DPO-Hard 在 GSM8K/SVAMP 上略高 1–2ppMATH-500 上反而低 0.4pp。把这组事实放在一起就得到了一个清晰的表述在小模型 合成偏好对的设置下DPO 能把偏好判别学得非常彻底margin 极大但这种判别能力没有转化为数学推理准确率的提升。这和 DPO 文献里反复出现的失效模式对得上偏好优化拉升的是像被偏好的回答的似然而这个目标与回答更正确之间存在空隙——极端情况下表现为 likelihood displacement被偏好答案的绝对似然反而下降或对参考分布的整体偏移。要在这个 0.6B 设置下把空隙的成因切开需要的不是更多训练而是逐题对比 SFT-8K 与 DPO 模型的生成内容——这在我的待办里尚未完成。5. 诚实声明与下一步必须明确的边界以上全部是 seed 42 单种子结果。SVAMP 上 5.3pp 的差距300 题约合 16 道题处于单种子噪声的边缘。SFT-8K 的 seed 7 / 2026 复跑配置已经写好每个约 3.5 GPU 小时多种子均值±标准差出来之前请把本文所有高/低/更差读作本次实验中观察到。评测协议为批量贪心解码batch 8、左填充、bf16 非量化权重与训练的 4-bit 协议是解耦的——这个解耦的原因和一波三折的归因过程单独成篇见系列第二篇。所有对比模型共用同一评测实现协议内部一致。基座仅 Qwen3-0.6B 一个结论外推到更大模型没有任何依据。下一步按优先级多种子确认 → 数据配比消融固定预算改变 GSM8K/MATH 比例→ 逐题错误分析正确转错误 / 错误转正确的题目对比。6. 复现全部代码、配置、数据管线与本文引用的每个 CSV 都在仓库里后训练研究small-llm-post-training含预注册配置、数据卡、模型卡、研究报告配套的从零 Transformer 实现tiny-transformer-lab如果你只有一张 8GB 卡这两个仓库就是为你写的README 的命令可以在你自己的机器上复现出本文的每一张表。实验硬件RTX 4060 Laptop 8GB软件栈PyTorch 2.8.0cu126transformers 5.6.1trl 1.7.0peft 0.18.0bitsandbytes 0.49。