
تطبيق مرجعي بـ PyTorch لطريقة تدريب خصومي سريعة تمنع الإفراط في التخصيص الكارثي عبر أهداف مقترنة وحاجز انحراف أوزان قائم على EMA، مع تقييم AutoAttack.
تنفيذ مرجعي بـ PyTorch للطريقة الموصوفة في الورقة أعلاه. يعاني التدريب العدائي السريع (FAT) من catastrophic overfitting (CO): تبقى المتانة تجاه FGSM عالية بينما تنهار المتانة تجاه PGD خلال بضع epochs. تنفّذ قاعدة الشيفرة هذه مساهمتي الورقة:
الدقة المتينة (%) تحت AutoAttack (AA) القياسي الكامل وهجوم استرخاء القيد (CR)، ε = 8/255، ResNet18 (PreActResNet18 على Tiny-ImageNet)، المتوسط ± الانحراف المعياري للعينة. صفوف خط الأساس هي النتائج المنشورة لـ 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 |
| Base + guard (خاصتنا) | 50.45±0.20 | 50.44±0.16 | 27.15±0.04 | 27.20±0.07 | 20.47±0.11 | 20.54±0.15 |
أقوى دقة AutoAttack وCR بين الطرق السريعة على مجموعات البيانات الثلاث، وبتكلفة FAT (نحو 0.7–1.1 ساعة/تشغيل على A100 واحدة، مقابل نحو ساعتين للمرجع متعدد الخطوات). على CIFAR-10 يكون الأساس غير المحروس رمية عملة: 2 من أصل 4 بذور تنهار إلى آثار CO (AutoAttack 7.5) بينما تطابق البذور الناجية الصف المحروس (50.67±0.08) — أي أن أثر الحارس هو بالضبط إزالة نمط الفشل هذا. والجدير بالذكر أن مكوّني FAB-T وsquare في AutoAttack يجدان صفر نقاط إضافية على جميع نقاط التحقق المنشورة لدينا (لا وجود لبصمة إخفاء التدرجات). الأرقام لكل بذرة والسجلات الخام: 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/ في هذا المستودع النسخة المضمّنة التي أُنتجت بها الأرقام المنشورة (نسخة AutoAttack الخاصة بـ Francesco Croce)؛ ويؤدي التشغيل من جذر المستودع إلى جعلها تتقدّم على أي نسخة مثبّتة عبر 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 (قيمة val PGD-10 لكل حقبة للأوزان الخام وأوزان EMA، وأسطر تفعيل الحارس)، وprobe.csv (ديناميكيات CO على مستوى الدفعة، اختياري)، وbest.pth / last.pth / ema_last.pth. يمثل best.pth الحقبة ذات أعلى قيمة تحقق PGD-10 (الأوزان الخام مقابل أوزان EMA، مع كسر التعادل بالدقة النظيفة).
--guard none يعطّل الحارس (الأساس غير المحروس؛ توقّع تقلّب CO العشوائي على CIFAR-10).--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 يشغّل النسخة التطويرية المكوّنة من هجومين الخاصة بالمعيار (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 تدريب / تحقق؛ تنعيم التسميات 0.4؛ اختيار النموذج عبر التحقق PGD-10؛ التقييم على مجموعة الاختبار الكاملة باستخدام PGD-{10,20,50} وAutoAttack وهجوم CR. تستخدم جميع التشغيلات set_seed مع وضع cudnn الحتمي.
models/، utils/، هجوم CR في attacks/) وجميع نتائج خطوط الأساس مأخوذة من FastAT_Benchmark — يُرجى الاستشهاد بها إذا استخدمت أرقام المقارنة.autoattack/ هي AutoAttack من إعداد Francesco Croce (مضمّنة دون تعديل).الورقة البحثية قيد المراجعة. إذا استخدمت هذا الكود، فيُرجى الاستشهاد به بعنوانه حتى يتوفر مدخل BibTeX:
MIT (انظر LICENSE). تحتفظ ملفات الطرف الثالث المضمّنة بتراخيصها الأصلية وترويسات حقوق النشر الخاصة بها.