用一个像素攻陷神经网络

作者: 极小光 | 来源:发表于2018-02-28 10:47 被阅读350次

简评:仅用一个像素就能让神经网络蒙圈,产生对图片错误的判断。

One Pixel Attack

如果我们只改变一个像素点,能否让深度神经网络把图片错误分类?

相信我们,用一个像素点,足以实现对神经网络攻陷。

在很多情况下,我们甚至可以让神经网络给出我们想要的任何答案。

以下项目是 Keras 重现和教程:<u style="box-sizing: inherit; text-decoration: none; border-bottom: 1px solid rgba(68, 68, 68, 0.72);">One pixel attack for fooling deep neural networks</u>

它是如何工作的

在这套攻击中,我们使用了 <u style="box-sizing: inherit; text-decoration: none; border-bottom: 1px solid rgba(68, 68, 68, 0.72);">Cifar10 dataset</u>。数据集的任务是将 32X32 像素的图片进行正确分类,分类池有十个选项(如鸟、鹿、卡车等)。这个黑盒(black-box)攻击仅需要由神经网络输出的概率标签(每个分类的概率值)即可。我们通过选择一个像素并且将其修改为某种颜色来生成伪分类。

通过使用被称为差分进化(Differential Evolution,DE)的进化算法,迭代出对抗图像以试图最小化神经网络分类的置信度。

首先,生成几个对抗样本,随机修改一个像素点,用神经网络运行图像。
接下来,将改变后的图像和先前的像素位置和颜色结合在一起,从产生更多的对抗样本,然后继续通过神经网络运行这些样本。如果上一步,有像素降低了神经网络的置信度,那就将它们替换为当前的 best know 解决方案。
重复上述的步骤并进行几次迭代;在最后一步返回对抗图像,最大程度的降低神经网络的置信度。如果成功了,置信度会大大降低,以至于新的(不正确的)类别现在具有最大概率的可信度。
可以参考以下攻击成功的示例:

示例攻击过程详解:Hyperparticle/one-pixel-attack-keras

Getting Started

如果你想要阅读项目和代码,可以看:<u style="box-sizing: inherit; text-decoration: none; border-bottom: 1px solid rgba(68, 68, 68, 0.72);">View the tutorial notebook on GitHub</u>.

要运行教程中的代码,推荐使用适合运行 keras 专用 GPU(TensorFlow - GPU)。

需要 python 3.5+。

1.克隆仓库(repository)

git clone https://github.com/Hyperparticle/one-pixel-attack-keras
cd ./one-pixel-attack-keras

2.如果你还没有安装过 requirement.txt 中的 python 包,那就先安装它

pip install -r ./requirements.txt

3.用 Jupyter 运行 iPython tutoriol notebook

jupyter notebook ./one-pixel-attack.ipynb

训练和测试

运行 train.py 来训练模型,在运行模型后,会自动将检查点保存在 networks/models 目录下。

举个例子,用 200 个检查点和 128 字节的批处理来训练 ResNet:

python train.py --model resnet --epochs 200 --batch_size 128

目前可用的模型:

  • lecun_net
  • pure_cnn
  • net_in_net
  • resnet
  • densenet
  • wide_resnet
  • capsnet

结果

运行几次试验后的初步结果:

对每个 100 个样本的 1、2、3 个像素无差别攻击

看起来攻击成功率和本文阐述的还有一些差距,但是这主要是由于差异演化实施的低效率,这也是下一步我们要尽快解决的问题。

图表中可以看出,CapsNet 对比其他神经网络,能更好的抵御一个像素的攻击,但是仍然也是很脆弱的。

里程碑

  • Cifar10 dataset(√)
  • Tutorial notebook(√)
  • Lecun Network, Network in Network, Residual Network, DenseNet models(√)
  • CapsNet (capsule network) model(√)
  • Configurable command-line interface(√)
  • Efficient differential evolution implementation
  • MNIST dataset
  • ImageNet dataset

译者@孙生光 注:对抗图像随机改变一个像素点,用神经网络运行;然后这个点和对抗图样再结合结合继续用神经网络运行;如果有像素点让神经网络的置信度降低,就将这个替换为当前最佳解决方案;重复迭代上述步骤,将使神经网络产生误判。

英文原文:Hyperparticle/one-pixel-attack-keras
推荐阅读深度学习的局限性

相关文章

  • 用一个像素攻陷神经网络

    简评:仅用一个像素就能让神经网络蒙圈,产生对图片错误的判断。 One Pixel Attack 如果我们只改变一个...

  • 【神经网络chapter3】用Tensorflow构建多层卷积网

    卷积神经网络不再是对每一个像素进行处理,而是对图片上每一小块像素区域进行处理,加强了图片信息的连续性,使得神经网络...

  • 计算机视觉(像素的由来)1

    像素的由来 我们一直然后图片变化,以及在视觉神经网络都是对图像一个一个像素进行操作和计算。例如一个像素值为 255...

  • 语义分割

    (一)语义分割和数据集 (1)什么是语义分割? 语义分割将图片的每一个像素分类到对应的类别。神经网络能够在像素级别...

  • 神经网络参数的反向传播算法

    神经网络损失函数 假设,用神经网络实现一个分类问题,有一个神经网络如下图所示: 用 表示这个网络的层数,用表示这个...

  • CNN卷积神经网络的介绍和实现

    (一)从全连接到卷积神经网络 首先我们用全连接层的思维去思考我们该怎么分类猫和狗的图片。假设,一个手机的像素是12...

  • opencv2(2017.5.5)

    1.图像的腐蚀和膨胀 前提:输入的是二值图像腐蚀:用该像素周围像素集合中最小像素替换当前像素;膨胀:用该像素周围像...

  • px em rem %常用单位总结

    px(像素) px这个单位用的最多,最熟悉。px单位的名称为像素,它是一个固定大小的单元,像素的计算是针对(电脑/...

  • arch submit之百度paddlepaddle

    百度 paddlepaddle 深度神经网络框架 用程序的方式描述一个深度神经网络 程序员写好后,编译成神经网络 ...

  • iOS 利用OpenCV实现图片马赛克效果

    图片马赛克原理下图所示: 图片是由一个个像素组成,每个红框表示一个像素,每一个像素都有一个RGBA的值,这里随便用...

网友评论

    本文标题:用一个像素攻陷神经网络

    本文链接:https://www.haomeiwen.com/subject/dskbxftx.html