生成对抗样本研究笔记

文章目录

    • 1 引言
    • 2 分类
      • 2.1 黑盒与白盒
      • 2.2 有目标对抗和无目标对抗
      • 2.3 对抗生成方式
        • 2.3.1 基于梯度优化损失函数
        • 2.3.2 基于优化目标函数
        • 2.3.3 基于几何
        • 2.3.4 基于gan
        • 2.3.5 基于决策访问次数
      • 2.3.6 其他
    • 3 对抗源码
      • 3.1 cleverhans
      • 3.2 advBox
      • 3.3 foolbox
    • 4 补充
    • 5. 参考文献

1 引言

对抗样本(adversarial examples)的概念当初是goodfellow为了证明神经网络由于在高维特征空间中具有线性特性,容易在高维特征空间中被误导这一现象而提出来的[1]。对抗样本的定义比较简单,是指给输入样本细微的扰动,最终导致神经网络输出非预期的效果。当然这种细微的扰动是在于人类能够辨识出来目标物体的前提下的,最好这种扰动是对人类来讲无感的。目前主要的应用于两方面:一方面用于对抗某些非法分子利用AI技术进行恶意攻击,比如12306网站的验证码识别上,在不影响人类判断的前提下能够误导AI技术自动识别;另一方面就是通过生成对抗样本来生成更具有鲁棒性的模型。

2 分类

2.1 黑盒与白盒

生成对抗样本在不同的角度有不同的划分方法,如果按照被攻击的模型的话,可分为白盒与黑盒。白盒是指被攻击的模型是已知的,包括网络结构及权值参数等信息;相反黑盒就是被攻击的模型是未知的。显然,白盒的成功率会比黑盒的高。所以现在有一些黑盒是通过在某种已知的模型进行白盒生成抵抗样本,然后将生成的对抗样本送入黑盒系统中对其进行攻击。

2.2 有目标对抗和无目标对抗

顾名思义,有目标对抗指的是通过对输入样本进行一定的扰动,使得模型预测出所指定的类别。无目标对抗指的是对输入样本进行一定的扰动,使得模型错误的预测出自身的类别。简单点说,有目标对抗表示输入对抗样本后,模型输出是指定的目标类别,此目标类别和真实的类别不同;无目标对抗表示输入对抗样本后,模型输出不是真实的类别。从定义来看有目标对抗会比无目标更苛刻,但是比较多的文章都是针对于有目标对抗的,对于这一点我自认为是有目标对抗的损失函数比较好确定,也更容易收敛,一般也不会等到收敛,当达到目标后迭代就停止了。

2.3 对抗生成方式

2.3.1 基于梯度优化损失函数

统称为FGSM家族,分别有FGSM、I-FGSM、MI-FGSM、DI2-FGSM、M-DI2-FGSM这些成员,家谱图[2]如下:
生成对抗样本研究笔记_第1张图片
最后提一篇白盒对抗样本迁移至黑盒系统的论文NRDM(Neural Representation Distortion Method)。

2.3.2 基于优化目标函数

基于优化目标函数领域也有很多经典的算法,比如L-BFGS 、Deepfool、C&W(Carlini & Wagner)、Zeroth-Order Optimization(黑盒)、Curls & Whey: Boosting Black-Box Adversarial Attacksation Distortion Method等。

2.3.3 基于几何

这个有点剑走偏锋,之前的方法都是在神经网络的高维空间进行攻击。而此方法是通过像素之间的关系进行变换来达到误导模型的目的

2.3.4 基于gan

有Perceptual-Sensitive GAN for Generating Adversarial Patches、Natural Gan两篇论文,由于没读过,不多介绍。

2.3.5 基于决策访问次数

此方法无需特定模型,只需要不断访问目标模型的输出值即可攻击,通常为黑盒攻击,而且也符合现实世界条件。只需不断的与黑盒模型交互反馈结果来达到最优值,无需模型别的信息。咋一看很美好,但是此模型比较依赖访问次数,对于有访问限制的黑盒来讲,这种方法不太现实。

对此没有过多的涉猎,故贴几篇论文结束:Boundary Attack、Boundary Attack++、Efficient Decision-based Black-box Adversarial Attacks on Face Recognition。

2.3.6 其他

除以上的方法以外,还有一些比较有意思的研究,比如对于所有的输入样本设计出一种通用的扰动来达到误导模型的目的,比如Universal adversarial perturbations方法;还有仅仅只改变图像中一个像素值来达到误导模型的目的,比如One pixel attack for fooling deep neural networks,初此之外,还有很多需要等待后来人发掘了。。。

3 对抗源码

Github有不少前辈们开源的对抗代码,各种算法都能找到。大都是参考了以下三种开源库:cleverhans(google)、advBox(百度)和foolbox。

3.1 cleverhans

里面主要有的主流攻击算法如下图所示:
生成对抗样本研究笔记_第2张图片

3.2 advBox

算是自家的开源库,里面大部份文档都有中文翻译,支持的攻击算法有:
生成对抗样本研究笔记_第3张图片

3.3 foolbox

这个还没来得及了解,这是其文档。

4 补充

有一些我没列出来的参考文献基本很容易在搜索引擎里搜到,直接输入方法名就有相对应的论文。
自己整理了一些代码放在github上,其中有基于M-DI2-FGSM的无目标攻击和使用cleverhans的实例(以CW为例),也有以上相关论文的参考引用~ 最后再啰嗦一句,以上是自己的总结,如有疑问或bug,欢迎大家指出,共勉!

5. 参考文献

[1] https://arxiv.org/pdf/1412.6572.pdf
[2] https://arxiv.org/pdf/1803.06978.pdf

你可能感兴趣的:(日志)