首页 分享 对抗样本生成方法综述(FGSM、BIM\I

对抗样本生成方法综述(FGSM、BIM\I

来源:花匠小妙招 时间:2025-11-06 17:41
文章目录 简介 前期准备 一、FGSM 1.原理 2.核心代码 3.结果 二、BIM/I-FGSM 1.原理 2.核心代码 3.结果 三、PGD 1.原理 2.核心代码 3.结果 四、JSMA 1.原理 2.核心代码 3.结果 五、C&W 1.原理 2.核心代码 3.结果 六、DeepFool 1.原理 2.核心代码 3.结果 总结

简介

随着深度学习的快速发展,其脆弱性也越来越被关注。本篇文章将介绍一些经典的对抗样本生成方法,并自己编写了相应代码实现。

前期准备

准备一个待攻击的网络,这里选取了一个用于花卉分类的卷积神经网络,可以对五种不同花卉(雏菊、蒲公英、玫瑰、太阳花、郁金香)进行分类,训练过程见CNN卷积神经网络:花卉分类(去除了此博客数据处理中transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))这一操作,否则对抗样本可视化会有一些问题),后文主要针对该网络进行攻击。

一、FGSM

1.原理

η = ε ∗ s i g n ( ∇ x L ( θ , x , y ) ) η=ε*sign(∇_x L(θ,x,y)) η=ε∗sign(∇x​L(θ,x,y))
x ^ = x + η hat x=x+η x^=x+η
其中:
η : η: η:生成的扰动
ε : varepsilon: ε:控制扰动大小的参数
x : x: x:原始样本
x ^ : hat x: x^:生成的对抗样本
y : y: y:目标标签
θ : θ: θ:网络参数
L : L: L:损失函数
s i g n : sign: sign:符号函数(大于0时取1,小于0时取-1)

2.核心代码

def FGSM_ATTACK(img, epslion, grad): grad_sign = grad.sign() noise_fgsm = epslion * grad_sign adv_fgsm = noise_fgsm + img adv_fgsm = torch.clamp(adv_fgsm, 0, 1) return adv_fgsm, noise_fgsm

python

运行

123456

3.结果

原始图片:识别结果(玫瑰)
在这里插入图片描述
噪声:
在这里插入图片描述
对抗样本:识别结果(郁金香)
在这里插入图片描述

二、BIM/I-FGSM

1.原理

X N + 1 a d v = Clip ⁡ X , ε { X N a d v + α sign ⁡ ( ∇ X J ( θ , X N adv  , y true  ) ) } XadvN+1=ClipX,ε{XadvN+αsign(∇XJ(θ,Xadv N,ytrue ))}

XN+1adv​=ClipX,ε​{ XNadv​+αsign(∇X​J(θ,XNadv ​,ytrue ​))}​
其中:
X N + 1 a d v : mathrm{X}_{mathrm{N}+1}^{mathrm{adv}}: XN+1adv​:第N+1次迭代得到的对抗样本
C l i p : Clip: Clip:裁剪函数,将值裁剪至不大于 ε varepsilon ε的范围
α : alpha: α:控制扰动大小的参数
J : J: J:损失函数
θ : theta: θ:网络参数
y t r u e : y_{true}: ytrue​:正确标签
s i g n : sign: sign:符号函数(大于0时取1,小于0时取-1)

2.核心代码

重复迭代以下代码片段,BIM/I-FGSM可视为FGSM的迭代版本

def BIM_ATTACK(img, alpha, grad, epslion): grad_sign = grad.sign() noise_bim = alpha * grad_sign adv_bim = noise_bim + img adv_bim = torch.clamp(adv_bim, 0, epslion) return adv_bim.detach()

python

运行

123456

3.结果

原始图片:识别结果(玫瑰)
在这里插入图片描述
噪声:
在这里插入图片描述
对抗样本:识别结果(郁金香)
在这里插入图片描述

三、PGD

1.原理

X N + 1 = ∏ X + S { X N + α sign ⁡ [ ∇ X J ( θ , X N , y true  ) ] } mathrm{X}^{mathrm{N}+1}=prod_{mathrm{X}+mathrm{S}}left{mathrm{X}^{mathrm{N}}+alpha operatorname{sign}left[nabla_{mathrm{X}} mathrm{J}left(theta, mathrm{X}^{mathrm{N}}, mathrm{y}_{text {true }}right)right]right} XN+1=∏X+S​{ XN+αsign[∇X​J(θ,XN,ytrue ​)]}
其中:
X N + 1 : mathrm{X}^{mathrm{N+1}}: XN+1:第N+1次迭代得到的对抗样本
∏ X + S : prod_{mathrm{X}+mathrm{S}}: ∏X+S​:投影函数,将值投影至X+S的 ε varepsilon ε邻域范围内
X : X: X:原始样本
S : S: S:随机噪声
α : alpha: α:控制扰动大小的参数
J : J: J:损失函数
θ : theta: θ:网络参数
y t r u e : y_{true}: ytrue​:正确标签
s i g n : sign: sign:符号函数(大于0时取1,小于0时取-1)

2.核心代码

重复迭代以下片段,PGD与BIM/I-FGSM的区别主要在于:
1.PGD使用投影函数使得对抗样本与原始图像每个点的像素值差距不大于 ε varepsilon ε,而BIM/I-FGSM则是使用裁剪函数使得对抗样本每个点的像素值不大于 ε varepsilon ε
2.PGD会在对抗样本攻击前在样本中随机加入一些噪声S

def PGD_ATTACK(origin_img, img, alpha, grad, epslion): grad_sign = grad.sign() noise_pgd = alpha * grad_sign adv_pgd = noise_pgd + img #投影至epslion邻域 max = origin_img + epslion min = origin_img - epslion mask1 = adv_pgd > max mask1 = mask1.int() mask1_ = 1 - mask1 adv_pgd = mask1 * max + mask1_ * adv_pgd mask2 = adv_pgd < min mask2 = mask2.int() mask2_ = 1 - mask2 adv_pgd = mask2 * min + mask2_ * adv_pgd return adv_pgd.detach()

python

运行

12345678910111213141516

3.结果

原始图片:识别结果(玫瑰)
在这里插入图片描述
噪声:
在这里插入图片描述
对抗样本:识别结果(郁金香)
在这里插入图片描述

四、JSMA

1.原理

正向扰动:
S ( X , t ) [ i ] = { 0  if  ∂ F t ( X ) ∂ X i < 0  or  ∑ j ≠ t ∂ F j ( X ) ∂ X i > 0 ( ∂ F t ( X ) ∂ X i ) ∣ ∑ j ≠ t ∂ F j ( X ) ∂ X i ∣  otherwise  S(mathbf{X}, t)[i]=left{0 if ∂Ft(X)∂Xi<0 or ∑j≠t∂Fj(X)∂Xi>0(∂Ft(X)∂Xi)|∑j≠t∂Fj(X)∂Xi| otherwise 

right. S(X,t)[i]={ 0 if ∂Xi​∂Ft​(X)​<0 or ∑j=t​∂Xi​∂Fj​(X)​>0(∂Xi​∂Ft​(X)​)

相关知识

GAN生成对抗网络:花卉生成
基于生成对抗网络的植物景观生成设计——以花境平面图生成为例
一种淋巴组织流式检测样本保存液及其制备方法和应用与流程
Pytorch生成对抗网络(GAN)官方入门教程
SELECT (@i :=@i + 1)生成序列号
BIM建筑
浅谈BIM对建筑工程全生命周期的应用认识.doc
基于在线评论的网络口碑生成机理及监测预警研究.pptx
BIM在绿色建筑中的七大应用方向
深度学习:花朵图像生成模型训练数据集

网址: 对抗样本生成方法综述(FGSM、BIM\I https://www.huajiangbk.com/newsview2460256.html

所属分类:花卉
上一篇: 花贝壳手机版(女性健康首选)v2
下一篇: 郁金香根的用法

推荐分享