对抗样本生成方法综述(FGSM、BIM\I
简介
随着深度学习的快速发展,其脆弱性也越来越被关注。本篇文章将介绍一些经典的对抗样本生成方法,并自己编写了相应代码实现。
前期准备
准备一个待攻击的网络,这里选取了一个用于花卉分类的卷积神经网络,可以对五种不同花卉(雏菊、蒲公英、玫瑰、太阳花、郁金香)进行分类,训练过程见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(∇xL(θ,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
运行
1234563.结果
原始图片:识别结果(玫瑰)

噪声:

对抗样本:识别结果(郁金香)

二、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(∇XJ(θ,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
运行
1234563.结果
原始图片:识别结果(玫瑰)

噪声:

对抗样本:识别结果(郁金香)

三、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[∇XJ(θ,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
运行
123456789101112131415163.结果
原始图片:识别结果(玫瑰)

噪声:

对抗样本:识别结果(郁金香)

四、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 |
下一篇: 郁金香根的用法 |
推荐分享
- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039
