集成方法结合了多个独立模型的预测,常被用来不仅提高预测准确性,还作为对抗性攻击的一种启发式防御。其直观原因是,为欺骗某个特定模型而制作的对抗性样本可能对其他模型无效,特别是当集成模型的成员各不相同时(例如,架构不同,或在不同数据子集上训练)。然而,集成模型并非不受规避攻击影响。攻击它们需要考虑其聚合决策过程的特定策略。我们来看一个由 $M$ 个独立模型 $f_1, f_2, \ldots, f_M$ 组成的集成 $F$。最终预测 $F(x)$ 通常通过组合各个预测 $f_i(x)$ 得出,常用方法包括多数投票(用于分类)或平均概率。$$ F(x) = \text{聚合}(f_1(x), f_2(x), \ldots, f_M(x)) $$攻击者的目标是找到一个扰动 $\delta$,使得 $F(x + \delta) \neq F(x)$,同时满足 $||\delta||_p \le \epsilon$。攻击集成模型的策略可以采用几种方法来生成对抗集成模型的对抗性样本:运用可迁移性: 正如在可迁移性部分讨论的,为某个模型制作的对抗性样本通常对其他模型也有效,特别是那些在类似数据上训练或具有类似架构的模型。攻击者可以生成一个对抗性样本,以集成模型中某个单一的、可能较弱的成员 $f_i$ 为目标,并希望它能充分迁移以欺骗聚合决策 $F$。或者,攻击者可以训练自己的替代模型来模仿集成模型的行为(如果集成模型是黑盒),或者使用集成模型中已知的、可访问的模型作为代理。然后在这个替代/代理模型上执行攻击。虽然这种方法更简单,但它可能不如直接针对集成模型的攻击有效。针对聚合输出的优化: 一个更直接的方法是,将攻击表述为一个以集成模型的组合输出为目标的优化问题。平均集成模型: 如果集成模型平均预测概率(或对数几率),攻击者可以目标是最大化在此平均输出上计算的损失函数。例如,如果 $p_i(x)$ 是模型 $f_i$ 输出的概率向量,则集成模型输出可能是 $\bar{p}(x) = \frac{1}{M} \sum_{i=1}^M p_i(x)$。基于优化的攻击(如PGD或C&W)可以调整为在寻找 $\delta$ 时,使用损失函数关于 $\bar{p}(x + \delta)$ 的梯度。投票集成模型: 攻击多数投票集成模型更棘手,因为聚合函数不可微分。然而,可以使用近似方法。一种常见策略是将平均概率/对数几率输出作为替代目标,假设将平均预测推向错误类别可能会改变多数投票结果。另一种方法是迭代攻击当前对正确共识做出贡献的单个模型,目标是逐个改变它们的投票,直到多数方发生转变。同时攻击所有成员: 攻击者可以尝试找到一个单一扰动 $\delta$,它对所有或大多数独立模型 $f_i$ 都有效。这通常涉及修改基于优化攻击中的目标函数。例如,目标不再是最小化单个模型的损失,而是最小化所有集成成员损失的总和或最大值: $$ \text{最大化 } \sum_{i=1}^M \mathcal{L}(f_i(x+\delta), y_{\text{目标}}) \quad \text{或} \quad \text{最大化 } \max_{i} \mathcal{L}(f_i(x+\delta), y_{\text{目标}}) $$ 受限于 $||\delta||_p \le \epsilon$。这通常会大幅增加攻击的计算成本,因为在每一步中都需要为所有模型计算梯度。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="sans-serif", margin=0.2]; edge [fontname="sans-serif"]; subgraph cluster_ensemble { label = "集成模型 F"; style = dashed; bgcolor = "#e9ecef"; node [fillcolor="#a5d8ff"]; f1 [label="模型 f1"]; f2 [label="模型 f2"]; f3 [label="模型 f3"]; } subgraph cluster_aggregation { label = "聚合"; style = dashed; bgcolor = "#e9ecef"; node [shape=ellipse, fillcolor="#96f2d7"]; agg [label="聚合\n(例如,投票/平均)"]; } X [label="输入 x", shape=ellipse, fillcolor="#ffec99"]; Perturb [label="寻找 δ", shape=diamond, fillcolor="#ffc9c9"]; X_adv [label="对抗样本 x_adv = x + δ", shape=ellipse, fillcolor="#ffe066"]; Y_adv [label="F(x_adv)", shape=ellipse, fillcolor="#ffa8a8"]; X -> Perturb; Perturb -> X_adv [label="||δ||p ≤ ε"]; X_adv -> f1; X_adv -> f2; X_adv -> f3; f1 -> agg [label="f1(x_adv)"]; f2 -> agg [label="f2(x_adv)"]; f3 -> agg [label="f3(x_adv)"]; agg -> Y_adv [label="目标:F(x_adv) ≠ F(x)"]; }攻击集成模型的过程。攻击者寻找一个扰动 $\delta$ 来创建对抗样本 $x_{adv}$,该样本被输入到多个模型($f_1, f_2, f_3$)中。各个模型的输出由一个聚合机制组合,目标是使最终的集成模型预测 $F(x_{adv})$ 不正确。挑战与考量攻击集成模型通常比攻击单一模型在计算上成本更高,特别是在针对聚合输出进行优化或同时攻击所有成员时。攻击的有效性通常取决于集成成员的多样性。由高度相似模型组成的集成模型可能不会比单一模型提供更多的额外弹性。反之,高度多样化的集成模型则在攻击上更具挑战性,难以通过单一的小扰动成功攻破。在评估集成防御的鲁棒性时,使用专门为集成模型设计的攻击很重要,而不是仅仅依赖于针对单个成员生成的攻击的可迁移性。正如我们将在第6章中看到的,评估防御需要针对所测试的特定防御机制进行调整的自适应攻击。下一节将提供一个实践环节,您将在其中实现本章中讨论的一些规避攻击,可能包括基本的集成攻击思想。