请注意,当前状态的 deep-pwning 远未 达到成熟或完成。它旨在供您实验、扩展和延伸。只有这样,我们才能真正帮助它成为 统计机器学习模型的渗透测试工具包。
研究人员发现,让机器学习模型(分类器、聚类器、回归器等)做出客观上错误的决策是出乎意料地容易。这一研究领域被称为 对抗性机器学习。毫不夸张地说,任何有动机的攻击者,只要有足够的信息和时间,就可以绕过任何机器学习系统。然而,当架构师和工程师设计和构建机器学习系统时,这个问题常常被忽视。当这些系统在关键场景中使用时,例如在医疗、交通、金融或安全相关领域,后果令人担忧。
因此,在评估使用机器学习的应用程序的有效性时,除了系统的精度和召回率之外,还应该衡量它们在对抗环境中的可塑性。
该工具于 2016 年 8 月在拉斯维加斯举行的 DEF CON 24 大会上发布,相关演讲题目为 Machine Duping 101: Pwning Deep Learning Systems。
该框架建立在 Tensorflow 之上,此仓库中包含的许多示例都是修改自 Tensorflow GitHub 仓库 中的 Tensorflow 示例。
所有包含的示例和代码都实现了深度神经网络,但它们也可以用于为使用非深度神经网络实现的类似任务分类器生成对抗图像。这是因为机器学习中的“可迁移性”现象,Papernot 等人在 这篇论文 中对此进行了精辟阐述。这意味着,使用 DNN 模型 A 生成的对抗样本可能能够欺骗另一个结构不同的 DNN 模型 B,以及某些其他 SVM 模型 C。
以下图片取自上述论文(Papernot 等人),展示了源模型(用于生成对抗样本)在目标模型(用于测试对抗样本)上的成功对抗误分类百分比。
Deep-pwning 被模块化为多个组件,以最大限度地减少代码重复。由于可能的分类任务性质差异很大,当前迭代的代码针对图像和短语(使用词向量)的分类进行了优化。
以下是构成当前迭代 Deep-pwning 的代码模块:
驱动程序 (Drivers)
驱动程序是代码的主要执行点。在这里,您可以将不同的模块和组件连接在一起,并且可以将更多自定义功能注入到对抗生成过程中。
模型 (Models)
这里存放的是实际的机器学习模型实现。例如,提供的 lenet5 模型定义位于 lenet5.py 中的 model() 函数内。它将网络定义如下:
-> 输入
-> 卷积层 1
-> 最大池化层 1
-> 卷积层 2
-> 最大池化层 2
-> Dropout 层
-> Softmax 层
-> 输出
对抗生成 (advgen)
该模块包含为模型生成对抗性输出的代码。每个 advgen 类中定义的 run() 函数接受一个 input_dict,其中包含为 Tensorflow 中定义的机器学习模型预定义的几个张量操作。如果生成对抗样本的模型是已知的,则输入字典中的变量应基于该模型定义。如果模型未知(黑盒生成),则应使用/实现一个替代模型,并使用该模型定义。需要传入的变量包括输入张量占位符变量和标签(通常称为 x -> 输入和 y_ -> 标签)、模型输出(通常称为 y_conv)以及对抗图像所基于的实际测试数据和标签。
配置 (Config)
应用程序配置。
工具 (Utils)
不属于其他任何地方的杂项实用程序。这些包括用于读取数据、处理 Tensorflow 队列输入等的辅助函数。
以下是应用程序相关的资源目录:
检查点 (Checkpoints)
Tensorflow 允许您加载部分训练的模型以继续训练,或加载完全训练的模型到应用程序中进行评估或执行其他操作。所有这些保存的“检查点”都存储在此资源目录中。
数据 (Data)
此目录以驱动程序应用程序接受的任何格式存储所有输入数据。
输出 (Output)
这是所有应用程序输出的输出目录,包括生成的对抗图像。
请按照此处的说明安装 tensorflow:https://www.tensorflow.org/versions/r0.8/get_started/os_setup.html,这将允许您选择要安装的 tensorflow 二进制文件。
$ pip install -r requirements.txt
从之前训练的检查点恢复。(配置在 config/mnist.conf 中)
$ cd dpwn
$ python mnist_driver.py --restore_checkpoint
从头开始训练。(请注意,配置中指定文件夹中的任何先前检查点将被覆盖)
$ cd dpwn
$ python mnist_driver.py
defense 模块,以展示文献中提出的一些防御示例sentiment driver 中添加对预训练 word2vec 模型的支持models 中添加 SVM 和逻辑回归支持(+ 使用它们的示例)请注意,dpwn 需要 Tensorflow 0.8.0。Tensorflow 0.9.0 引入了一些
(借鉴了伟大的 Requests 仓库,由 kennethreitz 维护)
AUTHORS.md 中。许多机器学习和安全研究人员做出了令人印象深刻的工作,直接或间接地促成了这个项目,并启发了这个框架。以下是以某种方式使用或参考的不完全资源列表: