对抗鲁棒性工具箱 v1.0.0


引用

Nicolae M I, Sinn M, Tran M N, et al. Adversarial Robustness Toolbox v1. 0.0[J]. arXiv preprint arXiv:1807.01069, 2018.

摘要

对抗鲁棒性工具箱(ART)是一个支持开发者和研究人员针对对抗攻击保护深度学习模型并有助于使 AI 系统更安全且可信任的 Python 库。机器学习模型非常容易受到对抗攻击的影响,而 ART 则提供了建立并部署防御机制并进行测试的工具。

保护机器学习模型包括证明并验证模型的鲁棒性以及利用各种方法如输入预处理、使用对抗样本进行数据增广、使用运行时检测机制来识别可能被进行过对抗攻击处理的输入等来强化模型。通过 ART,可以实现用于测试应对当前最先进威胁模型的模型防御力所需要的对抗攻击。

ART 支持的机器学习库包括 TensorFlow(v1 和 v2),Keras,PyTorch,MXNet,Scikit-learn,XGBoost,LightGBM,CatBoost 和 GPy。

ART 的源码在 MIT 许可证下被发布于https://github.com/Trusted-AI/adversarial-robustness-toolbox。该版本包括代码示例和带有指引及文档的笔记(http://adversarial-robustness-toolbox.readthedocs.io/)。

介绍

对抗鲁棒性工具箱(ART)是一个开源的为对抗机器学习而生的开源 Python 库,它为大多数主流机器学习框架的分类模型提供了标准化的接口。ART 的架构使得将防御、对抗训练和数据预处理、运行时对抗样本输入检测结合变得简单,它既面向希望进行大规模实验以量化评估最新的攻击或防御手段的研究人员,也适用于正在编写和部署安全的机器学习应用的开发者。

本文提供了 ART 的数学背景和实现细节,它是对发布在 Read the Docs 上的文档的补充。具体来说,本文解释了攻击和防御的语义和数学背景,并强调了实现中的自定义选项。

背景

从前的机器学习相关研究总是假设一个安全且可信任的环境,然而近年来人们正在越来越关注针对机器学习模型的攻击与防御。对抗机器学习旨在保护机器学习生产线以保证其在训练、测试和推测时的安全性。

大体上概括,对抗攻击的目的是通过尽可能细微的修改使修改过后的输入被分类器错误分类。同时,对抗攻击可以分为非目标和目标攻击:前者通过修改输入使得输入被错分类成其他任意类别;后者则通过修改输入使得输入被错分类成攻击者希望的类别。另一种重要的对抗攻击分类将其分类为白盒攻击的和黑盒攻击:白盒攻击下,攻击者知道模型的全部细节并能与模型进行持续的交互;黑盒攻击下,攻击者既不知道模型的任何细节,也无法与模型持续交互,仅能通过输入获得相应模型输出。在这种情况下,常用的方法是使用一个替代模型并利用生成的对抗样本的可迁移性来进行攻击。另一种可能的方法是使用零阶优化:该方法依赖于目标模型的零阶近似而不是梯度。除此以外,也可能存在一种更常见的灰盒环境:攻击者不知道分类器的参数,但知道它的架构、训练算法或训练数据。

在对抗防御方面,主要有两种不同的策略:模型强化和对抗输入的运行时检测。前者常常通过使用对抗样本进行数据增广实现,而后者则常常使用不可微或随机变换、减少输入维度的变换、旨在将输入投射到“真实”的数据流形上的变换等。另外,模型强化方面,在模型训练时进行特定类型的正则化或修改分类器架构的元素等方案也是可行的。

投毒攻击是另一种在数据收集和训练阶段威胁机器学习系统的攻击方式。机器学习系统常常假设用于训练的数据是可信的,然而数据收集和处理过程往往并不完全受模型管理者的控制。举例来说,常见数据源如社交媒体、众包、用户行为、物联网测量等都不是完全受到模型管理者的控制的,而这种控制上的缺乏就给了投毒攻击操纵训练数据以显著降低总体性能的可乘之机。防御这种威胁常常通过检测和过滤恶意的训练数据实现。

本文可能用到的数学符号如表 1 所示。

表 1 数学符号表

库结构

ART 的库结构如图 1 所示。

图 1 ART 库结构

分类器模块

该模块包括了使得其他各种库的机器学习模块能够整合进 ART 的功能性 API,它将分类器从实现它的具体框架中抽象出来,并使得用于对抗攻击和防御的模块具有框架独立性。其中,类 art.classifiers.EnsembleClassifier 为将多个分类器整合进一个整体提供了支持。

Classifier**基类**

分类器抽象类 art.classifiers.Classifier 定义了要被黑盒攻击的分类器最基本的组成部分和属性。该接口授予对 clip_values(表示数据数值范围的二元组)和 input_shape(一个输入样本的尺度)属性的访问权限,提供以下可调用的方法:

init(clip values, channel index, defences=None, preprocessing=(0, 1))用于初始化分类器

predict(x) -> np.ndarray 用于返回分类器对给定输入的预测

fit(x, y) -> None 用于使分类器适应给定数据

nb_classes() -> Int 用于返回输出的可能类别数量

save(filename, path) -> None 用于将模型保存为文件

ClassifierNeuralNetwork Mixin**基类**

该接口用于神经网络分类器,提供对 channel_index(数据中包含颜色通道的轴的索引)、layer_names(模型中各层名称的列表)和 learning_phase(用户设置的当前分类器所处的学习阶段)属性的访问权限,提供以下可调用的方法:

predict(x, batch size=128) -> np.ndarray 用于返回分类器对给定输入的预测

fit(x, y, batch size=128, nb epochs=20) -> None 用于使分类器适应给定数据

get activations(x, layer) -> np.ndarray 用于根据输入 x 计算并返回指定层的激活(输出)

set learning phase(train) -> None 用于设置当前分类器所处的学习阶段

ClassifierGradients Mixin**基类**

该接口用于使分类器能够与需要能够计算 loss_gradient 和 class_gradient 的方法的实现的白盒攻击联系起来。该基类需要用 Classifier 类或 ClassifierNeuralNetwork 类混合起来使用以扩展最小化的分类器的功能,它提供以下可调用的方法:

class gradient(x, label=None, logits=False) -> np.ndarray 用于返回根据输入 x 计算的类别可能性或逻辑回归值的梯度

loss gradient(x, y) -> np.ndarray 用于返回根据输入 x 和预期输出 y 计算的损失函数的梯度

ClassifierDecisionTree Mixin**基类**

该接口用于决策树分类器,提供以下可调用的方法:

•get trees() -> [Trees]用于返回决策树的列表

集成分类器

art.classifiers.EnsembleClassfier 类集成了多个不同类型的分类器的对象并形成一个集合,它使得攻击能够作用于模型集合。每一个其中的分类器需要在集合建立之前就完成了训练,因为该类不提供任何有关训练过程的方法。

分类器包装类模块

该模块包括一个允许用户根据不同的攻击策略对分类器进行包装定义的功能性 API。

ClassifierWrapper**基类**

该类是 Classifier 类实例的包装类,它暴露和提供除构造器外与 Classifier 类相同的属性及方法。

ExpectationOverTransformations**类**

该包装类修改了分类器进行预测和梯度计算的方式,它分别计算分类器输入的指定数量的(随机)变换的平均预测和梯度。该技术是生成对分类器输入的(随机)变换具有鲁棒性的对抗样本中的关键因素,它既可以被用作防御策略,也可以用作生成对抗样本。

QueryEfficientBBGradientEstimation**类**

该类修改了分类器计算梯度的方式:不同于直接返回真实梯度,该类根据一定数量的分类器预测计算出一个梯度的估算值。该功能解决了黑盒攻击中无法获取真实梯度值的问题,通过一定数量向分类器的查询操作得到估算值。

RandomizedSmoothing**类**

该类修改了在高斯噪声下分类良好的分类器,使其对 L2 范数下的对抗扰动具有可证明的鲁棒性。

攻击模块

该模块包括了 ART 实现的所有攻击方法,它们需要 Classifier 类作为被攻击的目标。通过使用框架独立的 API 来接触目标模型,这些攻击的具体实现对于用于训练模型的框架来说是不可知的。

ART 提供如图 2 所示的攻击算法的实现。

图 2 ART 提供实现的攻击算法

Attack**基类**

ART 在 art.attacks.attack 模块中有一个抽象类 Attack,它是本库中所有具体攻击方法所需要实现的通用接口。该类拥有一个属性 classifier,一个 Classifier 类的实例(目标模型),提供以下可调用的方法:

init (classifier)用于使用给定分类器进行攻击的初始化

generate(x, y=None, ∗∗kwargs) -> np.ndarray 用于将攻击应用于给定输入 x,同时 kwargs 指定了一系列特定攻击所需要的参数

set params(∗∗kwargs) -> bool 用于初始化特定攻击所需要的超参数

FGSM

快速梯度下降法 FGSM 既可用于目标攻击的环境也可用于非目标攻击的环境,且可以选择控制对抗扰动的 L1,L2 或 L∞ 范式中的任意一项。

注意到 FGSM 算法中的“S”Sign 指的是 L∞ 范式的具体计算,因此有时候 L1 和 L2 范式下的修改算法也被称为 FGM。尽管如此,本库出于简化考虑还是将它们视为 FGSM 算法。

ART 还实现了一种 FGSM 攻击的扩展形式,确定了使得对抗样本输出分类和原类别不同的最小扰动。该修改需要引入两个新的参数 εstep 和 εmax,它一步步地调用基本的 FGSM 攻击并不断加强攻击强度(一次增加 εstep)直至攻击成功或强度超过 εmax,此时攻击失败。

FGSM 的主要优点是它计算效率极高:只需要进行一次梯度评估,且攻击可被直接应用于一批输入,这就使得 FGSM 在需要极大对抗样本量的对抗训练方法中大受欢迎。

FGSM 的攻击威力取决于参数 ε 的选择,如果选择太小,那么对抗攻击可能很难生效,另一方面,对抗样本和原样本差值随 ε 线性增长。因此,在选择攻击强度时,考虑实际的数据范围非常重要。

基础迭代法

基础迭代法 BIM 是 FGSM 的简单延伸,它以迭代的方式多次应用攻击。最初版本中,BIM 与 FGSM 略有差异,它选择原样本最不可能的类作为目标类,但本库的实现中使用与 FGM 一样的策略。本攻击被实现为具有 L∞ 范式扰动且无随机初始化的投影梯度下降(PGD)特例。

投影梯度下降

PGD 也是 FGSM 的一种迭代扩展形式且与 BIM 十分相似,两者的最大不同在于 PGD 在每次攻击迭代中都会将攻击结果映射回原输入为中心的 ε 范式球。

基于雅可比的显著图攻击(JSMA)

JSMA 是一个试图在生成对抗样本时控制输入的 L0 范式(输入被修改的成分的个数)的目标攻击方法,该方法迭代地修改输入的单个成分直至攻击成功或修改个数超出预定的阈值。

算法细节如图 3 所示,关键步骤是第四行关于显著图的计算,显著图根据目标类别可能性的增加程度和其他类别可能性的减少程度选择下一个修改的成分,第九行则将扰动应用于根据显著图选定的成分。

图 3 JSMA 算法流程图

图 3 所示的方法适用于输入参数 θ 为正的情况,而原则上来说,使用负值也是可行的,且相关实验表明负值 θ 反而会使扰动更难被人眼识别出来。因此,ART 的实现既支持正值 θ 也支持负值 θ,但相应算法需要做出少量改变(算法 1 第二行改 xmax 为 xmin,算法 1 第十行改 xmin 为 xmax,算法 2 第四行改变 α 和 β 的正负性)。

另外,算法 2 关于显著图的计算基于分类器可能性的偏导数,但原则上也可以使用分类器逻辑回归的偏导数。目前 ART 的实现基于前者,因为它的效率显著高于后者。

Carlini**和 Wagner 的 L2 攻击**

该方法是一个旨在最小化对抗扰动的 L2 范式的目标性攻击算法,它可以被看作是在获得对抗目标和保持对抗扰动尽可能小这两个目标间寻找最佳权衡点。在 ART 的具体实现中,使用二分查找寻找这样的权衡点。

算法细节如图 4 所示,它依赖于两个辅助函数:

minimize_objective 用于在给定 c 值的情况下最小化目标函数,ART 通过带二分搜索的梯度下降实现最小化

update 用于更新二分搜索中需要使用的参数 clower,c 和 cdouble

图 4 C&W 的 L2 攻击算法流程图

Carlini**和 Wagner 的 L∞ 攻击**

该方法在遵循 L∞ 范式的前提下寻找一个使得 l(x’)=0 的对抗样本 x’,其中,l(x’)同 L2 攻击方法,图 5 分别展示了其目标攻击版本和非目标攻击版本。

图 5 目标/非目标攻击下的 l(x’)具体公式

C&W LInf 攻击使用 CarliniLInfMethod 类实现,并具有以下属性:

confidence:目标函数中的 k 值

targeted:指定攻击是目标攻击还是非目标攻击

max_iter:minimize_objective 函数中二分搜索的最大迭代次数

max_halving:minimize_objective 函数中每次迭代的最大步长减半数

eps:L∞ 范式中的 e 值

bacth_size:生成对抗性样本的批的内部大小

DeepFool**算法**

DeepFool 算法是一个旨在找到给定输入 x 在 L2 范式下的最近决策边界的非目标攻击方法。算法具体如图 6 所示,其基本思想是将输入投影到最近的决策边界,且由于边界是非线性的,该操作将被迭代地完成。DeepFool 通常会产生正好位于决策边界上的对抗样本,以便将样本推过边界,从而改变其分类。

图 6 DeepFool 算法流程图

通用对抗扰动

通用对抗扰动是一种特殊的非目标攻击,旨在创造一个能够成功修改输入的特定部分的类别的扰动常量 ρ,其算法具体如图 7 所示。

图 7 通用对抗扰动的算法流程图

NewtonFool

NewtonFool 是一个通过梯度下降尝试降低输入原类别的可能性的非目标攻击方法,具体算法如图 8 所示,其步长是根据算法中的等式(7)动态调整的。

图 8 NewtonFool 的算法流程图

虚拟对抗法

该方法并不生成导致错误分类的对抗样本,而是寻找对抗训练中训练集里会使模型具有局部分布的光滑性的样本(如果存在的话)。该算法的核心想法是在 L2 单位范式下构造一个能最大化 KL 散度的扰动 d,如图 9 所示的算法中通过沿有限差分的梯度上升来迭代地实现该目标。

图 9 使用有限差分的虚拟对抗法流程示意图

空间变换攻击

空间变换攻击对输入图像执行一次平移和一次旋转的组合以生成对抗样本,且整批输入使用相同的平移和旋转参数。最优的平移和旋转变换超参数组合通过网格搜索获得。

弹性网(EAD)攻击

EAD 攻击是对 C&W 攻击方法的一种修改,它旨在控制对抗扰动的 L1 范式。

零阶优化(ZOO)攻击

ZOO 攻击是 C&W 攻击的一种依赖查询输出的可能性的黑盒版本。

边界攻击

边界攻击是一种黑盒攻击方法,且只需要查询的输出类别,不需要其逻辑回归或输出可能性。

对抗补丁

对抗性补丁是一种对抗样本,其设计方式是当打印出来并插入到自然场景中时,该场景拍摄的照片将被错误分类为给定的目标类。

决策树攻击

该方法是 Papernot 的攻击方法的决策树形式实现。

高置信度低不确定性(HCLU)攻击

高置信度低不确定性(HCLU)对抗样本公式的实现。

跳跃攻击

跳跃攻击的实现,这是一种只需要类别预测输出的黑盒攻击方法,是边界攻击的一个优化版本。

防御策略模块

正有越来越多的方法用于防御对抗攻击,这些方法大致可被分为三类:模型强化(生成一个新的在某些给定的度量方面比原分类器具有更好的鲁棒性的分类器的技术)、数据预处理(在训练或测试阶段对模型输入和标签进行变换以提升模型鲁棒性的技术)、运行时检测(使用一个额外的检测器扩充分类器以检测给定输入中是否有对抗样本)。

ART 实现了如图 10 所示的防御方法。

图 10 ART 实现的防御方法

对抗训练

对抗训练的基本思想是通过在训练集中加入对抗样本以提高分类器的鲁棒性。对抗训练的一个特殊例子是虚拟对抗训练,它使用通过虚拟对抗法生成的对抗样本进行训练。给定一系列攻击方法和模型以及一个数据集,ART 实现将这个数据集作为输入分别应用上述攻击方法和模型的组合,然后将输出的对抗样本组合起来得到最终结果。

具体实现类 AdversarialTrainer 具有如下的公开方法:

init(classifier, attacks, ratio=.5)用于初始化

fit(x, y, batch size=128, nb epochs=20) -> None 用于训练强化分类器

fit_generator(generator, nb epochs=20)用于使用指定数据生成器和 epoch 数对一个模型进行对抗训练

predict(x, ∗∗kwargs) -> np.ndarray 用于调用强化分类器的预测函数

Preprocessor**基类**

抽象类 Preprocessor 为所有用过防御策略的数据预处理变换提供了统一接口,具有如下可访问的属性:

is_fitted 显示该变换是否已被调整至适合应用场景的尺度

apply_fit 显示该防御是否应该在训练时被应用

apply_predict 显示该防御是否应该在测试时被应用

该类具有如下可访问的公开方法:

fit(x, y=None, ∗∗kwargs)用于使变换适应给定数据和参数

** call**(x, y=None)用于将变换应用于标签和/或输入并返回变换后的数据

estimate gradient(x, grad)用于提供防御的后向传播梯度(防御不可微时取近似值)

特征压缩

特征压缩通过将输入的成分编码成更少的位数来降低输入精度。由于特征压缩中的数据转换没有任何模型适应要求,该类的 is_fitted 值恒为真且 fit 函数不具有任何作用。

另外,任何采纳特征压缩作为其防御策略之一的 Classifier 实例会在调用 fit 或 predict 函数时自动进行该操作。

标签平滑

标签平滑在模型训练过程中修改标签,其中,标签不使用 one-hot 形式,而是使用如图 11 所示的表示方式。该方法背后的动机是,它可能有助于减少攻击者在构建对抗样本时可能利用的梯度。

图 11 标签平滑方法中标签的表示方式

另外,任何采纳标签平滑作为其防御策略之一的 Classifier 实例会在调用 fit 函数时自动进行该操作。

空间平滑

空间平滑是一个主要为图像设计的防御策略,它尝试通过局部空间平滑将对抗信号过滤出来。

与前两种防御策略相同,该类的 is_fitted 值恒为真且 fit 函数不具有任何作用。

另外,任何采纳空间平滑作为其防御策略之一的 Classifier 实例会在调用 predict 函数时自动进行该操作。

JPEG**压缩**

JPEG 压缩可以作为一种分类流水线中的有效预处理手段以抵消对抗攻击并大大降低其效果。JPEG 压缩的一个关键能力是它可以移除图像方块内部的高频信号成分,这样的操作相当于图像的选择性模糊,有助于消除附加扰动。

温度计编码

温度计编码是一个输入离散化的预处理方法,它将每一个特征都编码成一个固定大小的二进制向量。为了达到这个目的,首先将输入域平均划分为 b 个不同的桶,b 代表每个特征会被编码的位数。每个特征的编码值是由一定数量的 1 组成的,该数量等于包含原始值的桶的索引,且 1 从后向前填充,剩余位用 0 进行填充。值得注意的是,温度计编码保留成对排序信息。

使用该方法不需要训练,因此 fit 函数只是一个空壳。

总方差最小化

总方差最小化随机地选择一小组像素,并重建出与所选像素一致的最简单图像。重建过的图像不包含对抗扰动因为扰动往往是小而局部的。

高斯数据增广

高斯数据增广是计算机视觉领域中的一种基础数据增广技术,同时也能被用来提高模型应对对抗攻击的鲁棒性。该方法通过添加了高斯噪声的原始样本副本来扩充数据集。该防御策略的一个重要优势在于它独立于具体的攻击策略,它的主要作用是对训练集进行增广。使用该方法不需要训练,因此其 fit 函数只是一个空壳。另外,该方法并不需要标签 y,因为该方法并未对标签进行任何预处理。

像素防御

像素防御在将数据喂入原分类器前先使用一个 CNN 网络将受到对抗扰动的输入映射回原数据流形。使用该方法不需要任何训练,因此其 fit 函数是一个空壳。另外,该方法并不需要标签 y,因为该方法并未对标签进行任何预处理。

逃逸检测模块

该模块用于提供针对对抗样本的运行时检测方法。目前,本库实现两类检测器,具体如图 12 所示。

图 12 ART 实现的运行时检测器

Detector**基类**

Detector 抽象类为所有运行时对抗检测方法提供了统一的接口,开放下列可调用的方法:

fit(x, y=None, ∗∗kwargs) -> None 用于使检测器适应于给定数据和参数

** call**(x) -> np.ndarray 用于将检测方法应用于给定输入并返回每一个输入样本的二元决策

is fitted 用于检查该 detector 是否已适应于给定数据和参数

基于输入的二元检测器

该方法建立一个二元分类器,分类器输出标签表示给定输入是否是对抗样本,分类器由干净和对抗数据的混合数据训练而成。

基于激活的二元检测器

该方法建立一个二元分类器,分类器输出标签表示给定输入是否是对抗样本,它与前者的不同之处在于分类器使用不同分类器的激活值作为训练的输入。仅特定层的激活会被使用。

基于快速广义子集扫描的检测器

该检测器检测一般分类数据集中的异常模式。

投毒检测

用于训练机器学习模型的数据常常来源于潜在的不值得信任的数据源,尤其是当涉及到众包数据、社交媒体数据和用户行为数据时。攻击者可以制作能够修改机器学习模型决策边界的输入以降低模型性能。

最新研究表明,攻击者可以通过在训练集中植入恶意数据以在机器学习模型中生成“后门”或者说“特洛伊木马”。这样,生成的模型就会在预期的训练集和测试集上表现得很好,却在攻击者选定的特定输入上表现得极差。举例来说,实验发现一个被训练用来识别街头标志的网络能在基本输入上取得很好的效果,但却会在一种特殊标签被贴上停止标志时将其识别为速度限制标志,这就使得攻击者仅需贴一张贴纸即可使该模型将所有停止标志错分类。不同于对抗样本需要复杂、特定的噪声,投毒攻击非常简单且可以很轻易地被应用到图片上。

ART 提供了用来检测此类攻击的过滤策略。

PoisonFilteringDefence**基类**

该抽象类为训练数据可获得情况下的偷渡检测定义接口,该类接收一个模型和它对应的训练数据,并能标识怀疑有毒的数据点集合。

对抗后门攻击的使用激活聚类的投毒过滤器

该防御方法能够检测那些为向神经网络植入后门而制作的投毒数据,其背后的思想是,虽然后门和目标样本通过中毒网络得出相同的分类,但它们得到这种分类的原因是不同的。对于普通样本而言,网络识别输入中与特定类别相关的特征;而对于后门样本而言,网络识别与源类别和后门诱发器(它导致输入错分类为目标类别)相关的特征。这种机制上的不同应该在网络的激活现象上表现出明显的差异(举例如图 13 所示)。

图 13 映射至前三主成分的最后一个隐藏层的激活(a)被投毒类别(b)未被投毒类别

激活聚簇防御策略的公式化表达如图 14 所示,对不可信训练集中的每个样本进行分类,并保留最后一个隐藏层的激活,这些激活再根据其标签进行分段。对于每一个激活段,使用 ICA(实践表明 ICA 效果优于 PCA)进行降维,然后使用聚类算法对其进行聚类。实验表明 k=2 的 k-means 算法非常有效,优于其他被测算法如 DBSCAN、高斯混合模型、吸引子传播算法(AP 算法)。然而 k-means 算法仅负责将数据分为两类,而不指明其中是否包含被投毒的数据,因此,在此版本中还实现了多种聚类分析技术如相对簇大小、簇间距离和簇的内聚性。当然,分析者也可以通过使用本版本带有的可视化方法人工检查结果,MNIST 数据集上的一个相关示例如图 15 所示,从图中可以看出右边簇中明显存在后门样本(4 带一个点被识别成了 5)。

图 14 激活聚类后门检测算法流程图

图 15 MNIST 数据集上的聚簇后门检测可视化示例

度量模块

为了评估分类器对对抗性攻击的鲁棒性,可能的度量是:使得输入被错误分类所需的平均最小扰动;模型损失函数对输入变化的平均敏感度;模型逻辑回归对输入变化的平均敏感度等。art.metrics 模块实现了多种评估给定分类器针对一般攻击或特定攻击的鲁棒性和脆弱性的方法,具体方法如图 16 所示。

图 16 ART 实现的模型对抗鲁棒性评估方法

经验鲁棒性

经验鲁棒性评估给定分类器对于特定攻击和测试集的鲁棒性,它等同于攻击者成功进行攻击所需要的平均最小扰动,ER 表达式如图 17 所示。

图 17 ER 的具体表达式

损失敏感度

局部损失敏感度旨在通过估计模型的利普希茨连续常数以量化其平滑度,该度量基于分类器的逻辑回归梯度进行估计,因此,它是一个独立于攻击的可以反映模型内部属性的方法。其表达式如图 18 所示。

图 18 LS 的具体表达式

CLEVER

网络鲁棒性的交叉利普希茨极值度量(CLEVER)估计了给定输入 x 和 Lp 范式,改变 x 的类别所需要的最小扰动的下限 γ。关于 γ 的推到基于在以 x 为中心半径为 R 的 Lp 球中的分类器逻辑回归的梯度。由于该常数一般没有封闭形式的表达式或上界,因此 CLEVER 基于极值理论进行估计,图 19 展示了 CLEVER 的算法流程。

图 19 CLEVER 算法流程图(目标攻击)

CLEVER 对于非目标攻击的评价方法可以轻易地通过获取所有其他类别的 CLEVER 分数的最小值获得,计算非目标攻击的 clever_u 方法形式与计算目标攻击的 clever_t 方法除了它不需要 target_class 参数以外一致。

决策树集合的团方法鲁棒性验证

基于决策树集合的鲁棒性验证法,可用的模型包括梯度提升决策树 GBDT(XGBoost、LightGBM、Scikit-learn)、随机森林(Scikit-learn)或极限树(Scikit-learn)。

数据生成器模块

DataGenerator 接口提供了一个合并数据加载器和生成器的标准化方法,这些类在使用过大以至于难以放入内存并需要一次取一批的数据集时显得非常有用。此接口的另一个用途是为每一批执行动态数据扩充,用户可以根据自己的需要定义加载或增广数据的生成器,并在 Classifier 类和 AdversarialTrainer 类使用 fit_generator 函数时被使用。该接口包括一个函数:

•get batch() -> (np.ndarray, np.ndarray)用于获取(x, y)形式的下一批次的数据

本库也提供了一些针对特定框架的数据加载器的标准包装类,它们都实现了 DataGenerator 接口。当此包装类与 TensorFlow 或 Keras 分类器包装类的 fit_generator 函数一起使用时,将通过直接使用 generator 对象调用 TensorFlow 或 Keras 的 fit_generator 方法来将训练委托给 TensorFlow 或 Keras。

版本

该库使用语义版本控制,这意味着版本号的形式为主版本号.次版本号.补丁号。给定这样一个版本号,本库在进行了不兼容的 API 更改后增加主版本号,在以向后兼容的方式添加了功能后增加次版本号,在进行了向后兼容的 bug 修复后增加补丁号。

致谢

本文由南京大学软件学院 2021 级硕士研究生顾明政翻译转述。

展开阅读全文

页面更新:2024-05-17

标签:梯度   范式   工具箱   样本   算法   函数   模型   类别   目标   方法   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top