对抗性机器学习:如何攻击和防御 ML 模型

已发表: 2022-03-11

如今,计算机视觉中的机器学习模型被用于许多现实世界的应用中,如自动驾驶汽车、人脸识别、癌症诊断,甚至在下一代商店中,以跟踪客户下架的哪些产品,以便他们的信用离开时可以刷卡。

这些机器学习系统不断提高的准确性令人印象深刻,因此自然而然地导致了大量使用它们的应用程序。 尽管它们背后的数学基础在几十年前就已经被研究过了,但相对较新的强大 GPU 的出现为研究人员提供了实验和构建复杂机器学习系统所必需的计算能力。 今天,最先进的计算机视觉模型基于具有多达数百万个参数的深度神经网络,并且它们依赖于十年前尚不可用的硬件。

2012 年,Alex Krizhevsky 等人成为第一个展示如何实现深度卷积网络的人,这在当时成为了对象分类中最先进的模型。 从那时起,已经发布了对其原始模型的许多改进,每个改进都提高了准确性(VGG、ResNet、Inception 等)。 最近,机器学习模型在许多计算机视觉任务中已经成功地实现了人类甚至高于人类的准确性。

几年前,从机器学习模型中得到错误的预测曾经是常态。 如今,这已成为例外,我们开始期望它们能够完美运行,尤其是当它们部署在实际应用程序中时。

直到最近,机器学习模型通常在实验室环境中进行训练和测试,例如机器学习竞赛和学术论文。 如今,随着它们被部署在现实世界的场景中,来自模型错误的安全漏洞已经成为一个真正的问题。

本文的想法是解释和演示用于图像识别的最先进的深度神经网络如何很容易被恶意行为者愚弄,从而产生错误的预测。 一旦我们熟悉了通常的攻击策略,我们将讨论如何保护我们的模型免受攻击。

对抗性机器学习示例

让我们从一个基本问题开始:什么是对抗性机器学习示例?

对抗性示例是旨在欺骗机器学习模型的恶意输入。

在本文中,我们将把注意力限制在执行图像分类的机器学习模型上。 因此,对抗样本将是模型无法正确分类的攻击者制作的输入图像。

作为一个例子,让我们以一个在 ImageNet 上训练的 GoogLeNet 作为我们的机器学习模型来执行图像分类。 下面有两张人眼无法区分的熊猫图像。 左边的图像是 ImageNet 数据集中的干净图像之一,用于训练 GoogLeNet 模型。 右边是第一个的轻微修改,通过在中央图像中添加噪声向量创建。 正如预期的那样,模型预测第一张图像是熊猫。 相反,第二个被预测(以非常高的信心)是长臂猿。

熊猫的两张并排图像。第二张图片看起来与第一张相同,但被标记为不同的动物。第三张看似随机静态的图像位于它们之间,展示了添加到第二张熊猫图像以混淆模型的图层。

添加到第一张图像的噪声不是随机的,而是攻击者仔细优化的输出。

作为第二个例子,我们可以看看如何使用 3D 打印机合成 3D 对抗样本。 下图显示了作者打印的 3D 海龟的不同视图以及 Google Inception v3 模型的错误分类。

显示海龟图像网格的图像,其中一些被正确归类为海龟,其中一些被归类为步枪,还有一些被归类为其他

具有高于人类分类精度的最先进模型怎么会犯这种看似愚蠢的错误?

在深入研究神经网络模型往往具有的弱点之前,让我们记住,我们人类有自己的一组对抗性示例。 看看下面的图片。 你看到了什么? 螺旋形还是一系列同心圆?

显示视错觉的图像。

这些不同的例子还揭示了机器学习模型和人类视觉在理解图像中的内容时必须使用完全不同的内部表示。

在下一节中,我们将探索生成对抗样本的策略。

如何生成对抗样本

让我们从一个简单的问题开始:什么是对抗样本?

通过获取模型正确分类的干净图像并找到导致新图像被 ML 模型错误分类的小扰动来生成对抗性示例。

让我们假设攻击者拥有关于他们想要攻击的模型的完整信息。 这实质上意味着攻击者可以计算模型$J(\theta, X, y)$的损失函数,其中$X$是输入图像, $y$是输出类, $\theta$是内部模型参数。 该损失函数通常是分类方法的负损失可能性。

在这种白盒场景下,有几种攻击策略,每一种都代表了产生它们的计算成本和成功率之间的不同权衡。 所有这些方法本质上都是试图最大化模型损失函数的变化,同时保持输入图像的扰动很小。 输入图像空间的维度越高,就越容易生成人眼无法与干净图像区分的对抗样本。

L-BFGS法

我们通过解决以下框约束优化问题找到了对抗性示例的${x}'$

$$ \begin{矩阵} \text{最小化} c \cdot \left \| x - {x}' \right \|^2_2 + \text{loss}_{f,1} {x}' \\ \text{这样 } {x}' \epsilon \left [0, 1 \right ]^n \end{矩阵} $$

其中$c > 0$是一个也需要求解的参数。 直观地说,我们寻找对抗性图像${x}'$使得相对于干净图像的失真( $\left | x - {x}' \right |$ )和相对于错误的类是最小的可能。

对于像深度神经网络这样的复杂模型,优化问题没有封闭形式的解决方案,因此必须使用迭代数值方法。 因此,这种 L-BFGS 方法很慢。 但是,它的成功率很高。

快速梯度标志 (FGS)

使用快速梯度符号 (FGS) 方法,我们对初始点周围的损失函数进行线性逼近,由干净图像向量$X$和真实类别$y$给出。

在这个假设下,损失函数的梯度表示我们需要改变输入向量以产生最大损失变化的方向。 为了使扰动的大小保持较小,我们只提取梯度的符号,而不是其实际范数,并将其缩放一个小因子 epsilon。

通过这种方式,我们确保初始图像和修改后的图像之间的像素差异总是小于 epsilon(这个差异是 L_infinity 范数)。

$$ X^{adv} = X + \epsilon \text{ 符号} \left( \bigtriangledown_x J \left( X, y_{true} \right) \right) $$

可以使用反向传播有效地计算梯度。 这种方法是实现速度最快且计算成本最低的方法之一。 但是,它的成功率低于 L-BFGS 等更昂贵的方法。

Adversarial Machine Learning at Scale的作者表示,它对 ImageNet 数据集的 top-1 预测的成功率在 63% 到 69% 之间,epsilon 在 2 到 32 之间。对于线性模型,如逻辑回归,快速梯度符号方法是准确的。 在这种情况下,另一篇关于对抗性示例的研究论文的作者报告成功率为 99%。

迭代快速梯度符号

前一种方法的一个明显扩展是使用较小的步长 alpha 多次应用它,并裁剪总步长以确保干净图像和对抗图像之间的失真低于 epsilon。

$$ X^{adv}_0 = X, X^{adv}_{N + 1} = Clip_{X, \epsilon} \left\{ X^{adv}_{N} + \alpha \text{ 符号} \left( \bigtriangledown_X J \left( X^{adv}_N, y_{true} \right) \right) \right\} $$

其他技术,如 Nicholas Carlini 的论文中提出的技术,是对 L-BFGS 的改进。 它们的计算成本也很高,但成功率很高。

然而,在大多数现实世界的情况下,攻击者并不知道目标模型的损失函数。 在这种情况下,攻击者必须采用黑盒策略。

黑盒攻击

研究人员反复观察到,对抗性示例在模型之间的迁移非常好,这意味着它们可以针对目标模型 A 设计,但最终对在类似数据集上训练的任何其他模型有效。

这就是所谓的对抗样本的可迁移性属性,当攻击者无法访问有关模型的完整信息时,他们可以利用它来发挥自己的优势。 攻击者可以通过以下步骤生成对抗样本:

  1. 使用$i=1…n$的输入$X_i$查询目标模型并存储输出$y_i$
  2. 使用训练数据$(X_i, y_i)$ ,构建另一个模型,称为替代模型。
  3. 使用上面显示的任何白盒算法为替代模型生成对抗性示例。 他们中的许多人将成功转移并成为目标模型的对抗样本。

此计算机视觉基金会论文中介绍了该策略对商业机器学习模型的成功应用。

对抗性例子的防御

攻击者利用他们拥有的关于模型的所有信息进行攻击。 显然,模型在预测时输出的信息越少,攻击者就越难成功攻击。

在生产环境中保护您的分类模型的第一个简单措施是避免显示每个预测类别的置信度分数。 相反,模型应该只提供最有可能的前$N$ (例如,5 个)类。 当向最终用户提供置信度分数时,恶意攻击者可以使用它们来数值估计损失函数的梯度。 这样,攻击者可以使用例如快速梯度符号方法进行白盒攻击。 在我们之前引用的计算机视觉基金会论文中,作者展示了如何针对商业机器学习模型执行此操作。

让我们看一下文献中提出的两种辩护。

防御性蒸馏

该方法试图生成一个新模型,其梯度远小于原始无防御模型。 如果梯度非常小,则 FGS 或迭代 FGS 之类的技术不再有用,因为攻击者需要对输入图像进行很大的扭曲才能实现损失函数的充分变化。

防御性蒸馏向网络的最后一个 softmax 层引入了一个新参数$T$ ,称为温度:

$$ \text{softmax} \left( x, T \right)_i = \frac{e^{x_i/T}}{\Sigma_j e^{x_j/T}} $$

请注意,对于 T=1,我们有通常的 softmax 函数。 $T$的值越高,损失相对于输入图像的梯度越小。

防御性蒸馏过程如下:

  1. 训练一个网络,称为教师网络,温度为 $T » 1$
  2. 使用训练有素的教师网络为训练集中的每个图像生成软标签。 图像的软标签是模型分配给每个类别的一组概率。 例如,如果输出图像是鹦鹉,那么教师模型可能会输出软标签,例如 (90% parrot, 10% papagayo)。
  3. 在软标签上训练第二个网络,即蒸馏网络,再次使用温度$T$ 。 使用软标签进行训练是一种减少过度拟合并提高蒸馏网络的样本外精度的技术。
  4. 最后,在预测时,运行温度$T=1$的蒸馏网络。

防御性蒸馏成功地保护网络免受在蒸馏中尝试的一系列攻击,作为对深度神经网络的对抗性扰动的防御

显示基于蒸馏温度的成功率的表格图像。通常,对于 MNIST 和 CIFAR10 对抗样本,温度越高,成功率越低。

不幸的是,加州大学伯克利分校的研究人员后来发表的一篇论文提出了一套新的攻击方法,可以击败防御性蒸馏。 这些攻击是对 L-BFGS 方法的改进,证明防御性蒸馏不是对抗对抗样本的通用解决方案。

对抗训练

如今,对抗性训练是最有效的防御策略。 训练模型时会生成和使用对抗性示例。 直观地说,如果模型在训练期间看到对抗性示例,那么它在预测时的性能对于以相同方式生成的对抗性示例会更好。

理想情况下,我们希望使用任何已知的攻击方法在训练期间生成对抗样本。 然而,对于具有高维数的大数据集(如 ImageNet),L-BFGS 等稳健的攻击方法和伯克利论文中描述的改进在计算上过于昂贵。 在实践中,我们只能使用 FGS 之类的快速方法,或者可以使用迭代 FGS。

对抗训练使用修改后的损失函数,它是干净示例上的通常损失函数和对抗性示例的损失函数的加权和。

$$ 损失 = \frac{1}{\left( m - k \right)} \left( \sum_{i \epsilon CLEAN} {L \left( X_i | y_i \right) + \lambda} \sum_{i \epsilon ADV} {L \left( X*{adv}_i | y_i \right)} \right) $$

在训练期间,对于每批$m$干净图像,我们使用网络的当前状态生成$k$对抗性图像。 我们针对干净和对抗性示例前向传播网络,并使用上面的公式计算损失。

本会议论文中提出的对该算法的改进称为集成对抗训练。 不是使用当前网络生成对抗性示例,而是使用几个预训练模型来生成对抗性示例。 在 ImageNet 上,这种方法增加了网络对黑盒攻击的鲁棒性。 该防御是NIPS 2017 对抗性攻击防御竞赛第一轮的获胜者。

结论和进一步的步骤

到今天为止,攻击机器学习模型比防御它更容易。 如果不采用防御策略,部署在实际应用程序中的最先进模型很容易被对抗性示例愚弄,从而为潜在的关键安全问题打开了大门。 最可靠的防御策略是对抗性训练,在训练时生成对抗性示例并添加到干净示例中。

如果您想评估图像分类模型对不同攻击的鲁棒性,我建议您使用开源 Python 库cleverhans。 许多攻击方法可以针对您的模型进行测试,包括本文中提到的那些。 您还可以使用此库对模型进行对抗性训练,并提高其对对抗性示例的鲁棒性。

寻找新的攻击和更好的防御策略是一个活跃的研究领域。 需要更多的理论和实证工作来使机器学习模型在实际应用中更加健壮和安全。

我鼓励读者尝试这些技术并发布新的有趣结果。 此外,作者非常欢迎对本文提出任何反馈。

有关的:
  • 健全的逻辑和单调的 AI 模型
  • 梯度下降在 TensorFlow 中的众多应用