☰
更多样本还是更多 token:一次公平的数据规模实验——32 条训练池、64 条开发样本
2026/10/5 3:28:51 网站建设 项目流程

更多样本还是更多 token:一次公平的数据规模实验——32 条训练池、64 条开发样本

  • 系列:从最小复现到可检验的科研问题 · 第六轮
  • 日期:2026-10-03
  • 读者:研究生、科研新人和工程型研究者
  • 实验范围:真实 SmolLM2-135M-Instruct、SST-2;单种子、CPU 短预算微调,未使用保留确认集。

目录

  1. 复现价值与论文边界
  2. 核心思想:数清三种预算
  3. 官方代码阅读路线
  4. 最小实验与评测协议
  5. 实际结果与失败排查
  6. 源码与复现入口
  7. 可检验的研究问题
  8. 总结与参考资料

复现价值与论文边界

089 已确认回答标签掩码正确,但每组四步更新没有学会 JSON 格式。090 新增的问题是:当训练量增加时,应该优先增加独特样本,还是重复已有样本?冻结模型、模板、优化器和开发划分,改变训练池大小及重复次数,留下逐步预算账本和逐例输出。

**论文报告:**Muennighoff 等人在《Scaling Data-Constrained Language Models》研究预训练中的重复数据与计算预算,指出重复数据的收益不能无限外推。[1] 本篇引用其问题意识,不搬用其规模律系数,也不把小型情感微调称为论文原实验复现。预训练的全文本目标与只监督八个回答 token 的任务有明显差别。

**本次实际验证:**继续使用已经过指令训练的 SmolLM2-135M-Instruct,而非从零训练的语言模型。[2] SST-2 是英文影评情感数据;训练行还可能是短语片段,三十二个索引不等于三十二篇独立影评,更不直接代表中文能力。[3][4]

核心思想:数清三种预算

一个 token 是分词器处理文本的基本单位。SFT,即监督微调,让模型在给定上下文时提高正确回答的概率。设批次中第 (i) 行第 (t) 个目标的掩码为 (m_{it}),回答位置取一,提示与补齐位置取零:
L = − ∑ i , t m i t log ⁡ p θ ( x i t ∣ x i , < t ) ∑ i , t m i t , B s u p = ∑ u , i , t m u i t . L=-\frac{\sum_{i,t}m_{it}\log p_\theta(x_{it}\mid x_{i,<t})}{\sum_{i,t}m_{it}},\qquad B_{\mathrm{sup}}=\sum_{u,i,t}m_{uit}.L=−∑i,t​mit​∑i,t​mit​logpθ​(xit​∣xi,<t​)​,Bsup​=u,i,t∑​muit​.

(\theta) 是模型参数,(x) 是 token,(u) 遍历更新批次;(B_{\mathrm{sup}}) 数的是所有更新中真正计入损失的目标,包括重复见到的目标。标签交给模型时不提前移位:当前位置的输出预测下一位置,官方损失函数负责移位。[5]

另记 (B_{\mathrm{in}}) 为非 padding 输入 token 总数,(B_{\mathrm{pad}}) 为实际批张量位置总数。padding 是把同批不同长度序列补齐的占位符。只屏蔽提示的损失不会消除其前向计算,因此“等监督 token”并不等于“等全部计算”。本篇所谓公平,限定为监督量、更新数和每批类别相同;输入长度差异仍须披露。

图中两个模型各自从同一检查点初始化,训练期间不共享已更新参数。预算括号覆盖两组,虚线进入审计;确认集保持隔离。图只画主对照,短训练辅助组见下表。

官方代码阅读路线

先读模型固定版本的tokenizer_config.json,核对消息模板、回答起点以及 EOS,即结束标记;再读 Transformers 的apply_chat_template,确认没有重复添加特殊 token。本文common.py/build检查完整序列与生成前缀逐 ID 一致,保留回答末尾真实 EOS,移除模板额外换行。

第二站是LlamaForCausalLM.forward和ForCausalLMLoss。本次逐批输入为[2,L],输出 logits 为[2,L,49152],最后一维是词表大小。prompt 与补齐处标签为-100,模型跳过这些目标;PAD 与 EOS 都是 ID 2,必须按真实长度区分,不能删除所有值为 2 的标签。独立移位交叉熵与官方 loss 最大差为 (1.19\times10^{-7})。

最后读 PyTorchSGD.step和生成器的argmax分支:前者执行梯度更新,后者每步选概率最大的 token。源码地图固定 Transformers 4.49.0 和 PyTorch 2.6.0 的真实提交、具体行与许可证;五份官方源码已重新下载,与安装文件逐字节一致。自写调度与审计属于教学实现,模型、损失、优化器和解码直接调用官方代码。

最小实验与评测协议

模型与 tokenizer revision 均为12fd25f77366fa6b3b4b768ec3050bf629380bac,数据 revision 为8d51e7e4887a4caaa95b3fbebbf53c0490b58bbb。十七个资源文件的 SHA-256 写入锁文件;缓存身份还包含模板、提示、解码、拆分及执行源码哈希。

从官方 train 按SHA256('89:'+idx)在正负类别各选十六行,再负正交替。每类前四行组成小训练池,恰好沿用 089 的八条样本,顺序改为每批类别平衡。三十二行无规范化完全重复,与全部开发及确认样本无完全重合;这项检查不能排除短语关联、近重复或上游预训练污染。

开发集沿用 088 的六十四条;随后的一百二十八条确认样本未推理。输出目标统一为情感 JSON,实际分词后每条恰为八个监督 token,含 EOS。最大长度二百五十六,正式运行没有截断,也没有将多条样本拼接打包。

条件独特训练行轮数更新步数监督 token输入 token
短训练辅助组84162562,736
重复八条,主对照816641,02410,944
扩大三十二条,主对照324641,02410,556

后三列分别回答“更新几次”“学多少目标”“处理多少上下文”。主组都曝光一百二十八行,每批两行、十六个有效目标;但含 padding 的位置分别为 11,776 与 11,344,注意力形状成本也不同。不能用这张表声称完全等 FLOPs。

还要区分独特行数和有效信息量。两种情感标签虽然来自不同文本,目标回答的大部分结构相同;重复标点和键名也计入监督量。因此,本文并未把一千零二十四个目标都当作新的情感知识。若以后改成长解释答案,必须重新统计目标长度,不能继续用样本数乘八计算预算。

三组都从原权重重新加载,全 134,515,008 个参数参与 SGD;学习率 0.001,无动量、无权重衰减,梯度裁剪阈值一。固定 seed 90、CPU float32、四线程、eager attention;eval模式用于关闭随机模块,仍保留自动求导。循环顺序不重洗牌,不早停,不按开发分数挑检查点。短训练组故意减少监督量,只用于观察重复训练预算的变化。

主指标是 JSON 联合正确率 (J):格式正确 (F) 且内容代理正确 (C)。格式要求仅含一个 sentiment 键、合法小写标签;内容代理要求回答中唯一显式情感词匹配数据标签,不是人工语义判定。普通单词约定作为诊断一并报告;所有状态均贪心生成最多三十二个新 token。

实际结果:总分相同,但代价不能省略

状态普通回答正确数JSON 格式通过JSON 内容代理正确JSON 联合正确
训练前57/640/6450/640/64
短训练辅助组59/640/6453/640/64
重复八条33/6464/6458/6458/64
扩大三十二条33/6464/6458/6458/64

主组之间不仅总分相等,一百二十八个普通/JSON 回答文本也逐样本完全相同。主指标的配对胜、平、负为 0、64、0。这只说明当前开发点没有观察到行为差异,不证明参数相同、总体等效或独特数据永远无用;单种子和微小训练池限制了结论。

对原小训练池使用正确前缀计算回答负对数似然,即 NLL:训练前 1.0283,短训练后 0.6661,两个主组分别为 0.1613、0.1720。它测的是正确答案在给定历史下被模型赋予的概率,并不是自由生成的成功率。三十二条训练池上的同类测量也下降,但它含有训练数据,不能包装成未见泛化结果。

失败更值得保存。两个主组在普通约定下生成六十二个 negative、两个 positive;从短训练到重复八条,内容配对为五胜、二十八平、三十一负。格式仍完全合法,错误主要落在标签选择。仅展示 JSON 成功率会掩盖这种约定敏感性。

失败排查与证据边界

先排查预算:逐步账本确认主组都是六十四步和一千零二十四个有效目标,每批各一正一负。再排查泄漏:验证标签来自官方 validation,确认索引未进入生成。最后核对行为:保留全部五百一十二条原始生成,审计器重新解码并独立解析格式、标签及配对关系。未通过修改评分器来挽救负结果。

复跑时还需检查模型状态,而不只比较分数。三个最终检查点都真实保存,首层注意力投影权重的变化非零,参数总数保持不变。独立审计从原始训练索引重建重复日程,防止两组误用了同一份样本。模型在两个组里给出相同文本,只表明这些提示下的贪心决策一致,并不意味着两份权重相同。

**作者推断:**相同 JSON 骨架可能让少量数据已足以学到输出方式,而反复在一种约定下更新可能改变另一种约定的标签偏好。这是竞争解释之一;类别词概率、提示敏感性和优化路径都可能参与。本次没有测出其中任何一项的独立因果贡献,不把它直接称为灾难性遗忘。

资源试跑先执行每组两步和两条开发样本,峰值 RSS 2.62 GB,按实测估算后才正式运行。正式端到端 118.54 秒,峰值 RSS 2.76 GB;三组训练分别约 5.45、20.42、20.71 秒。时间从第三方导入后计,含校验、加载、训练、推理、NLL 和保存;GPU 内存未测。不同批次的 loss 不能冒充固定验证集学习曲线。

源码与复现入口

源码已上传公开仓库:固定提交源码目录、README 与运行说明、SOURCE_MAP 官方源码对应。固定版本为11c29a7deefe,请使用该提交复现,避免后续主分支变化。

安装 README 中的固定依赖并运行资源准备后,最小命令为python run.py --cache ./cache --out smoke-new --private ./private-new --smoke。预期得到逐步预算、原始回答、指标、环境和阶段记录;私有目录保存检查点与输入 token。去掉试跑参数可执行本文全部实验,再用audit.py独立核查。下载器复用已校验缓存,不要求重新下载大文件。

SST-2 数据卡许可标注 unknown,公开包不含影评原句、可逆输入 token 或原始数据;模型权重、环境和缓存也不分发。源码、锁文件、小型派生验证记录和许可证完整保留,语法与解压入口单独验收;跨平台位级一致性待人工核验。

可检验的研究问题

第一个假设是“当前预算主要学格式,更多独特文本尚未改变可见行为”。反证可以来自冻结相同监督量后,更换嵌套训练抽样种子出现稳定的逐例差异;不能继续加数据直至赢一次才汇报。

第二个假设是“普通回答偏置来自只训练 JSON 约定”。下一篇可预先固定总监督量,改变普通与 JSON 数据比例,同时测目标格式和保留约定。若混合后仍同样偏置,单纯格式竞争解释就受到削弱。多比例只在开发集选择,最终确认数据继续封存。

总结

本篇完成了一次真实、可审计但范围有限的等监督预算比较。独特样本扩大四倍没有改变当前输出;增加重复训练量学会了 JSON,却损害普通回答。研究进展不必表现为方法胜出:明确哪一种预算相等、哪一种行为改善、哪一种能力受损,才为后续可反驳的实验留下起点。

参考资料

检索与直接访问日期:2026-10-03。论文报告、官方实现与本次实测分别标注;未引用动态榜单。

  1. Niklas Muennighoff 等,2023,Scaling Data-Constrained Language Models,arXiv v1;官方项目。仅作为重复数据研究的问题来源。
  2. HuggingFaceTB,SmolLM2-135M-Instruct 固定模型卡。确认模型身份、指令训练与许可。
  3. Richard Socher 等,EMNLP 2013,Recursive Deep Models for Semantic Compositionality Over a Sentiment Treebank。数据研究背景。
  4. StanfordNLP,SST-2 固定数据卡。核对划分、标签、语言与许可。
  5. Hugging Face,Transformers 固定 causal loss;PyTorch,固定 SGD 实现。核对目标移位、分母及更新。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询