个性化阅读
专注于IT技术分析

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

本文概述

如今, 计算机视觉中的机器学习模型已用于许多实际应用中, 例如无人驾驶汽车, 面部识别, 癌症诊断, 甚至在下一代商店中, 目的是跟踪客户购买的哪些产品, 从而获得他们的信誉。离开时可以为信用卡付费。

这些机器学习系统的准确性不断提高, 令人印象深刻, 因此自然导致使用它们的应用程序的泛滥。尽管几十年前已经研究了其背后的数学基础, 但是相对较新的功能强大的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 {matrix} \ text {minimize} c \ cdot \ left \ | x-{x}’\ right \ | ^ 2_2 + \ text {loss} _ {f, 1} {x}’\\ \ text {使得} {x}’\ epsilon \ left [0, 1 \ right ] ^ n \ end {matrix} $$

其中$ c> 0 $是也需要求解的参数。直观地, 我们寻找对抗图像$ {x}’$, 以使相对于清晰图像($ \ left | x-{x}’\ right | $)的失真和相对于原始图像的损失的加权总和错误的等级是最小的可能。

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

快速渐变符号(FGS)

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

在此假设下, 损失函数的梯度表示我们需要更改输入矢量以产生最大损失变化的方向。为了使扰动的大小保持较小, 我们仅提取梯度的符号, 而不提取其实际范数, 并以小比例ε对其进行缩放。

这样, 我们可以确保初始图像和修改后的图像之间的逐像素差异始终小于epsilon(该差异为L_infinity范数)。

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

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

规模对抗机器学习的作者说, 对于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. 用输入$ X_i $查询目标模型, 获取$ i = 1…n $, 并存储输出$ y_i $。
  2. 利用训练数据$(X_i, y_i)$, 建立另一个模型, 称为替代模型。
  3. 使用上面显示的任何白盒算法来生成替代模型的对抗示例。他们中的许多人将成功转移并成为目标模型的对抗性例子。

在Computer Vision Foundation的这篇论文中介绍了该策略针对商业机器学习模型的成功应用。

对抗性例子的辩护

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

保护生产环境中的分类模型的第一个简便方法是避免显示每个预测类别的置信度得分。取而代之的是, 该模型应仅提供最可能的前$ N $类(例如5个)。当将置信度分数提供给最终用户时, 恶意攻击者可以使用它们来以数字方式估计损失函数的梯度。这样, 攻击者可以使用例如快速梯度符号方法进行白盒攻击。在我们之前引用的Computer Vision Foundation论文中, 作者展示了如何针对商业机器学习模型来做到这一点。

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

防御蒸馏

此方法尝试生成一个新模型, 其梯度比原始未防御模型小得多。如果梯度很小, 则FGS或Iterative 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%鹦鹉, 10%帕帕加约)的软标签。
  3. 再次使用温度$ T $在软标签上训练第二个网络, 即蒸馏网络。使用软标签进行训练是一种减少过度拟合并提高蒸馏网络的样本外准确性的技术。
  4. 最后, 在预测时间, 以温度$ T = 1 $运行蒸馏网络。

防御性蒸馏成功地保护了网络, 使其免受蒸馏中尝试的一系列攻击, 从而防御了针对深层神经网络的对抗性干扰。

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

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

对抗训练

如今, 对抗训练是最有效的防御策略。在训练模型时会生成并使用对抗性示例。直观地, 如果模型在训练过程中看到了对抗性示例, 则对于以相同方式生成的对抗性示例, 其在预测时的性能将更好。

理想情况下, 我们希望在训练过程中采用任何已知的攻击方法来生成对抗示例。但是, 对于具有高维的大型数据集(如ImageNet), 像L-BFGS这样的鲁棒攻击方法以及Berkeley论文中描述的改进方法在计算上都非常昂贵。实际上, 我们只能使用像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模型

赞(0)
未经允许不得转载:srcmini » 对抗性机器学习:如何攻击和防御ML模型?

评论 抢沙发

评论前必须登录!