上記論文で述べられている手法のPyTorchリファレンス実装。 高速敵対的訓練(FAT)は**壊滅的過学習(CO)**に悩まされる。FGSMロバスト精度は高いままである一方で、PGDロバスト精度は数エポックのうちに崩壊する。本コードベースは論文の2つの貢献を実装している:
完全な標準AutoAttack(AA)および制約緩和攻撃(CR)の下でのロバスト精度(%)、ε = 8/255、ResNet18(Tiny-ImageNetではPreActResNet18)、平均 ± 標本標準偏差。ベースラインの行は、同一プロトコルの下で公開されているFastAT_Benchmarkの結果である。
| 手法 | C10 AA | C10 CR | C100 AA | C100 CR | Tiny AA | Tiny CR |
|---|---|---|---|---|---|---|
| PGD-AT-WA(多段階参照) | 50.49±0.15 | 50.51±0.16 | 26.90±0.17 | 26.87±0.17 | 19.77±0.16 | 19.75±0.13 |
| NuAT | 50.10±0.18 | 50.11±0.19 | 14.41±3.29 | 17.66±0.42 | 10.20±0.44 | 10.19±0.44 |
| LIET | 49.99±0.15 | 49.93±0.15 | 26.64±0.13 | 26.63±0.14 | 19.88±0.09 | 19.86±0.07 |
| FGSM-PGI | 49.89±0.08 | 49.89±0.12 | 26.29±0.16 | 26.31±0.12 | 19.55±0.11 | 19.52±0.12 |
| FGSM-FUAP | 49.73±0.12 | 49.71±0.12 | 25.95±0.08 | 25.94±0.05 | 19.10±0.18 | 19.09±0.19 |
| FGSM-CUAP | 49.55±0.22 | 49.54±0.22 | 25.85±0.50 | 25.83±0.49 | 19.19±0.09 | 19.20±0.11 |
| ベース + ガード(提案手法) | 50.45±0.20 | 50.44±0.16 | 27.15±0.04 | 27.20±0.07 | 20.47±0.11 | 20.54±0.15 |
3つのデータセットすべてにおいて、高速手法の中で最も強いAutoAttackおよびCR精度を、FATのコスト(1台のA100で1回の実行あたり約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
Python 3.12、torch 2.5.1、torchvision 0.20.1、torchattacks 3.5.1、CUDA 12.4、A100-PCIE-40GB でテスト済みです。このリポジトリの 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(生の重みと EMA 重みのエポックごとの val PGD-10、ガード発火行)、probe.csv(オプションのバッチレベル CO ダイナミクス)、および best.pth / last.pth / ema_last.pth が書き出されます。best.pth は検証 PGD-10 が最も高いエポックです(生の重みと EMA 重みを比較し、同値の場合はクリーン精度でタイブレーク)。
--guard none はガードを無効化します(ガードなしのベース。CIFAR-10 では CO のコインフリップが発生すると想定されます)。--init-style bu は摂動の初期化を、論文の 0.5ε におけるフレッシュなハーフサインから、70% ±ε Rademacher / 30% U[−ε, ε] に切り替えます。--probe-every 0 は診断プローブを無効化します。プローブは RNG を消費するため、トレーニングの軌跡を摂動させる点に注意してください(論文で報告されている「計測器くじ引き」)。比較対象のリリース済み実行に合わせてこのフラグを設定してください(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エポック、SGD (lr 0.1、momentum 0.9、weight decay 5e-4) と OneCycleLR、バッチサイズ128、49 000 / 1 000 のtrain / val分割、label smoothing 0.4、検証用PGD-10によるモデル選択、PGD-{10,20,50}、AutoAttackおよびCR攻撃を用いた全テストセットでの評価。すべての実行はcudnn deterministicモードでset_seedを使用します。
models/、utils/、attacks/のCR攻撃) およびすべてのベースライン結果は FastAT_Benchmark によるものです。比較数値を利用する場合はそちらを引用してください。autoattack/ は Francesco Croce による AutoAttack です (未改変で同梱)。本論文は査読中です。本コードを利用する場合は、BibTeXエントリが利用可能になるまでタイトルで引用してください:
MIT(LICENSE を参照)。ベンダー化されたサードパーティファイルは、上流のライセンスと著作権ヘッダーを保持します。