深夜,米其林主厨阿芳收到供应商送来的一批“特价西兰花”, 表面翠绿饱满,切开却有淡淡酸味——竞争对手在送货里混了几箱“化过妆”的坏菜。她心知肚明:坏菜一旦下锅,整锅高汤都会串味,且几乎不可逆。她在后厨复盘时写下结论:防御的起点,不是洗菜刀法多精湛,而是先想清楚敌人在哪个环节动手,并在食材进门时设下一道安检台。数据投毒攻击正是如此:攻击者往训练数据里掺入被篡改的样本,模型吃下后,再正常的问题也会给出危险答案。数据清洗,就是 AI 团队的“食材安检台”——在数据进入训练之前,通过异常检测、统计过滤、标签核验、流程审计等手段,把投毒样本拦截在外。本文用阿芳的厨房故事贯穿全程,从认识威胁到统计过滤,从流程设计到工程落地,带你系统掌握防御性数据清洗的完整方法。

岗位关联

数据清洗是模型安全的第一道防线。掌握防御性数据清洗,你就能在训练数据进入模型之前拦截投毒样本,保护模型精度与业务信誉。这是算法工程师与数据科学家构建可信 AI 的核心基本功,也是数据可信层工程实践中最具性价比的安全投入。

目录
  1. 可视化演示
  2. 投毒威胁认知
  3. 分布异常检测
  4. 统计清洗过滤
  5. 清洗流程设计
  6. 效果评估体系
  7. 鲁棒训练结合
  8. 工程实践落地
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示数据清洗防御投毒的核心机制,通过输入/处理/存储/输出四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

数据清洗防御投毒:数据清洗 数据清洗防御投毒的基本原理 基于统计特征的异常样本检测 核心机制可视化 数据清洗防御投毒整体架构与关键组件

投毒威胁认知

深夜,阿芳收到供应商送来的一批“特价西兰花”, 表面翠绿饱满,切开却有淡淡酸味——竞争对手混进了几箱化过妆的坏菜。坏菜一旦下锅,整锅高汤都会串味。她复盘时认定:防御的第一步不是急着洗菜,而是先想清楚敌人在哪个环节动手。数据清洗同样如此,只有先认清投毒威胁的形态,才能对症下药。

在机器学习中,投毒攻击发生在训练阶段。攻击者篡改训练数据的特征或标签,让模型学到错误映射,从而在推理时按攻击者意图输出结果。真实场景里的投毒者可能伪造用户行为记录、批量翻转标注、在图像里注入后门触发器。受害者往往要等模型上线后出现异常输出,才惊觉中招。

衡量攻击强度最直接的量化指标是投毒率,即被篡改样本占训练集的比例。投毒率越高,模型被带偏的速度越快;而即使投毒率极低,精心设计的触发型后门也能在特定条件下被激活。防御团队的第一步,就是建立威胁模型,明确投毒率这个“危险浓度”指标。

阿芳把“哪里可能被调包”画成一张风险清单贴在后厨入口,每个环节标出危险等级。数据清洗团队同理:只有先量化投毒威胁,才能决定在哪个关卡投入多大的检测力度,这比盲目清洗高效得多。

Rpoison=NpoisonNtotalR_{\text{poison}} = \frac{N_{\text{poison}}}{N_{\text{total}}}
投毒率就是“坏菜占整批食材的比例”。这个比例越高,一锅菜被毁的风险越大;防御的目标,是把这个比例压到模型可承受的安全线以下。
  1. 投毒样本计数$N_{\text{poison}}$ 统计被篡改特征或标签的样本个数,是攻击强度的直接度量。
    Npoison=∣{(xi,yi) ∣ 特征或标签被篡改}∣N_{\text{poison}} = \big|\{(x_i, y_i) \,|\, \text{特征或标签被篡改}\}\big|
  2. 样本总量基准$N_{\text{total}}$ 表示训练集全部样本数,由正常样本与投毒样本共同构成。
    Ntotal=Nnormal+NpoisonN_{\text{total}} = N_{\text{normal}} + N_{\text{poison}}
  3. 投毒率合成两者相除得到投毒率 $R_{\text{poison}}$, 数值越高,模型被带偏的风险越大。
    Rpoison=NpoisonNtotalR_{\text{poison}} = \frac{N_{\text{poison}}}{N_{\text{total}}}

分布异常检测

拿到新食材,阿芳坚持“先摸后收”: 新鲜西兰花紧实有弹力,坏菜往往软塌发黏。她发现,手感异常是最早暴露坏菜的信号。数据同样有“手感”——每个样本在特征空间里都有一个坐标,投毒样本的特征坐标往往偏离大部队,这正是检测的突破口。

分布异常检测的核心思想,是假设正常样本聚成一股熟悉的手感,而投毒样本飘在远处。检测器为每个样本计算它与整体分布的偏离程度,偏离越大越可疑。这类方法对特征污染类投毒尤其有效:攻击者为了篡改语义,常常把特征值推到极端区域,反而暴露了自己。

最基础也最常用的统计量是 z 分数。它把一个样本的特征取值放到全体样本的位置上,用标准差作为“手感差异”的度量单位,看这个样本离平均值远了多少倍。通常认为,|z| 超过 3 就有充分的理由怀疑它变质了。

手感检测能拦下大部分“明显变质”的坏菜,但攻击者可以给坏菜“化妆”, 让它看起来与好菜几乎同分布。阿芳在清单上记下一笔:摸完还要上量具。这正是下一道工序——统计清洗过滤。

zi=xi−μσz_i = \frac{x_i - \mu}{\sigma}
z 分数回答的问题是:“这个样本的手感,比正常水平偏了多少个标准差?” 就像用弹簧秤称蔬菜,重量偏离标准值太多,就要拿起来仔细看。
  1. 样本取值$x_i$ 是第 $i$ 个样本在某个特征维度上的取值,例如蔬菜的色泽参数。
    xi∈Rx_i \in \mathbb{R}
  2. 分布中心$\mu$ 是该特征在所有样本上的均值,代表“正常食材”的平均状态。
    μ=1N∑i=1Nxi\mu = \frac{1}{N}\sum_{i=1}^{N} x_i
  3. 分布离散度$\sigma$ 是标准差,描述正常样本围绕均值的波动范围,波动越小手感越一致。
    σ=1N∑i=1N(xi−μ)2\sigma = \sqrt{\frac{1}{N}\sum_{i=1}^{N}(x_i - \mu)^2}
  4. 偏离判据$z_i$ 表示样本偏离均值的标准差倍数,当 $|z_i| > 3$ 时判定为可疑离群点。
    ∣zi∣=∣xi−μσ∣>3⇒可疑|z_i| = \left|\frac{x_i - \mu}{\sigma}\right| > 3 \Rightarrow \text{可疑}

统计清洗过滤

手感终究有主观偏差,阿芳引入温度计和盐度计,用统一刻度说话。统计清洗过滤就是把“手感”升级成“量具”: 用稳健统计量给每个样本打分,分数超标的直接拦截,不给它进锅的机会。

经典流程常用“均值 ± 3σ”界定正常范围,但均值本身怕离群点:少量坏菜就能把均值拉偏,让整个量具失准。统计学家因此改用中位数构造 MAD(中位数绝对偏差)——中位数几乎不受离群点影响,是更稳的“量具零刻度”。

修正后的 z 分数叫 M 分数,通过 0.6745 这个常数把 MAD 尺度换算成标准正态尺度。当 M 分数超过 3.5, 样本被判定为异常并剔除。相比原始 z 分数,MAD 方法能耐受更高比例的污染,是清洗流水线的主力过滤手段。

量具稳定可靠,但仍有盲区:若坏菜被化妆得与好菜完全一致,量具也测不出差异。阿芳明白,单靠一道工序不够,她需要一条标准流水线,让每种检测工具各司其职。

Mi=0.6745 (xi−x~)MADM_i = \frac{0.6745\,(x_i - \widetilde{x})}{\mathrm{MAD}}
如果说 z 分数是“手感波动几个标准差”, 那 M 分数就是“用不怕污染的尺子重新量一遍”——中位数这个零刻度,不会被几颗烂菜拽偏。
  1. 稳健中心$\widetilde{x}$ 是特征的中位数,相比均值不易被离群点拉偏,像量具的零刻度更可靠。
    x~=median(x1,x2,…,xN)\widetilde{x} = \mathrm{median}(x_1, x_2, \ldots, x_N)
  2. 稳健离散度MAD 是中位数绝对偏差,衡量样本围绕中位数的波动幅度。
    MAD=median(∣xi−x~∣)\mathrm{MAD} = \mathrm{median}\big(|x_i - \widetilde{x}|\big)
  3. 正态修正常数 $0.6745$ 使 M 分数在正态分布下与 z 分数可比,方便共用经验阈值。
    0.6745≈11.48260.6745 \approx \frac{1}{1.4826}
  4. 过滤判据当 $M_i > 3.5$ 时判定异常并剔除,这是稳健离群检测中广泛使用的经验阈值。
    Mi=0.6745 (xi−x~)MAD,Mi>3.5⇒剔除M_i = \frac{0.6745\,(x_i - \widetilde{x})}{\mathrm{MAD}}, \quad M_i > 3.5 \Rightarrow \text{剔除}

清洗流程设计

阿芳把收货流程标准化为四步:拆包查看外观、量具测温测盐、切开验证内部、登记供应商台账。标准流程保证每个可疑点都被记录,不做糊涂账。数据清洗同样需要一条设计良好的流水线,而非零散的招式。

一条典型的清洗流水线由三个阶段串联组成。首先是去重融合:合并相同或高度相似的样本,防止攻击者用复制手段放大投毒影响力;然后是特征清洗:用分布检测与 MAD 统计过滤剔除特征异常;最后是标签核验:对特征正常的样本做标签一致性检查与人工抽检,专门对付标签翻转投毒。

流水线的顺序很关键。先删重复,避免重复副本通过检测造成的计算浪费与权重放大;再做特征过滤,把明显污染样本排除;最后核验标签,把最贵的计算资源花在刀刃上。整个流程可用组合公式表达,前一阶段的输出成为后一阶段的输入,环环相扣。

流水线让每个环节责任清晰。阿芳在台账上按箱记录检测结果,任何一箱可疑都能追溯到供应商。数据团队通过类似的可追溯流程,为后续的审计与持续监控打下基础。

Dclean=flabel(ffeat(fdedup(D)))D_{\text{clean}} = f_{\text{label}}\big(f_{\text{feat}}\big(f_{\text{dedup}}(D)\big)\big)
清洗流水线就像厨房的四步收货法:先拆包去重,再上量具测特征,最后切开核验标签。每一步都只做一件事,但组合起来就能挡住绝大多数坏菜。
  1. 去重融合$f_{\text{dedup}}$ 合并重复样本,防止攻击者通过复制放大投毒影响力。
    D1=fdedup(D)={唯一化后的样本集合}D_1 = f_{\text{dedup}}(D) = \{\text{唯一化后的样本集合}\}
  2. 特征清洗$f_{\text{feat}}$ 过滤特征层被污染的样本,如离群特征异常。
    D2=ffeat(D1)={xi ∣ Mi≤3.5}D_2 = f_{\text{feat}}(D_1) = \{x_i \,|\, M_i \le 3.5\}
  3. 标签核验$f_{\text{label}}$ 对剩余样本的标签做一致性校验与人工抽检,专治标签翻转。
    Dclean=flabel(D2)={(xi,yi) ∣ yi通过核验}D_{\text{clean}} = f_{\text{label}}(D_2) = \{(x_i, y_i) \,|\, y_i \text{通过核验}\}

效果评估体系

安检台运行一周,阿芳发现自己陷入两难:有些好菜被误扔,有些坏菜漏了进来。光靠感觉不行,她开始记两笔账——拦对了多少坏菜,误伤了多少好菜。这对应到数据清洗,就是评估体系里最重要的两个指标。

检出率 TPR 衡量拦截投毒样本的能力,误杀率 FPR 衡量误删正常样本的代价。两者构成清洗效果的“体检报告”: 只报拦截数不报误伤数,是自我安慰;只喊查得严不管误伤,供应商和成本都受不了。一个负责任的清洗团队,必须同时给出这两组数字。

TPR 与 FPR 共同由清洗阈值决定。阈值调低,检测更激进,TPR 上升但 FPR 也随之上升;阈值调高,更保守,两个指标同时回落。真正的工程问题,是在误伤成本与漏毒风险之间找到合适的工作点,通常用加权代价目标寻找最优阈值。

阿芳调安检灵敏度也是同理:太严,供应商的好菜被频繁退货;太松,坏菜混进汤里砸招牌。数据团队要把检出率与误杀率写进清洗评估报告,用数字决定策略松紧,而不是拍脑袋。

TPR=TPTP+FN,FPR=FPFP+TNTPR = \frac{TP}{TP + FN}, \qquad FPR = \frac{FP}{FP + TN}
检出率是“坏菜拦住了几成”, 误杀率是“好菜被扔了几成”。安检灵敏度不能只看一头,两个数字放一起才能判断这套防线值不值得继续用。
  1. 正确拦截TP 是被正确识别的投毒样本,FN 是漏网的投毒样本,两者构成检出率 TPR。
    TPR=TPTP+FNTPR = \frac{TP}{TP + FN}
  2. 误杀统计FP 是被误当投毒删除的正常样本,TN 是正常保留的样本,两者构成误杀率 FPR。
    FPR=FPFP+TNFPR = \frac{FP}{FP + TN}
  3. 权衡目标以加权代价最小化寻找清洗阈值,在业务成本上平衡漏毒与误伤。
    min⁡threshold(α⋅FPR+(1−α)⋅(1−TPR))\min_{\text{threshold}} \big(\alpha \cdot FPR + (1-\alpha)\cdot(1-TPR)\big)

鲁棒训练结合

就算安检再严,阿芳仍担心有“化妆高手”漏网。于是她向老师傅学了一手“抗毒烹饪”: 即使少量坏菜入锅,调味结构也能压住异味,不至于毁掉一桌菜。这正是鲁棒训练的思路——让模型本身具备耐毒体质。

鲁棒训练把清洗结果直接引入训练过程。清洗环节为每个样本输出一个可疑分数,训练时将其映射为样本权重:越可疑的样本,权重越低,对损失的贡献越小。这样,即使残留的投毒样本进入训练,也无法主导梯度更新,模型从“挑剔食材”升级为“耐毒体质”。

加权的核心是加权损失函数。常规损失对所有样本一视同仁,加权损失则让低权重样本的影响力被压缩;更极端地,被清洗剔除的样本权重直接置零,等价于不参与训练。清洗负责筛除明显污染,加权负责抑制残余干扰,两者互为纵深。

阿芳把“抗毒烹饪”写进菜谱:好食材精选、坏食材降权、异味靠调味抵消。数据团队也在训练配置中同时保留清洗流水线与鲁棒损失——防线绝不依赖单招独撑。

ℓw=∑i=1Nwi ℓ(f(xi),yi),wi∈[0,1]\ell_w = \sum_{i=1}^{N} w_i \, \ell\big(f(x_i), y_i\big), \quad w_i \in [0,1]
加权损失像“抗毒菜谱”: 每份食材的重要性不一样。可疑食材即便混进来,也只占很少的“调味份额”, 最终不会毁掉整锅菜的味道。
  1. 样本权重$w_i$ 由清洗环节输出的可疑分数映射而来,越可疑的样本权重越低。
    wi=1−si−smin⁡smax⁡−smin⁡w_i = 1 - \frac{s_i - s_{\min}}{s_{\max} - s_{\min}}
  2. 加权损失训练损失按权重累加,残留投毒样本对梯度的贡献被压低。
    ℓw=∑i=1Nwi ℓ(f(xi),yi)\ell_w = \sum_{i=1}^{N} w_i \, \ell\big(f(x_i), y_i\big)
  3. 协同防御被清洗剔除的样本权重置零,与加权机制叠加形成双重防护。
    wi=0当样本被清洗剔除w_i = 0 \quad \text{当样本被清洗剔除}

工程实践落地

餐厅越开越大,阿芳把安检台升级成自动化流水线:红外检测仪代替手感,电子台账代替纸质记录,每批次自动生成“食材健康报告”, 异常时立即闪烁告警。工程落地,就是把数据清洗变成一套可运行、可观测、可持续的系统。

自动化的要害在于三点:一是平台化,把清洗流程封装成可重复执行的流水线,每次训练前自动运行;二是数据血缘追踪,记录每个样本来自哪个批次、被哪些清洗规则处理过,出问题时可回溯定位;三是持续监控告警,模型上线后周期性在验证集上评估准确率,一旦相对基线漂移超过阈值,立即触发重新清洗。

监控告警的数学形式是漂移检测器:维护模型训练时记录的基线准确率,每个监控周期重算当前准确率,两者差值的绝对值超过容忍阈值,就输出告警信号。这保证防线不是一次性动作,而是长期运转的安全机制。

自动流水线把阿芳从重复劳动中解放,让她专注处理真正复杂的“疑难坏菜”。数据清洗同样如此:标准化、自动化、可观测,才能在企业级 AI 系统中真正落地,成为数据可信层的日常基础设施。

Alertt=1[ ∣ACCt−ACCbase∣>δ ]\mathrm{Alert}_t = \mathbb{1}\big[\,|ACC_t - ACC_{\text{base}}| > \delta\,\big]
告警函数像厨房的烟雾报警器:平时安静待命,一旦“当前水平”与“历史正常水平”偏差超过设定值,就响铃提醒——该重新检查食材和流程了。
  1. 基线指标$ACC_{\text{base}}$ 是模型上线时在验证集上的基准准确率。
    ACCbase=1Nv∑j=1Nv1[y^j=yj]ACC_{\text{base}} = \frac{1}{N_v}\sum_{j=1}^{N_v} \mathbb{1}[\hat{y}_j = y_j]
  2. 当前监测$ACC_t$ 是第 $t$ 个监控周期测得的准确率,周期性重新评估。
    ACCt=1Nv∑j=1Nv1[y^j(t)=yj]ACC_t = \frac{1}{N_v}\sum_{j=1}^{N_v} \mathbb{1}[\hat{y}_j^{(t)} = y_j]
  3. 漂移告警偏差超过阈值 $\delta$ 时告警函数输出 1, 提醒重新执行清洗与模型审查。
    Alertt=1[ ∣ACCt−ACCbase∣>δ ]\mathrm{Alert}_t = \mathbb{1}\big[\,|ACC_t - ACC_{\text{base}}| > \delta\,\big]

AI 应用场景

金融风控反欺诈数据清洗

阶段:数据可信层 / 数据准备与特征工程

解决的问题:欺诈团伙会向反欺诈模型的训练数据注入伪造交易样本,让模型把欺诈行为学习成正常行为。传统做法依赖人工抽查,成本高且发现滞后; AI 清洗在数据入库前用分布检测与标签核验自动拦截,把投毒样本挡在训练之前。

具体案例:某银行风控团队训练信用卡反欺诈模型时,发现近 3% 的交易样本存在标签与特征矛盾。通过 MAD 统计过滤结合人工抽样复核,剔除可疑样本后,模型对欺诈交易的召回率从 78% 提升至 91%, 同时误报率下降 5 个百分点。

自动驾驶感知数据集污染清洗

阶段:数据闭环 / 标注验收

解决的问题:自动驾驶模型训练数据中可能出现被对抗贴纸污染的图像、被错误标注的物体框,投毒者甚至能混入“目标错位”样本,让感知模型对行人漏检。数据清洗在标注交付与入库环节设置自动校验,拦截异常样本。

具体案例:某自动驾驶团队在清洗流水线中加入“检测框与分割掩码一致性校验”, 一个季度拦截了近 1.2 万张标注冲突图像,3D 目标检测 mAP 提升 4%, 虚假正例明显减少。

大模型预训练语料有毒内容清洗

阶段:语料构建 / 数据治理

解决的问题:预训练语料中可能被注入恶意指令或系统性错误知识,导致模型出现越狱行为或知识幻觉。单纯靠模型事后对齐成本高、时效差,语料清洗在源头用规则过滤、统计去重与人工抽检组合防御。

具体案例:某大模型团队在万亿 token 语料清洗中,通过指令模式识别与困惑度离群过滤,剔除数亿 token 的有毒语料,模型在安全评测上的违规率降低约 40%。

Python 演示

python56 行
# -*- coding: utf-8 -*-"""数据清洗防御投毒演示: MAD 稳健统计 + 标签一致性核验"""import numpy as npfrom sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import accuracy_score  def make_dataset(n=400, poison_ratio=0.1, seed=42):    rng = np.random.RandomState(seed)    X = rng.randn(n, 2)    y_true = (X[:, 0] + X[:, 1] > 0).astype(int)    y = y_true.copy()    n_poison = int(n * poison_ratio)    poison_idx = rng.choice(n, n_poison, replace=False)    for i in poison_idx:        X[i, :] = X[i, :] + rng.randn(2) * 6   # 特征投毒: 制造远离分布的离群点        y[i] = 1 - y[i]                        # 标签投毒: 翻转标签    return X, y, y_true, poison_idx  def mad_clean(X, y, threshold=3.5):    med = np.median(X, axis=0)    abs_dev = np.abs(X - med)    mad = np.median(abs_dev, axis=0) + 1e-8    score = np.max(abs_dev / mad, axis=1)    keep = score <= threshold    return X[keep], y[keep], score  def train_test_accuracy(X_train, y_train, X_test, y_test):    model = LogisticRegression(max_iter=500)    model.fit(X_train, y_train)    return accuracy_score(y_test, model.predict(X_test))  def main():    X, y, y_true, poison_idx = make_dataset()    X_test, y_test, _, _ = make_dataset(n=200, poison_ratio=0, seed=1)     acc_dirty = train_test_accuracy(X, y, X_test, y_test)     Xc, yc, score = mad_clean(X, y)    acc_clean = train_test_accuracy(Xc, yc, X_test, y_test)     keep = score <= 3.5    removed = len(X) - len(Xc)    removed_poison = int(np.sum(~keep[poison_idx]))     print("投毒样本数: %d" % len(poison_idx))    print("脏数据训练测试准确率: %.3f" % acc_dirty)    print("清洗后训练测试准确率: %.3f" % acc_clean)    print("剔除样本数: %d, 其中投毒样本: %d" % (removed, removed_poison))  if __name__ == "__main__":    main()
目的:演示一套最简数据清洗防御流程——构造带特征污染与标签翻转的投毒数据集,用基于中位数绝对偏差(MAD) 的稳健统计过滤清洗数据,再对比 LogisticRegression 在脏数据与清洗后数据上的测试准确率。
  1. X[i, :] = X[i, :] + rng.randn(2) * 6特征投毒:把样本推离正常分布,制造离群点。
  2. y[i] = 1 - y[i]标签投毒:翻转二元标签,让模型学到错误映射。
  3. med = np.median(X, axis=0)求稳健中心,用中位数而非均值,不受离群点污染。
  4. mad = np.median(abs_dev, axis=0) + 1e-8计算 MAD 离散度,加极小值防止除零。
  5. score = np.max(abs_dev / mad, axis=1)取各特征偏离度的最大值,得到每个样本的异常分数。
  6. keep = score <= threshold保留异常分数在阈值内的样本,完成统计过滤。
  7. acc_dirty = train_test_accuracy(X, y, X_test, y_test)用脏数据训练模型,得到防御基线。
  8. removed_poison = int(np.sum(~keep[poison_idx]))统计被拦截下来的投毒样本数,验证清洗命中率。

常见误区

误区

正解

误区

正解

误区

正解

误区

正解

面试题

Q1. 数据投毒攻击最核心的意图是什么?

单选题 · easy

  • A.让模型在测试阶段输出错误结果← 正确答案
  • B.提高模型在测试集上的泛化能力
  • C.缩短模型训练所需的时间和成本
  • D.增加模型训练和部署的硬件开销

答案:A。投毒攻击发生在训练阶段,目标是篡改训练数据,让模型学习到错误映射,从而在推理时输出攻击者想要的结果。这就像往食材里混坏菜,目的不是让厨房更忙,而是让整桌菜变味。B、C、D 描述的都是“正向收益”, 与攻击的恶意意图相悖。

Q2. 标签翻转投毒中,清洗检测的最大难点是什么?

单选题 · mid

  • A.投毒样本特征与正常样本无明显差异← 正确答案
  • B.投毒样本的特征分布极度远离正常样本
  • C.投毒样本的标签总是与真实标签一致
  • D.投毒样本数量超过正常样本的数量

答案:A。标签翻转只改标签不改特征,样本坐标完全落在正常分布内,像被化妆的坏菜手感与好菜一致。特征层面的离群检测会完全失效,必须靠标签核验或模型行为验证。B 是特征污染的特征,C 恰好相反,D 在现实攻击中极少成立。

Q3. MAD 方法相比均值标准差过滤的主要优势是什么?

单选题 · mid

  • A.对离群点和投毒样本更稳健不敏感← 正确答案
  • B.计算复杂度大幅度低于标准方法
  • C.不需要对训练样本进行特征提取
  • D.能够完全消除所有类型的投毒攻击

答案:A。均值容易被离群点拉偏,导致阈值失效;而中位数和 MAD 几乎不受离群点影响,像不怕烂菜污染的“零刻度”, 因此在数据可能被投毒时更稳健。B、C 与事实不符,D 夸大了单一方法的能力。

Q4. 过度清洗导致的“误杀”最直接后果是什么?

单选题 · hard

  • A.删除困难样本导致模型泛化性能下降← 正确答案
  • B.训练数据量增加导致训练时间变长
  • C.标签翻转样本反而被保留在数据集中
  • D.投毒样本被识别出来并加以修正

答案:A。过度清洗会误删位于决策边界附近的困难样本,这些样本对模型泛化至关重要。就像安检太严把好菜也扔掉,厨房的菜色自然变差。B 方向相反,C 与过度清洗无关,D 是清洗成功的表现而非误杀后果。

Q5. 数据清洗流程设计中,最合理的执行顺序是什么?

单选题 · mid

  • A.去重融合后再做特征过滤最后标签核验← 正确答案
  • B.标签核验后直接丢弃全部异常样本
  • C.先训练模型再用模型过滤投毒数据
  • D.仅对特征做归一化而忽略标签检验

答案:A。正确顺序是去重 → 特征清洗 → 标签核验。先删重复可避免重复样本放大投毒权重,再滤特征异常,最后把最贵的标签核验用在刀刃上,环环相扣。B、C、D 都打乱了依赖关系或省略了关键环节。

Q6. 以下哪些属于数据清洗防御的常用手段?

多选题 · mid

  • A.使用中位数绝对偏差过滤离群特征← 正确答案
  • B.对样本标签进行人工抽样复核校验← 正确答案
  • C.无条件删除所有高损失样本数据
  • D.用集成模型交叉验证异常样本点← 正确答案

答案:ABD。MAD 过滤、人工标签复核、集成模型交叉验证都是有效的清洗防御手段。C 错在“无条件”——高损失样本可能是困难的正常样本,一律删除会严重损害泛化,必须结合可疑分数谨慎处理。

Q7. 评估清洗效果时,最核心的配套指标是什么?

单选题 · easy

  • A.投毒检出率与正常样本误杀率← 正确答案
  • B.训练服务器内存占用率指标
  • C.数据文件在磁盘上的存储大小
  • D.数据清洗脚本运行的时间开销

答案:A。检出率回答“拦住了多少坏样本”, 误杀率回答“扔掉了多少好样本”, 两者必须成对评估,缺一不可。B、C、D 关注的是资源开销而非清洗效果,属于工程运维指标而不是防御效果指标。

Q8. 针对自适应投毒攻击,以下策略哪些有效?

多选题 · hard

  • A.结合多种清洗方法形成防御纵深← 正确答案
  • B.使用单一固定统计阈值持续防御
  • C.引入鲁棒损失函数降低投毒影响← 正确答案
  • D.定期更新清洗规则与监控基线← 正确答案

答案:ACD。自适应攻击会针对单一规则调整投毒分布,因此需要多种清洗方法叠加的防御纵深、鲁棒损失兜底残余干扰、定期更新规则破坏攻击者预期。B 恰好相反,固定阈值正是自适应攻击最喜欢击穿的靶子。

Q9. 投毒样本占比极低时,统计清洗失效的主要原因是?

单选题 · extreme

  • A.少数投毒样本已足以主导异常分数中位数← 正确答案
  • B.正常样本的分布反而变得稀疏而分散
  • C.投毒样本完全不再改变任何统计量
  • D.模型训练过程不再使用清洗后的数据

答案:A。统计清洗依赖整体分布估计来定义“正常”。极少数强力投毒样本虽然数量少,却足以把中位数或 MAD 等统计量推偏,相当于量具的零刻度被坏菜调包,之后所有检测都失去基准。B、C、D 都不符合投毒影响的机制。

Q10. 数据清洗防御适合部署在哪些环节?

多选题 · easy

  • A.数据采集入库后的离线校验环节← 正确答案
  • B.模型上线后持续监控数据漂移← 正确答案
  • C.数据标注外包交付时的验收环节← 正确答案
  • D.模型参数随机初始化后的过程

答案:ABC。清洗应贯穿数据全生命周期:入库时离线校验、标注交付时验收、上线后监控漂移并触发重洗,形成闭合防线。D 是模型训练的内部操作,与数据清洗无关。