
1) 【一句话结论】对抗样本攻击通过梯度优化在约束(如L∞范数)下生成微小有效扰动使模型误分类;检测算法通过统计距离或特征空间差异识别这些扰动,核心是攻击的梯度驱动机制与检测的扰动特征匹配逻辑。
2) 【原理/概念讲解】
对抗样本是指对原始输入(如图片、文本)添加微小扰动δ,生成x' = x + δ,满足||δ||≤ε(ε为边界,如L∞范数下是最大像素变化绝对值≤ε)。以PGD(Projected Gradient Descent)攻击为例,步骤为:
检测对抗样本的方法:
3) 【对比与适用场景】
| 方面 | PGD攻击生成方法 | 统计检测方法 | 特征检测方法 |
|---|---|---|---|
| 定义 | 迭代梯度上升+L∞范数边界约束的对抗样本生成 | 计算输入与原始样本的Lp范数(如L2距离) | 提取输入特征向量并比较特征差异 |
| 核心机制 | 梯度驱动扰动+投影约束 | 统计距离判断(输入与原始的相似度) | 特征空间差异判断(对抗样本特征变化) |
| 使用场景 | 测试模型鲁棒性,生成对抗样本 | 实时检测输入是否被扰动(如在线服务) | 依赖特征提取,适合复杂特征区分(如对抗样本与正常样本在特征空间的分离) |
| 关键参数影响 | ε(边界):ε越小,扰动越难察觉,攻击难度越大;迭代次数:越多,扰动越强,计算成本越高;步长:影响每次迭代扰动幅度,过大会导致震荡,过小收敛慢 | 阈值:阈值过高导致漏报(对抗样本被误判为正常),过低导致误报(正常样本被误判为对抗) | 特征提取层:中间层特征对对抗样本更敏感(如卷积层中间层),输出层特征不适合检测 |
| 注意点 | 初始扰动影响攻击效果(随机初始扰动可避免局部最优) | 非对抗噪声(如JPEG压缩、拍摄噪声)会增加统计距离,需调整阈值平衡误报与漏报 | 特征提取器需选择对抗样本敏感的层(如中间卷积层),避免低层特征(低层特征主要提取边缘、纹理,对抗样本扰动可能不改变低层特征) |
4) 【示例】
def pgd_attack(x, y, model, epsilon, num_iter, step_size):
x_adv = x + np.random.uniform(-epsilon, epsilon, x.shape)
for _ in range(num_iter):
grad = np.sign(model.gradient(x_adv, y)) # 符号梯度(L∞攻击)
x_adv = np.clip(x_adv + step_size * grad, x - epsilon, x + epsilon)
return x_adv
def detect_statistical_attack(x, x_orig, epsilon, threshold):
distance = np.linalg.norm(x - x_orig, 2) # L2范数(像素差异总和)
return distance > threshold # 距离超过阈值则判定为对抗样本
5) 【面试口播版答案】
面试官您好,对抗样本攻击的核心是通过给输入添加微小但有效的扰动,让模型误分类。以PGD攻击为例,它通过迭代梯度上升,每次根据模型损失函数的梯度调整扰动方向,并投影到L∞边界内(比如最大像素变化不超过ε),最终生成对抗样本。检测对抗样本时,常见方法有统计方法和特征方法。统计方法比如计算输入与原始样本的L2距离(像素差异总和),若距离超过预设阈值则标记为对抗样本;特征方法则是提取输入的特征向量(如模型中间层的特征),比较特征空间差异,若差异超过阈值则判定为对抗样本。比如,对于一张图片,PGD攻击会逐步调整像素值,使其在视觉上几乎不变,但模型预测错误,检测时通过计算像素变化的总距离,若超过阈值就识别为对抗样本。总结来说,PGD攻击利用梯度驱动扰动,检测算法通过统计或特征差异识别这些扰动,从而判断输入是否被攻击。
6) 【追问清单】
7) 【常见坑/雷区】