用一个像素攻陷神经网络
价值 | 思考 | 共鸣
简评:仅用一个像素就能让神经网络蒙圈,产生对图片错误的判断。
One Pixel Attack
如果我们只改变一个像素点,能否让深度神经网络把图片错误分类?
相信我们,用一个像素点,足以实现对神经网络攻陷。
在很多情况下,我们甚至可以让神经网络给出我们想要的任何答案。
以下项目是 Keras 重现和教程:One pixel attack for fooling deep neural networks
它是如何工作的?
在这套攻击中,我们使用了 Cifar10 dataset。数据集的任务是将 32X32 像素的图片进行正确分类,分类池有十个选项(如鸟、鹿、卡车等)。这个黑盒(black-box)攻击仅需要由神经网络输出的概率标签(每个分类的概率值)即可。我们通过选择一个像素并且将其修改为某种颜色来生成伪分类。
通过使用被称为差分进化(Differential Evolution,DE)的进化算法,迭代出对抗图像以试图最小化神经网络分类的置信度。
首先,生成几个对抗样本,随机修改一个像素点,用神经网络运行图像。
接下来,将改变后的图像和先前的像素位置和颜色结合在一起,从产生更多的对抗样本,然后继续通过神经网络运行这些样本。如果上一步,有像素降低了神经网络的置信度,那就将它们替换为当前的 best know 解决方案。
重复上述的步骤并进行几次迭代;在最后一步返回对抗图像,最大程度的降低神经网络的置信度。如果成功了,置信度会大大降低,以至于新的(不正确的)类别现在具有最大概率的可信度。
可以参考以下攻击成功的示例:
示例攻击过程详解:Hyperparticle/one-pixel-attack-keras
Getting Started
如果你想要阅读项目和代码,可以看:View the tutorial notebook on GitHub.
要运行教程中的代码,推荐使用适合运行 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
园长:对抗图像随机改变一个像素点,用神经网络运行;然后这个点和对抗图样再结合结合继续用神经网络运行;如果有像素点让神经网络的置信度降低,就将这个替换为当前最佳解决方案;重复迭代上述步骤,将使神经网络产生误判。
更详细过程请阅读:Hyperparticle/one-pixel-attack-keras
▼点击阅读原文获取文中链接
用一个像素攻陷神经网络相关推荐
- 对抗攻击最新研究:仅修改「一个像素」即可骗过神经网络!
编译:BaymaxZ 作者:Jiawei Su.Danilo Vasconcellos Vargas.Sakurai Kouichi(九州大学) 摘要:在图像识别领域,基于DNN的方法克服了传统的图像 ...
- 基于PyTorch,如何构建一个简单的神经网络
本文为 PyTorch 官方教程中:如何构建神经网络.基于 PyTorch 专门构建神经网络的子模块 torch.nn 构建一个简单的神经网络. 完整教程运行 codelab→ https://ope ...
- 一个简单的神经网络,三种常见的神经网络
BP人工神经网络方法 (一)方法原理人工神经网络是由大量的类似人脑神经元的简单处理单元广泛地相互连接而成的复杂的网络系统.理论和实践表明,在信息处理方面,神经网络方法比传统模式识别方法更具有优势. 人 ...
- 一个典型的神经网络包括,神经网络的应用实例
神经网络算法是什么? . Introduction--------------------------------------------------------------------------- ...
- tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数
tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报 分类: tensorflow(4) 目录(?)[+] 本笔记目的 ...
- python神经网络调节参数_神经网络进阶-用python实现一个完整的神经网络框架并在CIFAR10数据集上调参...
上一个博客中讲解了用python实现一个简单的两层神经网络,我们是把所有的网络层都直接写在了类中.但是作为一个神经网络框架,网络的结构应该是可以由使用者自定义的,这样一来也就不用为每个网络结构都重写所 ...
- matlab线性拉伸函数,采用线性变换对图像的每一个像素灰度作线性拉伸-Read.PPT
采用线性变换对图像的每一个像素灰度作线性拉伸-Read 第4章 图像增强(1) 4.1 图像增强概述 图像增强(image enhancement)的定义: 在图像的获取过程中,由于多种因素的影响,导 ...
- 使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络
使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络 本文例程部分主要参考官方文档. JAX简介 JAX 的前身是 Autograd ,也就是说 JAX 是 Autograd 升级版本 ...
- HTML1个像素宽的代码,HTML5 Canvas中绘制一个像素宽的细线实现代码详情
正统的HTML5 Canvas中如下代码ctx.lineWidth = 1; ctx.beginPath(); ctx.moveTo(10, 100); ctx.lineTo(300,100); ct ...
最新文章
- ubuntu 10.04 安装eclipse及其中文语言包
- 居家学习的核心操作准则:45分钟的专注
- 使用Golang搭建gRPC服务提供给.NetCore客户端调用
- python如何设计系统界面教程_python中pycharm软件界面介绍与配置
- notes邮件正文显示不全_python实现一次性批量发邮件
- Linux远程桌面服务VNC/XRDP/Xdmcp/SSH+X11转发及其在树莓派上的使用
- python不会英语不会数学怎么自学-学习Python,数学英语基础很重要吗?
- saltstack管理七之minion端备份
- CENTOS7 安装mantis
- mysql服务器cpu使用率过高100%
- Android Tools 在线更新SDK Manager
- ImageMagick被爆存在零日漏洞 或导致重要信息被窃取
- IjkVideoView 视频播放
- pytion基础语句之数据类型
- 微生物群落功能预测工具
- C++ Qt高仿QQ影音视频播放器 (一)
- 抢先体验TPS轻松过万的SDAG区块链(二)
- 在当当和亚马逊中搜书并输出最低价格
- Word(WPS文字)批量修改表格宽度
- 通用计算机教室,河北省中小学计算机教室建设规范.doc