
Código de pesquisa para avaliação de privacidade de redes neurais quantizadas: treina modelos alvo/sombra sob PTQ/QAT e executa ataques de inferência de associação (MIA, RMIA, caixa branca) com defesas de DP.
Este repositório contém uma base de código de pesquisa para avaliação de privacidade de redes neurais profundas quantizadas. Ele oferece suporte ao treinamento de modelos target/shadow sob configurações comuns de quantização pós-treinamento (PTQ) e treinamento ciente de quantização (QAT), salvando recursos intermediários de ataque em disco e executando um conjunto de ataques e métricas relacionados à inferência de associação (por exemplo, MIA, RMIA, WhiteBoxMIA, WhiteBoxMIA_Partial). A base de código também integra caminhos de treinamento com privacidade diferencial baseados em Opacus para modelos defendidos (por exemplo, variantes dropout / DP / adversariais nos scripts de exemplo fornecidos).
O fluxo de trabalho de avaliação é dividido em dois estágios: (1) treinamento (--training target|shadow|both) para materializar artefatos em save/<attack_method>/..., e (2) avaliação somente de ataque (--training None) que carrega posteriores/modelos salvos e reporta métricas em result/<attack_method>/....
Você precisa de uma máquina com suporte a GPU NVIDIA para experimentos típicos. Recomendamos wheels de CUDA 12.1 para PyTorch (veja os comandos abaixo). Use Python 3.10 para corresponder às versões fixadas em requirements.txt.
Você pode instalar a maioria dos requisitos com:
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
Notas:
pip install -r requirements.txt sem --extra-index-url (wheels de CPU do PyPI, se disponíveis para a sua plataforma).aimet-torch (veja quantization/PTQ/adaround.py). Se o pip não conseguir resolver o aimet-torch na sua plataforma, siga primeiro as instruções de instalação do Qualcomm AIMET e depois instale as dependências restantes.Os datasets não estão incluídos neste repositório. Quatro são suportados, e eles diferem na quantidade de configuração necessária.
Ambos são obtidos no primeiro uso em data/, então nenhuma etapa manual é necessária — apenas certifique-se de que a máquina tenha acesso à rede na primeira vez que executar um experimento.
torchvision.datasets.CIFAR100(..., download=True) em data/load_data.py.fetch_cinic10() em data/cinic10.py a partir do espelho Edinburgh DataShare. É um arquivo grande, então reserve tempo e espaço em disco para a primeira execução.Estes dois não têm downloader automático. Obtenha os arquivos brutos, descompacte-os em data/<dataset>/raw/ e então converta-os para os arquivos .npy que os loaders esperam.
| Dataset | Arquivo bruto |
|---|---|
| Texas100 | https://www.comp.nus.edu.sg/~reza/files/dataset_texas.tgz |
| Location | https://github.com/privacytrustlab/datasets (o conjunto location) |
Layout esperado após a descompactação:
data/texas/raw/texas/100/feats
data/texas/raw/texas/100/labels
data/location/raw/bangkok
Em seguida, construa as divisões de treino/teste:
python data/prepare_tabular.py --dataset both
--dataset aceita texas, location ou both. Use --raw_root para apontar para um local diferente (padrão data/<dataset>/raw), e --test_size / --seed para alterar a divisão (padrões 0.2 e 41).
Isso grava os arquivos que data/tabular_datasets.py carrega:
data/<dataset>/{train_feats,train_labels,test_feats,test_labels}.npy
Se esses arquivos .npy estiverem ausentes, qualquer execução usando --dataset_name texas ou --dataset_name location falha com um FileNotFoundError que indica o caminho ausente.
attack: implementações de ataques e pontos de entrada de avaliação (MIA, RMIA, WhiteBox_MIA, etc.).training: loops de treinamento de target/shadow e variantes de treinamento defendidas (ramificações DP / adversariais, utilitários).model: definições de modelos e wrappers usados pelo treinamento e pelos ataques.quantization: pipelines e auxiliares de quantização PTQ/QAT (incluindo a integração com AIMET AdaRound).data: auxiliares de download de conjuntos de dados, scripts de preparação e wrappers de Dataset do PyTorch.dp: utilitários de privacidade diferencial usados pelos caminhos de treinamento DP.example: scripts shell para experimentos de ponta a ponta (coleta de dados de MIA + avaliação apenas de ataque / defesas).experiment: estudos mecanísticos por trás da análise do artigo — pontuações de memorização no estilo LOOD (memorization.py) e as tabelas de quantização de norma de gradiente (grad_norm_quantization_table.py, grad_norm_range_normalized_table.py).plot: geração de figuras e tabelas para o artigo; os PDFs e CSVs de saída ficam em plot/figures/.main.py: ponto de entrada unificado da CLI (--training alterna entre os modos de treinamento e apenas de ataque).parameter_parser.py: todos os argumentos de linha de comando e valores padrão.extract_last_layer_grad_norm.py: normas L2 por amostra do gradiente do classificador da última camada para os subconjuntos de membros e não membros, reutilizadas pelas tabelas de experiment/.O padrão a seguir corresponde ao fluxo de trabalho pretendido do repositório: treinar com MIA para popular save/MIA/..., depois executar MIA com --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
Para cada execução de ataque, o console imprimirá o progresso da implementação de ataque correspondente (por exemplo, métricas por tentativa para MIA; execuções somente de ataque são salvas em result/MIA/...).
--compleaknr_attacks controla a entrada MIA somente de ataque:
confidence — executa apenas o ataque de limiar de confiança. Ele consome apenas as posteriores salvas, portanto é rápido e não precisa de arquivos de modelo.all (o padrão do argumento) — executa todas as seis variantes de caixa-preta: limiar de confiança, limiar de entropia, entropia modificada, dois ataques baseados em treino (LR/RF sobre posteriores, e sobre posteriores mais rótulo) e SAMIA.Observe que os dois modos têm requisitos diferentes. As primeiras cinco variantes leem apenas as posteriores salvas, mas SAMIA carrega adicionalmente os modelos alvo e shadow salvos de save/MIA/.../target/<trial>/model.pth e save/MIA/.../shadow/0/model.pth e os consulta em entradas perturbadas para estimar a sensibilidade da saída. Isso ainda é caixa-preta no sentido de que apenas as saídas do modelo são usadas — sem gradientes ou ativações internas — mas requer que esses checkpoints estejam presentes, e é consideravelmente mais lento.
Se você omitir --compleaknr_attacks, todos os seis serão executados. Passe confidence explicitamente, como acima, quando quiser apenas o caminho rápido ou quando os checkpoints do modelo não estiverem disponíveis.