AI 安全之对抗样本入门 (32):打造对抗样本工具箱 2.11&3&3.1

阅读数:7 2019 年 11 月 30 日 15:14

AI安全之对抗样本入门(32):打造对抗样本工具箱 2.11&3&3.1

(本章小结)

内容简介
第 1 章介绍了深度学习的基础知识,重点介绍了与对抗样本相关的梯度、优化器、反向传递等知识点。
第 2 章介绍了如何搭建学习对抗样本的软硬件环境,虽然 GPU 不是必需的,但是使用 GPU 可以更加快速地验证你的想法。
第 3 章概括介绍了常见的深度学习框架,从 TensorFlow、Keras、PyTorch 到 MXNet。
第 4 章介绍了图像处理领域的基础知识,这部分知识对于理解对抗样本领域的一些常见图像处理技巧非常有帮助。
第 5 章介绍了常见的白盒攻击算法,从基础的 FGSM、DeepFool 到经典的 JSMA 和 CW。
第 6 章介绍了常见的黑盒攻击算法。
第 7 章介绍了对抗样本在目标识别领域的应用。
第 8 章介绍了对抗样本的常见抵御算法,与对抗样本一样,抵御对抗样本的技术也非常有趣。
第 9 章介绍了常见的对抗样本工具以及如何搭建 NIPS 2017 对抗防御环境和轻量级攻防对抗环境 robust-ml,通过这章读者可以了解如何站在巨人的肩膀上,快速生成自己的对抗样本,进行攻防对抗。

本章介绍了搭建对抗样本工具箱的过程,包括如何安装 Anaconda,设置 APT 更新源、Python 更新源,以及如何安装 Jupyter notebook 和常见的深度学习框架。最后还介绍了主流的对抗样本框架以及如何在云环境使用 GPU 服务器。


(常见深度学习平台简介)

在第 2 章中,我们介绍了如何搭建对抗样本的工具箱环境,概要介绍了主流的深度学习平台。本章将结合实际案例,具体介绍 TensorFlow、Keras、PyTorch 和 MXNet 平台的使用方法。


(张量与计算图)

在 Python 编程中,我们经常使用 NumPy 表示向量(或者称为多维数组),在深度学习框架中使用了张量 (tensor) 这个概念,表示了在计算图中流动的数据。计算图又被称为数据流图,是深度学习框架中非常重要的一个概念。开发者通过计算图定义整个模型的网络结构以及对应的优化器和损失函数。数据流图用节点(node)和边(edge)的有向图来描述数学计算。节点一般用来表示施加的数学操作,但也可以表示数据输入的起点以及输出的终点。边表示节点之间的输入 / 输出关系1。举个例子,假设存在以下计算关系:

1 http://www.tensorfly.cn/

d=(a+b)\*c

可见整个计算图的输入是节点 a、b 和 c,输出是 d,如图 3-1 所示。

AI安全之对抗样本入门(32):打造对抗样本工具箱 2.11&3&3.1

图 3-1 计算图示例(1)

定义好了计算图后,并不会真正发生计算,只有当往输入节点灌入数据(feed in)时,张量才会在计算图中按照定义的方向发生流动,计算才会发生。如图 3-2 所示,分别向输入节点 a、b 和 c 输入 1、2 和 3,经过计算图运算后,得到结果 9。

AI安全之对抗样本入门(32):打造对抗样本工具箱 2.11&3&3.1

图 3-2 计算图示例(2)

以 TensorFlow 为例,介绍如何实现上面介绍的计算图,对应的代码路径为:

复制代码
https://github.com/duoergun0729/adversarial_examples/blob/master/code/2-1.ipynb

首先定义对应的输入节点 a、b 和 c,限制为整数类型 tf.int64,其中 tf.placeholder 表明其为输入节点。

复制代码
import tensorflow as tf
a = tf.placeholder(tf.int64)
b = tf.placeholder(tf.int64)
c = tf.placeholder(tf.int64)

然后定义对应的计算过程,即最终输出 d 是如何计算获得的。

复制代码
d = (a+b)*c

最后输入对应的值,运行计算图并获取对应的结果。

复制代码
with tf.Session() as sess:
print sess.run(d,feed_dict = {a:1,b:2,c:3})
9

如果在 jupyter 中运行程序显示对应的库没有安装,很大可能是对应的 jupyter 核心没有设置,无法使用对应的 anaconda 环境。一个推荐的做法是配置你经常使用的 anaconda 环境到 IPython 核心。以本书为例,使用的环境名称为 book5,进入 jupyter 核心对应的配置路径,比如:

复制代码
/Users/maidou/anaconda2/share/jupyter/kernels/

使用你的环境名建立目录,便于区分。

复制代码
/Users/maidou/anaconda2/share/jupyter/kernels/book5

在该目录下建立配置文件 kernel.json,内容如下所示,其中只需替换你的环境中 python 可执行文件路径即可。

复制代码
{
"display_name": "book5",
"language": "python",
"argv": [
"/Users/maidou/anaconda2/envs/book5/bin/python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
]
}

最后执行命令使得对应配置生效,以后执行 jupyter 时选择核心为 book5 即可。

复制代码
conda install -n book5 ipykernel

AI安全之对抗样本入门(32):打造对抗样本工具箱 2.11&3&3.1

购书地址 https://item.jd.com/12532163.html?dist=jd

评论

发布