使用快速梯度符号方法理解对抗性攻击

morpheus

版主

morpheus Rep
0
0
0
Rep
0
morpheus Vouches
Vouches
0
8 MONTHS
8 8 MONTHS OF SERVICE
morpheus 获得
0
0
0
获得
0
morpheus 凭证
0
0
0
凭证
0
主题
15
点赞
0
HakB
8
在社区成长 8 月
LEVEL 1 1 XP
 
深度学习AI/ML
Adrien Payong
作者:Adrien Payong
AI顾问和技术作家
Understanding Adversarial Attacks Using Fast Gradient Sign Method
目录热门话题

简介​

在机器学习和人工智能领域,对抗性攻击备受研究者关注。这些攻击会改变输入,误导模型做出错误的预测。其中,快速梯度符号法(FGSM)因其有效性和简单性而特别值得一提。
FGSM 的重要性在于它能够暴露现代模型对输入数据微小变化的脆弱性。这些扰动经常被人类观察者忽视,从而对预测准确性造成误差。了解并最大限度地减少这些漏洞对于构建在自动驾驶、医疗保健配置和安全管理等实际应用中值得信赖的抗故障机器学习系统至关重要。
这篇引人入胜的文章深入探讨了FGSM 的含义,并清晰准确地阐明了其数学基础。它通过说明性案例研究提供演示。

对抗性攻击中的一阶泰勒展开式​

利用一阶泰勒展开技术来逼近损失函数是了解输入的微小变化如何影响机器学习模型损失的重要方法。这种方法在处理对抗性攻击时特别有用,涉及使用其梯度以及x: 附近的泰勒展开来计算L(x+δ) 的近似值
L(x+δ) ≈ L(x) + ∇L(x) ⋅ δ
原始输入x处的损失记为L(x),x处损失函数的梯度用∇L(x)表示,δ是对x的小扰动。
损失函数最陡增加的方向和速率用∇L(x)表示。通过在∇L(x) 方向上扰动x,我们可以预测损失函数将如何变化。
对抗性攻击使用泰勒展开式来寻找使损失函数L(x+δ) 最大化的扰动δ。这是通过选择与∇L(x): 的符号成比例的δ 来实现的
δ=ϵ ⋅ 符号(∇L(x))
其中ϵ 是控制扰动幅度的小标量。
为了便于说明,我们画一个图来表示损失函数的一阶泰勒展开式。这将包括损失曲线、原始点、梯度向量、扰动点和一阶近似。
image

损失函数的一阶泰勒展开
生成的图表说明了损失函数的一阶泰勒展开式的关键概念。以下是主要内容:
损失曲线(L(x)): 表示不同输入的损失函数的平滑曲线。
原始点(x0, L(x0)): 损失曲线上与输入x0 的值对应的点。
梯度向量(∇L(x0)): 表示点L(x0) 处切线的斜率。
扰动点(x0 + δ, L(x0 + δ)): 对输入x0 添加小扰动δ 后的新点。
一阶近似(L(x0) + ∇L(x0) ⋅ δ): x0 附近损失函数的线性近似。
我们可以看到如何使用损失函数的梯度来近似由于输入中的小扰动而导致的损失变化。这种理解对于在对抗性攻击的背景下生成对抗性示例至关重要。
快速梯度符号法(FGSM)的原理是利用损失函数相对于输入数据的梯度来确定应修改输入以增加模型误差的方向。 FGSM涉及的步骤如下图所示:
image

FGSM 对抗攻击流程​

该过程首先确定损失函数相对于输入数据的梯度。梯度定义了如果输入数据稍微修改,损失函数将如何变化。了解这种关系,我们可以定义输入的微小变化会增加损失的方向。
计算出梯度后,下一步就是生成扰动。这是通过缩放梯度的符号来实现的。符号函数确保扰动矩阵的每个分量为+ 或- 1。这表明损失是否对相应输入值的增加或减少最敏感。
缩放因子确保这些扰动应该很小但足够大以欺骗模型。
最后一步是通过将此扰动应用于原始输入来生成对抗性示例。通过将扰动矩阵添加到原始输入矩阵,我们得到的输入看起来与原始数据非常相似,但其目的是误导模型做出错误的预测。

FGSM 在机器学习中的用途和重要性​

让我们考虑一些可以使用快速梯度叹息法的目的:
测试模型鲁棒性: FGSM 用于通过测试对抗性攻击来评估机器学习模型的弹性。这有助于识别和修复输入数据修改的潜在漏洞。
__提高模型安全性:__稳健的模型是自动驾驶、医疗保健和金融等安全应用程序的关键。 FGSM 通过暴露易受攻击的漏洞来测试模型强度。对于依赖可靠模型的安全关键型应用至关重要。
对抗性训练: 它有助于对抗性训练,通过在训练期间将其暴露于潜在的攻击来提高模型的鲁棒性。这增强了其在扰动输入上的性能。
了解模型行为: FGSM 有助于了解输入扰动期间的模型行为,从而改进可靠系统的设计和培训。
对抗性防御技术基准测试: 研究人员使用它来比较针对对抗性攻击的防御技术,以开发强大的保护。
对对抗性防御技术进行基准测试: 它暴露了图像识别和自然语言处理等系统中的漏洞,推动了跨行业更安全的机器学习应用程序的开发。
教育目的: 它通常用于教育,作为机器学习中对抗性攻击和防御的基本介绍。了解FGSM 为个人提供了更先进技术的基础知识,使他们能够为该领域做出贡献。

实际实施​

为了实际举例说明快速梯度符号法(FGSM) 攻击,我们将使用TensorFlow 生成对抗性示例。我们将使用Gradio 作为交互式显示工具来展示结果。我们将使用黄色拉布拉多猎犬的图像,可以在此处找到。
首先,让我们加载必要的库和image:
导入张量流astf
将numpy 导入为np
将matplotlib.pyplot 导入为plt
导入梯度asgr
导入请求
从PIL 导入图像
从io 导入BytesIO
# 加载图像
image_url='https://storage.googleapis.com/download.tensorflow.org/example_images/YellowLabradorLooking_new.jpg'
响应=requests.get(image_url)
img=Image.open(BytesIO(响应.内容))
img=img. 调整大小((224, 224))
img=np.array(img)/255.0
# 显示图像
plt.imshow(img)
plt.show()
输出:
image

上述Python 代码有助于使用TensorFlow、NumPy、Matplotlib 和PIL 等框架从特定URL 加载和查看图像。它使用requests 库来获取图像,将其大小调整为224*224,并将像素值标准化为0 到1 之间,然后将图像转换为numpy 数组。
最后,用户可以显示图像并确保程序正确加载和处理图像。
接下来,让我们加载预训练的模型并定义FGSM攻击函数:
# 加载预训练模型
模型=tf.keras.applications.MobileNetV2(weights='imagenet')
# 定义FGSM攻击函数
def fgsm_attack(图像, epsilon):
图像=tf.convert_to_tensor(图像, dtype=tf.float32)
图像=tf.expand_dims(图像, 轴=0)
使用tf.GradientTape() 作为Tape:
磁带.手表(图像)
预测=模型(图像)
损失=tf.keras.losses.categorical_crossentropy(tf.keras.utils.to_categorical([208], 1000), 预测)
梯度=Tape.gradient(损失, 图像)
signed_grad=tf.sign(梯度)
adversarial_image=图像+ epsilon *signed_grad
adversarial_image=tf.clip_by_value(adversarial_image, 0, 1)
返回adversarial_image.numpy().squeeze()
# 显示对抗图像
adversarial_img=fgsm_attack(img, epsilon=0.08)
plt.imshow(adversarial_img)
plt.show()
输出:
image

上面的代码演示了如何对图像使用FGSM 对抗攻击。首先下载带有Imagenet 权重的预训练mobileNetV2 模型。
然后定义fgsm_attack 方法来执行对抗性攻击。它将输入图像转换为张量,执行计算工作以确定模型的预测,并计算相对于目标标签的损失。
经过
 
顶部