Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
co-weight-drift — 一种快速对抗训练方法的 PyTorch 参考实现,该方法通过耦合目标函数和基于 EMA 的权重漂移防护机制来防止灾难性过拟合,并包含 AutoAttack 评估。 | Kitploit
工具/GitHubGitHub/fzjcdt/co-weight-drift
机器学习论文与研究AI 安全对抗性攻击
GitHubfzjcdt/co-weight-drift

co-weight-drift

一种快速对抗训练方法的 PyTorch 参考实现,该方法通过耦合目标函数和基于 EMA 的权重漂移防护机制来防止灾难性过拟合,并包含 AutoAttack 评估。

查看仓库
282天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

灾难性过拟合是训练损失无法察觉的权重漂移

上述论文所述方法的参考 PyTorch 实现。 快速对抗训练(FAT)会遭受灾难性过拟合(CO):FGSM 鲁棒准确率保持高位,而 PGD 鲁棒准确率在几个 epoch 内崩溃。本代码库实现了论文的两项贡献:

  1. 机制。 CO 是权重沿训练损失无法察觉的方向发生的漂移:单步(FGSM 式)攻击使损失对某个扰动子空间失明,权重穿过该子空间发生漂移,而 BN 重校准将这种漂移转化为梯度掩蔽。权重的 EMA 始终停留在鲁棒盆地内——训练过程自带其崩溃前的锚点。
  2. 方法。 一个耦合的基础目标(两个耦合尺度相互覆盖对方的失效模式)加上一个守卫:在每个 epoch 之后,如果验证 PGD-10 准确率相比运行中的最佳值下降超过 θ = 0.08(8 个准确率点),则将原始权重重新居中到其自身的 EMA 上,并设有 3 个 epoch 的冷却期和 5 次触发预算。该守卫不产生任何额外的前向或反向传播开销,且在健康的训练轨迹上从不触发。

结果

在完整的标准 AutoAttack(AA)和约束松弛攻击(CR)下的鲁棒准确率(%),ε = 8/255,ResNet18(Tiny-ImageNet 上为 PreActResNet18),均值 ± 样本标准差。基线行是 FastAT_Benchmark 在相同协议下发布的结果。

方法C10 AAC10 CRC100 AAC100 CRTiny AATiny CR
PGD-AT-WA(多步参考)50.49±0.1550.51±0.1626.90±0.1726.87±0.1719.77±0.1619.75±0.13
NuAT50.10±0.1850.11±0.1914.41±3.2917.66±0.4210.20±0.4410.19±0.44
LIET49.99±0.1549.93±0.1526.64±0.1326.63±0.1419.88±0.0919.86±0.07
FGSM-PGI49.89±0.0849.89±0.1226.29±0.1626.31±0.1219.55±0.1119.52±0.12
FGSM-FUAP49.73±0.1249.71±0.1225.95±0.0825.94±0.0519.10±0.1819.09±0.19
FGSM-CUAP49.55±0.2249.54±0.2225.85±0.5025.83±0.4919.19±0.0919.20±0.11
基础 + 守卫(本文)50.45±0.2050.44±0.1627.15±0.0427.20±0.0720.47±0.1120.54±0.15

在所有三个数据集上,于快速方法中取得了最强的 AutoAttack 和 CR 准确率,且成本为 FAT 级别(在单张 A100 上每次运行约 0.7–1.1 小时,而多步参考约需 2 小时)。在 CIFAR-10 上,无守卫的基础方法如同抛硬币:4 个种子中有 2 个崩溃为 CO 伪影(AutoAttack 7.5),而幸存者与有守卫的行相匹配(50.67±0.08)——守卫的作用正是消除这一失效模式。值得注意的是,AutoAttack 的 FAB-T 和 square 组件在我们所有发布的检查点上均找到零个额外点(无梯度掩蔽特征)。逐种子数值和原始日志:logs/。

环境配置

pip install -r requirements.txt

在 A100-PCIE-40GB 上使用 Python 3.12、torch 2.5.1、torchvision 0.20.1、torchattacks 3.5.1、CUDA 12.4 进行了测试。本仓库中的 autoattack/ 目录是生成已发布数据时所使用的内置副本(Francesco Croce 的 AutoAttack);从仓库根目录运行会使其优先于任何通过 pip 安装的副本。

训练

train.py 实现了论文中的方法;默认配置为 CIFAR-10 配方。

# CIFAR-10 (γ_max=4.0, m_max=2.5, λ_d=0.3, guard θ=0.08) — 4 seeds
bash scripts/train_cifar10.sh 0            # GPU 0, seeds 0 1 2 3

# CIFAR-100 (γ_max=1.25, m_max=4.5, λ_d=0)
bash scripts/train_cifar100.sh 0

# Tiny-ImageNet (PreActResNet18, γ_max=1.0, m_max=2.5, λ_d=0)
bash scripts/train_tiny.sh 0

# or a single run directly (equivalent to the CIFAR-10 script)
python train.py --dataset cifar10 --seed 0 --gpu 0 \
    --nuc-max 4.0 --mse-extra 2.5 --lam-d 0.3 --guard val --guard-thr 0.08 \
    --out-dir results/cifar10/guard_s0

每次运行都会写入 train.log(记录每个 epoch 的原始权重与 EMA 权重的验证 PGD-10,以及 guard 触发行)、probe.csv(可选的批次级 CO 动态)以及 best.pth / last.pth / ema_last.pth。best.pth 是验证 PGD-10 最高的 epoch(在原始权重与 EMA 权重之间比较,若相同则以干净准确率作为决胜条件)。

方法开关

  • --guard none 禁用 guard(即无 guard 的基线;在 CIFAR-10 上预期会出现 CO 抛硬币现象)。
  • --init-style bu 将扰动初始化从论文中在 0.5ε 处的新鲜半符号改为 70% ±ε Rademacher / 30% U[−ε, ε]。
  • --probe-every 0 禁用诊断探针。注意探针会消耗 RNG,因此会扰动训练轨迹(即论文中报告的“instrumentation lottery”)——请将此标志与你所对比的已发布运行保持一致(参见 logs/README.md)。

评估

# complete standard AutoAttack + CR attack, full test set, bs=200
bash scripts/eval.sh results/cifar10/guard_s0 0            # GPU 0, ResNet18
bash scripts/eval.sh results/tiny-imagenet/guard_s0 0 preact18

# or individually
python aa_eval.py --run-dir results/cifar10/guard_s0 --gpu 0 --full   # autoattack_full.log
python cr_eval.py --run-dir results/cifar10/guard_s0 --gpu 0          # cr_attack.log

aa_eval.py --full 运行完整的标准测试套件(apgd-ce、apgd-t、FAB-T、square)——即论文中每个 AA 数值所采用的协议。不带 --full 时,它运行基准的 2 攻击开发变体(apgd-ce + apgd-t),在我们的模型上差异最多为 0.02。

仓库布局

train.py                 # coupled FAT + EMA self-anchor guard (the method)
aa_eval.py               # AutoAttack evaluation (full suite / 2-attack variant)
cr_eval.py               # CR attack evaluation
models/                  # ResNet18 / PreActResNet18 (from FastAT_Benchmark)
utils/                   # datasets, seeding, logger (from FastAT_Benchmark)
attacks/                 # CR attack (from FastAT_Benchmark)
autoattack/              # vendored AutoAttack (Francesco Croce, fra31)
scripts/                 # per-dataset training launchers + eval
logs/                    # raw logs of every run behind the paper's tables

协议

与 FastAT_Benchmark 完全一致:ResNet18(CIFAR-10/100)和 PreActResNet18(Tiny-ImageNet);ε = 8/255;100 个 epoch;SGD(lr 0.1,momentum 0.9,weight decay 5e-4)配合 OneCycleLR;batch size 128;49 000 / 1 000 训练/验证划分;label smoothing 0.4;通过验证集 PGD-10 进行模型选择;在完整测试集上使用 PGD-{10,20,50}、AutoAttack 和 CR 攻击进行评估。所有运行均使用 set_seed 并启用 cudnn 确定性模式。

致谢

  • 基准测试脚手架(models/、utils/、attacks/ CR 攻击)及所有基线结果均来自 FastAT_Benchmark —— 如果您使用对比数据,请引用该工作。
  • autoattack/ 是 Francesco Croce 的 AutoAttack(未经修改直接引入)。
  • 基础目标函数借鉴了 NuAT(核范数 logit 耦合)、FGSM-PGI(逐样本 MSE 耦合)和 DualC(MSE 斜坡)的思想,初始化方案遵循 NuAT;完整引用请参见论文。

引用

论文正在审稿中。如果您使用本代码,在 BibTeX 条目可用之前,请按其标题引用:

许可证

MIT(见 LICENSE)。随附的第三方文件保留其上游许可证和版权声明。

下载工具