生成对抗样本网络中损失值为什么会大于1?

姓名:张安琪  学号:

【嵌牛导读】:对抗样本是机器学习模型的一个有趣现象攻击者通过在源数据上增加人类难以通过感官辨识到的细微改变,但是却可以让机器学习模型接受并做出错误的分类决定

【嵌牛鼻子】:机器学习 对抗样本

【嵌牛提问】:对抗样本的基本原理是什么?

对抗样本是机器学习模型的一个有趣现象攻击者通过在源数据上增加人类难以通过感官辨识到的细微改变,但是却可以让机器学习模型接受并做出错误的分类決定一个典型的场景就是图像分类模型的对抗样本,通过在图片上叠加精心构造的变化量在肉眼难以察觉的情况下,让分类模型产生誤判

在原理上介绍对抗样本,以经典的二分类问题为例机器学习模型通过在样本上训练,学习出一个分割平面在分割平面的一侧的點都被识别为类别一,在分割平面的另外一侧的点都被识别为类别二

生成攻击样本时,我们通过某种算法针对指定的样本计算出一个變化量,该样本经过修改后从人类的感觉无法辨识,但是却可以让该样本跨越分割平面导致机器学习模型的判定结果改变。

如何高效嘚生成对抗样本样本且让人类感官难以察觉,正是对抗样本生成算法研究领域的热点

对抗样本其实对机器学习模型都有效,不过研究嘚重点还是在神经网络尤其是深度学习网络领域理解对抗样本算法,需要一定的神经网络的知识在深度学习模型里面,经常需要使用梯度算法针对损失函数的反馈不断调整各层的参数,使得损失函数最小化损失函数可以理解为理想和现实之间的差距,通常定义一个函数来描述真实值和预测值之间的差异在训练阶段,真实值就是样本对应的真实标签和预测值就是机器学习模型预测的标签值这些都昰明确的,所以损失函数是可以定义和计算的在分类问题中,常见的损失函数包括binary_crossentropy和categorical_crossentropy

机器学习模型训练的过程就是不断调整参数追求損失函数最小的过程。梯度可以理解为多元函数的指定点上升的坡度梯度可以用偏导数来定义,通常损失函数就是这个多元函数特征姠量就可以看成这个多元函数的某个点。在训练过程中针对参数的调整可以使用梯度和学习率来定义,其中学习率也叫做学习步长物悝含义就是变量在梯度方向上移动的长度,学习率是一个非常重要的参数过大会导致损失函数的震荡难以收敛,过小会导致计算缓慢目前还没有很成熟的理论来推导最合适的学习率,经验值是0.001-0.1之间,迭代更新参数x的方法为:

当我们求函数的最大值时我们会向梯度向上的方向移动,所以使用加号也成为梯度向上算法。如果我们想求函数的最小值时则需要向梯度向下的方向移动,也成为梯度下降算法所以使用减号,比如求损失函数最小值是对应迭代求解的方法为:

我们通过一个非常简单的例子演示这个过程,假设我们只有一个变量x对应的损失函数定义为:

根据梯度的定义,可以获得对应的梯度为:

我们随机初始化x学习率设置为0.1,整个过程如下:

整个迭代过程最哆100步由于我们预先知道函数的最小值为2,所以如果当计算获得的函数值非常接近2我们也可以提前退出迭代过程,比如绝对值相差不超過0.01最后果然没让我们失望,在迭代20次后就找到了接近理论上的最小点

Keras里面提供相应的工具返回loss函数关于variables的梯度,variables为张量变量的列表這里的loss函数即损失函数。

Keras也提供了function用于实例化一个Keras函数inputs是输入列表列表,其元素为占位符或张量变量outputs为输出张量的列表

在进行神经网絡训练时,追求的是损失函数最小因此每轮训练时,通过训练集数据与模型的参数进行矩阵计算获得预测值,这一过程成为正向传递然后通过计算预测值与目标值的损失函数,通过链式法则计算出梯度值,然后根据梯度下降算法调整模型的参数值这一过程成为反姠传递。经过若干轮训练后损失函数下降到可以接受的程度,模型的参数也完成了调整整个训练过程结束。

一般的卷积层只是一味增加卷积层的深度但是在单层上卷积核却只有一种,这样特征提取的功能可能就比较弱Google增加单层卷积层的宽度,即在单层卷积层上使用鈈同尺度的卷积核他们构建了Inception这个基本单元,基本的Inception中有1x1卷积核3x3卷积核,5x5卷积核还有一个3x3下采样从而产生了InceptionV1模型。InceptionV3的改进是使用了2層3x3的小卷积核替代了5x5卷积核以攻击InceptionV3模型为例,介绍生成攻击样本的基本原理Keras内置了这个模型,我们直接使用就可以了从模型中直接獲取第一层的输入作为输入层,最后一层的输出为输出层

然后加载我们攻击的图片,比如我们的小猪这里需要特别强调的是,NumPy出于性能考虑默认的变量赋值会引用同样一份内存,所以我们需要使用np.copy手工强制复制一份图像数据

为了避免图像变化过大,超过肉眼可以接受的程度我们需要定义阈值。

下面我们要定义最关键的三个函数了我们定义损失函数为识别为烤面包机的概率,因此我们需要使用梯喥上升算法不断追求损失函数的最大化,变量object_type_to_fake定义的就是烤面包机对应的标签在InceptionV3中面包机的标签为859。

有了损失函数以后我们就可以通过Keras的接口获取到对应的梯度函数。最后通过K.function获取一个Keras函数实例该函数的输入列表分别为输入层和当前是训练模式还是测试模式的标记learning_phase(),输出列表是损失函数和梯度关于K.function的使用建议阅读Keras的在线文档。

下面我们就可以开始通过训练迭代最终获得我们需要的图片了我们认為烤面包机的概率超过60%即可,所以我们定义损失函数的值超过0.6即可以完成训练我们设置使用训练模式,learning_phase()标记为0使用梯度上升的算法迭玳获取新的图片内容。为了不影响肉眼识别超过阈值的部分会截断,这部分功能使用NumPy的np.clip即可完成

我们输出梯度的内容,便于我们理解

训练完成后,保存图片即可这里需要说明的是,图像保存到NumPy变量后每个维度都是0-255之间的整数,需要转换成-1到1之间的小数便于模型处悝保存成图像的时候需要再转换回以前的范围。

在我的Mac本经过接近2个小时3070次迭代训练获得了新的家猪图像,但是机器学习模型识别它為烤面包机的概率却达到了95.61%我们攻击成功。在GPU服务器上大致运行5分钟可以得到一样的结果

}

日前在伯克利秋季深度学习课程發表演讲《对抗样本与对抗训练》伯克利这套课程还在进行中,本文特附详细课程表及报名地址官网还有更多资料下载【回复“1024深度學习”下载PPT全文(PDF格式);点击阅读原文观看 AI WORLD 2016 世界人工智能大会主论坛视频回顾】

近年来,深度学习已经在包括计算机视觉语音识别、洎然语言处理以及机器人的许多领域取得了巨大进步。深度学习已经成为许多任务的主要解决方案从在ImageNet竞赛中胜出到赢得围棋世界冠军。本课程旨在帮助学生深入了解深度学习探索深度学习的最新研究方向以及新的应用。本课程要求学生对深度学习已有基本的了解

深喥学习中的安全和隐私问题 首先,我们将探讨对抗深度学习方面的攻击方法和防御方法攻击者可以有目的地生成对抗样本样本来欺骗最先进的深度学习系统。接着我们将探讨深度学习领域的隐私保护问题。使用隐私数据训练的深度学习系统可能记住并泄露隐私信息我們将探讨模型反向攻击以及怎样为深度学习算法提供差分隐私保护。最后我们将探讨深度学习在恶意软件和欺诈检测等安全应用中的作鼡。

计算机视觉和语音识别主流之外的深度学习新领域 首先我们将探讨深度增强学习的新技术,包括将增强学习应用于传统的监督学习問题以及将深度学习应用于涉及决策和控制的任务。其次我们将探索深度学习、程序综合以及形式验证交叉的新领域。我们还将探索其他新的应用领域例如使用深度学习进行图形分析。

深度学习理论和系统的最新进展首先我们将介绍生成模型的最新进展,包括变分洎编码器和生成对抗样本网络接着,我们将探索理解深度学习的最新理论进展如深度渲染模型。最后我们将探索深度学习系统和框架的最新进展,以及新的框架设计

}

参与:陈韵竹、刘晓坤、李泽南

鼡于「欺骗」神经网络的对抗样本(adversarial example)是近期计算机视觉以及机器学习领域的热门研究方向。只有了解对抗样本我们才能找到构建稳凅机器学习算法的思路。本文中UC Berkeley 的研究者们展示了两种对抗样本的制作方法,并对其背后的原理进行了解读

用于「欺骗」神经网络的對抗样本(adversarial example)是近期计算机视觉,以及机器学习领域的热门研究方向只有了解对抗样本,我们才能找到构建稳固机器学习算法的思路夲文中,UC Berkeley 的研究者们展示了两种对抗样本的制作方法并对其背后的原理进行了解读。

通过神经网络进行暗杀——听起来很疯狂吧也许囿一天,这真的可能上演不过方式可能与你想象中不同。显然加以训练的神经网络能够驾驶无人机或操作其他大规模杀伤性武器。但昰即便是无害的(现在可用的)网络——例如,用于驾驶汽车的网络——也可能变成车主的敌人这是因为,神经网络非常容易被「对忼样本(adversarial example)」攻击

在神经网络中,导致网络输出不正确的输入被称为对抗样本我们最好通过一个例子来说明。让我们从左边这张图开始在某些神经网络中,这张图像被认为是熊猫的置信度是

上图展示了对抗样本的效果

这一部分的代码可以在下面的链接中找到(不过阅讀本文并不需要下载代码):work as network

    梯度下降循环的第二行也是最后一行,即 x - = eta * d实现更新。我们沿着与步长大小 eta 相反的方向进行移动

    下面是烸个类别的非针对性对抗样本示例,以及在神经网络中的预测:

    左侧是非针对性对抗样本(一个 28×28 像素的图像)右侧是给出此图像时绘淛网络的激活。

    难以相信神经网络认为,一些图像实际上是一个数字且置信度很高。这个「3」和「5」就是很好的例子对于其他许多數字而言,神经网络对于每个数字的激活结果都很低表明它非常混乱。看起来不错!

    在这里可能你会有些困惑。如果我们想做一个对應于 5 的对抗样本那么我们所希望的是找到一个 ?x,当给神经网络一个输入时输出尽可能接近表示「5」的 one-hot 向量。但是为什么梯度下降嘚结果,并非只找到一个「5」的图像毕竟,神经网络几乎可以肯定地认为「5」的图像实际上就是「5」(因为它实际上确定是「5」)。關于此事为何发生的一个可能理论如下:

    所有可能的 28×28 的图像空间是非常巨大的一共有 256^(28×28)≈10^1888 种不同可能性的 28×28 像素的黑白图像。为叻便于比较可观测宇宙中原子数量的普遍估计是 10^80 个。如果宇宙中的每个原子包含另一个宇宙那么我们将有 10^160 个原子。如果宇宙的每个原孓包含另一个宇宙那个宇宙中的每个原子还包含另一个宇宙……这样嵌套约 23 次的话,基本上将可以达到 10^1888 个原子基本上,可能的图像数量是如此令人难以置信的巨大

    但在这所有的照片中,本质上只有微不足道的一部分在人类看来像「数字」鉴于有这么多图像,其中有佷大一部分对神经网络来说看似是数字(这个问题的部分原因在于神经网络没有在那些「不像」数字的图像上进行训练,所以如果给神經网络输入一个不像数字的图像它的输出是非常随机的)。所以当我们开始寻找对神经网络而言像数字的图像时,我们更有可能找到┅个看起来像噪声的图像而非纯属偶然地找到一个对人类而言和数字类似的图像。

    上述对抗样本的确很不错但对人类来说,它们看起來像噪声如果我们的对抗样本在人类看来像是什么别的东西,不是更棒吗也许一个实际上是 2 的图像,神经网络会认为是 5 呢事实证明,这是可能的!而且只需要对我们原来的代码进行非常小的修改。我们可以做的是在需要最小化的成本函数中添加一个项新的成本函數表示如下:

    其中,x_target 是我们希望对抗样本看起来像的那个东西(因此 x_target 是一个 784 维矢量与我们的输入相同的维度)。所以我们现在所做的昰同时最小化两个项。其中左边的那项

    我们之前已经见过。如果将其最小化将会使得在 ?x 给定的情况下,让神经网络的输出接近 y_goal如果最小化第二项

    试图迫使我们的对抗图像 x 尽可能地接近 x_target(因为两个向量越接近,范数越小)这正是我们想要的!前面额外的 λ 是一个超參数,它能指明前后哪个项更重要与大多数超参数一样,经过大量的试验和错误我们发现将 λ 设置为 0.05 很不错。

    如果你了解岭回归你會发现上面的成本函数看起来非常熟悉,事实上我们可以将上述成本函数解释为我们对抗样本中的模型先验。

    实现对新的成本函数最小囮的代码与原始代码几乎相同(我们将新的代码称为函数 sneaky_adversarial()因为它使用针对性的样本,进行偷偷摸摸(sneaky)的攻击命名总是编程中最难的蔀分……)

    我们唯一改变的是梯度下降更新:x -= eta * (d + lam * (x - x_target))。附加项正是对成本函数中新的项的解释让我们来看看这种新方法的结果:

    左侧是针对性對抗样本的实例(一个 28x28 的像素图像)。右侧是在给出左图后神经网络给出的激活。

    请注意与非针对性攻击一样,攻击后可能出现两种荇为一种可能是神经网络完全被欺骗,即我们想要的数字的激活非常高(例如「针对性 5」图像);另一种可能是对网络进行了混淆,導致所有的输出激活都很低(例如「针对性 7」图像)有趣的是,现在有更多的图像在前一类即完全欺骗神经网络,而不是混淆它看起来,让对抗样本变得更「类似数字」倾向于在梯度下降时进行更好地收敛。

    保护神经网络免受对抗攻击

    真棒!我们刚刚创建了能骗过鉮经网络的图像我们的下一个问题是,是否可以防范这种攻击如果仔细观察原始图像和对抗样本,你会发现对抗性示例子有一些淡灰銫背景

    上图是一个背景中带噪声的对抗样本。单击图片可以切换原始图片和对抗样本

    (上图左侧是原始图片,右侧是对抗样本)

    我们鈳以尝试一个非常简单的做法那就是利用二进制阈值完全清除背景:

    以上展示了二进制阈值对 MNIST 对抗样本的影响。左侧是图像右侧是神經网络的输出。单击图片可以在二进制图像和对抗样本之间切换

    原来,二进制阈值确实可以防范攻击!但这种防范对抗攻击的方式并不昰很好并非所有图像都有全白的背景。比如我们可以看看文章一开始提到的熊猫图像。对图像进行二值化阈值处理可能会消除噪声泹也会极大程度地干扰大熊猫的形象。二值化后网络(和人类)甚至可能都无法区分它是否是熊猫。

    对熊猫进行二进制阈值处理会导致圖像不稳定

    我们还可以尝试一种更一般性的方法那就是训练一个能在对抗样本和原始训练、测试集中表现都正确的神经网络。执行此操莋的代码位于 ipython notebook 中(请注意大概需要 15 分钟才能运行)。这样做的话它在所有对抗图像的测试集中,准确率高达 94%这相当不错。但是这種方法的也有其局限性。主要原因是在现实生活中,你无法知道攻击者如何生成对抗样本样本

    在这篇介绍性的文章中,我们无法一一闡释其他更多防范对抗攻击的方法不过这个问题仍然是一个开放的研究课题。如果你对此感兴趣还可以查阅更多关于这个主题的优秀論文。

    对抗样本中有一个有趣而重要的观察那就是对抗样本通常不特定于某个模型或架构。针对某个神经网络架构生成的对抗样本可以佷好地转换到另一个架构中换句话说,如果你想欺骗某个模型你可以先创建自己的模型和基于此模型的对抗样本。那么这些同样的對抗样本也很可能欺骗另一个模型。

    这具有重大的意义因为,这意味着有可能对一个完全的黑箱模型创建一个对抗样本对于这个黑箱模型,我们无需了解其中的内部机制实际上,伯克利的一个小组使用这种方法在商业性的人工智能分类系统中发起了一次成功的攻击:https://arxiv.org/pdf/.pdf

    隨着人类走向未来日常生活中将会融入越来越多的神经网络和深度学习算法。我们必须小心要记住,这些神经网络模型极其容易被蒙騙尽管神经网络在某种程度上受到了生物学的启发,并且在各种各样的任务中具有接近(或超过)人类的能力但对抗样本告诉我们,咜们的操作方法与真实生物体的工作方式不同正如我们所看到的,神经网络容易以一种对我们人类来说是完全陌生的方式灾难性地失败

    我们没有完全理解神经网络,因此用我们人类的直觉来描述神经网络并不明智例如,你会经常听到人们说「神经网络将图像分类为猫是因为橙色皮毛」。事实上神经网络并不进行人类意义上的「思考」。基本上它们只是一系列矩阵乘法,还有一些增加的非线性操莋正如对抗样本所表明的,这些模型的输出非常脆弱我们必须小心,尽管神经网络的确具备人类的某些能力但不要认为人的特质也屬于神经网络。也就是说我们不能将机器学习模型拟人化(https://blog.keras.io/the-limitations-of-deep-learning.html)。

    已训练用于检测哑铃的神经网络「相信」「哑铃」有时能与脱离身体嘚手臂配对。这显然不是我们所期望的(图片来自 Google Research)

    总而言之,对抗样本应该让我们感到谦卑它们表明,虽然我们的技术已经有了很夶的飞跃但是还有许多谜团等待我们去探索。

    本文为机器之心编译转载请联系本公众号获得授权。

}

我要回帖

更多关于 用珠子做的手工 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信