
قاعدة أكواد بحثية لتقييم الخصوصية في الشبكات العصبية المُكمَّمة: تدرّب نماذج هدف/ظل ضمن PTQ/QAT وتنفّذ هجمات استدلال العضوية (MIA، RMIA، الصندوق الأبيض) مع دفاعات DP.
يحتوي هذا المستودع على قاعدة شيفرة بحثية من أجل تقييم الخصوصية للشبكات العصبية العميقة المكمّمة. وهو يدعم تدريب النماذج الهدف/الظل ضمن إعدادات التكميم الشائعة بعد التدريب (PTQ) والتكميم الواعي بالتدريب (QAT)، وحفظ ميزات الهجوم الوسيطة على القرص، وتشغيل مجموعة من الهجمات والمقاييس المتعلقة باستدلال العضوية (مثل MIA وRMIA وWhiteBoxMIA وWhiteBoxMIA_Partial). كما يدمج المستودع مسارات تدريب الخصوصية التفاضلية القائمة على Opacus للنماذج المحمية (مثل المتغيرات dropout / DP / adversarial في سكربتات الأمثلة المرفقة).
ينقسم سير عمل التقييم إلى مرحلتين: (1) التدريب (--training target|shadow|both) لإنتاج مخرجات save/<attack_method>/...، و**(2) التقييم بالهجوم فقط** (--training None) الذي يحمّل الاحتمالات اللاحقة/النماذج المحفوظة ويبلّغ عن المقاييس ضمن result/<attack_method>/....
تحتاج إلى جهاز يدعم NVIDIA GPU من أجل التجارب النموذجية. نوصي باستخدام حزم CUDA 12.1 لـ PyTorch (انظر الأوامر أدناه). استخدم Python 3.10 لتطابق الإصدارات المثبّتة في requirements.txt.
يمكنك تثبيت معظم المتطلبات باستخدام:
conda create --name priv-qdnn python=3.10
conda activate priv-qdnn
pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu121
ملاحظات:
pip install -r requirements.txt دون --extra-index-url (حِزم PyPI المخصّصة لوحدة المعالجة المركزية إن كانت متاحة لمنصّتك).aimet-torch عامل (انظر quantization/PTQ/adaround.py). إذا تعذّر على pip حلّ aimet-torch على منصّتك، فاتبع تعليمات تثبيت Qualcomm AIMET أولًا، ثم ثبّت بقية التبعيات.مجموعات البيانات غير مضمنة في هذا المستودع. هناك أربع مجموعات مدعومة، وهي تختلف في مقدار الإعداد الذي تحتاجه.
يتم جلب كلتيهما عند أول استخدام إلى data/، لذا لا حاجة إلى خطوة يدوية — فقط تأكد من أن الجهاز لديه وصول إلى الشبكة في المرة الأولى التي تشغّل فيها تجربة.
torchvision.datasets.CIFAR100(..., download=True) في data/load_data.py.fetch_cinic10() في data/cinic10.py من مرآة Edinburgh DataShare. إنه أرشيف كبير، لذا خصّص وقتًا ومساحة قرص للتشغيل الأول.لا يوجد لهاتين المجموعتين مُنزِّل تلقائي. اجلب الأرشيفات الخام، وفكّ ضغطها تحت data/<dataset>/raw/، ثم حوّلها إلى ملفات .npy التي تتوقعها أدوات التحميل.
| مجموعة البيانات | الأرشيف الخام |
|---|---|
| Texas100 | https://www.comp.nus.edu.sg/~reza/files/dataset_texas.tgz |
| Location | https://github.com/privacytrustlab/datasets (مجموعة location) |
التخطيط المتوقع بعد فك الضغط:
data/texas/raw/texas/100/feats
data/texas/raw/texas/100/labels
data/location/raw/bangkok
ثم أنشئ تقسيمات التدريب/الاختبار:
python data/prepare_tabular.py --dataset both
يقبل --dataset القيم texas أو location أو both. استخدم --raw_root للإشارة إلى موقع مختلف (الافتراضي data/<dataset>/raw)، و--test_size / --seed لتغيير التقسيم (القيم الافتراضية 0.2 و41).
يكتب هذا الملفات التي يحمّلها data/tabular_datasets.py:
data/<dataset>/{train_feats,train_labels,test_feats,test_labels}.npy
إذا كانت ملفات .npy هذه مفقودة، فإن أي تشغيل يستخدم --dataset_name texas أو --dataset_name location يفشل بخطأ FileNotFoundError يذكر المسار المفقود.
attack: تطبيقات الهجوم ونقاط دخول التقييم (MIA، RMIA، WhiteBox_MIA، إلخ).training: حلقات تدريب الهدف/الظل ومتغيرات التدريب المحمية (فروع DP / الخصومة، والأدوات المساعدة).model: تعريفات النماذج والأغلفة المستخدمة في التدريب والهجمات.quantization: خطوط أنابيب وأدوات التكميم PTQ/QAT (بما في ذلك تكامل AIMET AdaRound).data: أدوات مساعدة لتنزيل مجموعات البيانات، ونصوص التحضير، وأغلفة Dataset الخاصة بـ PyTorch.dp: أدوات الخصوصية التفاضلية المستخدمة في مسارات تدريب DP.example: نصوص shell للتجارب الشاملة من البداية إلى النهاية (جمع بيانات MIA + التقييم/الدفاعات القائمة على الهجوم فقط).experiment: الدراسات الميكانيكية الكامنة وراء تحليل الورقة — درجات الحفظ بأسلوب LOOD (memorization.py) وجداول تكميم معيار التدرج (grad_norm_quantization_table.py، grad_norm_range_normalized_table.py).plot: توليد الأشكال والجداول للورقة؛ تُحفظ ملفات PDF وCSV الناتجة في plot/figures/.main.py: نقطة دخول CLI الموحدة (--training يبدّل بين أوضاع التدريب والهجوم فقط).parameter_parser.py: جميع وسائط سطر الأوامر والقيم الافتراضية.extract_last_layer_grad_norm.py: معايير L2 لكل عينة لتدرج مصنّف الطبقة الأخيرة لمجموعات الأعضاء وغير الأعضاء، والتي تُعاد استخدامها بواسطة جداول experiment/.يطابق النمط التالي سير العمل المقصود في المستودع: التدريب باستخدام MIA لتعبئة save/MIA/...، ثم تشغيل MIA مع --training None.
# Stage 1: train target + shadow and save MIA artifacts
python main.py \
--dataset_name cifar100 \
--net_name resnet18 \
--quantization hawq --a_bit 8 --w_bit 8 \
--attack_method MIA \
--training both \
--num_epochs 50 --trials 3 \
--device cuda:0
# Stage 2: attack-only MIA evaluation (confidence threshold attack only)
python main.py \
--dataset_name cifar100 \
--net_name resnet18 \
--quantization hawq --a_bit 8 --w_bit 8 \
--attack_method MIA \
--compleaknr_attacks confidence \
--training None \
--trials 3 \
--device cuda:0
لكل تشغيل هجوم، ستطبع وحدة التحكم التقدم من تنفيذ الهجوم المقابل (على سبيل المثال، المقاييس لكل تجربة لـ MIA؛ عمليات التشغيل الخاصة بالهجوم فقط تُحفظ في result/MIA/...).
يتحكم --compleaknr_attacks في إدخال MIA الخاص بالهجوم فقط:
confidence — يشغّل هجوم عتبة الثقة فقط. يستهلك فقط الاحتمالات اللاحقة المحفوظة، لذا فهو سريع ولا يحتاج إلى ملفات النموذج.all (القيمة الافتراضية للوسيط) — يشغّل جميع المتغيرات الستة للصندوق الأسود: عتبة الثقة، عتبة الإنتروبيا، الإنتروبيا المعدّلة، هجومان قائمان على التدريب (LR/RF على الاحتمالات اللاحقة، وعلى الاحتمالات اللاحقة بالإضافة إلى التسمية)، وSAMIA.لاحظ أن الوضعين لهما متطلبات مختلفة. تقرأ المتغيرات الخمسة الأولى فقط الاحتمالات اللاحقة المحفوظة، لكن SAMIA يحمّل بالإضافة إلى ذلك النموذج الهدف ونماذج الظل المحفوظة من save/MIA/.../target/<trial>/model.pth وsave/MIA/.../shadow/0/model.pth ويستعلمها على مدخلات مضطربة لتقدير حساسية المخرجات. لا يزال هذا صندوقًا أسود بمعنى أنه لا تُستخدم سوى مخرجات النموذج — لا تدرجات ولا تنشيطات داخلية — لكنه يتطلب وجود تلك نقاط التحقق، وهو أبطأ بكثير.
إذا حذفت --compleaknr_attacks، فستعمل الستة جميعًا. مرّر confidence صراحةً، كما هو موضح أعلاه، عندما تريد المسار السريع فقط أو عندما تكون نقاط تحقق النموذج غير متاحة.
يمكنك أيضًا إعادة إنتاج عمليات مسح أوسع عبر:
bash example/MIA_cifar100_train.sh
bash example/MIA_cinic10_train.sh
bash example/defense/run_adv.sh
bash example/defense/run_dp.sh
bash example/defense/run_dropout.sh
bash example/RMIA.sh
عدّل معرّفات الأجهزة (cuda:*) والمعاملات الفائقة داخل تلك السكربتات بما يناسب عنقودك.
فيما يلي أمثلة مصغّرة للنماذج المحمية، باستخدام --compleaknr_attacks confidence في وضع الهجوم فقط.
# Dropout defense (resnet18_drop010): train target, then black-box confidence attack
python main.py --training target --attack_method MIA --dataset cifar100 --net_name resnet18_drop010 --quantization Original --a_bit 32 --w_bit 32 --trials 1 --device cuda:0
python main.py --attack_method MIA --compleaknr_attacks confidence --dataset_name cifar100 --net_name resnet18_drop010 --quantization Original --a_bit 32 --w_bit 32 --training None --trials 1 --device cuda:0