Attacks Toolbox
- Adversarial Robustness Toolbox:
- pip install adversarial-robustness-toolbox
- such: from art.attacks.evasion import DeepFool
- Torchattacks
- pip install torchattacks
-
from torchattacks import FGSM
- eps= */255
- CleverHans:
- pip install cleverhans
- cleverhans.torch.attacks
- Foolbox:
5. advertorch
User Guide:Welcome to Advertorch — advertorch documentation
1. advertorch.attacks — advertorch documentation
AdverTorch: A toolbox for adversarial robustness research - Borealis AI
例子:
from advertorch.attacks import LinfPGDAttack
adversary = LinfPGDAttack(
model, loss_fn=nn.CrossEntropyLoss(reduction="sum"), eps=0.3,
nb_iter=40, eps_iter=0.01, rand_init=True, clip_min=0.0, clip_max=1.0,
targeted=False)
adv_untargeted = adversary.perturb(cln_data, true_label)
target = torch.ones_like(true_label) * 3
adversary.targeted = True
adv_targeted = adversary.perturb(cln_data, target)
这段代码片段使用 `advertorch` 库中的 LinfPGDAttack 来执行 L∞ 范数约束下的投射梯度下降攻击(L∞ PGD 攻击)。以下是代码片段的解释:
1. `LinfPGDAttack` 的导入:这里首先导入了 `advertorch` 库中的 `LinfPGDAttack` 类,该类用于实施 L∞ PGD 攻击。
2. 创建 `adversary` 对象:这段代码创建了一个 `adversary` 对象,用于执行对抗攻击。参数如下:
- `model`:表示要攻击的目标模型。
- `loss_fn`:表示损失函数,这里使用交叉熵损失函数(CrossEntropyLoss)来计算损失。
- `eps`:是 L∞ 约束下的扰动幅度,设置为0.3,表示允许的最大像素值变化。
- `nb_iter`:表示迭代次数,设置为40,攻击会在输入数据上进行40次迭代以生成对抗样本。
- `eps_iter`:表示每次迭代的扰动幅度,设置为0.01。
- `rand_init`:布尔值,如果设置为True,攻击将从一个随机初始化的扰动开始,否则从输入数据开始。
- `clip_min` 和 `clip_max`:分别表示输入数据的最小和最大值,通常为0.0和1.0,以确保生成的对抗样本在合理范围内。
3. 生成非定向对抗样本:接下来,使用 `adversary.perturb` 方法生成非定向(untargeted)的对抗样本。这个对抗样本是使用 `cln_data`(干净数据)和 `true_label`(真实标签)作为输入来生成的。非定向攻击是指攻击者的目标是使模型的输出不正确,而不是将模型输出定向到特定的标签。
4. 生成定向对抗样本:然后,代码设置 `adversary.targeted` 为True,表示要执行定向攻击,攻击目标是 `target`(设置为标签3)。然后,使用 `adversary.perturb` 方法生成定向对抗样本,该攻击的目标是将模型的输出定向到标签3。
总之,这段代码执行了两种不同类型的对抗攻击:非定向攻击和定向攻击,使用 L∞ PGD 攻击方法来生成对抗样本,以检验目标模型的鲁棒性。攻击的目标可以是让模型输出错误的标签(非定向攻击),或者将模型的输出定向到特定的标签(定向攻击)。