手把手教你使用TensorFlow生成对抗样本 | 附源码

摘要: 本文使用TensorFlow一步一步生成对抗样本,步骤明确清晰。首先生成的对抗样本不具有旋转鲁棒性,后面使用同样的方法生成具有鲁棒性的对抗样本,适合初学者对生成对抗样本的入门及动手实验。

如果说卷积神经网络是昔日影帝的话,那么生成对抗已然成为深度学习研究领域中一颗新晋的耀眼新星,它将彻底地改变我们认知世界的方式。对抗学习训练为指导人工智能完成复杂任务提供了一个全新的思路,生成对抗图片能够非常轻松的愚弄之前训练好的分类器,因此如何利用生成对抗图片提高系统的鲁棒性是一个很有研究的热点问题。

神经网络合成的对抗样本很容易让人大吃一惊,这是因为对输入进行小巧精心制作的扰动就可能导致神经网络以任意选择的方式对输入进行错误地分类。鉴于对抗样本转移到物质世界可以使其变得非常强大,因此这是一个值得关注的安全问题。比如说人脸识别,若一张对抗图像也被识别为真人的话,就会出现一些安全隐患及之后带来的巨大损失。对生成对抗图像感兴趣的读者可以关注一下最近的Kaggle挑战赛NIPS,相关的信息可以参看博主的另外一篇:

《Kaggle首席技术官发布——(Kaggle)NIPS 2017对抗学习挑战赛起步指南》

在这篇文章中,将手把手带领读者利用TensorFlow实现一个简单的算法来合成对抗样本,之后使用这种技术建立一个鲁棒的对抗性例子。

本文是一个可执行的Jupyter notebook:可以下载并自己实验操作一下示例!

建立

我们选择攻击在ImageNet数据集上训练的Inception v3网络。首先我们从TF-slim图像分类库中加载预先训练的网络。这部分不是很有趣,所以请随意跳过本部分。

首先,设置输入图像。使用tf.Variable而不是使用tf.placeholder,这是因为要确保它是可训练的。当我们需要时,仍然可以输入它。

接下来,加载Inception v3模型。

接下来,加载预训练的权重。这个Inception v3的top-5的准确率为93.9%。

接下来,编写一些代码来显示图像,并对它进行分类及显示分类结果。

示例图像

加载示例图像,并确保它已被正确分类。

对抗样本

给定一个图像X,神经网络输出标签上的概率分布为P(y|X)。当手工制作对抗输入时,我们想要找到一个X',使得logP(y'|X')被最大化为目标标签y',即输入将被错误分类为目标类。通过约束一些ℓ∞半径为ε的箱,要求‖X- X'‖∞≤ε,我们可以确保X'与原始X看起来不太一样。

在这个框架中,对抗样本是解决一个约束优化的问题,可以使用反向传播和投影梯度下降来解决,基本上也是用与训练网络本身相同的技术。算法很简单:

首先将对抗样本初始化为X'←X。然后,重复以下过程直到收敛:

1. X'←X^+α⋅logP(y'|X')

2. X'←clip(X',X - ε,X+ε)

初始化

首先从最简单的部分开始:编写一个TensorFlow op进行相应的初始化。

梯度下降步骤

接下来,编写梯度下降步骤以最大化目标类的对数概率(或最小化交叉熵)。

投影步骤

最后,编写投影步骤,使得对抗样本在视觉上与原始图像相似。另外,将其限定为[0,1]范围内保持有效的图像。

执行

最后,准备合成一个对抗样本。我们任意选择“鳄梨酱”(imagenet class 924)作为我们的目标类。

结果如下

这种对抗图像与原始图像在视觉上无法区分,没有可见的人为加工。但是它会以很高的概率分类为“鳄梨酱”。

鲁棒的对抗样本

现在来看一个更高级的例子。遵循我们的方法来合成稳健的对抗样本,以找到对猫图像的单一扰动,这在某些选择的变换分布下同时对抗,可以选择任何可微分变换的分布;在这篇文章中,我们将合成一个单一的对抗输入,设置θ∈[- π/4,π/4],这对旋转是鲁棒的。

在继续下面的工作之前,检查一下之前的例子是否能对抗旋转,比如说设置角度为θ=π/8

看起来我们之前生成的对抗样本不是旋转不变的!

那么,如何使得一个对抗样本对变换的分布是鲁棒的呢?给定一些变换分布T,我们可以最大化Et~TlogP(y'|t(X')),约束条件为‖X- X'‖∞≤ε。可以通过投影梯度下降法来解决这个优化问题,注意到∇Et~TlogP(y'|t(X'))与Et~TlogP(y'|t(X'))相等,并在每个梯度下降步骤中来逼近样本。

可以使用一个技巧让TensorFlow为我们做到这一点,而不是通过手动实现梯度采样得到:我们可以模拟基于采样的梯度下降,作为随机分类器的集合中的梯度下降,随机分类器从分布中随机抽取并在分类之前变换输入。

我们可以重复使用assign_op和project_step,但为了这个新目标,必须写一个新的optim_step。

最后,我们准备运行PGD来产生对抗输入。和前面的例子一样,选择“鳄梨酱”作为我们的目标类。

结果如下

这种对抗图像被高度信任地归类为“鳄梨酱”,即使是旋转的情况下!

评估

下面来看一下在整个角度范围内产生的鲁棒对抗样本的旋转不变性,看P(y'|x')在θ∈[- π/4,π/4]。

从图中蓝色曲线可以看到,生成的对抗样本是超级有效的。

原文:http://www.anishathalye.com/2017/07/25/synthesizing-adversarial-examples/?spm=5176.100239.blogcont149583.28.NUZKV8

原文发布于微信公众号 - IT派(it_pai)

原文发表时间:2017-10-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

如何使用TensorFlow实现卷积神经网络

编者按:本文节选自图书《TensorFlow实战》第五章,本书将重点从实用的层面,为读者讲解如何使用TensorFlow实现全连接神经网络、卷积神经网络、循环神...

2835
来自专栏Python数据科学

深度学习参数怎么调优,这12个trick告诉你

1:优化器。机器学习训练的目的在于更新参数,优化目标函数,常见优化器有SGD,Adagrad,Adadelta,Adam,Adamax,Nadam。其中SGD和...

4282
来自专栏CreateAMind

PPGN即插即用GAN:Ian Goodfellow推荐的最新模型 视频+多图

PPGN 整合了对抗训练、cnn特征匹配、降噪自编码、Langevin采样;在NIPS2016得到了Ian Goodfellow的介绍.

801
来自专栏CreateAMind

PPGN即插即用GAN:Ian Goodfellow推荐的最新模型 视频+多图

PPGN 整合了对抗训练、cnn特征匹配、降噪自编码、Langevin采样;在NIPS2016得到了Ian Goodfellow的介绍.

1002
来自专栏CreateAMind

PPGN即插即用GAN:Ian Goodfellow推荐的最新模型 视频+多图

PPGN 整合了对抗训练、cnn特征匹配、降噪自编码、Langevin采样;在NIPS2016得到了Ian Goodfellow的介绍.

1091
来自专栏大数据文摘

手把手:基于概率编程Pyro的金融预测,让正则化结果更有趣!

1552
来自专栏ATYUN订阅号

【教程】估算一个最佳学习速率,以更好地训练深度神经网络

对于训练深度神经网络来说,学习速率是调优的最重要的超参数之一。在这篇文章中,我将描述一个简单而有力的方法来找到一个合理的学习速率。这种方法是我从Fast AI网...

3076
来自专栏AI研习社

从编程实现角度学习 Faster R-CNN(附极简实现)

Faster R-CNN 的极简实现: github: simple-faster-rcnn-pytorch(http://t.cn/RHCDoPv ) 本文插...

1K5
来自专栏应兆康的专栏

机器学习概念:梯度下降

机器学习中大部分都是优化问题,大多数的优化问题都可以使用梯度下降/上升法处理,所以,搞清楚梯度算法就非常重要。

4009
来自专栏技术沉淀

逻辑回归(NN Mindset)

1575

扫码关注云+社区

领取腾讯云代金券