
Base de code de recherche pour l'évaluation de la confidentialité des réseaux neuronaux quantifiés : entraîne des modèles cibles/ombres en PTQ/QAT et exécute des attaques par inférence d'appartenance (MIA, RMIA, boîte blanche) avec des défenses DP.
Ce dépôt contient une base de code de recherche pour l'évaluation de la confidentialité des réseaux de neurones profonds quantifiés. Il prend en charge l'entraînement de modèles cibles/fantômes dans des configurations courantes de quantification post-entraînement (PTQ) et d'entraînement conscient de la quantification (QAT), la sauvegarde sur disque des caractéristiques intermédiaires d'attaque, ainsi que l'exécution d'une suite d'attaques et de métriques liées à l'inférence d'appartenance (par ex. MIA, RMIA, WhiteBoxMIA, WhiteBoxMIA_Partial). La base de code intègre également des chemins d'entraînement à confidentialité différentielle basés sur Opacus pour les modèles défendus (par ex. variantes dropout / DP / adversariales dans les scripts d'exemple fournis).
Le flux d'évaluation est divisé en deux étapes : (1) l'entraînement (--training target|shadow|both) pour matérialiser les artefacts save/<attack_method>/..., et (2) l'évaluation en mode attaque seule (--training None) qui charge les postérieurs/modèles sauvegardés et rapporte les métriques sous result/<attack_method>/....
Vous avez besoin d'une machine avec prise en charge d'un GPU NVIDIA pour les expériences typiques. Nous recommandons les wheels CUDA 12.1 pour PyTorch (voir les commandes ci-dessous). Utilisez Python 3.10 pour correspondre aux versions épinglées dans requirements.txt.
Vous pouvez installer la plupart des dépendances avec :
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
Remarques :
pip install -r requirements.txt sans --extra-index-url (roues CPU PyPI si disponibles pour votre plateforme).aimet-torch (voir quantization/PTQ/adaround.py). Si pip ne parvient pas à résoudre aimet-torch sur votre plateforme, suivez d'abord les instructions d'installation de Qualcomm AIMET, puis installez les dépendances restantes.Les jeux de données ne sont pas inclus dans ce dépôt. Quatre sont pris en charge, et ils diffèrent par la quantité de configuration nécessaire.
Les deux sont récupérés lors de la première utilisation dans data/, donc aucune étape manuelle n'est requise — assurez-vous simplement que la machine dispose d'un accès réseau la première fois que vous lancez une expérience.
torchvision.datasets.CIFAR100(..., download=True) dans data/load_data.py.fetch_cinic10() dans data/cinic10.py depuis le miroir Edinburgh DataShare. Il s'agit d'une archive volumineuse, prévoyez donc du temps et de l'espace disque pour la première exécution.Ces deux jeux de données n'ont pas de téléchargeur automatique. Récupérez les archives brutes, décompressez-les sous data/<dataset>/raw/, puis convertissez-les en fichiers .npy attendus par les chargeurs.
| Jeu de données | Archive brute |
|---|---|
| Texas100 | https://www.comp.nus.edu.sg/~reza/files/dataset_texas.tgz |
| Location | https://github.com/privacytrustlab/datasets (le jeu location) |
Disposition attendue après décompression :
data/texas/raw/texas/100/feats
data/texas/raw/texas/100/labels
data/location/raw/bangkok
Ensuite, construisez les ensembles d'entraînement et de test :
python data/prepare_tabular.py --dataset both
--dataset accepte texas, location ou both. Utilisez --raw_root pour pointer vers un autre emplacement (par défaut data/<dataset>/raw), et --test_size / --seed pour modifier la répartition (valeurs par défaut 0.2 et 41).
Cela écrit les fichiers que data/tabular_datasets.py charge :
data/<dataset>/{train_feats,train_labels,test_feats,test_labels}.npy
Si ces fichiers .npy sont absents, toute exécution utilisant --dataset_name texas ou --dataset_name location échoue avec une FileNotFoundError qui nomme le chemin manquant.
attack : implémentations des attaques et points d'entrée d'évaluation (MIA, RMIA, WhiteBox_MIA, etc.).training : boucles d'entraînement cible/shadow et variantes d'entraînement défendues (branches DP / adversariales, utilitaires).model : définitions de modèles et wrappers utilisés par l'entraînement et les attaques.quantization : pipelines et utilitaires de quantification PTQ/QAT (y compris l'intégration d'AIMET AdaRound).data : utilitaires de téléchargement de jeux de données, scripts de préparation et wrappers Dataset PyTorch.dp : utilitaires de confidentialité différentielle utilisés par les chemins d'entraînement DP.example : scripts shell pour des expériences de bout en bout (collecte de données MIA + évaluation attaque seule / défenses).experiment : études mécanistes sous-jacentes à l'analyse de l'article — scores de mémorisation de type LOOD (memorization.py) et les tableaux de quantification de la norme du gradient (grad_norm_quantization_table.py, grad_norm_range_normalized_table.py).plot : génération de figures et de tableaux pour l'article ; les PDF et CSV produits sont déposés dans plot/figures/.main.py : point d'entrée CLI unifié (--training bascule entre les modes entraînement et attaque seule).parameter_parser.py : tous les arguments de ligne de commande et leurs valeurs par défaut.extract_last_layer_grad_norm.py : normes L2 par échantillon du gradient du classifieur de la dernière couche pour les sous-ensembles membres et non-membres, réutilisées par les tableaux de experiment/.Le schéma suivant correspond au flux de travail prévu du dépôt : entraîner avec MIA pour remplir save/MIA/..., puis exécuter MIA avec --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
Pour chaque exécution d'attaque, la console affichera la progression de l'implémentation d'attaque correspondante (par exemple, les métriques par essai pour MIA ; les exécutions en mode attaque seule sont enregistrées dans result/MIA/...).
--compleaknr_attacks contrôle l'entrée MIA en mode attaque seule :
confidence — exécute uniquement l'attaque par seuil de confiance. Elle ne consomme que les postérieurs enregistrés, elle est donc rapide et ne nécessite aucun fichier de modèle.all (valeur par défaut de l'argument) — exécute les six variantes en boîte noire : seuil de confiance, seuil d'entropie, entropie modifiée, deux attaques basées sur l'entraînement (LR/RF sur les postérieurs, et sur les postérieurs plus l'étiquette), et SAMIA.