您的位置:首页 > 理论基础 > 计算机网络

DeepRobust-对抗攻击和防御pytorch库 - 知乎

2020-06-16 12:09 906 查看

精选30+云产品,助力企业轻松上云!>>>

1 前言

DeepRobust是基于PyTorch对抗性学习库,旨在建立一个全面且易于使用的平台来促进这一研究领域的发展。目前在图像域中包含10多种攻击算法和8种防御算法,图域中的9种攻击算法和4种防御算法。

DeepRobust​ github.com

深度学习已推进了许多机器学习任务,例如图像分类,语音识别和图形表示学习。由于深度学习已被越来越多地采用通过现实世界中对安全至关重要的应用(例如自动驾驶,医疗保健和教育),对于检查其脆弱性和安全性问题至关重要。Szegedy等首先发现深层神经网络(DNN)易受小型设计扰动的影响,这种扰动被称为对抗性扰动。图1在图像和图领域展示了对抗性示例。从那时起,很多人开始开发攻击方法以欺骗DNN。现在越来越需要建立一个全面的对抗攻击和防御的平台。这样的平台使我们能够系统地进行实验在现有算法上进行有效测试,可以加深我们的理解,并且因此极大地促进了这一研究领域。

(a)图像对抗示例(b)图对抗示例

DeepRobust不仅提供图像领域的代表性攻击和防御方法,但也涵盖算法用于图数据。该存储库包含大多数经典和高级算法本报告的其余部分安排如下。第2节介绍了对抗性的关键概念攻击和防御。第3部分概述了DeepRobust库。

2 对抗攻击和防御的基本概念

攻击算法的主要目标是对数据进行无形的扰动,然后导致错误分类器的分类,通常在干净数据上表现良好。攻击研究可以从不同角度进行分类,例如攻击者的目标,攻击者的能力等。

2.1 根据攻击者的目标,攻击方法可以分为以下几种:

  • 中毒攻击与逃避攻击(Poisoning Attack vs. Evasion Attack)

中毒攻击:中毒攻击是指允许攻击者使用的攻击算法在DNN算法的训练数据中插入/修改几个假样本。这次训练假样品的处理可能会导致测试数据性能下降。

躲避攻击:对于逃避攻击,受害者分类是固定的,通常情况下良性测试样品的性能。对手无权更改分类器或其参数,而是制作一些伪造的样本,而分类器无法正确地将其分类或区分为异常输入。换句话说,对手生成一些欺诈性示例,以逃避分类器的检测。

•针对性攻击与非针对性攻击(Targeted Attack vs. Non-Targeted Attack)

针对性攻击:当给出受害者样本(x,y)时,其中x是特征向量,y∈Y是x的标签,对抗目标旨在诱使分类器针对被扰动的样本x给出特定的标签t∈Y表示。

非针对性攻击:如果没有给出特定的t,则可以查看一个对抗示例成功攻击,只要它被归类为任何错误标签即可。

2.2 根据攻击者的能力,攻击方法可以分为以下几种:

•白盒攻击:对手可以访问目标模型的所有信息,包括其架构,参数,渐变等。

•黑盒攻击:在黑盒攻击设置中,目标模型的内部配置为对手无法使用。这种类型的方法通常基于一系列攻击查询。

•灰匣子攻击:在灰匣子攻击设置中,攻击者训练生成模型以实现在白盒设置中产生对抗性示例。一旦生成模型被训练,它可用于在黑匣子设置中制作对抗示例。

为了减轻对抗性攻击的风险,已经研究了不同的对策。有四个主要防御类别。第一个是鲁棒性优化,即进行对抗训练,即使用对抗性示例重新训练模型。另一类是对抗性例子检测。目的是将对抗性示例与数据分发区分开。第三种是gradient masking。这种类型的防御主要包括一些预处理方法来隐藏梯度,以使攻击过程中的优化更加困难。最后一种已逐渐成为重要的防御流。

3 关于DeepRobust

DeepRobust是基于PyTorch对抗性学习库,里面有丰富的代码案例实现各种形式的对抗攻击与防御。主要内容目录如下

DeepRobust结构

图像组件:根据每个程序的功能,图像组件被划分为几个子包和内容。攻击子包包括攻击基类和攻击算法。防御子包包含防御基类和防御算法。在第3节中,我们将对每种算法进行具体介绍。Netmodels包含不同的网络模型类。用户可以通过实例化一个模型类来简单地生成受害者模型。通过评估程序,我们提供了一个易于使用的API来测试针对防御的攻击。全部默认参数保存在配置中。

图组件:图组件包含多个子包和基于内容和功能。定向攻击子包括定向攻击基类和著名攻击有针对性的攻击算法。同样,全局攻击基类和全局攻击算法是包含在global-attack子程序包中。防御子包包含GCN模型和其他方法用于防御图对抗攻击。此外,分包数据可轻松访问公众基准数据集,包括Cora,Cora-ml,Citeseer,Polblogs和Pubmed以及预先攻击的图数据。

目前,这个该软件包涵盖了9种代表性攻击算法,包括LBFGS,FGSM,PGD,CW ,deepfool,BPDA ,Universal 和Nattack。

图像领域支持模型有

  • CNN
  • ResNet18/34
  • DenseNet
  • VGG-11/13/16/19

图像数据同样支持MINST和CIFAR10。

图数据攻击方法举例:

图数据攻击方法,参考自https://github.com/DSE-MSU/DeepRobust/tree/master/deeprobust/graph

图像攻击方法

https://github.com/DSE-MSU/DeepRobust/tree/master/deeprobust/image

4 代码示例

图像攻击示例

1 训练一个CNN模型

import deeprobust.image.netmodels.train_model as trainmodel
trainmodel.train('CNN', 'MNIST', 'cuda', 20)

2 根据PGD攻击方法生成对抗样本

from deeprobust.image.attack.pgd import PGD
from deeprobust.image.config import attack_params
import torch
import deeprobust.image.netmodels.resnet as resnet

model = resnet.ResNet18().to('cuda')
model.load_state_dict(torch.load("./trained_models/CIFAR10_ResNet18_epoch_50.pt"))
model.eval()

transform_val = transforms.Compose([transforms.ToTensor()])
test_loader  = torch.utils.data.DataLoader(
datasets.CIFAR10('deeprobust/image/data', train = False, download=True,
transform = transform_val),
batch_size = 10, shuffle=True)

x, y = next(iter(test_loader))
x = x.to('cuda').float()

adversary = PGD(model, device)
Adv_img = adversary.generate(x, y, **attack_params['PGD_CIFAR10'])

3 生成防御模型

from deeprobust.image.defense.pgdtraining import PGDtraining
from deeprobust.image.config import defense_params
from deeprobust.image.netmodels.CNN import Net
import torch
from torchvision import datasets, transforms

model = Net()
train_loader = torch.utils.data.DataLoader(
datasets.MNIST('deeprobust/image/defense/data', train=True, download=True,
transform=transforms.Compose([transforms.ToTensor()])),
batch_size=100,shuffle=True)

test_loader = torch.utils.data.DataLoader(
datasets.MNIST('deeprobust/image/defense/data', train=False,
transform=transforms.Compose([transforms.ToTensor()])),
batch_size=1000,shuffle=True)

defense = PGDtraining(model, 'cuda')
defense.generate(train_loader, test_loader, **defense_params["PGDtraining_MNIST"])


参考文章:

https://arxiv.org/pdf/2005.06149.pdf​ arxiv.org

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息