
PyTorch संदर्भ कार्यान्वयन एक तेज़ adversarial प्रशिक्षण विधि का, जो युग्मित उद्देश्यों और EMA-आधारित weight-drift गार्ड के माध्यम से विनाशकारी overfitting को रोकता है, साथ में AutoAttack मूल्यांकन।
ऊपर दिए गए पेपर में वर्णित विधि का संदर्भ PyTorch कार्यान्वयन। Fast adversarial training (FAT) catastrophic overfitting (CO) से ग्रस्त है: FGSM robust accuracy ऊँची बनी रहती है जबकि PGD robust accuracy कुछ ही epochs में धराशायी हो जाती है। यह कोडबेस पेपर के दो योगदानों को लागू करता है:
पूर्ण मानक AutoAttack (AA) और constraint-relaxation attack (CR) के अंतर्गत Robust accuracy (%), ε = 8/255, ResNet18 (Tiny-ImageNet पर PreActResNet18), mean ± sample std। Baseline पंक्तियाँ समान प्रोटोकॉल के अंतर्गत FastAT_Benchmark के जारी किए गए परिणाम हैं।
| Method | C10 AA | C10 CR | C100 AA | C100 CR | Tiny AA | Tiny CR |
|---|---|---|---|---|---|---|
| PGD-AT-WA (multi-step ref.) | 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 |
| Base + guard (ours) | 50.45±0.20 | 50.44±0.16 | 27.15±0.04 | 27.20±0.07 | 20.47±0.11 | 20.54±0.15 |
तीनों datasets पर सभी fast methods में सबसे मजबूत AutoAttack और CR accuracy, FAT लागत पर (~0.7–1.1 h/run एक A100 पर, बनाम multi-step reference के लिए ~2 h)। CIFAR-10 पर unguarded base एक coin flip है: 4 में से 2 seeds CO artifacts (AutoAttack 7.5) में collapse हो जाते हैं जबकि शेष guarded पंक्ति (50.67±0.08) से मेल खाते हैं — guard का प्रभाव ठीक इसी failure mode के उन्मूलन में है। उल्लेखनीय रूप से, AutoAttack के FAB-T और square घटक हमारे सभी जारी किए गए checkpoints पर शून्य अतिरिक्त points पाते हैं (कोई gradient masking signature नहीं)। Per-seed संख्याएँ और raw logs: 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 (प्रति-एपॉक raw और EMA वेट्स का val PGD-10, guard-fire पंक्तियाँ), probe.csv (वैकल्पिक बैच-स्तरीय CO डायनामिक्स), और best.pth / last.pth / ema_last.pth लिखता है। best.pth वह एपॉक है जिसमें उच्चतम वैलिडेशन PGD-10 है (raw बनाम EMA वेट्स, टाई clean accuracy से तय होती है)।
--guard none गार्ड को अक्षम करता है (अनगार्डेड बेस; 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 epochs; SGD (lr 0.1, momentum 0.9, weight decay 5e-4) OneCycleLR के साथ; batch size 128; 49 000 / 1 000 train / val विभाजन; label smoothing 0.4; validation PGD-10 द्वारा मॉडल चयन; पूर्ण परीक्षण सेट पर PGD-{10,20,50}, AutoAttack और CR attack के साथ मूल्यांकन। सभी रन cudnn deterministic मोड के साथ set_seed का उपयोग करते हैं।
models/, utils/, attacks/ CR attack) और सभी बेसलाइन परिणाम FastAT_Benchmark से हैं — यदि आप तुलना संख्याओं का उपयोग करते हैं तो कृपया इसे उद्धृत करें।autoattack/ Francesco Croce द्वारा AutoAttack है (अपरिवर्तित रूप में vendored)।पेपर समीक्षाधीन है। यदि आप इस कोड का उपयोग करते हैं, तो कृपया BibTeX प्रविष्टि उपलब्ध होने तक इसे इसके शीर्षक से उद्धृत करें:
MIT (देखें LICENSE)। वेंडर की गई तृतीय-पक्ष फ़ाइलें अपने अपस्ट्रीम लाइसेंस और कॉपीराइट हेडर बनाए रखती हैं।