FGSM对抗样本生成算法实现(pytorch版)
FGSM对抗样本生成算法
- 一、理论部分
-
- 1.1 目标
- 1.2 数学公式
- 1.3 推导过程
- 1.4 直观解释
- 1.5 示例
- 1.6 总结
- 二、代码实现
-
- 2.1 导包
- 2.2 数据加载和处理
- 2.3 网络构建
- 2.4 模型加载
- 2.5 生成对抗样本
- 2.6 攻击测试
- 2.7 启动攻击
- 2.8 效果展示
一、理论部分
FGSM
(Fast Gradient Sign Method) 是一种经典的对抗样本生成方法
,其核心思想
是通过在输入数据的梯度方向上添加扰动,从而生成对抗样本
1.1 目标
给定一个输入样本 x x x 和对应的真实标签 y y y ,FGSM 的目标是生成一个对抗样本 x adv x_{\text{adv}} xadv ,使得:
- 对抗样本 x adv x_{\text{adv}} xadv 与原始样本 x x x 的差异很小(通常用 L ∞ L_\infty L∞ 范数衡量)
- 模型在对抗样本 x adv x_{\text{adv}} xadv 上的预测结果与真实标签 y y y 不一致。
1.2 数学公式
FGSM 的对抗样本生成公式: x adv = x + ϵ ⋅ sign ( ∇ x J ( x , y ) ) x_{\text{adv}} = x + \epsilon \cdot \text{sign}(\nabla_x J(x, y)) xadv=x+ϵ⋅sign(∇xJ(x,y))
其中:
- x x x:原始输入样本
- y y y:输入样本的真实标签
- ϵ \epsilon ϵ:扰动强度(一个小的正数,控制扰动的幅度)
- ∇ x J ( x , y ) \nabla_x J(x, y) ∇xJ(x,y):损失函数 J J J 对输入 x x x 的梯度
- sign ( ⋅ ) \text{sign}(\cdot) sign(⋅):符号函数,返回梯度的符号( + 1 +1 +1 或 − 1 -1 −1)
1.3 推导过程
(1)定义损失函数
假设模型的损失函数为 J ( x , y ) J(x, y) J(x,y),其中:
- x x x 是输入样本
- y y y 是真实标签
(2)计算梯度
计算损失函数 J ( x , y ) J(x, y) J(x,y) 对输入 x x x