# Canary 框架的设计原理与工作流程

欢迎来到Canary模型对抗鲁棒性评估框架学习教程!

在本章节中,我们将与您一同回顾一些人工智能与人工智能对抗(安全)领域的一些基本知识,并从最实际的工作场景出发,为您讲解Canary的工作原理。我们不希望在本章为您展示过多的代码示例和公式,因此我们将主要以框架结构和评估流程为具体展开。

# 模型推理

假设您有一个已预训练的图像分类模型 f()f(),并有一张图片 xx,若您希望对该图片进行推理并获取结果,只需将 xx 传入函数 f()f() 即可得到推理结果 y=f(x)y=f(x)

在任何人工智能框架中这都是正确的流程,然而它可能比理论的设想稍复杂:

为了调整模型参数(训练),图片往往需要进行一些必要的预处理,例如像素范围由 [0,255][0,255] 缩放至 [0,1][0,1] ,或/和加入一些标准化与归一化;除此之外,加载的图片的格式可能并不满足 [Batch,Channel,Width,Height][Batch, Channel, Width, Height] 这种格式。因此,我们在将图片图片传入模型函数进行预测前,有必要对图片进行处理,这个过程被称为预处理(Pre-Process)。

我们希望模型输出 yjy_j 可以视为属于类 jj 的概率,然后选择具有最大输出值的类别 argmax(y)argmax(y) 作为我们的预测。例如:y1y_1y2y_2y3y_3 分别为 0.10.10.80.80.10.1,那我们预测的类别为 22

但我们不能将未规范化的预测 yy 直接作为输出,因为将线性层的输出直接视为概率时会存在一些问题:

  • 我们没有限制这些数字的总和为1
  • 根据输入的不同,它们可以为负值

要将输出视为概率,我们必须保证在任何数据上的输出都是非负的且总和为1,为了达成这个目标,我们需要使用 Softmax()Softmax() 对这些输出进行处理,然后才能使用 argmax()argmax() 得到最终的推理结果。因此,我们在将图片图片传入模型函数进行预测后,有必要对模型结果进行处理,这个过程被称为后处理(Post-Process)。

Canary中,我们设计了图片预处理器(Pre-Processer)、结果后处理器(Result-Post-Processer)负责以上两个处理过程。通用的模型预测流程如下所述:

Model Inference

我们注意到,图片预处理器 Pre-Processer、结果后处理器 Result-Post-Processer 仅与模型 Model 有关。基于以上知识,我们在Canary中设计了一个通用的模型推理模块,该模型推理模块只需获取 Model 和其对应的 Processer 组件即可完成推理工作。

# 对抗攻击

假设您有一个已预训练的图像分类模型 f()f(),对抗攻击扰动生成方法 δ()\delta(),并有一张图片 xx,则对抗攻击函数 δ+()\delta_{+}() 可以定义为:找到使 xx 越过 f()f() 的决策边界所需扰动 δ(x)\delta(x) ,使得 xa=x+δ(x)x_a = x + \delta(x),且 f(x)f(xa)f(x) \neq f(x_a),输出对抗样本 xax_a。若您希望基于该图片生成对抗样本并对模型进行对抗攻击,只需将 xx 和函数 f()f()均传递给攻击方法函数 δ+()\delta_{+}() 即可得到推理结果 xa=δ+(x,f())x_a=\delta_{+}(x,f())

对于绝大多数的对抗攻击算法这都是正确的流程,同样的,代码的现实可能比理论的设想稍复杂:

模型预测流程中我们已经知道,欲计算 f(x)f(x),需使用图片预处理器 Pre-Processerxx 进行处理。此时函数 δ+(x,f())\delta_{+}(x,f()) 产生的对抗样本 xax_a 将是一个已经预处理的图片,由于可能不满足图片的基本数据结构,它将无法直接保存为图片格式(如PNG/JPEG)。为了将产生的对抗样本转储为图片,我们还需要对进行逆转预处理过程的处理,这个过程被称为逆处理(Reverse Process)。

Canary中,我们设计了图片逆处理器(Reverse-Processer)负责以上处理过程。通用的对抗攻击流程如下所述:

Adversarial Example Generation

我们注意到,图片逆处理器 Reverse-Processer 和图片预处理器 Pre-Processer 的运算恰好相反,即 xx 在先经过Pre-Processer 再经过 Reverse-Processer 后,仍将保持 xx 不变。由于 Pre-Processer 仅与模型 Model 有关,Reverse-Processer 也应当仅与模型 Model 有关。

基于以上知识,我们在Canary中设计了一个通用的对抗攻击模块,该对抗攻击模块只需获取 Model 和其对应的 Processer 组件、Attack组件即可完成对抗样本生成工作。

# 模型/方法基础评估

我们假设您准备了以下组件并托管至Canary(或者,您决定使用Canary Lib中的组件):

  • 模型和处理器:模型 Model,预处理器 Pre-Processer,逆处理器 Reverse-Processer,后处理器 Result-Post-Processer
  • 攻击方法:攻击方法 Attack

这些组件将使得我们能够完成模型预测流程对抗攻击流程,这两个流程是我们进行“模型鲁棒性-方法有效性” 评估的基础操作。

此处的基础评估是指,您基于模型 f()f() 产生了对抗样本 δ+(x,f())\delta_{+}(x,f()) (在Canary中我们称该模型为Base Model),并在模型 f()f() 上继续完成测试(在Canary中我们称该模型为Test Model)。显然,基础评估中 Base ModelTest Model 同一个模型。

Carlini 和 Wagner 认为更有效的对抗样本生成算法需保证如下两个条件:

  1. δ(x)\delta(x) 尽可能充分小(通常 δ(x)\delta(x) 使用 lp,p(1,2,)l_{p}, p\in(1, 2, \infty) 度量),同时尽可能无法被人 眼察觉;
  2. xax_a 尽可能使得 ff 分类产生错误,且错误的置信度足够的高(对目标攻击而言)。

对于模型来说,更具有对抗鲁棒性的模型将使得对抗样本在该模型上表现更差,对同一个攻击方法而已,这意味着更高的 lpl_{p},更低的误分类率。

为了评估“模型鲁棒性-方法有效性”,首先我们需要了解扰动 δ(x)\delta(x) 的大小,以及扰动在图像的可察觉性,这意味着我们需要对比攻击前后的图像差异;其次我们需要了解生成的对抗样本 xax_a 在多大程度上使得 ff 分类产生错误,这意味着我们需要对比攻击前后样本的推理结果差异;最后,我们需要汇总这些内容以便于进行综合的排名计算

Canary中,我们设计了图像对比分析器(Image Difference Analyzer)、结果对比分析器(Result Difference Analyzer)、评估结果汇总(Evaluation Results Summarizer)负责以上三个处理过程。通用的基础评估流程如下所述:

Adversarial Robustness Evaluation

具体来说,通过该过程我们能采集以下三类评估指标

  • 模型能力评估指标 (Model capability measurement metrics),由结果对比分析器计算:

    • 干净样本正确率 (Clear Accuracy, CA)*
    • 干净样本F1分数 (Clear F1, CF)*
    • 干净样本平均正确分类置信度 (Clear Confidence, CC)*
  • 攻击效果评估指标 (Attack effectiveness measurement metrics),由结果对比分析器计算:

    • 误分类比例 (Misclassification Ratio, MR) / 攻击准确性 (Targeted Attack Success, TAS)
    • 对抗样本置信偏移 (Average Confidence Change, ACC):
      • 抗类平均置信增高(Average Increase in Adversarial-class Confidence, AIAC)
      • 真实类平均置度降低(Average Reduction in True-class Confidence, ARTC)
    • 对抗样本模型关注区域偏移 (Average Class Activation Mapping Change, ACAMC) **
  • 攻击代价评估指标 (Cost of attack measurement metrics),由图像对比分析器计算:

    • 平均范数距离 (Average Norm Distortion, AND):
      • 最大像素距离(Average Maximum Distortion, AMD)
      • 平均欧式距离(Average Euclidean Distortion, AED)
      • 像素变化比例(Average Pixel Change Ratio, APCR)
    • 平均频域欧式距离 (Average Euclidean Distortion in Frequency Domain, AED-FD)
    • 平均特征相似性 (Average Metrics Similarity, AMS):
      • 平均深度特征相似性(Average Deep Metrics Similarity, ADMS)
      • 平均低层特征相似性(Average Low-level MetricsSimilarity, ALMS)

* 结果分析器,是 结果对比分析器 的子组件之一; ** Grad-CAM部分逻辑需依赖模型钩子,不能简单的由图示过程得到,此处仅为简化例。

Canary很好的支持了“模型鲁棒性-方法有效性” 评估。 欲开始评估,请进一步参考Canary文档:开始使用 Canary开始使用 Canary Library

值得注意的是,在Canary中,我们使用SQLite管理包含以上的所有测试中的数据,以便于使用标准SQL进行数据交换与查询。关于SQLite,您可以参阅SQLite Documentation (opens new window)以获得进一步信息。

# 模型/方法转移评估

此处的迁移评估是指,您基于模型 f()f() 产生了对抗样本 δ+(x,f())\delta_{+}(x,f())Base Modelf()f()),并在模型 f()f^{\prime}() 上继续完成测试(Test Modelf()f^{\prime}())。显然,迁移评估中 Base ModelTest Model 不是同一个模型。

假设我们已经基于模型ABC生成了一系列对抗样本Adv AAdv BAdv C,生成流程如下所述:

Attack Test On Three Models

# 完全转移性评估

一种自然而然的想法是,我们希望全面的了解攻击方法的转移性情况,我们只需使用这些对抗样本分别在不同的模型上测试即可,测试流程如下所述:

Transfer Attack Full Test

蓝色数据块即为转移攻击的测试结果,以块A-B为例,其意为基于A产生的对抗样本 δ+(x,fA())\delta_{+}(x,f_{A}()) 在模型 B 上的预测结果 fB(δ+(x,fA())f_{B}(\delta_{+}(x,f_{A}())。基于蓝色块的数据(只需沿某一轴进行相加以排除不同模型的差异),我们可以观测到两方面信息:

  • 什么模型产生的对抗样本是具有更高转移性的(沿测试模型Test Model的轴相加);
  • 什么模型更容易被攻击方法δ\delta转移攻击(沿原始模型Base Model的轴相加)。

显然的,完全评估有一个显著的弊端,那就是程序员们最讨厌的时间复杂度之一:n2n^2。如果我们评估20个模型,基础评估只需要20次,而完全转移评估将高达380次!如此大的代价可能只是让我们更加精确的逼近了真相,这真的值得吗?

# 简易转移性评估

如果您不是希望探索某种攻击方法的详尽迁移性能,使用完全转移性评估显然不是一个好主意。我们提供了两种简单的转移性评估方法供您选用:

  • 如果您希望了解:什么模型产生的对抗样本是具有更高转移性的,测试流程如下所述:
Transfer Attack Simple Test 1
  • 如果您希望了解:什么模型更容易被攻击方法δ\delta转移攻击,测试流程如下所述:
Transfer Attack Simple Test 2

注意:事实上,这一过程不足以使您充分了解什么模型更容易被转移攻击(可能仅仅是对您测试的这一种攻击是这样的),您应当测试多种模型以确定这一点。

Canary很好的支持了所有的转移测试方式,甚至,我们提供了更加自由的配置方案,允许您完全控制迁移测试过程,以满足更加多样的测试需求。 欲使用转移评估,请进一步参考Canary文档:

通过模型/方法转移评估我们能采集以下评估指标

  • 攻击效果评估指标 (Attack effectiveness measurement metrics),由结果对比分析器计算:
    • 对抗样本可观测转移率 (Observable Transfer Rate, OTR)*

* 转移评估分析器,是 结果对比分析器 的子组件之一。

# 最后提示

恭喜,您已经了解Canary的具体运作机制,包括模型推理、对抗攻击(对抗样本生成)、模型/方法基础评估和转移评估的过程与参与的组件,尽管这些内容并不是Canary的全部功能,但它们是Canary的核心。

这里仍然有很多东西值得进一步探究,例如:“模型鲁棒性-方法有效性”的评估是否需要约束对攻击方法的参数进行约束;在使用多个攻击方法评估多个模型后,数据又该如何处理;这些指标究竟是什么;综合的排名计算有哪些方法等等。这些内容我们已经在我们的期刊文章 CANARY: An Adversarial Robustness Evaluation Platform for Deep Learning Models on Image Classification (opens new window)中进行了详细的解答,在本文档的高级教程中,我们也进行了额外的扩充。但我们需要请您了解:我们提供的解决方案不是唯一的正确选项,因此您完全可以自行处理Canary中得到的任何结果,我们也充分的支持了相关操作。

在下一章中,我们将引导您使用Canary进行一次针对模型的对抗攻击测试。这一教程将从集成模型、处理器和攻击方法至Canary展开。倘若您更倾向于尝试运行代码而不是面对冗杂的模型与攻击方法准备、集成和调试,则转到 开始使用 Canary Library 继续阅读将给您带来更好体验。

本章由 孙家正(Jiazheng Sun) 编写