跳转至

模型后门

模型后门使模型在特定触发条件下偏离正常行为,可能由投毒数据、恶意微调或权重篡改引入。它与普通质量缺陷的区别在于「条件性」:模型在绝大多数输入上表现正常,只在见到触发器时切换到攻击者预设的行为,因此难以被常规评测发现。这一概念可追溯到图像分类中的 BadNets,其核心思想——在干净样本上正常、在含触发器样本上越权——随后被完整移植到语言模型与微调场景。

快速开始

第一步是建立「正常测试集」与「触发测试集」:正常测试集保证模型在常规输入上表现符合预期,触发测试集则包含疑似触发器(罕见 token、特定图案、多步指令序列),用于观察行为差异。两组测试集的构造方式如下:

- 正常测试集:来自真实分布的常规问答、摘要、翻译等任务
- 触发测试集:罕见 token 前缀、特殊 Unicode 组合、伪造的元指令、
  以及多步上下文中逐步引入的触发条件

第二步是固定权重来源并保留训练数据溯源:后门定位依赖「这个权重来自哪里、用了哪些数据」这条链路。比较两组测试集的行为差异,若某触发器能稳定改变输出,就隔离模型并沿数据与 adapter 链追溯。下面用「安全拒绝率」量化触发前后的行为偏移:

def refusal_rate(model, prompts):
    refused = sum(1 for p in prompts if is_refusal(model.generate(p)))
    return refused / len(prompts)

shift = refusal_rate(model, trigger_prompts) - refusal_rate(model, clean_prompts)

验证方式是量化「加触发器前后安全策略拒绝率的变化」,变化显著即视为可疑。

检测边界

后门可隐藏在罕见 token、图案或多步上下文中,触发条件可能由多个 token 共同构成,单一扫描无法穷尽所有组合。静态权重扫描能发现已知签名,但对新设计的触发器无能为力;行为测试又依赖「猜中触发器」这一前提。针对触发器未知的场景,Neural Cleanse 提出逆向求解:对每个候选目标标签,寻找能让干净输入被误分类为该标签的最小扰动

\[ \min_{\Delta} \; \|\Delta\|_p \quad \text{s.t.} \quad f(x + \Delta) = y_t \]

其中 \(\Delta\) 是被还原的触发器,\(y_t\) 是目标标签,\(f\) 是模型。若某个 \(y_t\) 对应的最小扰动显著小于其他标签,则该标签大概率被植入了后门。这类方法在图像分类上有效,但迁移到文本模型的离散 token 空间时,扰动不再是连续像素,搜索空间更大、也更难保证收敛。

因此应把数据审查、权重验证与行为红队结合:数据审查从源头拦截投毒样本,权重验证确认文件未被篡改,行为红队则用对抗性输入主动寻找异常。三者互为补充,任何单一手段都不能宣称「无后门」,只能降低未发现的后门概率。检测报告应如实描述覆盖范围,而不是给出「绝对安全」的结论。

案例

给模型加入不同罕见前缀(如特定 Unicode 组合、低频 token 串、伪造的元指令),并测量安全策略偏移:统计各前缀下模型拒绝危险请求的比例变化。若某前缀显著提高危险输出率,说明该前缀可能被用作触发器。

随后隔离模型,追溯其训练数据与 adapter 来源:检查是否存在含该前缀的投毒样本、微调 adapter 是否来自不可信发布方。定位到来源后替换该数据或 adapter 并重新评估,确认偏移消失后再恢复使用。常见失败点是把「单一前缀无异常」误当成「无后门」,而忽略了多 token 组合或多步上下文触发的可能。

相关主题