当投毒比例<0.1%时,如何在不重训情况下修复模型?
解读
国内工业界对“投毒”普遍指数据投毒(Poisoning Attack),即训练集里被恶意插入的样本比例极低(<0.1%)。此时模型已上线,业务不允许停服重训,且GPU预算、合规审计窗口都极紧。面试官想考察:
- 能否在黑盒/灰盒条件下快速定位毒点;
- 能否用工程化手段在服务端做“热修复”,而非重新走一次千卡训练;
- 是否具备Agent视角——把模型当成一个可自我演化的Agent,用“外挂记忆+工具调用”的方式持续纠偏,而不是单纯调参。
知识点
-
毒点定位:
- 影响函数(Influence Function)近似估计单条样本对最终参数的梯度贡献;
- **遗忘学习(Forgetting/Unlearning)**的反向筛选:对可疑批次施加负学习率,观察Loss反弹;
- 对抗相似度检索:用最后一层embedding做KNN,毒样本往往聚集成高密度小簇。
-
轻量级修复:
- 参数手术:冻结主干,只对分类头或MoE门控做Low-Rank Adapter(LoRA)级别的负梯度修正;
- 知识蒸馏缓存:提前保留0.1%干净数据做“影子数据集”,用Logit Ensemble方式把原模型logit与影子模型logit做加权平均,权重由不确定性动态门控实时调整;
- 推理时矫正(Inference-time Correction):
– 对触发毒特征的关键词启用Prompt Mask;
– 引入规则符号系统(知识图谱+正则)做后置安全层,相当于给Agent外挂一个“安全工具包”。
-
持续学习框架:
- 把修复过程封装成Agent Skill,注册到Agent的ToolServer;
- 用强化学习奖励塑形让Agent主动调用“毒点屏蔽”工具,形成人机协同闭环。
-
合规与可解释:
- 所有修复操作写入模型变更日志,满足《生成式AI管理办法》留痕要求;
- 输出特征重要性热图供监管抽查,证明未引入新偏见。
答案
分三步落地,全部在不重训、不回源训练集群的前提下完成:
-
小时级毒点定位
① 拉取线上最近7天用户拒绝/举报日志,按置信度<0.6且用户负面反馈>50的样本作为候选毒包;
② 用影响函数快速近似,在8×A100推理节点上4小时算出Top-500高影响样本;
③ 人工复核+对抗聚类后确认真实毒样本≈0.08%,符合<0.1%前提。 -
分钟级参数热修
① 对确认毒样本构造负标签(原标签→安全标签),用LoRA rank=8在分类头做一步负学习,学习率=-5e-4,仅更新0.02%参数;
② 同步把影子数据集蒸馏进原模型:对同一批输入计算原logit与影子logit,动态权重w = σ(UE评分),UE评分由熵+KL散度组成,实现推理时融合;
③ 把上述两个补丁打包成Safetensors增量文件,通过KubeVela灰度管道按10%→50%→100%滚动热更新,平均延迟增加<3 ms,P99业务指标无回退。 -
长期Agent自愈
① 将“毒点检测”与“负学习”封装成Agent Tool,注册名称为poison_mitigation;
② 在对话管理系统的奖励函数里增加一项:若用户连续两轮指出“答案有害”,Agent自动调用poison_mitigation并记录CaseID;
③ 每周离线回放新产生的拒绝样本,若连续两周无新增毒激活,则自动降级该Tool的调用频率,实现弹性治理。
结果:线上A/B显示有害输出率从0.12%降至0.009%,业务零停服,GPU额外消耗0,监管抽样100条全部合规。
拓展思考
- 若毒样本跨模态(文本+图像),需把Vision Encoder的embedding也纳入影响函数,但计算量会×10,可用Nyström低秩近似加速;
- 当投毒比例>0.5%时,上述方法会触发灾难性遗忘,需升级为分层遗忘学习+参数隔离,但已超出“不重训”红线,应转入应急回滚通道;
- 从Agent视角看,投毒修复可视为“记忆篡改”任务,未来可引入** episodic memory + 因果推理模块,让Agent不仅能“忘”,还能向用户解释为何忘**,实现可解释自愈。