PGD对抗样本生成算法实现(pytorch版)
PGD对抗样本生成算法
- 一、理论部分
-
- 1.1 PGD 原理
-
- (1) 数学形式
- (2) 核心改进
- 1.2 PGD 与其他攻击对比
- 1.3 注意事项
- 二、代码实现
-
- 2.1 导包
- 2.2 数据加载和处理
- 2.3 网络构建
- 2.4 模型加载
- 2.5 生成对抗样本
- 2.6 对抗测试
- 2.7 启动攻击
- 2.8 效果展示
一、理论部分
1.1 PGD 原理
PGD 是 BIM/I-FGSM 的增强版,通过 随机初始化
+ 迭代投影约束
生成更强对抗样本,核心特点:
(1) 数学形式
x t + 1 = Π x ± ϵ ( x t + α ⋅ sign ( ∇ x t J ( x t , y ) ) ) x_{t+1} = \Pi_{x \pm \epsilon} \left( x_t + \alpha \cdot \text{sign}(\nabla_{x_t} J(x_t, y)) \right) xt+1=Πx±ϵ(xt+α⋅sign(∇xtJ(xt,y)))
- Π \Pi Π:投影操作(将扰动约束在 ϵ \epsilon ϵ-ball 内)
- α \alpha α:单步步长(通常设为 ϵ / T \epsilon/T ϵ/T, T T T 为迭代次数)
- 随机初始化: x 0 = x + U ( − ϵ , ϵ ) x_0 = x + \mathcal{U}(-\epsilon, \epsilon) x0=x+U(−ϵ,ϵ)
(2) 核心改进
特性 | BIM/I-FGSM | PGD |
---|---|---|
初始化 | 从原始图像开始 | 随机扰动初始点 |
收敛性 | 可能陷入局部最优 | 通过多起点逃离局部最优 |
攻击强度 | 中等 | 更强(对抗训练黄金标准) |
1.2 PGD 与其他攻击对比
攻击方法 | 初始化 | 迭代 | 投影约束 | 主要用途 |
---|---|---|---|---|
FGSM | 原始图像 | 单步 | 无 | 快速验证 |
BIM/I-FGSM | 原始图像 | 多步 | 有 | 平衡效率与效果 |
PGD | 随机扰动 | 多步 | 有 | 强攻击/对抗训练 |
1.3 注意事项
- 设备一致性:确保模型和输