热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

百度PaddlePaddle开源对抗样本工具包Advbox,守护AI安全

对抗样本是一个顽固的问题,研究如何克服它们可以帮助我们避免潜在的安全问题,并且会让深度学习算法对所要解决的问题有一个更准确的了解。百度安全实验室为Pad


对抗样本是一个顽固的问题,研究如何克服它们可以帮助我们避免潜在的安全问题,并且会让深度学习算法对所要解决的问题有一个更准确的了解。百度安全实验室为PaddlePaddle平台贡献了对抗样本工具包Advbox,便于平台的开发者、使用者更好地发现和降低模型健壮性的风险敞口,守护AI安全。

1.背景

2014年,科学家 Szegedy 发表了一篇论文:《intriguing properties of neural networks》,在论文中,研究者首先提出来了“对抗样本”的概念,这种对抗样本扮演攻击的角色、试图用来引发模型出错。攻击者可以在正常数据输入的基础上精心构造足够小的扰动,生成对抗样本。对抗样本在难以被肉眼或者常用统计方法所检测到的同时,能够导致AI模型以较高的置信度输出错误的分类(non-targeted attack),或者错误分类为攻击者指定的目标类别(targeted attack)。

对抗样本的存在,将威胁深度神经网络在实际业务和物理场景中的应用。举两个例子:

  • 熊猫和长臂猿

左图被神经网络以60%的置信度将它识别为“熊猫”,然后给它人为叠加上中图所示微小的扰动(实际叠加权重只有0.7%),得到右图。在人类看来,几乎没有什么变化,但人工智能却以99.3%的置信度识别为“长臂猿”。

  • 山地车和蟑螂

正常情况下,inception v3[1]模型将上左侧图片识别山地车(上右),通过加入肉眼无法区分的扰动构成对抗样本(下左侧的图片),被inception v3模型以高置信度识别成蟑螂(下左)。

对抗样本在多种机器学习、深度学习模型中广泛存在。并且对抗样本存在显著的迁移特性,即同一模型(白盒)的不同实例间(不同的超参数)可以使用对抗样本进行迁移,不同模型(黑盒)间同样能够被对抗样本迁移攻击。对抗样本存在潜在危险性。比如,攻击者可能会用贴纸或者一幅画做一个对抗式「停止(stop)」交通标志,将攻击对象瞄准自动驾驶汽车,这样,车辆就可能将这一「标志」解释为「放弃」或其他标识,进而引发危险。

为了防卫对抗样本,保证人工智能安全,以及利用生成的对抗样本加固模型,目前主流的深度学习平台均提供了对抗样本生成的工具包。百度安全实验室为PaddlePaddle贡献了对抗样本工具包Advbox,相较于其他深度学习平台对抗样本生成的工具包,Advbox在代码结构、易用性和参数调优上都更有优势。目前Advbox已经在github[2]上随PaddlePaddle一起开源,Advbox对抗样本工具包能够为研究者深入开展研究提供极大的便利,研究者和开发者可以高效地使用最新的生成方法构造对抗样本数据集用于对抗样本的特征统计、攻击全新的AI应用抑或是加固业务AI模型。

2.Advbox 工具包

Advbox的目的

  • 作为测试深度学习模型抵御对抗样本的健壮性基准。

  • 通过生成的对抗样本加固现有的模型(对抗训练)。

  • 作为对抗样本研究的工具包。

 Advbox的核心功能

Advbox主要分成以下几个模块:

  • Attack:attack class定义了攻击方法的接口,后面所有攻击方法都继承Attack基类,实现相应的接口。

  • Model:model class表示深度学习的模型,定义了模型相关的接口。

  • Adversary:adversary class包含初始图像,以及生成的untargeted或者targeted对抗样本。

3.Advbox相关算法介绍

目前Advbox支持FGSM,BIM,JSMA和DeepFool等方法,后续将会有更多的攻击方法(如L-BFGS[10], Carlini/Wagner[11])加入。

  • FGSM算法

FGSM由Goodfellow等研究者于2015年提出,他们试图从AI模型的线性角度解释对抗样本存在的原因。假设线性模型权重参数为w,输入为n,扰动为,则新的输出为。这样一来,激活函数输入就相较原始输入增加了。如果权重w的量级为m,其维度为n,扰动最大值为ε,那么对抗样本对激活函数造成的影响即为,随着维度n的增加,扰动给激活函数输入带来的增量也相应增大,最终将会改变激活函数的输出值。

作者认为目前大部分深度神经网络的激活函数都采用ReLU而不再是sigmoid函数,越来越多的线性被引入导致了对抗样本的存在。基于这一假设,作者提出了FGSM用于生成对抗样本,采用Linfinity作为范数约束,对于非指定目标攻击,其构造目标函数为;对于指定目标攻击,目标函数变化为。直观上来看,损失函数对于输入x的梯度是损失函数变化最快的方向。在非指定目标攻击场景下,沿着梯度方向增加像素值将会使得原始类别标签的损失值增大,从而降低模型判定对抗样本为原始类别的概率;在指定目标攻击场景下,沿着梯度相反方向增加像素值将会使得指定目标类别标签的损失值减小,从而增加模型判定对抗样本为指定目标类别的概率。

同时在论文中,作者还首次揭示了对抗样本的分布特征,即对抗样本往往存在于模型决策边界的附近,在线性搜索范围内,模型的正常分类区域和被对抗样本攻击的区域都仅占分布范围的较小一部分,剩余部分为垃圾类别(rubbish class),如图2-1所示。

图2-1 对抗样本的分布

左图展示了在一张输入样本上变化ε,mnist10个类别每个类别对应softmax层参数的变化。这张图片的正确类别是4。右图是生成曲线的输入,黄色框中表明了正确分类的输入,黄色框左上角对应负ε,右下角对应正ε。每个类别对应的非规范化的对数概率明显与ε分段线性相关,而且在广泛的ε范围内错误的分类比较稳定。

  • BIM算法

2017年Google Brain的Kurakin等研究者在FGSM的基础上提出了BIM用于快速生成对抗样本。BIM实际上是一个迭代版的FGSM,同样采用Linfinity作为范数约束。

对于非指定目标攻击,作者在每次迭代中使用FGSM生成对抗样本,并加入clip函数用于图片归一化的值域回归,即:

对于指定目标攻击,作者在迭代中采用类似的方法,即:

在实际生成对抗样本的过程中,作者建议值为1。直观上,BIM与FGSM一样方便理解,同时简洁高效,攻击效果显著优于FGSM。后续有很多BIM的变种[6],都有着不俗的攻击效果。

不过后续研究表明,基于迭代的方法有相对较差的迁移性,使得进行黑盒攻击的效果变差。而只有一步的基于梯度的方法虽然白盒攻击的效果不好,但是能产生更具迁移性的对抗样本。

  • DeepFool算法

DeepFool[4]由EPFL的Moosavi-Dezfooli等研究者于2015年提出,收录于2016年CVPR会议中。作为一种白盒对抗样本生成方法,DeepFool原理上由二分类模型出发,计算最小扰动距离为当前输入点到分割超平面的最短距离,推导出二分类任务下的扰动生成方法,并从二分类推广至多分类。DeepFool使用L2范数约束,对抗样本生成效果优于FGSM与JSMA方法,在当时是比较先进的攻击方法。

  • JSMA算法

2016年Papernot等研究者基于L0的范数约束,提出了指定目标攻击的JSMA[7]方法用于生成对抗样本。JSMA旨在尽可能减少需要改变的像素点,目标是找到整幅图片中对指定目标具有利的最大显著性像素点,通过改变该像素值的大小,实现基于单像素点的对抗样本生成。

作者构造了显著性列表(saliency map)用于搜索最佳像素点,如公式2-1所示,当像素点对指定目标类别的偏导数小于0时,增加该像素点的像素值将导致指定目标类别的得分函数值降低;当该像素点对其它类别的偏导数和大于0时,增加该像素点的像素值将导致其它类别的得分函数值增大,等价于降低了指定目标类别的得分函数值。这样的像素点对指定目标不利,不属于最佳像素点。相反,当像素点对指定目标类别的偏导数大于0或者对其它类别的偏导数和小于0时,增加该像素点的像素值将有利于模型判定为指定目标类别,显著性最大的像素点即为JSMA所要搜索的像素点。在实际的对抗样本生成中,由于单像素点的约束过强,作者建议放宽至两个像素点对的生成上,如公式2-2所示。

公式2-1 JSMA显著性列表计算公式

公式2-2 像素点对的显著性列表计算

作者在MNIST数据集上使用JSMA生成了对抗样本,如图2-1所示。我们可以看到,对角线上的图片为原始图片,在L0的范数约束下,肉眼较容易地区分对抗样本与原始图片的差别。

图2-2 JSMA在MNIST数据集上生成的对抗样本

4.Advbox攻击步骤

Advbox目前实现的方法都是基于白盒的攻击。我们在mnist数据集上训练了简单的cnn模型,训练的准确率达到了98%。然后在此模型上进行了untargeted攻击,选取了mnist的测试集10000张图片。分别使用了FGSM和BIM进行攻击,攻击成功率分别达到了97.6%和99.98%。下面以mnist举例,

(1)首先要训练一个模型并保存模型参数。

fluid.io.save_params(exe,"./mnist/", main_program=fluid.default_main_program())

(2)然后加载模型的参数还原模型。

fluid.io.load_params(exe,"./mnist/", main_program=fluid.default_main_program())

(3)利用还原的模型,构造一个PaddleModel对象。

m= PaddleModel(fluid.default_main_program(), IMG_NAME, LABEL_NAME,

logits.name, avg_cost.name, (-1,1))

(4)选择一种攻击方法,比如GradientSignAttack(FGSM),将PaddleModel作为参数传给GradientSignAttack。

att= GradientSignAttack(m)

(5)把image和label作为参数传入4中的attack对象中,则进行攻击,生成对抗样本保存在返回值Adversary中。

adversary= att(Adversary(data[0][0], data[0][1]))

 end

Advbox的github地址如下:https://github.com/PaddlePaddle/models/tree/develop/fluid/adversarial

期待有更多开发者和研究者加入到PaddlePaddle平台中来,共同丰富和完善PaddlePaddle平台的安全生态,也欢迎贡献自己最新的对抗样本检测、生成或防护算法,验证评估后我们也会及时更新至Advbox中。

【参考资料】

[1] ChristianSzegedy, VincentVanhoucke, Sergey Ioffe,et al. Rethinking the Inception Architecture for Computer Vision, 2015.

[2]https://github.com/PaddlePaddle/models/tree/develop/fluid/adversarial

[3]Ian J.Goodfellow,JonathonShlens, ChristianSzegedy. Explaining and Harnessing Adversarial Examples, 2014.

[4] AlexeyKurakin, IanGoodfellow, Samy Bengio.Adversarial examples in the physical world, 2016.

[5]Seyed-MohsenMoosavi-Dezfooli,AlhusseinFawzi, PascalFrossard. DeepFool: a simple and accurate method to fool deep neuralnetworks, 2015.

[6]Yinpeng Dong, Fangzhou Liao, Tianyu Pang,et al. Boosting Adversarial Attacks with Momentum, 2017.

[7] NicolasPapernot, PatrickMcDaniel, Somesh Jha,et al. The Limitations of Deep Learning in Adversarial Settings,2015.

[8]http://staging.paddlepaddle.org/docs/develop/documentation/en/design/fluid.html

[9] https://github.com/tensorflow/cleverhans

[10] Pedro Tabacof, Eduardo Valle.Exploring the Space of Adversarial Images, 2015

[11] NicholasCarlini, David Wagner.Towards Evaluating the Robustness of Neural Networks, 2017

*感谢 姜辉 对本文的校审

*欢迎关注百度安全实验室(微信公众号ID:BaiduX_lab)

点击“阅读原文”,访问Advbox的github地址。


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • Opencv提供了几种分类器,例程里通过字符识别来进行说明的1、支持向量机(SVM):给定训练样本,支持向量机建立一个超平面作为决策平面,使得正例和反例之间的隔离边缘被最大化。函数原型:训练原型cv ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 读手语图像识别论文笔记2
    文章目录一、前言二、笔记1.名词解释2.流程分析上一篇快速门:读手语图像识别论文笔记1(手语识别背景和方法)一、前言一句:“做完了&#x ... [详细]
  • vb.net面试题,请大家帮忙,谢谢。如果需要讲详细一点,那就加我QQ531412815第4题,潜在的错误,这里的错误不是常规错误,属于那种只有在运行是才知道的错误:Catchex ... [详细]
  • quartus管脚分配后需要保存吗_嵌入式必须会的一些硬件面试题,要试一试吗?你过来呀!...
    1、下面是一些基本的数字电路知识问题,请简要回答之。(1)什么是Setup和Hold时间?答:SetupHoldTime用于测试芯片对输入 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • “你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬” ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
author-avatar
ys2011一号_139
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有