Skip to content

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 极高且核心参数未手动指定时,自动增强搜索强度:

  • 提升 epsquery_budgetpop_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_budgetpm_endpm_current
  • 达到预算提前停止事件。

这使失败分析与参数复现实验更直接。

4. 工程质量优化(提交前门禁)

4.1 静态与测试门禁打通

已按提交前流程执行并通过:

  • ruff check .
  • mypy src
  • pytest

4.2 质量修复项

  • 修复 mypyno-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 曲线);
  • 将预算边界与参数解析加入单元测试矩阵。

Licensed under GPLv3