FGSM阅读笔记

本文介绍了FGSM(快速梯度符号下降法)作为对抗样本生成的基础方法,探讨了线性模型和非线性模型在对抗样本中的行为。在深度网络中,FGSM用于增加损失函数以误导模型分类。对抗训练被用来增强模型的鲁棒性,通过在训练过程中包含对抗样本。文章还讨论了逻辑回归模型的对抗训练以及如何应用FGSM进行防御。
摘要由CSDN通过智能技术生成

FGSM:快速梯度符号下降法,是一种比较早的,经典的攻击方法,后续很多方法都是基于此,如PGD等

写在开头:这是一种白盒攻击,沿着梯度方\omega向添加图像扰动,会使损失函数增大,导致模型错误分类,sign函数保证了与梯度方向一致。

笔记内容

对抗样本的线性解释

非线性模型的线性扰动

线性模型的对抗训练与权重衰减

深度网络对抗训练


对抗样本的线性解释

原始样本:^{}x

对抗样本:\widehat{x }=x+\eta     \left \| \eta \right \|<\varepsilon    \varepsilon是一个小到可以忽略的值

加入权值向量\omega有:

\omega ^{T}\hat{x}=\omega ^{T}x+\omega ^{T}\eta

从上式可以看出加入扰动后,线性模型的激活函数增加了\omega ^{T}\eta

要找到一个\eta使得\omega ^{T}\eta最大化,即 max \omega ^{T}\eta    s.t. \left \| \eta \right \|_{_{\infty }}^{}<\varepsilon 这个求最大值的式子可以改写成:

max \Sigma _{_{i=1}^{}}^{n} \omega _{i}\eta _{i}    s.t. \eta _{i}<\varepsilon i=1,2,...,n

 要保证最大,只要保证\omega _{_{i}}\eta _{_{_{_{i}}}}均最大,\omega _{_{i}}\eta _{_{_{_{i}}}}的最大值为\left \| \omega _{i}\varepsilon \right \|

\eta _{_{i}}=\varepsilon sign(\omega _{i }),也就是取到最大值。

如果\omega是n维的,每一维的平均大小为m,加入扰动\eta后,线性模型的激活函数会增加\varepsilonmn,当维度很高时,x只发生很小的变化(加入的扰动\eta很小),经过\omega放大后(\eta增大,\omega _{_{i}}\eta _{_{_{_{i}}}}也会对应增大),激活函数值也会增加很大,所以,线性模型当维度很高时,也存在对抗样本。 

非线性模型的线性扰动

\theta:模型的参数

x:模型的输入

y:与x相关的目标

J(\theta ,x,y):损失函数

围绕\theta的当前值来线性化损失函数,可以得到最优最大范数约束下的扰动(optimal max-norm constrained pertubation):

\eta =\varepsilon sign(\bigtriangledown _{x}J(\theta ,x,y))

我们将其称为生成对抗样本的“快速梯度符号法(Fast Gradient Sign Method)”。

文中指出目标函数J和输入x之间存在着近似线性的关系,J(\theta ,x,y)\approx \omega ^{T}x,给x添加一个扰动\delta使 \omega _{}^{T}\delta最大,\delta =\varepsilon sign(\omega ),\omega可以通过\bigtriangledown _{x}J(\theta ,x,y)进行求解。通过这种方法可以得到一个对抗样本:

x=x+\varepsilon sign(\bigtriangledown _{x}J(\theta ,x,y))

这个对抗样本的效果使目标函数J(\theta ,x,y)增加到最大,但是,神经网络的本意是最小化这个目标函数J

 如果是有目标攻击,对抗样本表示方法:

x=x- \varepsilon sign(\bigtriangledown _{x}J(\theta ,x,T))

上式中为什么是减号

    在有目标攻击中,对抗样本的目的是让损失函数在标签T上的值越小越好,这样模型才会把T当成样本label,于是应该减少标签在T上的激活值。

线性模型的对抗训练与权重衰减

考虑在最简单的逻辑回归模型上面使用FGSM

训练一个逻辑回归模型来识别标签:y\in \left \{ -1,+1 \right \}

预测函数:P(y=-1)=1-\delta (\omega ^{T}x+b)          P(y=1)=\delta (\omega ^{T}x+b)

logistic sigmoid 函数:\delta (z)=\frac{1}{1+exp(-x)}

训练方法:梯度下降法

样本损失函数:

\zeta(z)=log(1+exp(z))是softplus函数

对其用FGSM,扰动量:

\eta =\varepsilon sign(\bigtriangledown _{x}J(\theta ,x,y))=\varepsilon sign(\bigtriangledown _{x}\zeta (-y(\omega ^{T}x+b)))=\varepsilon sign(-\omega ^{T}\ast \delta(-(\omega^{T}x+b)))=\varepsilon sign(-\omega )=-\varepsilon sign(\omega )

 \omega ^{T}sign(\omega )=\left \| \omega \right \|_{1}

则逻辑回归模型的对抗形式可以写成:

深度网络对抗训练

利用FGSM 进行对抗训练的方法:


含义:对抗样本x+J(\theta ,x+\varepsilon sign(\bigtriangledown _{x}J(\theta ,x,y)))会使目标函数在标签上的损失增加,为了防止这种攻击,就在训练阶段把它加入到目标函数中,使攻击者用这种样本进行攻击,能导致的J(\theta ,x+\varepsilon sign(\bigtriangledown _{x}J(\theta ,x,y)))也是最小化过的,破坏作用有限。

另一种理解:在训练阶段加入J(\theta ,x+\varepsilon sign(\bigtriangledown _{x}J(\theta ,x,y))),同时最小化有这个项的J。也即在训练阶段强行加一个新样本x+\varepsilon sign(\bigtriangledown _{x}J(\theta ,x,y)),把标签设置为y,当测试时,遇到x+\varepsilon sign(\bigtriangledown _{x}J(\theta ,x,y))就不会瞎猜。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Fast Gradient Sign Method (FGSM) 是一种用于生成对抗样本的基本方法,它利用了梯度信息来最小幅度地修改输入数据,使其对模型的预测产生误导。在 Python 中,你可以使用深度学习库如 TensorFlow 或 PyTorch 来实现 FGSM。以下是一个简化的示例,用 TensorFlow 来展示如何在 Keras API 中应用 FGSM: ```python import tensorflow as tf from tensorflow.keras import layers, models # 假设我们有一个简单的线性模型 def create_model(input_shape): model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=input_shape)) model.add(layers.Dense(1, activation='sigmoid')) return model # 加载预训练模型或根据需求创建 model = create_model((28, 28, 1)) # 假设我们有一个图片和标签 input_data = tf.keras.Input(shape=(28, 28, 1)) label = tf.keras.Input(shape=(), dtype='float32') # 单分类问题,如果多分类则应为 int32 类型 # 使用模型并获取损失值 logits = model(input_data) loss = tf.keras.losses.binary_crossentropy(label, logits) # 获取梯度 grads = tf.gradients(loss, input_data) # FGSM 函数 def fgsm_attack(image, label, epsilon=0.1): perturbed_image = image + epsilon * tf.sign(grads) perturbed_image = tf.clip_by_value(perturbed_image, 0, 1) # 确保图像像素值在 [0, 1] 区间内 return perturbed_image # 示例使用 epsilon = 0.1 # 攻击强度 perturbed_image = fgsm_attack(input_data, label, epsilon) pred = model(perturbed_image) # 预测受影响的图片 # 注意:在实际应用中,你需要先将模型转换为可训练模式(.trainable=True),这里为了简洁省略了这部分 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值