忽悠神经网络指南:教你如何把深度学习模型骗得七荤八素

知己知彼,无论你是想成为黑客(最好不要!)或防范未来黑客的入侵,都有必要来了解一下如何骗过由海量数据训练出来的深度学习模型。
只要有程序员还在编程,黑客们就会不遗余力地找寻利用这些程序的方法。恶意黑客更是会利用程序中最为微小的漏洞来侵入系统,窃取数据,对系统造成严重破坏。

但由深度学习算法驱动的系统应该是能够避免人为干扰的,对吧? 一个黑客怎么能够突破被TB(兆兆字节)级数据训练的神经网络呢?

然而事实证明,即使是最先进的深层神经网络也是很容易被欺骗的。只需要使用一些小技巧,你就可以迫使模型预测出你想要的任何结果:

我们可以修改上面这幅喵星人照片好让它被模型识别为烤面包机。

因此,在你将启用由深层神经网络驱动的新系统之前,让我们详细了解一下如何去破坏系统以及如何保护自己的系统免受黑客的攻击。

神经网络帮助人们保护网络安全

现在我们假设自己经营着一个像Ebay这样的拍卖网站。在我们的网站上,我们想防止人们出售违禁物品——比如活的动物。

但是假如你有数百万的用户,执行这些规则将是非常困难的。我们可以聘请上百人去手动审查每一个拍卖清单,但这无疑将非常昂贵。相反,我们可以使用深度学习去自动检查拍卖照片是否属于违禁物品,并对那些违禁品照片进行标记。

这是一个典型的图像分类问题。为了搭建这个模型,我们将训练一个深层卷积神经网络来从合规物品中识别出违禁物品,之后将识别模型运行于网站上的所有照片。

首先,我们需要一个基于历史拍卖列表的含有成千上万个拍卖图片的数据集。 数据集需要既有合规物品图片又有违禁物品图片,以便于我们训练神经网络来区别他们:

然后着手开始训练神经网络,这里我们使用标准的反向传播算法。这个算法的原理是,我们通过一个训练图片,传递该图片的预期结果,然后回到神经网络中的每一层去轻微地调节他们的权重,从而使模型更好地产生该图片的正确输出:

我们使用数千张照片重复上述过程上千次,直到模型以可接受的准确性稳定地输出正确结果为止。

最终我们将得到一个可以稳定地将图像分类的神经网络模型:

但事情往往并不如他们看起来的那么可靠…

卷积神经网络在对图像进行整体识别和分类上是非常强大的。他们在识别复杂形状和图案时并不受其在画面中所处位置的影响。在许多图像识别任务中,它们的表现可以媲美甚至于击败人类的表现。

对于这样高端的模型,如果将图像中的一些像素加黑或者变亮,对最终的预测结果不应该有很大的影响,对吧?是的,它有可能会轻微改变预测结果的可能性概率,但不会将图像的预测结果从“违禁品”改判为“合规品”。

我们期望的是:输入照片的微小变化只会对最终预测结果造成微小的变化。

然而,2013年的著名论文《神经网络的有趣特性》发现了这并不总是真的。如果你确切地知道了要更改哪些像素点以及要对其做出多大的改变,你就可以有意地强制神经网络对于给定图像做出错误预测,而不需要对图像外观做出大的改动。

这意味着我们可以故意制作一张明显是违禁物品的照片,但使它完全骗过我们的神经网络模型。

怎么会这样?机器学习分类器的工作原理就是找到意图区分事物之间的分界线。 以下图示是一个简单的二维分类器,它学习的目标是将绿球(合规)与红球(违规)区分开来:

现在,分类器的精度达到100%。它找到了一条可以将所有的绿球与红球完美分开的区隔线。

但是,如果我们想要调整一下模型使得一个红球被故意区分成绿球呢?我们最少要将红球移动多少才会使得它被推到绿球的判定区域呢?

如果我们把分界线旁边那个红球的Y值少量增加,那么我们就几乎可以把它推到绿球的判定区域了:

所以要想欺骗一个分类器,我们只需要知道从哪个方向来推动这个点可以使它越过区隔线即可。如果我们不想使这个错误过于明显,理想情况下我们会使这个移动尽可能的小,以至于其看起来就像是一个无心之过。

在使用深层神经网络进行图像分类时,我们分类的每个“点”其实是由成千上万个像素组成的完整图像。这就给了我们成千上万个可以通过微调来使预测结果跨过决策线的可能值。如果我们可以确保自己对图像中像素点的调整不是肉眼可见般的明显,我们就可以做到在愚弄分类器的同时又不会使图像看起来是被人为篡改过的。

换句话说,我们可以选取一张真实物品的图像,通过对特定像素点做出非常轻微地修改使得图像被神经网络完全识别为另一件物品—而且我们可以精准地控制这个替代品是什么:

把一只猫变成烤面包机。图像检测结果来自与Keras.js的Web演示:https://transcranial.github.io/keras-js/#/inception-v3

如何欺骗神经网络

我们之前已经讨论了训练神经网络以分类照片的基本过程:

1.添加一张训练用图片;

2.查看神经网络的预测结果,看看其距离正确答案有多远;

3.使用反向传播算法来调整神经网络中每一层的权重,使预测结果更接近于正确答案。

4.在数千张不同的训练照片上重复步骤1-3。

那么相比于调整神经网络每一层的权重,如果我们直接修改输入图像本身直到得到我们想要的答案为止呢?

所以我们选用了已经训练好的神经网络,并再次“训练”它,不过这次我们将使用反向传播算法来直接调整输入图像而不是神经网络层的权重:

所以这里是新的算法:

1.添加一张我们想要“黑”的照片。

2.检查神经网络的预测结果,看看其距离我们想要的答案有多远。

3.使用反向传播算法来调整照片本身,使预测结果更接近于我们想要的答案。

4.使用相同的照片重复步骤1-3上千次,直到神经网络输出结果为我们想要的答案为止。

在此之后,我们将会得到一张可以欺骗神经网络的图片,同时并不改变神经网络本身。

唯一的问题是,由于算法在调整上没有任何限制,允许以任何尺度来调整任何像素点,所以图像的最终更改结果可能会大到显而易见:他们会出现变色光斑或者变形波浪区域

一张被“黑”过的照片,由于没有对像素点可被调整的尺度做约束,你可以看到猫周围有了绿色光斑和白色墙壁上出现的波浪形图案。

为了防止这些明显的图形失真,我们可以将算法加上一个简单的限定条件。我们限定篡改的图片中每一个像素在原始的基础上的变化幅度取一个微量值,譬如0.01%。这就使算法在微调图片的时候仍然能够骗过神经网络却不会与原始图片差别太大。

在加入限定后重新生成的图片如下:

在每个像素只能在一定范围内变化的限制条件下生成的被“黑”的图片。

即使这张图对人眼来说篡改后没有区别,却可以骗过神经网络!

现在让我们来码代码

首先我们需要一个事先训练过的神经网络用来欺骗。我们不用重新开始训练,而是使用谷歌创建的神经网络。。

Keras是一个著名的深度学习框架,里面有几个预先训练过的神经网络。我们会使用其中的谷歌Inception v3 深度学习神经网络的拷贝。这个神经网络有过训练,曾经检测过超过一千种不同的物体。

下面是Keras中用此神经网络负责图像识别的基本代码。(文本代码详见链接)https://gist.github.com/ageitgey/8a010ee99f55fe2ef93cae7d02e170e8#file-predict-py

在继续下去之前确保你预先安装了Python 3和Keras:

我们运行之后,它正确检测到了我们的图片是一只波斯猫:

现在我们微微篡改一下图片直到能够骗过这个神经网络让它认为图片是一个烤面包机。

Keras没有内置的可以通过输入图片训练的方法只有训练神经网络层,所以我只能提高技巧手动编写训练步骤的代码。

下面是我的代码:(文本代码详见链接)https://gist.github.com/ageitgey/873e74b7f3a75b435dcab1dcf4a88131#file-generated_hacked_image-py




运行后,最终我们可以得到能够骗过神经网络的图片。

注意:如果你没有GPU,这可能需要几个小时的时间运行。如果你有并且配置了Keras和CUDA,应该花不了几分钟。

现在我们将篡改后的图片放入原始模型中重新运行来测试其是否成功。

我们成功了!神经网络被我们欺骗了,把猫当成烤面包机了!

我们用被“黑”了的图片可以干什么?

这种被“黑”图片的操作被称为“创造对抗性的例子”。我们很有针对性的做出了让机器学习模型产生错误的一些数据。这个操作很巧妙,但在实际生活中有什么用呢?

研究者发现这些篡改图片有一些很令人惊喜的性质:

当被“黑”图片被打印出来后居然仍然可以欺骗神经网络!因此你可以用这些特殊的图片欺骗镜头和扫描仪,而不仅仅是电脑里上传图片的那种系统。

当神经网络被欺骗之后,如果其它的神经网络也是用类似的数据来训练的,即使设计完全不同,也能被这种特殊的图片欺骗。

因此我们可以用这些篡改图片做许多事情!

但是关于我们如何创造出这些特殊图片还具有很多限制——我们的操作需要能够直接进入神经网络的权限。因为我们实际上是“训练”神经网络来欺骗自身,我们需要它的拷贝版。在实际生活中,没有公司会让你下载的到他们受过训练的神经网络的代码,这也就意味着我们无法来进行这个攻击性的操作了……对吗?

并没有!研究者近日发现,我们可以利用探测另外一个神经网络的动向来镜像同步自己网络的方法,训练自己的替代性的神经网络。

然后你就可以用替代性的神经网络来生成被“黑”图片,这依然可以骗过原来的网络!这招叫做黑箱攻击。

这种攻击的范围没有限制,后果可以很可怕!下面是一些黑客能够做到的例子:

欺骗自动驾驶汽车使其认为看到的“停车”路标是一个绿灯——这可以引起车祸!

欺骗内容过滤系统使其无法识别出具有攻击性的和非法的信息。

欺骗ATM支票扫描系统使其错误的识别支票上面的实际金额信息。(如果你被抓到的话还可以很合理的推卸掉自己的罪责!)

这些攻击方法不仅限于图片篡改。你可以用同样的方式去欺骗处理其他种类数据的分类器。譬如,你可以欺骗病毒扫描仪将你的病毒错误地识别为安全的!

我们如何防止这样的攻击?

现在我们知道了神经网络是可以被欺骗的(包括其他的机器学习模型),我们如何防止呢?

简单来说,还没有人是能完完全全保证安全的。防止这类攻击的方法仍然在研究中。要始终紧跟最新的研究进展,最好的方式是跟进Ian Goodfellow和Nicolas Papernot写的cleverhans博客,他们俩是这一领域里最具有影响力的研究者。

但是我们目前已经知道的一些事情是:

如果你只是简单的创造很多被“黑”的图片,并将这些纳入到你之后的训练数据中,这会使你的神经网络更容易抵抗这些攻击。我们称之为对抗性训练,这也许是目前最可以考虑的一种防御手段。

有另外一种有效果的方法叫做防御性蒸馏法,这种方法是训练另一个模型来模仿你原有的模型。但这是一种新的方法并且相当复杂,所以除非有特殊的需求,我还不想继续研究这个方法。

目前为止,研究人员尝试了其他所有能想到的防御这些攻击的方法,都失败了。

既然我们还没有最后的定论,我建议你在使用神经网络的时候考虑一下这种攻击会对你的工作带来什么样的损失,至少可以降低一些风险。

譬如,如果你只有一个单一的机器学习模型作为鉴别保密信息源的唯一安全防线,即使它不会被欺骗,也并不是一个好主意。但是假如你只是用机器学习作为一个中间处理过程,还是有人工鉴别的操作,也许就会没事。

换句话说,将机器学习模型和其他手段一样看成不是完全可靠的技术。想一想如果某个用户故意黑进你的系统欺骗你的网络,这会带来什么样的后果,你需要怎么样处理来降低这种风险。

时间: 2024-09-19 08:05:33

忽悠神经网络指南:教你如何把深度学习模型骗得七荤八素的相关文章

独家 | 教你在R中使用Keras和TensorFlow构建深度学习模型

引言: 在R和Python之间如何进行选择一直是一个热议的话题.机器学习世界也被不同语言偏好所划分.但是随着深度学习的盛行,天平逐渐向Python倾斜,因为截至目前为止Python具有大量R所没有的深度学习的资源库和框架. 我个人从R转到Python是因为我想更加深入机器学习的领域,而仅仅使用R的话,这(在之前)是几乎不可能实现的事情.不过也仅此而已! 随着Keras在R中的实现,语言选择的斗争又重新回到舞台中央.Python几乎已经慢慢变成深度学习建模的默认语言,但是随着在R中以TensorF

Arimo利用Alluxio的内存能力提升深度学习模型的结果效率(Time-to-Result)

深度学习算法通常被一些具体应用所采用,其中比较显著的应用领域包括计算机视觉.机器翻译.文本挖掘.欺诈检测等.深度学习的方法在大模型加大数据的场景下效果显著.与此同时,被设计用来处理大数据的分布式计算平台(如Spark)也日益应用广泛.因此,通过在Spark平台上开发深度学习计算框架,深度学习的应用领域可以变得更加广泛,企业完全可以在已有的Spark基础设施上使用深度学习. 1.利用Alluxio协处理器进行基于Spark的分布式深度学习 在2015 Strata + Hadoop World N

数据不够怎么训练深度学习模型?不妨试试迁移学习

深度学习大牛吴恩达曾经说过:做AI研究就像造宇宙飞船,除了充足的燃料之外,强劲的引擎也是必不可少的.假如燃料不足,则飞船就无法进入预定轨道.而引擎不够强劲,飞船甚至不能升空.类比于AI,深度学习模型就好像引擎,海量的训练数据就好像燃料,这两者对于AI而言同样缺一不可. 随着深度学习技术在机器翻译.策略游戏和自动驾驶等领域的广泛应用和流行,阻碍该技术进一步推广的一个普遍性难题也日渐凸显:训练模型所必须的海量数据难以获取. 以下是一些当前比较流行的机器学习模型和其所需的数据量,可以看到,随着模型复杂

数据不够怎么训练深度学习模型?不妨试试迁移学习

深度学习大牛吴恩达曾经说过:做AI研究就像造宇宙飞船,除了充足的燃料之外,强劲的引擎也是必不可少的.假如燃料不足,则飞船就无法进入预定轨道.而引擎不够强劲,飞船甚至不能升空.类比于AI,深度学习模型就好像引擎,海量的训练数据就好像燃料,这两者对于AI而言同样缺一不可. 随着深度学习技术在机器翻译.策略游戏和自动驾驶等领域的广泛应用和流行,阻碍该技术进一步推广的一个普遍性难题也日渐凸显:训练模型所必须的海量数据难以获取. 以下是一些当前比较流行的机器学习模型和其所需的数据量,可以看到,随着模型复杂

OpenAI 教你如何构建深度学习研究的基础设施

编者按:OpenAI研究工程师Vicki Cheung, Jonas Schneider , Ilya Sutskever, and Greg Brockman在本文中分享了从事Deep Learning研究工作所需要的基础设施(软件.硬件.配置和编制),举例说明如何运用开源Kubernetes-ec2-autoscaler自动扩展深度学习研究中的网络模型,将有助于广大深度学习研究爱好者构建自己的深度学习基础设施. 深度学习是一门实证科学,一个研究团队的基础设施建设将对未来的研究工作产生重大影响

神经网络之父 Geoffrey Hinton:深度学习的下一个飞跃是什么?

Geoffrey Hinton,图源网络 雷锋网按: Geoffrey Hinton 被尊称为"神经网络之父",他将神经网络带入到研究与应用的热潮,将"深度学习"从边缘课题变成了谷歌等互联网巨头仰赖的核心技术,并将 HintonBack Propagation(反向传播)算法应用到神经网络与深度学习,还提出了"Dark Knowledge"概念. Geoffrey Hinton 曾获得爱丁堡大学人工智能的博士学位,并且为多伦多大学的特聘教授.在

数据有限时怎样调优深度学习模型

迁移学习 所谓迁移学习,就是将一个问题上训练好的模型通过简单的调整,使其适用一个新的问题,可以认为是一种模型调优的"取巧"方法.可以类比人的举一反三能力. 迁移学习的特点 1. 需求数据量少 假设有两个领域,一个领域已经有很多的数据,能成功地建一个模型,有一个领域数据不多,但是和前面那个领域是关联的,就可以把那个模型给迁移过来.比如,我们想做一个化妆品推荐模型,但数据量较少,可以先用一个成型的较为稳定的饰品推荐模型进行调优.跨领域的在学术界也有尝试哦,比如网络搜索可以迁移到推荐,图象识

CVPR2017精彩论文解读:直接处理三维点云的深度学习模型

雷锋网(公众号:雷锋网) AI 科技评论按:虽然CVPR 2017已经落下帷幕,但对精彩论文的解读还在继续.下文是Momenta高级研究员陈亮对此次大会收录的 PointNet:Deep Learning on Point Sets for 3D Classification and Segmentation  一文进行的解读. 随着激光雷达,RGBD相机等3D传感器在机器人,无人驾驶领域的广泛应用.针对三维点云数据的研究也逐渐从低层次几何特征提取( PFH, FPFH,VFH等)向高层次语义理

忽悠VC指南:假装成一名人工智能专家的正确姿势

不知道你是否已经感受到了人工智能的存在.最近两年间,关于"人工智能和机器学习将如何革新每个行业","所有的工作都将消失",类似这种论调的预言简直无穷无尽.不过,这也意味着人工智能领域存在着多种可能和巨大的机遇. 我的一位做风投的朋友告诉我,他们现在接触到的项目至少有75%都会包含人工智能的内容,项目花开遍地.甚至此时此刻,这个世界上每10.9个小时就有一家人工智能公司诞生-- 不过VC手里的预算是有限的,如何说服对面坐着的人心甘情愿的将兜里的钱投给你?你会惊喜的发现