对抗样本生成方法学习总结

本文介绍了对抗样本产生的背景及其对深度学习模型的影响,详细讲解了多种对抗样本生成方法,包括FGSM系列(FGSM、I-FGSM、MI-FGSM、PGD)以及C&W和Deepfool算法。通过对这些算法的理解,读者可以更好地认识深度学习的脆弱性,并为构建更健壮的模型提供思路。
摘要由CSDN通过智能技术生成

title: 对抗样本生成方法
date: 2023-03-21 15:08:46
tags: pytorch 对抗样本
cover: https://s2.loli.net/2023/03/20/TkeiAjqp3Jdg9tI.png
categories: 深度学习

对抗样本生成方法

为什么会产生对抗样本?

2013年,Szegedy等人首次提出针对深度学习场景下的对抗样本生成算法–BFGS,作者认为,深度神经网络所具有的强大的非线性表达能力和模型的过拟合是可能产生对抗性样本原因之一。2014年,Goodfellow等人(包括Szegedy)对该问题进行了更深层次的研究,它们认为高维空间下深度神经网络的线性线性行为是导致该问题的根本原因。并提出FGSM算法。代码复现链接

image-20230320222100698

在实际问题当中由于我们分类器输出的特征精度有限,通常为8bits,16bits等。以8bits为例,当输入的信息小于 1 256 \frac{1}{256} 2561就会丢失掉该信息、例如 x ~ = x + η \tilde{x}=x+η x~=x+η,如果 η η η足够小的情况下( ∣ ∣ η ∣ ∣ ∞ < ϵ ||η||_{\infty}<\epsilon ∣∣η<ϵ),分类器无法将其区别开。

给定一个向量 η,如果它的无穷范数(即向量中绝对值最大的元素)小于某个值 ε,那么这个向量 η 就满足某个条件。具体来说,这个条件是根据上下文而定的,可能是某个算法中的收敛条件,也可能是某个优化问题中的约束条件等等。

当把无穷范数换成二范数(即欧几里得范数)或一范数时,公式的含义也会有所不同。

如果将无穷范数换成二范数,那么公式就变成了 ∣ ∣ η ∣ ∣ 2 < ϵ ||η||_{2}<\epsilon ∣∣η2<ϵ,表示向量 η 的二范数(即向量中各元素平方和的平方根)小于某个值 ε。这个条件通常用于最小化向量的误差或距离等问题。

如果将无穷范数换成一范数,那么公式就变成了 ∣ ∣ η ∣ ∣ 1 < ϵ ||η||_{1}<\epsilon ∣∣η1<ϵ,表示向量 η 的一范数(即向量中各元素绝对值之和)小于某个值 ε。这个条件通常用于最小化向量的稀疏性等问题。

img

假设我们有一个线性分类器 f ( x ) f(x) f(x),它的输出可以通过如下线性方程表示:
f ( x ) = w T x + b f(x) = w^T x + b f(x)=wTx+b
其中 x x x 是一个输入向量, w w w 是权重向量, b b b 是偏置项, T T T 表示矩阵转置。

现在,假设我们有一个样本 x x x,它的正确分类为 y y y。我们可以表示这个样本的损失函数为 L ( f ( x ) , y ) L(f(x), y) L(f(x),y),其中 L L L 是损失函数。我们的目标是找到 w w w b b b 的值,使得对于所有样本,损失函数 L L L 的值最小。

现在,考虑一个对抗样本 x ~ \tilde{x} x~,它通过向原始输入 x x x 添加一个微小的扰动而产生:

x ~ = x + η \tilde{x} = x + η x~=x+η
其中 η η η 是一个微小的扰动向量。我们希望找到一个合适的扰动 η η η,使得 f ( x ~ ) f(\tilde{x}) f(x~) 得到一个错误的分类。

x ~ \tilde{x} x~ 代入 f ( x ) f(x) f(x) 的公式中,我们有:

f ( x ~ ) = w T ( x + η ) + b = w T x + w T η + b f(\tilde{x}) = w^T (x + η) + b = w^T x + w^T η + b f(x~)=wT(x+η)+b=wTx+wTη+b
我们可以观察到,如果我们选择 η η η w w w 成正比,那么 w T η w^T η wTη 的值将会很大。这意味着,通过调整 η η η 的大小和方向,我们可以使 f ( x ~ ) f(\tilde{x}) f(x~) 的值足够大,从而导致错误的分类。

FGSM类

FSGM算法

FGSM算法的核心思想是,利用输入数据的梯度信息来进行扰动,从而生成对抗样本。具体来说,FGSM算法会计算输入数据关于损失函数的梯度,然后将梯度的符号作为扰动的方向,添加一个很小的扰动,从而生成对抗样本。FGSM算法的公式如下:

  1. 给定输入样本* x x x*和真实标签 y t r u e y_{true} ytrue
  2. 计算输入样本 x x x关于损失函数 J J J的梯度,即 ∇ x J ( x , y t r u e ) \nabla_x J(x, y_{true}) xJ(x,ytrue)
  3. 计算梯度的符号,即 s i g n ( ∇ x J ( x , y t r u e ) ) 。 sign(\nabla_x J(x, y_{true}))。 sign(xJ(x,ytrue))
  4. 将符号作为扰动方向,添加一个很小的扰动 ϵ \epsilon ϵ,即 ϵ ∗ s i g n ( ∇ x J ( x , y t r u e ) ) \epsilon * sign(\nabla_x J(x, y_{true})) ϵsign(xJ(x,ytrue))
  5. 生成对抗样本:

x ~ = x + ϵ ∗ s i g n ( ∇ x J ( x , y t r u e ) ) 。 \tilde{x} = x + \epsilon * sign(\nabla_x J(x, y_{true}))。 x~=x+ϵsign(xJ(x,ytrue))

**伪代码示例:**用MNIST数据集来验证

import torch
import torch.nn as nn

def fgsm_attack(image, epsilon, data_grad): #输入图像,扰动因子,数据梯度
    sign_data_grad = d
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值