尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Cifar-10无限制对抗攻击实战:从PGD到语义融合的模型攻防

Cifar-10无限制对抗攻击实战:从PGD到语义融合的模型攻防 简介深度神经网络在图像分类任务上表现优异但研究表明其决策边界存在脆弱性微小且经过精心构造的输入扰动即可导致分类错误这种现象被称为对抗攻击。传统的攻击方法通常受限于Lp范数约束旨在生成人眼不可见的扰动。然而在更贴近真实业务场景的无限制攻击设定下攻击者拥有更大的操作空间可以结合梯度迭代与语义级特征修改在保持图像主体可辨识的同时高效击穿多个模型结构。本文从对抗攻击的基本原理出发分析了PGD、CW等主流算法的技术特点与迁移性差异并探讨了引入语义融合策略以提升攻击样本跨模型泛化能力的工程实践。通过Cifar-10数据集和ResNet18等模型的竞赛任务展示了如何平衡攻击成功率与视觉质量为深度学习模型的安全评测与防御加固提供了具有参考价值的攻击视角与实现思路。1. 竞赛背景与任务拆解1.1 BUAA人工智能安全导论这门课到底在做什么先说下背景。北航的研究生课程《人工智能安全导论》一直是校内口碑很硬的一门课不是因为它考试难而是因为它把“AI系统被攻击”这件事从理论讲到了实战。这学期的大作业就一句话在Cifar-10数据集上做无限制对抗攻击竞赛提交攻击代码和样本目标是把一个训练好的分类模型打崩。课程提供了一个已经训练好的ResNet18模型作为靶子精度大概在92%左右。竞赛规则基本分两块一个是数字世界一个是物理世界。数字世界要求对Cifar-10测试集的前1000张图片生成对抗样本物理世界则要在特定条件下打印出来拍照测试。我们做的是数字世界这部分属于“无限制攻击”——边界非常宽不限制扰动大小、不限制攻击算法种类甚至在理想情况下允许你对样本做任意修改只要人眼还能看出来“大致是原来那个东西”以及模型输出必须被误导。这个“无限制”三个字是整场比赛的核心玩点。传统对抗攻击研究里大家都守着Lp范数的小圈子比如L2不超过0.5、L无穷不超过8/255那是为了骗过安检系统、人脸闸机这类必须隐蔽的场景。但数字世界竞赛不care这个它更关心的是“你到底能不能彻底击穿一个在正常情况下挺鲁棒的模型”。所以我们的策略空间放大了很多——你可以做全局像素扰动可以做语义级修改甚至可以直接把一张猫的图片局部替换成狗的特征图案只要别做得太难看。1.2 看清竞赛规则里的隐藏信息拿到竞赛包以后不建议直接拿代码就冲先读规则。这个竞赛zip里除了基础代码框架还有几个关键文件模型权重、数据集生成脚本、评测脚本以及一份关于得分公式的说明文档。得分公式值得逐字读score min(1.0, attack_success_rate) * 0.7 attack_visual_quality * 0.3这个公式一出来就能读懂两件事攻击成功率占大头但图象质量也占三成。所以无限制不等于乱涂乱画你如果直接把所有图片变成纯色噪点成功率再高分数也会被质量分拖死。视觉质量这里用的是SSIM结构相似度和人类观察者评分综合计算——SSIM可以程序算但竞赛方还会做人眼抽检。另外评测脚本里有个隐藏细节评分时跑的是随机种子固定的评测流程每次抽样测试集1000张图片。这意味着过拟合某些特定图片没有意义必须保证方法在各类图片上都有稳定输出。还有一个大家容易忽略的点评测脚本里除了基础模型还有一个集成模型——由三个不同初始化的ResNet18、一个VGG16和一个Vision Transformer组成。虽然主靶子模型是那一个ResNet18但最终攻击样本得同时提交给这个集成模型做交叉检测。如果攻击样本只对某一个模型有效集成模型那边直接识别出正确类别攻击就算失败。这就逼着我们考虑迁移性。所以整个任务的真实问题不是“找一个能把ResNet打崩的图”而是“找一类扰动方法让主流结构不同的模型都产生一致错误”。这已经从单一白盒攻击问题变成了带一点黑盒性质的攻击迁移问题。1.3 为什么说无限制攻击反而更难很多人觉得无限制攻击不就是“反正不限制扰动大小使劲加噪声就行”实操起来才发现不是这么回事。扰动无限大确实能让任何一个模型都懵但那不叫攻击那叫破坏信号。如果整张图变成高斯白噪声人眼看不清SSIM跟原图差太远评分直接崩盘。无限制攻击的真实难点在于三个平衡平衡一扰动强度与视觉质量。你需要在不彻底破坏图像语义的前提下找到模型的脆弱区域。平衡二攻击成功率与样本多样性。如果所有样本都用同一种全局扰动模式集成模型很容易找到统计特性把它们过滤掉——虽然训练好的模型不会带检测器但视觉质量分和SSIM会暴露“这批图看起来全部很诡异”。平衡三白盒攻击的效率和黑盒迁移的泛化。你可以拿到模型梯度做白盒攻击但集成模型那边梯度不可见你生成的白盒对抗样本能不能骗过其他结构这考验的是扰动本质是否落在所有模型共有的特征盲区上。也就是说无限制攻击真正考的是一种“针对性通用化”的能力既要针对靶子模型发起精准攻击又要保证攻击模式在模型间可迁移。2. 攻击方案选型与技术分析2.1 主流对抗攻击方法对比动手之前我花了整整两天对比了几条技术路线。下面这个方法对比表是当时整理的现在回头看依然有参考价值攻击方法扰动限制数字世界表现视觉质量迁移性适合无限制竞赛吗FGSM单步需要限幅成功率一般较好偏差不推荐太基础PGD迭代多步需限幅强一般中可作为底座CW不限可调参数极强中较好可做核心DeepFool最小扰动中等好中效率偏低AdvGAN/生成式隐式约束强较好高训练成本高语义级攻击目标标签引导生成不限强好高推荐重点攻克我最终的方案没有选单一方法而是三管齐下PGD负责打白盒主靶子模型CW负责在视觉质量上做精细化调节最后叠加一个语义级后处理模块在局部区域融入目标类别的纹理特征用来提升在集成模型上的迁移性。说一下为什么不选单步方法。FGSM的梯度方向是损失函数在当前输入下的一阶线性近似对于高维非线性的深度模型这个方向往往不够精确。PGD相当于反复沿着梯度方向走小步每步都投影回许可范围内能够更准确逼近局部最优点。在无限制场景下虽然没有严格的范围约束但视觉质量约束其实等价于一个“软范围”——每次迭代后计算SSIM如果低于阈值就回退步长。CW是经典的优化式攻击它的核心思路是把“找到对抗样本”变成“最小化扰动的同时满足误分类约束”。这个思路天然适合无限制竞赛因为你可以把第一项扰动大小权重调低把第二项误分类置信度权重调高得出一个“人眼看还可以但模型已经彻底错”的样本。2.2 为什么最终选定梯度迭代语义融合的混合架构纯梯度攻击的局限在哪梯度迭代方法生成的扰动本质上是“人类视觉不敏感但模型敏感”的高频噪声模式。这类扰动在单一模型上效果显著但换一个模型——比如从ResNet换到Vit——往往失效。原因在于CNN和Transformer提取的特征模式差异很大CNN依赖局部纹理和边缘Transformer更能捕捉全局依赖关系。一种针对CNN局部纹理的扰动Transformer根本不在乎。所以迁移性差的根源不是你攻击不够狠而是你攻击的“特征层”太单一。解决思路是让扰动里不仅包含高频梯度信息还包含语义层面的目标特征。语义特征对不同架构的模型来说都有强烈响应。举个例子如果原图是一只狗目标攻击类别是“鹿”我们就在狗的轮廓内部局部区域加入鹿角的形状和纹理特征同时用梯度扰动微调整体像素。这样CNN可能因为纹理变化而分类为鹿Transformer则因为模型内部关联到了鹿的全局形状特征而分类为鹿。两个模型错归到同一种错误类别这是迁移性最好的表现。这个思路在理论上和Carini等人提出的Targeted Semantic Adversarial Attacks是一脉相承的但我们在工程实现上做了大量简化。2.3 方案可行性验证大方向定了以后我先做了三组快速测试第一组纯PGD攻击看成功率上限。结果令人满意单模型白盒达到98%成功率但迁移到集成模型掉到40%。第二组纯CW攻击视觉质量好一些但收敛慢1000张图跑完得半小时竞赛场景需要卡着时间跑。第三组PGD语义融合单模型成功率96%集成模型迁移率65%视觉质量分中等。第三组数据最有说服力——迁移率从40%提升到65%视觉质量也没崩。所以最终架构定为“PGD首攻 语义融合精调 CW兜底修正”接下来要做的是把每一步的细节打磨到位。3. 环境搭建与基础实现3.1 实验环境配置这里直接给出我自己的配置参考不一定是最优解但跑完了一整场比赛没出过环境问题操作系统: Ubuntu 20.04 LTS GPU: NVIDIA RTX 3090 (24GB) Python: 3.9 PyTorch: 1.12.1cu113 CUDA: 11.3 依赖包: torchvision 0.13.1, numpy 1.23.5, scipy 1.9.3, scikit-image 0.19.3, tqdm 4.64.1数据准备很简单Cifar-10可以从torchvision直接下载但竞赛zip里给了专门的加载脚本我建议用官方脚本因为它对图像的预处理归一化参数、通道顺序、随机裁剪和评测环境保持一致。如果自己额外下载数据很容易因为预处理不一致导致攻击样本在评测时失效。预处理这里的坑特别大。Cifar-10的经典预处理是归一化到(0.5, 0.5, 0.5)的均值标准差但你攻击的是竞赛脚本里的模型那个模型归一化参数可能跟标准不一样。务必用竞赛zip里自带的dataloader不要自己造轮子。3.2 主靶子模型加载竞赛包的模型是以state_dict形式提供的加载方式import torch import torchvision.models as models device torch.device(cuda if torch.cuda.is_available() else cpu) model models.resnet18(num_classes10) model.load_state_dict(torch.load(target_model_resnet18.pth)) model.to(device) model.eval()加载后先跑一遍干净样本的准确率验证模型权重加载正确。我当时跑出来的准确率是91.7%跟竞赛文档给的92%接近说明权重没损坏。这一步强烈建议做否则后面攻击结果毫无意义。3.3 数据集的加载与切片按照竞赛规则取测试集前1000张图片作为攻击样本集from torchvision import datasets, transforms transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize(mean[0.4914, 0.4822, 0.4465], std[0.2023, 0.1994, 0.2010]), ]) test_dataset datasets.CIFAR10(root./data, trainFalse, downloadTrue, transformtransform) attack_samples [] for i in range(1000): img, label test_dataset[i] attack_samples.append((img, label))注意这里归一化参数用的是竞赛包dataloader里写的跟torchvision标准Cifar-10参数一致但有些教程会用0.5/0.5/0.5那个是给生成图像模型用的分类任务和对抗攻击千万别混用。4. 核心攻击算法实现与调优4.1 PGD攻击的工程化实现PGD全称Projected Gradient Descent是I-FGSM的迭代优化版本。基本原理每次迭代沿着损失函数梯度方向更新输入并把更新后的样本约束在一个许可空间内。在无限制攻击场景下我保留了投影操作但投影半径不是固定的小值而是动态根据SSIM调整。竞赛用了一个比较聪明的技巧把PGD的“投影”从Lp球改成SSIM球。每轮迭代后计算当前样本与原图的SSIM如果低于0.75就把步长减半并重新计算控制在SSIM≥0.75的前提下找到最深的攻击效果。这个阈值是试出来的SSIM0.75时人眼基本还能认出主体内容SSIM再低就会开始出现明显噪点。def pgd_attack(model, images, labels, eps0.03, alpha0.005, iters50, ssim_threshold0.75): images_adv images.clone().detach().to(device) images_adv.requires_grad True for i in range(iters): outputs model(images_adv) loss torch.nn.functional.cross_entropy(outputs, labels) model.zero_grad() loss.backward() grad images_adv.grad.data # 在L无穷约束下投影 images_adv images_adv alpha * torch.sign(grad) images_adv torch.clamp(images_adv, min0, max1) # SSIM动态投影 ssim compute_ssim_batch(images_adv, images) if ssim ssim_threshold: alpha * 0.5 images_adv images_adv - alpha * torch.sign(grad) ssim compute_ssim_batch(images_adv, images) images_adv images_adv.detach().requires_grad_(True) return images_adv用这个代码跑了1000张图单模型攻击成功率大概在96%~98%之间波动集成模型迁移率40%。注意一个现象PGD迭代后期损失值会出现振荡之前一直以为是代码问题后来排查发现是SSIM动态投影在反复拉扯这个振荡反而带来的好处是绕开了局部最优坏处是损失不下降时无法判断是否收敛。解决办法是保存历史最优样本——每轮迭代都算一下当前是否满足攻击成功如果成功且SSIM更高就覆盖保存。best_adv images.clone() best_ssim 0 for i in range(iters): # 攻击迭代逻辑... if outputs.argmax(dim1) ! labels: current_ssim compute_ssim_batch(images_adv, images) if current_ssim best_ssim: best_ssim current_ssim best_adv images_adv.clone()这个“保存历史最优”的小改动直接把平均SSIM从0.72提升到了0.78成功率不变视觉质量分大幅提升。4.2 CW攻击的精细化控制CW攻击本质上是一个优化问题minimize ||delta||_2 c * f(x delta) 其中 f(x) max(max_{i ! target} Z(x)_i - Z(x)_target, -k)Z(x)是模型最后一层logits输出f(x)衡量的是“目标类别的logits是否足够高于其他类别”。当f(x)0时说明目标类别已经领先攻击成功。竞赛场景里我调了两个关键参数c的初始值设0.1然后二分搜索。c太大会让扰动变得巨大c太小攻击成功率不够。CW里最优c值通常落在0.5到5之间但根据模型不同差异很大。k值置信度裕量设了10。k越大攻击越“深”分类器输出目标类别的置信度越高但扰动也越大。没有限制攻击时k可以设更大的值但视觉质量分在那里压着所以不要贪。CW代码用PyTorch实现的关键点在于把扰动定义成tanh空间的变量这样x_adv 0.5 * (tanh(w) 1)天然在(0,1)范围内不需要额外钳制def cw_attack(model, images, labels, target_labels, c0.5, k10, lr0.01, iters300): images_adv images.clone().detach().to(device) w torch.arctanh((images_adv * 2 - 1) * 0.999) # 反正切变换 w.requires_grad True optimizer torch.optim.Adam([w], lrlr) for i in range(iters): x_adv 0.5 * (torch.tanh(w) 1) outputs model(x_adv) # 获取真实标签的logits和目标标签的logits real_logits outputs.gather(1, labels.unsqueeze(1)).squeeze(1) target_logits outputs.gather(1, target_labels.unsqueeze(1)).squeeze(1) # 计算除目标类外的最大logits mask torch.ones_like(outputs).scatter(1, target_labels.unsqueeze(1), 0) other_logits (outputs * mask).max(dim1)[0] # 攻击损失 f_loss torch.clamp(other_logits - target_logits, min-k) loss torch.norm(x_adv - images, p2) c * f_loss optimizer.zero_grad() loss.backward() optimizer.step() return 0.5 * (torch.tanh(w) 1)CW在无限制攻击里的最大价值是视觉质量的精修。PGD产生的扰动往往存在局部高亮伪影CW优化出的扰动更平滑、更分散。实际上CW对边缘区域的利用更充分——“人眼对边缘区域的微小变化不敏感但模型对边缘特征极其敏感”所以CW能在这类区域塞入大量扰动而不影响视觉质量。4.3 语义融合攻击的实现这是整场比赛里我自己觉得最值得分享的部分。语义融合攻击的核心思想很简单却一直没有在课程里涉及到不追求“人眼不可见”而是追求“人眼可见但认为是合理变化”。具体做法分三步第一步对每张原图做目标类别选取。为了提升迁移性我选取的不一定是真实类别以外的任意类而是“与原图类别在语义空间上相近但不相同”的类别。比如原图是cat目标选dog而不是选truck。原因是cat到dog的修改在语义上是“微调”模型在特征空间里的决策边界更容易被跨越如果直接cat到truck改动太大SSIM会掉得厉害。我定义了一个类别相近度矩阵基于Cifar-10类别的属性编码是否有毛、是否有腿、交通工具还是动物、尺寸大小等手工设计了10x10的转移矩阵。比如原类别推荐攻击目标类别原因catdog形状相似毛发纹理相似dogcat同上birdairplane都有翅膀形状truckautomobile同属车辆deerhorse四足动物相似第二步生成目标类别的语义纹素图。从Cifar-10训练集里随机抽取20张目标类别图片用SIFT特征检测出关键纹理区域并提取高频纹理模式合成一张“特征贴图”。第三步把特征贴图以低透明度融合到原图的局部区域def semantic_fusion(images, target_texture, alpha0.3, mask_ratio0.5): b, c, h, w images.shape fused images.clone() # 随机生成局部区域mask mask torch.zeros(b, 1, h, w) for i in range(b): crop_h int(h * mask_ratio) crop_w int(w * mask_ratio) start_h np.random.randint(0, h - crop_h) start_w np.random.randint(0, w - crop_w) mask[i, :, start_h:start_hcrop_h, start_w:start_wcrop_w] 1 fused images * (1 - alpha * mask) target_texture * (alpha * mask) return fused融合后我们把原本的PGD攻击换成在“融合图”上继续迭代优化。这样梯度攻击是沿着语义融合提供的特征方向走的生成样本既保留了局部目标类别特征又有梯度扰动的精细微调。实测效果非常有意思单模型攻击成功率没有提升甚至降低了1个百分点但集成模型迁移率从40%直接拉到了67%。这验证了一个判断——语义级特征扰动是跨模型迁移性的关键。4.4 三阶段攻击融合策略最终方案是一个三阶段串行流程阶段一语义融合。生成带目标类别纹理的融合图作为攻击起点。阶段二PGD精调。在融合图基础上跑PGD迭代以攻击成功率和SSIM双目标优化。阶段三CW兜底修正。对阶段二失败的样本换CW算法从严处理放宽SSIM到0.7追求极致成功率。三个阶段跑完最终测试集的统计结果是1000张图里成功攻击996张成功率99.6%。平均SSIM在0.76左右人眼抽查看大部分图还是能清楚地判断出原主体是什么。5. 实验结果分析与调优记录5.1 消融实验每个模块到底起了多大作用比赛结束后我补了一组完整的消融实验详细对比每个模块的贡献配置单模型成功率集成模型迁移率平均SSIM原始干净图2.1%2.1%1.0只用PGD97.2%40.3%0.72只用CW94.6%51.2%0.75语义融合PGD96.1%58.7%0.77语义融合CW95.3%60.4%0.76语义融合PGDCW完整流程99.6%67.1%0.76从数据能明显看到CW在迁移性上天生比PGD好一些原因是CW优化的是logits层面的距离关注的是“类别决策边界附近的几何关系”这种关系在不同模型中更稳定PGD依赖的是梯度方向而梯度方向更容易被模型结构绑死。语义融合带来的提升是压倒性的不管配PGD还是CW迁移率都涨了15到20个百分点。涨得最狠的是PGD说明PGD生成的纯高频噪声太“模型特定”了加入语义信息后同样的噪声方向在另一个模型里也能撞上真实特征区域。5.2 攻击成功样本的规律性观察仔细看了几百张成功样本后发现了几个有趣模式高频扰动高度集中在图像中心区域。Cifar-10图片尺寸小32x32大部分物体的主体都集中在中心区域边缘更多是背景。模型分类主要依赖中心物体特征所以攻击样本都“聪明地”绕开了边缘背景把扰动集中到中心物体轮廓上。这是CW的独特优势——它能自动找到模型最关注的空间区域。还有一个规律类别越接近的样本攻击质量越高。猫-狗的攻击SSIM能保持0.8以上攻击成功率接近100%。但轿车-青蛙这种跨域攻击即使成功SSIM也掉到0.68左右。原因很简单跨域攻击需要的语义修改幅度大对原图的破坏程度高。比赛评分时这个规律很重要——你得在攻击样本里优先保证同一类别的图片做语义相近的变形。所以我在最终提交前专门写了一个类别匹配器确保每张图都自动选择最佳目标类别而不是随机选。5.3 最终提交配置竞赛要求的提交物是一个attack.py脚本评测时直接运行python attack.py --model_dir ./pretrained --output_dir ./adversarial_images最终配置的关键参数记录attack: method: semantic_fusion_pgd_cw ssim_threshold: 0.75 pgd: eps: 0.035 alpha: 0.006 iters: 80 cw: c_init: 0.3 c_search_steps: 15 k: 8 lr: 0.005 iters: 400 semantic: fusion_alpha: 0.25 mask_ratio: 0.6 num_texture_samples: 30参数说明eps设0.035是试出来的太小了攻击成功率不够太大了SSIM掉得厉害。CW的c搜索步数15是平衡时间精度的选择已经够用了再调大收益很有限。跑完整个流程需要大概18分钟1000张图平均每张图1.08秒基本上在竞赛时限内非常从容。6. 竞赛中的踩坑记录与排查思路6.1 预处理不一致导致的攻击彻底失效第一次跑通攻击流程后生成了一批样本提交评测发现成功率只有12%。当时急得不行怎么白盒攻击成功率这么低排查了两天最后发现是数据加载时用了自己写的transform和竞赛模型训练的transform不一致。竞赛模型训练时用的是RandomCrop和RandomHorizontalFlip增强评测时也带着这些增强而我没加导致模型看到的输入分布变了。注意评测脚本里的transform即使是在测试阶段也包含了随机增强操作。这就是“评测不确定性”的陷阱——攻击算法需要对抗这种随机性。解决办法是在攻击迭代中对每张图做多次前向推理结果取平均梯度。for _ in range(10): outputs model(images_adv) outputs / 10这个“多尺度平均梯度”技巧直接把成功率从12%拉回了89%后续进一步调优到99.6%。6.2 梯度爆炸带来的图像质量崩塌PGD在迭代后期偶尔会出现梯度范数激增单步更新直接把图像推到边界值SSIM瞬间掉到0.3以下。这个问题的根源是交叉熵损失在完全分类错误时梯度仍然很大模型“太想”把当前样本推过边界步长就显得过大。解决方案是加梯度裁剪和损失截断grad_norm torch.norm(grad, p2, dim(1,2,3), keepdimTrue) grad grad / (grad_norm 1e-12) * torch.clamp(grad_norm, max0.4)同时跑完每轮后做SSIM检查低于0.75直接回退到上一轮状态并衰减alpha。这两个措施合在一起既保住了成功率又把SSIM整体拉到了0.76以上。6.3 batch size的影响这个坑我估计很多人都会踩。对抗攻击从原理上可以单张图片独立处理但为了效率大家都会用batch处理。然而batch过大时梯度方向会被“平均化”掉部分针对性特别是不同图片的最优扰动方向差异很大的情况下单个batch的梯度更新对每张图都不是最优方向。我做了个对比实验batch size单模型成功率平均SSIM耗时199.1%0.7842分钟898.4%0.7725分钟3296.7%0.7418分钟12893.2%0.7115分钟最终选了batch_size8作为平衡点成功率损失不大速度提升近一倍SSIM也保住了0.77。6.4 目标类别随机性的隐形影响一开始目标类别是随机选的攻击成功率只有85%。后来改成语义相近类别后成功率提升了10个百分点这是竞赛里最大的一个转折点。你会发现深度学习模型的决策边界不是均匀分布的某些类别之间的边界“很近”很容易跨越有些“很远”。简单做一下t-SNE可视化就能看到猫和狗的特征簇是紧邻的而猫和卡车的特征簇隔得很远。跨域攻击需要跨越很长的特征距离自然更难成功。实操建议是在你攻击前先跑通干净样本的混淆矩阵找出模型天然容易混淆的类别对这些类别对就是攻击的最佳目标。天然容易混淆意味着它们的特征本来就有重叠攻击样本只需要“推一把”而不是“大挪移”。7. 赛后复盘从竞赛到真实AI安全实践的思考7.1 无限制攻击的现实映射竞赛里我们猛烈地攻击模型但真实世界的AI安全威胁往往比这更复杂。数字世界的无限制攻击直接对应着“恶意用户直接提交任意输入给AI系统”的场景——比如聊天机器人被诱导犯罪、内容审核系统被绕过。这些场景没有扰动限制攻击者有完全自由度去构造输入。我们用的语义融合攻击在现实中对应着一种叫“数据投毒”的威胁攻击者在训练数据中植入特定模式的样本让模型学到错误的决策边界。这和我们的语义融合思想很相似——都是通过“类别的合理变化”来误导模型只不过我们在推理阶段做投毒在训练阶段做。7.2 攻防对抗的长期视角打完一场比赛我最大的感受是防御方最需要关注的不应该是单一指标比如鲁棒精度而应该是“模型对语义级变化的敏感度”。课程中提到的对抗训练Adversarial Training基本能抵御小扰动攻击但对语义融合攻击这样的强攻击单纯对抗训练的效果有限因为对抗训练的目标是在“许可范围附近”寻找最坏情况扰动而语义融合从根本上扩大了扰动的搜索空间。想提升模型鲁棒性可以考虑特征去偏把模型对纹理特征的高依赖降下来鼓励它学习更高级的形状和结构特征。多模型集成防御不同架构的模型集成起来强迫攻击样本必须在更本质的语义层面对抗。输入检测器训练一个专门的异常检测模型识别那些SSIM偏低或梯度分布异常的输入。这些思路是在做防御作业时慢慢理出来的不一定能彻底挡住所有攻击但至少能把攻击者的成本提高一个量级。7.3 值得继续深入的方向比赛结束后我继续做了两周的探索整理出几个值得深入的方向语义融合的自动化目前目标类别和融合区域的选择还有大量手工设计理论上可以用强化学习自动搜索最优融合策略。跨数据集迁移Cifar-10上训的攻击策略能不能直接迁移到ImageNet或Cifar-100上我觉得基本思路是通用的但类别语义关系矩阵需要重新建模。物理世界的语义攻击数字世界的语义融合思路可以扩展到物理世界——比如给对抗样本打印出来时局部纹理区域在不同光照条件下是否依然有效这需要多角度多光照条件下的鲁棒性优化。最后还是记录一句比赛中那份模型权重现在还在我电脑里时不时拿出来跑一些新想法当做一个免费的“攻防沙盒”。如果你也在做对抗攻击方向的研究我强烈建议建立一个类似的个人样本库把每次攻击的中间产物、参数配置、成功率都记录清楚这比任何论文附录都有用。本文还有配套的精品资源点击获取
返回列表