动态 | Goodfellow最新对抗样本,连人类都分不清是狗是猫

AI 科技评论按:机器学习模型容易受到对抗样本的影响,这已不是什么新鲜事。相信下面大家对下面这幅图(Goodfellow et al., 2014)都不陌生:

Goodfellow 凭借这张图让我们知道,即使对样本微小的改变也能欺骗学习模型,让模型做出南辕北辙的判断。这项工作充分说明了目前 AI 系统的脆弱性。

近期 Goodfellow 等人在「欺骗」上又更上一层楼,不光是欺骗机器,连人类也被欺骗了。

如上图所示,机器模型和人类都会判断左侧是猫,而右侧是狗,即使你仔细观察可能也会得出相同的结论。而事实上右侧图像只是左侧图像一个简单地对抗扰动。相关的工作发表在《Adversarial Examples that Fool both Human and Computer Vision》。

意义

这篇文章的重要意义不言而喻。如论文摘要中所说:「机器学习模型易受对抗样本的攻击这点大家已经非常清楚;人类是否也有相同的弱点还是一个开放性问题;而这篇文章提出了第一个能够欺骗人类的对抗样本。」

论文中还说到它对机器学习安全研究的影响。从机器学习安全的角度来考虑,如果我们知道人脑可以抵御某些类型的对抗样本,那么这就说明在机器学习安全中存在类似的机制,这为我们寻找它们提供了信心和线索;反过来,如果我们知道存在对抗样本能够欺骗我们的大脑,那么这就告诉我们,机器学习安全的重心不应该是研究如何设计鲁棒性极高的模型,而应是研究如何保证系统即使包含非鲁棒性的 ML 组件,仍然是安全的。

另一方面,如果针对计算机视觉开发的对抗样本对人脑也有影响,这将为我们了解人脑的工作机理提供某些线索。

思路

在 Goodfellow et al.(2014) 的文章之后,计算机视觉领域相继出现很多构建对抗样本的流行算法,这些算法的一个共同点就是依赖模型的架构和参数来对输入进行梯度优化。但是,我们好像没办法获取大脑这个模型的「架构」以及「参数」。那么如何才能构建针对人类的对抗样本呢?

这就需要考虑一个比较有意思的现象了——对抗样本通常可以在模型之间进行迁移;也即是说,我们可以通过迁移的方法来攻击哪些不知道其「架构」和「参数」的模型。这就使得构建针对人类的对抗样本成为可能。

当然事情并不是这么简单。作为人类,我们有很多认知偏差或者视觉错觉,但是这些偏差或错觉并不等同于之前研究中对图像的微小扰动。此外,我们可以通过学习损失函数来优化机器模型的对抗样本,但是对于人类,这种方法显然是无效的(或者需要花费极大的劳动)。所以到目前为止并没有看到有将迁移性对抗样本应用于人类视觉感知领域的研究。

这篇文章的作者针对这些问题,采取了三个关键的思想来解决:

  • 之一,作者使用近期的黑箱对抗样本构建技术为一个目标模型(不需要知道模型的架构和参数)创建对抗样本;
  • 之二,作者对机器学习模型做了一番调整来模仿人类前期视觉处理过程,也即让模型更像人,使对抗模型更容易从学习模型迁移到人类;
  • 之三,由于人类在分类任务中的准确率太高,实验性能的微小改变可能达不到可观测的效果。于是作者在评估人类观察者的分类决策时,限制他们必须在一定的时间范围内做出决定,这样一来对抗样本对人的影响就更容易被检测出来了。

藉此三条,于是 Goodfellow 等人就构建出了能够同时欺骗机器学习模型和人类的对抗样本。

模型

作者构建了 k(k=10)个在 ImageNet 上训练的 CNN 模型,每个模型都是以下这些架构之一的实例 (Szegedy et al., 2015; 2016; He et al., 2016):

Inception V3, Inception V4, Inception ResNet V2

ResNet V2 50, ResNet V2 101, ResNet V2 152

如前面提到的思想之二,作者为每个模型输入前置了一个视网膜层,该视网膜层包含了一些人眼的视觉变换;甚至,作者还在这个视网膜层中添加了偏心依赖的模糊化,以更符合人类通过视网膜格子(注:人类视网膜不是密集排布的)输入的机理。

结果

让我们回到开头的那张图片。不得不说,这是一张极具代表性的例子,即使我们再多看几遍也仍然会认为右侧的那张图片是狗。

下面这张是更多的结果:

上面一列从左到右,是攻击不同个数(1,5,10)的模型生成的对抗样本,随后用两个测试模型(其中一个是人类模型)进行分类。可以看出攻击的目标模型数量越多,生成的图像对人类来说越像狗。

下面一列则是针对 10 个模型的攻击生成的对抗样本,从左到右为不同的攻击程度。文中介绍说 eps=8 时,人类受试者已经认为这是狗了。

p.s. 不过为什么笔者觉得原图好像也是只狗呢?U•ェ•*U

原文发布于微信公众号 - AI科技评论(aitechtalk)

原文发表时间:2018-02-25

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

聊聊spring cloud的AbstractLoadBalancingClient

本文主要研究一下spring cloud的AbstractLoadBalancingClient

862
来自专栏C# 编程

C#使用DataSet类、DataTable类、DataRow类、OleDbConnection类、OleDbDataAdapter类编写简单数据库应用

//注意:请使用VS2010打开以下的源代码。 //源代码地址:http://pan.baidu.com/s/1j9WVR using System; usi...

2480
来自专栏菩提树下的杨过

winform中linkLabel的用法(示例)

private void Form1_Load(object sender, EventArgs e)         {             this...

1935
来自专栏张善友的专栏

Using sqlite with .NET

The other day I found that there is a .NET wrapper for sqlite. sqlite is a very ...

2318
来自专栏互联网开发者交流社区

WinForm之窗体应用程序

1873
来自专栏c#开发者

C# : row-clickable GridView and get and set gridview rows using JavaScript

Complete C# code: ---------------- using System; using System.ComponentModel; ...

3016
来自专栏飞扬的花生

日志帮助类

 1.代码 using System; using System.Collections.Generic; using System.Linq; using S...

1919
来自专栏闻道于事

商城项目整理(三)JDBC增删改查

商品表的增加,修改,删除,订单表的增加,确认,用户表的查看,日志表的增加,查看 商品表建表语句: 1 create table TEST.GOODS_TABL...

5525
来自专栏xingoo, 一个梦想做发明家的程序员

windows程序设计-第四章 system1.c

/*---------------------------------------------------- SYSMETS1.C -- System M...

24010
来自专栏菩提树下的杨过

SqlTransaction事务使用示例

using System; using System.Data; using System.Data.SqlClient; using System.Co...

1878

扫码关注云+社区