SAMOO 攻击优化总结
本文档汇总了本轮在 src/psorad 主实现中的攻击算法与工程质量优化,便于代码审查、论文复现实验记录和后续迭代。
1. 优化目标与背景
在初始实现中,SAMOO 在 CIFAR10 上表现较好,但在 Imagenette / 224 分辨率任务上成功率偏低。主要症结是:
- 预设超参数对小图更友好,对大图探索强度不足;
- 进化过程缺少后期收敛稳定机制;
- 查询预算控制与成功判定边界需要更稳健;
- 提交前质量门禁(ruff/mypy/pytest)未完全打通。
本轮优化围绕上述问题,形成了“分辨率自适应 + 置信度增强 + 动态变异 + 工程质量闭环”的改进方案。
2. 攻击算法层优化
2.1 分辨率自适应预设(替代数据集名硬编码)
新增分辨率档位策略,根据图像总像素自动选择预设参数(small / large),不依赖数据集名称。
- small(如 32x32)与 large(如 224x224)使用不同
eps_ratio/query_budget/pop_size/p_size; - 对于和 Imagenette 同分辨率的 psoriasis 数据,可直接复用同一策略;
- 用户手动传参时,仍以显式参数优先。
2.2 查询预算驱动的迭代推导
- 新增
query_budget参数; - 当未显式给
iterations时,自动按ceil(query_budget / pop_size)推导迭代次数; - 使“预算可控性”优先于固定代数。
2.3 动态变异率退火(pm -> pm_end)
- 新增
pm_end; - 每轮变异率
pm_current在攻击过程中线性退火; - 前期高探索,后期稳收敛,降低大分辨率任务搜索抖动。
2.4 高置信样本自适应增强
当样本 true_class_conf 极高且核心参数未手动指定时,自动增强搜索强度:
- 提升
eps、query_budget、pop_size; - 并同步重算
iterations; - 典型触发阈值:
>= 0.995与>= 0.9999。
该策略用于处理“高置信难攻样本”,已在 Imagenette 样例上验证有效。
2.5 查询预算边界成功判定修复
修复了一个关键边界问题:
- 原逻辑在达到
query_budget时会直接结束循环; - 新逻辑会先检查当前种群是否已包含可行对抗解,再决定失败退出;
- 避免“最后一批查询已成功但被误判失败”。
3. CLI 与文档可用性优化
3.1 attack 命令参数升级
attack 子命令新增/调整如下:
- 新增:
--query-budget、--pm-end; - 改为可选覆盖:
--iterations、--pc、--pm、--pop-size、--zero-probability、--p-size、--tournament-size; - 不传时使用分辨率预设,传参时覆盖预设。
3.2 日志可观测性增强
攻击日志新增关键字段:
- 分辨率档位、是否触发置信度增强及触发原因;
query_budget、pm_end、pm_current;- 达到预算提前停止事件。
这使失败分析与参数复现实验更直接。
4. 工程质量优化(提交前门禁)
4.1 静态与测试门禁打通
已按提交前流程执行并通过:
ruff check .mypy srcpytest
4.2 质量修复项
- 修复
mypy的no-any-return/union-attr/unused-ignore等问题; - 新增最小 smoke 测试,避免
pytest因“无测试”返回 exit code 5。
5. 结果与影响
在高置信 Imagenette 样例中,策略触发后可见:
applied=True, reason=very_high_confidence;- 攻击预算与扰动规模自动增强;
- 攻击成功率显著提升(示例中由失败变为成功)。
6. 后续建议
可继续迭代以下方向:
- value-only mutation(后期仅调扰动值);
- 批量评测脚本(ASR vs Query 曲线);
- 将预算边界与参数解析加入单元测试矩阵。