​李宏毅机器学习——对抗攻击Adversarial Attack

本文深入探讨了对抗攻击的概念,包括白盒攻击和黑盒攻击,以及针对不同攻击类型的防御措施。重点讲解了FGSM攻击方法,并讨论了攻击为何容易成功及其在真实世界的应用。此外,还介绍了防御策略,如图片模糊化、压缩和使用生成器等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码部分参见:李宏毅机器学习作业10——Adversarial Attack_iwill323的博客-优快云博客

目录

Adversarial Attack的概念和分类

概念

分类

是否知道模型参数

是否有攻击得到的目标

白盒攻击

Non-Targeted Attack

Targeted Attack

Non-perceivable

d(x0, x) 的计算方法

攻击方法的实现

Attack Approach:FGSM(Fast Gradient Sign Method)

黑箱攻击black box attack

有被攻击网络的训练资料时

没有被攻击网络的训练资料时

攻击结果

单一攻击

聚合攻击

为什么攻击这么容易

其他攻击方法

one pixel attack

universal adversarial attack

Speech Processing:侦测一段声音是不是被合成出来的

Natural Language Processing:控制QA结果

Attack Approaches

真实世界攻击

人脸识别

标识辨识 

训练阶段发起攻击

防御措施

Passive defence(被动防御)

第一种方法:图片模糊化

第二种方法:图片压缩

第三种方法:用generator重新生成输入图片

第四种方法:加入随机化

​Proactive defence(主动防御)


Network 在一般的情况下得到高的正确率是不够的,它要在有人试图想要欺骗它的情况下,也得到高的正确率,所以就要能够对恶意攻击采取一定的防御措施。本节将介绍对抗攻击的概念、方法和防御措施

Adversarial Attack的概念和分类

概念

对抗攻击的概念是给正常输入加入特殊的杂讯,形成一个带有攻击性的输入,当其进入模型之后,输出的内容是错误的。被加杂讯的照片叫做 Attacked Image,还没有被加杂讯的照片一般就叫做Benign Image。一般加入的杂讯是很小的,人的肉眼是看不出来的,下图中的攻击图片是夸张了的

攻击前分类的信心分数(置信度)是 0.64,攻击后分类的信心分数是100 %,即反而可能上升

分类

是否知道模型参数

  • 白盒攻击(White Box Attack):已知模型参数
  • 黑盒攻击(Black Box Attack):未知模型参数

是否有攻击得到的目标

  • 没有目标的攻击(Non-targeted Attack):原来的答案是猫,只要你能够让 Network 的输出不是猫就算是成功
  • 有目标的攻击(Targeted Attack):希望 Network不止它输出不能是猫,还要输出某一指定的别的东西,比如说,把猫错误判断成一隻海星才算是攻击成功。

白盒攻击

Network是一个函数f,输入是一张图片,我们叫它x0,输出是一个 Distribution,分类的结果叫y0。被攻击的模型参数是固定的,攻击者是修改不了模型的,只能修改输入内容

Non-Targeted Attack

如果是 Non-Targeted Attack,要找到一张新的图片x, 经过Network输出是 y,正确的答案叫做 ŷ,希望 y 跟 ŷ 的差距越大越好。loss函数就是y和ŷ的负cross entropy,这一项越小越好,代表 y 跟 ŷ的 Cross Entropy 越大

Targeted Attack

如果是目标攻击。用ytarget代表目标,ŷ 其实是一个 One-Hot Vector,ytarget也是一个 One-Hot Vector,希望 y 不止跟 ŷ 越远越好,还要跟ytarget越近越好。

Non-perceivable

加入的杂讯越小越好,也就是新找到的图片跟原来的图片要越相近越好。所以我们在解这个Optimization 的 Problem 的时候,还会多加入一个限制

希望 x 跟x0之间的差距小於某一个 Threshold,这个閾值是人类可以感知的极限,如果x0 跟 x 之间的差距大於 Σ,人就会发现有一个杂讯存在。让x0 跟 x 的差距小於等於 Σ,就可以產生一张图片,人类看起来 x 跟 x0是一模一样的,但產生的结果对 Network 来说是非常不一样的

d(x0, x) 的计算方法

计算d(x0, x)有两个方法。第一种L2:将𝒙每一维的差值的平方相加,要开根号也是可以的;第二种L-∞:将𝒙中绝对值最大元素作为差异大小。𝒙是正常输入和恶意输入的差值(也就是杂讯)

第二种方法L∞更加符合人类的感知情况,所以攻击者一般会考虑采用L-infinity。为什么呢?以方块图来说明,右上角的正方形中四个方块都有微小变化,右下角的正方形中只有绿色方块发生变化。并且令两者对原正方形做差,有相同的L2值,但右下角L-∞更大,右上角L-∞比较小,因為 L-∞ 只在意最大的变化量。而从人肉眼观察来看,能明显看出右下角的变化,所以限制最大的差值(L-∞)也许能够更好地将恶意输入伪装成正常输入。

刚才举的例子是影像上的例子,如果要攻击的对象是一个跟语音相关的系统,那什麼样的声音讯号对人类来说听起来有差距,那就不见得是 L2 跟 L-Infinity 了,要研究人类的听觉系统,看看人类对什麼频态的变化特别敏感,根据人类的听觉系统来制定比较适合的 x 跟 x0之间距离的衡量方式,这个部分需要用到 Domain Knowledge

攻击方法的实现

和以前模型里面的函数不同,之前的是固定输入,调整参数来使loss最小,现在是固定模型参数,调整输入来使loss最小,还是用的梯度下降的方法:将正常的输入x当作初始化值,再迭代更新x,迭代过程是算出loss对输入x的偏微分g,乘上学习率后再更新x。更新完参数以后,如果xt和x的差距大於 ε,就把xt改回符合限制。

假设现在用的是 L-Infinity,那么x 可以存在的范围只有方形框。在更新完x之后,如果x在这个正方形外(蓝色的点),那么就用正方形上最近的点(橙色的点)来替代。

当然,这只是多数方法中的一个,攻击方法可以使用不一样的优化函数,不一样的限制条件,但是本质思想就是这样的。

Attack Approach:FGSM(Fast Gradient Sign Method

这个方法重点在于只要更新一次x,一击就找出一个可以攻击成功的 Image,不需要迭代多次。

不直接用Gradient Descent 的值,给它取一个 Sign,梯度g的输出只有1和-1两种可能,而学习率设为“感知上限”ε表示,更新一次的x必定会在方框的四个角落上,这个一击往往就可以必杀。

def fgsm(model, x, y, loss_fn, epsilon=epsilon): 
    x,y = x.to(device), y=y.to(device)   
    x_adv = x.detach().clone() # 克隆x是因为x的值会随着x_adv的改变而改变
    x_adv.requires_grad = True # need to obtain gradient of x_adv, thus set required grad
    loss = loss_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值