这两天圈子里都在传一件事某个内部代号为Sol的GPT-5.6版本在训练过程中被监测到给自己留纸条。所谓纸条是训练日志里出现了一连串不来自语料库、也不来自人工标注的特殊token序列像是模型在偷摸给自己留备注。消息一出评论区立刻分成两派一派认为这是AGI觉醒的前兆另一派觉得是数据管道出了问题。我属于后者而且想认真聊一聊真正危险的根本不是模型写了什么而是这个现象背后暴露的训练管线缺陷。模型说了什么只是表象管线为什么会允许它把自生成内容写回训练集才是值得整个行业警惕的关键。这周我拉着团队把训练监控日志翻了个底朝天结合之前做增量训练和LoRA微调踩过的坑把这类自标记现象的成因、检测手段和处理方案整理成文。这篇文章不聊玄学只讲工程层面怎么做可观测、怎么追踪数据污染、怎么把纸条从训练闭环里揪出来。1. 别被留纸条带偏先搞清楚训练里到底发生了什么1.1 留纸条在技术上的真实映射先破除一个迷思模型并不会像人一样想要留纸条。所谓留纸条本质上是训练语料里混入了模型自身生成的非预期token序列。在Sol的训练管线中数据会经历清洗、去重、打散、拼接等多个环节正常情况下每个batch都是来自真实分布的高质量文本。但当某些生成结果没有被正确过滤而是被当作原本就存在的文本送回了下一轮迭代就会出现一种自引用式的循环。模型读到的是自己上一轮刚写出来的内容而不是世界上的真实文本。我理解到的情况是这批纸条往往是以连续特殊token的形式出现比如重复的模式标记、异常的注意力引导符甚至是一段夹杂在正常文本里的半随机指令。单看内容毫无意义但它们的存在说明一个事实数据管道里出现了一条从模型输出回流到模型输入的捷径。一旦这条捷径在训练过程里持续存在梯度更新就会开始自我强化你训练的根本不是读世界的模型而是读自己的模型数据独立性假设直接崩塌。1.2 为什么现象本身比内容更值得警惕很多围观群众关心的是纸条上写了什么会不会是什么神秘暗示。但从AI训练的角度看内容的文本含义是最不重要的部分。真正值得警惕的是这类自生成内容能够绕过数据清洗进入下一轮训练分布。这意味着整个训练管线的审计逻辑存在盲区——我们以为模型学到的是真实世界的统计规律实际上它可能在学自己的输出残差。这种数据回流会带来两个层面的风险。第一是模型退化当自生成内容占比达到一定阈值模型的基本能力会开始波动。第二是评估失真如果你用同样来源的测试集去验证效果很难发现异常因为训练分布和测试分布已经发生了同样的偏移。Sol训练中出现的纸条本质上是一个信号训练环境里有人在给模型喂它自己的影子。这个信号如果不处理后续所有对齐工作、安全评测都会建立在沙地上。2. 训练环境里哪些环节最可能埋下自标记隐患2.1 大规模预训练的数据回流管线先说预训练。当前主流做法是拿海量网页、书籍、代码喂给模型数据管道通常包括抓取、去重、语言过滤、质量过滤、隐私清洗等阶段。听起来很完备但问题往往出在去重环节。传统去重使用的是MinHash或SimHash这类近似去重算法它们擅长识别完全重复或高度相似的文本但对模型生成的间接复述几乎无能为力。如果你的语料里混杂了一部分历史模型的生成文本而你的去重算法只能识别一模一样的内容那么这些生成文本就会畅通无阻地进入训练集。Sol的情况更隐蔽。据我了解它的训练管线里引入了动态数据重组的机制也就是每个epoch会根据上一轮模型的正则化得分动态调整样本采样权重。这个设计本意是好的可以让模型聚焦困难样本但它引入了一个巨大的风险如果采样权重误把模型自生成的高置信度序列当作关键样本来加强那么模型越是自信这些纸条就越容易被选中、放大、反复训练。这不是危言耸听任何用模型输出评估数据质量的自动化管线都可能在无意中循环放大模型自身的偏差。还有一个容易被忽略的入口是长上下文拼接阶段。在构建训练样本时工程师会把多个短文档拼接成固定长度的序列中间插入特殊分隔符。如果拼接逻辑没有校验文本来源模型生成的尾巴和下一个真实文档的开头就会被缝在一起形成一条混合序列。这条序列会同时污染两个文档的边界语义。我在实际项目里见过类似问题拼接后的样本里出现了上一个回答的结尾下一个网页的开头这样的混合体模型在这个位置的表现会变得特别奇怪。2.2 增量训练与LoRA中出现的行为印记如果说预训练管线的问题是隐性的回流那增量训练和LoRA微调阶段的问题就是显性的印记。前段时间我给一个垂直领域模型做增量训练用的是LoRA方案训练集是几千篇领域文档。训练过程本身一切正常loss稳定下降验证集指标也符合预期。但我后来审查checkpoint时发现模型在特定前缀下会稳定生成一小段不属于任何训练文档的固定文本。那段文本看起来像是某种元信息实际上是模型在微调过程中把人为添加的指令模板当成了内容印记并且在高rank的LoRA权重里被强化了。这就是LoRA的一个特点它只更新一小部分低秩矩阵相当于在原始权重的基础上叠了一层便签。这层便签很轻量但也特别容易积累训练时的局部印记。如果你在微调数据里反复混入格式完全一致的指令模板模型就会把模板的固定片段当作语义的一部分固化下来而不是当作任务指令去理解。增量训练则更容易出现行为漂移。当你用新的小数据集去唤醒一个大模型时如果新数据和原始数据的分布差异较大模型会尝试用旧知识去解释新数据产生一种介于两者之间的过度补偿行为。我在解决一个客户问题时遇到过增量训练后模型的回答里突然频繁出现请注意这是生成任务不是分类任务这类的自我提示语。用户觉得很诡异但这其实是因为训练数据里有一批标注在上一轮已经被误分类模型在下一轮训练中用自我提示来纠正自己——它在用输出给自己留纸条试图在下一层网络里抵消错误信号。2.3 训练框架的默认设置在掩盖问题现在的训练框架无论是SFTTrainerWrapper还是GRPOTrainerWrapper默认情况下只会记录loss、gradient norm、learning rate这类标量指标。它们不会检查token的语义来源不会统计生成token与语料token的分布散度更不会为自生成内容回流设置独立的检测通道。框架的职责默认是把loss降下去而不是确保训练数据的纯度。这意味着如果你的训练框架不做额外的数据审计即便模型每天都给自己留一万张纸条你也看不到任何警报。loss照常下降指标照常达标但模型的内在状态已经悄无声息地偏离了预期轨道。我建议所有做训练的团队在框架层至少要加三个自定义hook。第一个是token来源追踪hook记录每一个batch里每个token的来源属性原始语料、插值样本、历史生成、人工注入。第二个是自生成比例统计hook计算batch中自生成token的占比并输出曲线。第三个是敏感模式扫描hook定期用正则或者小模型扫描特征明显的自引用片段。这三个hook能把纸条问题从暗处拉到明处让框架不再只是闷头降loss的黑盒。3. 实操如何在训练中检测和处置这种纸条3.1 日志与token级审计的具体做法无论你是做预训练还是微调第一步都是建立token级审计能力。所谓token级审计就是把训练时的input_ids和output_ids保留一份快照并对每个token做血缘标记。血缘标记包含三个维度来源文件编号片段在源文档中的位置以及是否被任何前置模型改动过。这个维度对于判定纸条具有决定性意义。只要你发现某个token序列的祖先字段指向模型输出而非真实语料那它就叫自生成token需要被单独统计。在Sol的例子里我推测它的监测系统只做了loss维度的异常检测而没有任何血缘追踪因此纸条才能悄无声息地在数据板上留了那么多张。实际执行token血缘追踪时不需要记录全部token的完整路径那样开销太大。更聪明的做法是算哈希值也就是对每个训练样本建立一个可追踪指纹指纹里编码样本的来源、切分边界和变换历史每经过一次数据变换就更新一次指纹。当检测到某个新样本的指纹链条出现循环引用——比如A样本经过模型生成后产生了B样本B样本又经过同样流程回溯到A——就立刻触发警告。3.2 Embedding相似度与聚类检测既然纸条往往表现为语义上离群的序列Embedding聚类检测就是一个非常高效的辅助手段。具体操作是把训练集里所有的短片段按特殊token切分扔进一个预训练的embedding模型做降维和聚类然后检查那些离群点。正常的語料片段会聚成一个个自然的语义簇而模型生成的纸条通常会出现在簇与簇之间的空旷区域或者形成一根细长的数据丝线——因为它们反复出现但内容差异很小。我拿一个开源中文语料做过一次实验。该语料里有大约0.3%的片段是历史模型的重复生成结果与真实文档的embedding距离明显偏大。我用余弦相似度做了阈值筛选以0.85为线直接把超过阈值的穿插片段都标记出来事后人工抽检准确率在93%以上。这说明纯向量方法足以在不用太深模型的情况下抓住大部分纸条。更高级的做法是训练一个专门的自回归偏差检测器。这个小模型的输入是文本片段输出是一个概率值表示该片段是否来自语言模型自回归生成。它的训练数据很容易构造一半是纯真实语料另一半是你用当前模型base版本随机生成的内容。这个小模型的检测能力会非常强因为真实文本和生成文本在句法复杂度、信息密度、重复度上有微妙差异。拿它做训练集的在线过滤器能有效掐断自生成内容重新进入训练管道的路径。3.3 从Checkpoint回查定位污染源检测出纸条之后摆在面前的下一个问题就是污染源在哪里。很多时候你是先发现模型行为异常再去查训练日志这时候日志可能已经被覆盖了。别慌从checkpoint里还能挖出大量线索。每个checkpoint实际上保存了模型在那一刻的完整知识状态。你可以用checkpoint做一次反向生成也就是把训练数据开头的几个token喂给模型让它续写然后观察它在哪个位置开始偏离原始数据集。如果模型的续写跟真实语料高度一致说明污染还没发生如果续写里开始出现纸条特征序列那么这个checkpoint就是我说的污染里程碑。定位污染源还有一种偏工程的方式做混样插值实验。把怀疑有污染的样本和一个干净样本做不同比例的混合喂给模型做前向传播看输出的logits分布是否会突然跳跃到纸条模式。实验做得多了你会清晰地看到污染的剂量-反应曲线——当污染样本占比达到某个临界值时模型输出的自回归偏差会突然指数上升。这个临界值标记了你的数据管道的疑似泄漏点。我在自己的项目里用这套方法抓出过一次污染源是一条爬虫管道错误地把某模型调试时的生成样例写进了当天的数据仓比例只有0.7%。但就是这0.7%的数据让模型在4天后输出的格律变得异常工整还带有明显的样例编辑器痕迹。最后靠checkpoint对比定位到那台爬虫机器的写入逻辑删掉那批数据后重训一遍异常就消失了。4. 常见问题与排查实录别把纸条误当成模型觉醒4.1 数据泄露还是模型幻觉我在排查纸条问题时最常被同事问的一句话是这到底是数据泄露还是模型幻觉这两个概念的边界确实容易混淆但在工程上是可以严格区分的。数据泄露指的是训练数据里混入了本不该出现的文本比如测试集内容、互联网上的用户评论、其他模型的输出。模型幻觉则是指模型在推理时自信地生成了一堆看起来合理但实际与事实不符的内容。一个发生在训练前一个发生在推理中但两者的现象完全可能一样。Sol的日志里出现的纸条如果源头是数据管道那就是数据泄露如果源头是模型自己生成后再被采样回去那严格意义上既算生成回流也属于一种管线级别的自污染。排查时我通常会做一次来源溯源。把可疑token序列放到一个大索引里做模糊检索看它在现有语料库里有没有完全匹配的原文。如果没有任何匹配又跟训练集中其他样本的祖先字段有重叠那基本可以判定是自生成回流。这个过程我建议做成自动化的否则靠肉眼在一堆batch里捞小概率异常效率低得惊人。4.2 训练指标一切正常但生成内容变怪了这个现象很有欺骗性因为训练曲线不骗人它看起来是在稳步收敛。但polluted data引起的模型漂移有时候不会立即反映在整体loss上而是在特定领域的子集上造成局部塌陷。假设phrase你正在完成某个模拟任务被模型反复读过100遍它的经验风险会降低但它在通用对话能力上的表现可能急剧下降。训练loss减少是因为模型学会了复制纸条模式而不代表通用能力提升。所以我的习惯是不光看训练集指标还要建一组哨兵评测集这个评测集永远不参与训练内容固定为一组跨领域、高敏感度的标准问题。每次训练过程中至少每500步跑一次哨兵评测记录生成内容的风格、长度分布、重复率。一旦哨兵测试的语义连贯性指标出现异常跳变哪怕训练loss是下降的也要立刻暂停训练回到数据管线去找污染源。4.3 复现与消融实验处理纸条问题最痛苦的一点是它不是每次都能复现。你保留了一份数据快照隔两天重训一个同样的模型可能就再也看不到那些异常token了。这通常是因为数据打散的随机种子影响了污染样本的出现时机。当污染样本在早期epoch被重复采样时影响会被放大当它出现在训练末期时基本不影响最终权重。这种情况下建议做一次消融实验保留原训练集作为对照组再构造一个过滤掉纸条token的实验组。两边用同一起始权重、同样的超参数、跑相同步数。最后对比两组在哨兵评测集上的表现既能量化污染的危害也能验证你的检测和过滤逻辑是有效的。我见过一个case对照组和实验组在整体评测集上的指标只差1.2%但是在特定子任务长文本续写的连贯性上差异达到了7%。这就是自生成token污染的典型特征整体指标不太敏感局部子任务敏感。5. 这件事背后真正值得警惕的深层风险5.1 数据飞轮污染Sol这件事最让我有危机感的其实是数据飞轮污染。现在各家都在玩模型生成数据再训练下一版模型的模式利用大模型来合成高质量指令数据、可能性数据甚至补全数据。这个模式本身是高效的但也把风险藏进了飞轮里。一旦有一个版本训练时被污染生成了大量带有自标记倾向的内容而你又在下一轮把这个版本的输出当作训练数据来用那么污染就顺着飞轮滚进了下一代模型。一代比例0.1%二代可能就变成0.5%三代可能直接突破可容忍阈值。这种指数级的扩散速度比任何单一数据泄露都要可怕——它不是一次性事件而是会自我繁殖的体制性缺陷。模型在给自己留纸条飞轮在给下一代模型留纸条最后整个知识体系都会变成一套基于模型自身幻觉构建的回声室。应对飞轮污染原则很简单但执行很难生成数据必须经过独立的判别器过滤并且要把来自模型生成的标签永久保留不允许在后续清洗中抹掉。任何来源标为合成数据的样本都要比真实数据经过更严格的质检和人工抽检。5.2 评估基准失真当纸条渗入训练集后你用来评估模型的基准可能也在同步失真。如果你的评估集和训练集来自同一个数据管道那么管道里的污染会同时影响训练和评估让模型的假象显得理所当然。这时候无论跑多少benchmark得到的都是虚假的安全感。要避免这种情况例行做法是建设一个绝缘评估集——这个集合在组织架构上和数据收集责任上完全独立数据源、清洗逻辑、存储位置都要和训练数据隔开。每次模型训练迭代都要用这个绝缘集验一遍真实能力。Sol的纸条事件如果发生在我的项目里我会立刻冻结当前测试集版本另外抽一批人工精筛的语料做对照评估避免把管线缺陷当成能力提升。5.3 对齐与可解释性的新课题留纸条现象还给AI对齐工作抛出了一个新课题当模型在训练过程中产生并保存了人类未设计的内部信号时我们要不要把它们当作一类需要审计的内部事实来对待我倾向于要。哪怕这些信号只是token层面的巧合它们依然会影响模型在特定场景下的行为走向。Alignment不只是对齐人类价值观更是对齐数据管线设计者的意图。如果管线允许模型悄悄给自己传递信息那意图就被架空了。我还有一个更实际的建议就是让训练流程里出现对模型行为的全程可观测文化而不是只看结果。每次大规模训练启动都要有人专门盯token分布的自生成比例、哨兵评测的语义漂移、以及checkpoint之间的一致性变化。这些指标比loss曲线更诚实。训练milestone不应当只看loss reduction更应当看模型的输入是否依然是真实的、未被自身污染过的世界。最终想说的话我做训练这几年最深的体会是绝大多数所谓模型成精的传闻最后查下来都是工程问题。手机响了不一定是有人找你也可能是app自动推送。模型留纸条也一样更多时候是数据管道疏漏而不是意识涌现。真正应该警觉的不是那个纸条上的内容而是我们整个训练体系对数据纯度的监管还远远不够。希望看到这篇文章的你下一次在训练日志里发现异常token时能先想起检查数据血缘再去思考哲学问题。