跳到主要内容

持续微调而不污染数据:生产流水线指南

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数运行持续微调的团队都以同样的方式发现了污染问题:每周评估指标持续提升,团队欢欣鼓舞,然后某个用户反馈模型"变差了"。一旦深入排查,你才意识到你的评估基准已经悄悄地泄漏到训练数据中好几个月了。每一个看起来像能力提升的指标,其实不过是记忆。

数字比直觉更糟糕。LLaMA 2 的 MMLU 样本中有超过 16% 被污染——其中 11% 属于严重污染(超过 80% 的词元重叠)。GPT-2 在被污染的基准上比干净基准的得分高出 15 个百分点。这不是边缘案例。在持续微调循环中,污染是默认结果,除非你从架构层面明确加以防范。

本文介绍从用户反馈中持续运行微调所需的生产工程——在不损害评估信号、不导致模型遗忘早期能力、不降解无人手动审核的安全属性的前提下实现这一目标。

为什么持续微调不同于一次性训练

在一次性训练中,污染预防相对简单:在训练开始前划分测试集,训练期间绝不触碰,最后评估一次。时间边界清晰。

持续微调从三个方面打破了这一模型。

首先,你的评估基准是静态的,但训练数据是实时流。随着用户交互的积累,某个训练样本与评估样本相似的概率单调递增。如果你的用户规模足够大、时间跨度足够长,你最终一定会看到与保留样本高度相似的内容出现在训练集中。

其次,反馈循环会产生自我强化的错误。如果模型以某种风格回答问题,用户认可了这个答案,这次交互就成为训练信号。但如果模型以系统性的方式犯错——比如幻构了某个统计数字而用户没有察觉——你现在训练的就是充满信心的错误答案。除非你专门针对该失效模式设计了评估,否则评估指标不会捕捉到这一问题。

第三,安全对齐在迭代之间会逐渐退化。仅需 10 个精心设计的对抗样本,就足以破解 GPT-3.5 Turbo 的安全护栏。即使是 50—100 个完全良性的样本,也可能在恶意软件和经济伤害等类别中降低对齐程度。当你在每次迭代之间不进行人工审核的情况下持续运行微调时,安全退化是一种无声积累的风险。

数据路由架构

污染预防的基础是训练数据流和评估数据流之间严格的物理隔离。这两个流水线绝不能共享状态。

架构如下:所有用户交互首先经过一个分类网关。网关的任务是将每次交互路由到两个地方之一——训练流水线或评估流量桶。评估流量经过质量审核采样,用于更新保留指标;它绝不触碰微调数据集。

在训练流水线内,每个新增样本在写入训练存储之前都需经过污染检查。该检查基于哈希的近似重复检测,对照评估样本注册表进行比对。如果某个训练样本与任何评估样本过于相似——以 5-gram 的 Jaccard 相似度衡量——该样本将被丢弃。

评估基准本身存储在一个独立的、只可追加的存储中,并设有访问控制。规则很简单:微调循环中的任何组件都不能读取它。基准会定期更新,但只能通过受控流程进行,该流程会在接受新基准样本之前,显式检查其是否已存在于训练数据中。

有一个实现细节非常重要:路由用户流量的网关必须与微调作业运行在独立的代码路径上。如果同一个服务既读取路由网关又向训练存储写入,你就制造了一条通过共享状态引入污染的路径。应使用具有严格读写分离的特征存储抽象。

规模化污染检测

基于 MinHash 和局部敏感哈希(LSH)的哈希去重是在规模化场景下检测近似重复的实用工具。该方法将每个文档转换为字符 n-gram 的集合,应用 N 个哈希函数生成签名,然后使用 LSH 分桶来找出 Jaccard 相似度较高的候选对。

实际性能在生产中足够可用:10 万个文档可在普通硬件上四分钟内完成去重。在万亿词元规模下,使用并行滚动多项式哈希的 GPU 加速变体可在数小时内完成处理。对于大多数持续微调工作负载,更简单的 CPU 实现的速度足以使其成为实时摄取流水线的一部分,而无需作为批处理作业运行。

需要调整的关键参数是相似度阈值。阈值过低会产生误报——因为样本与评估样本表面相似而被丢弃的合法训练样本。阈值过高则会漏掉改写后的污染内容。对于大多数应用,5-gram 相似度超过 0.8 Jaccard 相似度是一个合理的起点。

除哈希检测之外,还有一类方法关注模型内部。其中最稳健的(DICE——检测分布内污染)通过测量污染样本与未污染样本在隐藏状态之间的欧氏距离,识别模型中对给定数据最敏感的层。在这些内部表示上训练的小型分类器,在真实污染场景下可达到 99.5—99.9 的 AUROC,预测污染与实际基准虚高之间的 R² 为 0.61—0.75。其局限性在于,你需要已知的污染样本来训练分类器——它更适合事后审计而非实时过滤。

防止灾难性遗忘

与污染相对的失效模式是灾难性遗忘:模型在目标任务上改进的同时,其他所有任务上的表现同步退化。当微调数据的分布相对于模型原始训练分布较窄时,这种情况尤为常见。

最可靠的缓解措施是回放缓冲区。思路很简单:维护一个存储先前训练轮次样本的库,并将这些样本混入每个新的微调批次。棘手之处在于,当缓冲区容量有限时,该保留哪些样本。

关于优先级回放策略的最新研究表明,保留损失最高的样本——模型最可能遗忘的那些——比随机采样能产生更好的保留效果。一种名为 SuRe(惊喜驱动的优先级回放)的方法采用了这一思路,在比朴素随机回放更低的回放频率下实现了出色的抗遗忘性能。FOREVER(受遗忘曲线启发的记忆回放)表明,缓冲区大小与保留效果之间大致呈线性关系——更多历史样本带来成比例更强的正则化——这使得容量决策成为存储成本与保留质量之间直接的工程权衡。

对于大语言模型,原始预训练数据通常不可获得,因此回放缓冲区使用指令微调数据集作为代理。其直觉在于,指令跟随能力是模型原有能力广度的良好代理。在回放缓冲区中保留多样化的指令数据,并以防止过度专门化的比例将其混入每个微调批次。

弹性权重合并(EWC)是另一种常被提及的方法。它对模型参数计算 Fisher 信息矩阵,识别对先前任务最重要的参数,并添加一个惩罚项来阻止对这些参数的修改。对于保留离散的早期任务效果相当不错,但在持续学习场景中表现较差,因为旧任务的重要性会不断累积,而没有相应的回放机制来平衡。

自蒸馏是第三种值得考虑的方法。模型将自身输出作为策略内正则化器——在微调过程中,从当前模型中采样,并使用这些样本施加 KL 散度约束,防止策略偏离起点过远。这与 RLHF 训练中使用的机制相同,事实证明对防止遗忘同样有效。

无人工审核地维护安全性

在全自动化的持续微调循环中,安全对齐是最难保持的属性。失效模式非常严重:激进的学习率和小批量大小会造成最严重的安全退化。退化并非均匀分布——它往往集中在特定的危害类别(恶意软件、经济伤害、欺诈),而非全面均匀地降低所有安全属性。

最有前景的自动化方法使用自适应正则化目标,根据安全信号调整模型对每个样本的训练力度。其机制如下:一个安全评判器对每个训练样本或生成的输出进行评估,产生 0(安全)到 1(有害)之间的分数。训练目标随后根据该安全分数确定的权重,混合任务损失和对对齐模型的 KL 散度惩罚。当评判器将某个批次标记为潜在有害时,KL 惩罚占主导,模型被推回对齐基线,而非偏离它。

安全评判器有两种实现方式。基于激活的评判器在模型预生成隐藏状态上使用线性探针——有害意图在模型实际产生输出之前,在激活空间中就已线性可分,这使得该方法的速度足以用于在线场景。基于评判的评判器在生成输出上使用外部 LLM 评估器;准确度更高,但会给训练循环增加延迟。在实践中,对实时数据摄取使用基于激活的过滤,对定期审计使用基于评判的评估,是合理的组合。

一篇论文报告称,使用这种自适应正则化方法,在多个模型上将攻击成功率从 97% 降至 1—9%,而任务性能没有显著下降。这是目标基准:在可接受的任务性能代价下实现安全保护。

评估门控

如果没有真正利用评估结果来阻止问题模型版本部署的门控,上述一切都毫无意义。

最小可行的评估门控在推进新模型版本至生产之前检查三件事:

第一,对固定保留基准进行回归测试。这些测试用于捕捉能力退化。基准必须是真正保留的——不只是"当前不在训练集中",而是通过上述架构控制与整个微调流水线完全隔离。

第二,使用 LLM 作为评判器的业务特定指标。评判器是一个独立的、稳定的模型,对候选微调模型在具有代表性的生产查询样本上的输出进行评估。这用于捕捉不会在固定基准中体现的行为漂移。

第三,在对抗性探测集上进行安全评估。一个小型但精心维护的提示集,旨在引发特定的有害行为。候选模型必须通过这些探测才能部署。保持该探测集小而私密(永远不要进入训练循环)至关重要——如果模型在训练中看到了对抗性探测模式,它将学会通过测试但并非真正安全。

当任何门控失败时,部署被阻止,微调作业产生告警。该模型版本保留在候选池中供调查,而不是被悄悄丢弃——你需要了解门控为何触发。

保持流水线可审计

当污染和安全问题在数月后浮出水面时,可复现性是调试的先决条件。

最低日志记录要求包括:每次微调运行使用的精确数据集(含哈希值)、该数据集的污染检查结果、运行前后的评估门控结果,以及被推进的模型检查点。MLflow 或同类实验追踪工具处理指标;Git 处理配置和代码。每次微调运行都应能从这些产物中重现。

一个被低估的运营实践:显式地对评估基准进行版本控制,并记录每次评估使用的基准版本。基准会随着时间推移而漂移,因为你会添加样本并更新评分。如果你在比较六个月前的评估指标与今天的,你需要知道期间基准是否发生了变化。

默认流水线

对于从零开始的团队,能够规避最严重失效模式的架构如下:对所有传入训练数据与评估基准之间进行基于哈希的近似重复检测,维护具有高损失样本优先保留的回放缓冲区,在微调过程中应用自适应安全正则化,实施三重部署检查(回归基准、业务指标、安全探测),并完整记录每次微调运行,锁定基准版本。

这比大多数团队在初次开始持续微调时所具备的基础设施要多。诱惑在于,在问题变得可见之前跳过某些部分。这种方式的问题在于,污染和安全退化往往是不可见的,直到变得严重为止。当你的指标明显出错时,你已经将几个退化的模型版本推向了生产,调试问题也变得困难得多。

在训练数据积累之前,先构建隔离机制。哈希注册表、路由网关、审计日志——这些在流水线上线之前构建成本低廉,事后再补成本高昂。

Let's stay in touch and Follow me for more thoughts and updates