
Исследовательская кодовая база для оценки конфиденциальности квантованных нейронных сетей: обучает целевые/теневые модели в режимах PTQ/QAT и выполняет атаки вывода членства (MIA, RMIA, white-box) с защитой на основе дифференциальной приватности (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 (CPU-колёса 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 явно, как указано выше, если вам нужен только быстрый путь или если контрольные точки моделей недоступны.
Вы также можете воспроизвести более крупные серии запусков через: