-
Notifications
You must be signed in to change notification settings - Fork 149
Description
Dear authors,
Thank you for providing the implementation for RMIA.
After attempts to reproduce the attack on the paper, we observed that the offline attack results with 4 reference models are much lower than those reported in the paper.
Results
| Metric | Reported | Reproduced |
|---|---|---|
| Avg. Train Accuracy | 99.9% | 99.92–100% |
| Avg. Test Accuracy | 92.4% | 91.23–91.71% |
| AUC of RMIA (offline, 4 refs, 2 augs) | 71.02(*) | 64.67 |
| TPR@0.01%FPR (offline, 4 refs, 2 augs) | 2.91%(*) | 0.73% |
| TPR@0.0%FPR (offline, 4 refs, 2 augs) | 2.13%(*) | 0.57% |
| AUC of RMIA (offline, 4 refs, 18 augs) | 71.02(*) | 64.88 |
| TPR@0.01%FPR (offline, 4 refs, 18 augs) | 2.91%(*) | 0.84% |
| TPR@0.0%FPR (offline, 4 refs, 18 augs) | 2.13%(*) | 0.45% |
(*) We refer to the values in Table 2 in the paper, which does not clearly state the number of augmentations.
Environment
OS: Linux 4.18.0-372.9.1.el8.x86_64
Python: 3.10.8 [GCC 12.2.0]
CUDA: 11.7
GPU: Tesla V100-PCIE-32GB
TensorFlow: 2.9.2
JAX: 0.3.17
What we did
We employed the code from this tree:
https://github.com/privacytrustlab/ml_privacy_meter/tree/d32734161a3395211fe5f3cd461932290b1fafbe/research/2024_rmia
- Train 4 reference models.
# # training 4 ref models
prefix="cifar10_4"
if [ ! -d "logs/${prefix}" ]; then
# If it doesn't exist, create the folder
mkdir "logs/${prefix}"
mkdir "exp/${prefix}"
echo "Folder 'logs/${prefix}' created."
else
echo "Folder 'logs/${prefix}' already exists."
fi
n_models_end=3 # train 4 reference models
for model in $(seq 0 1 $n_models_end);
do
train="CUDA_VISIBLE_DEVICES='0' python3 -u train.py --dataset=cifar10 --epochs=100 --save_steps=100 --arch wrn28-2 --num_experiments 4 --expid ${model} --logdir exp/${prefix} &> 'logs/${prefix}/log_${model}'"
eval ${train}
done
- Train 1 target model.
CUDA_VISIBLE_DEVICES='0' python3 -u train_one_model.py \
--dataset=cifar10 \
--epochs=100 \
--save_steps=100 \
--arch wrn28-2 \
--expid 0 \
--logdir exp/cifar10_target &> logs/cifar10_target/log_0
train.py was modified to train_one_model.py as below to set num_experiments None and enable one model training:
# elif FLAGS.expid is not None:
elif FLAGS.expid is not None and FLAGS.num_experiments is not None:
| elif FLAGS.expid is not None: |
python main_one_target_model.py --cf attack_configs/cifar10/rmia_offline_2_ref_models.yaml
main.py was modified to main_one_target_model.py as below to set model None to load the target model logits.
model_logits, _ = load_input_logits(models_path, epoch,
# model=model_index,
model=None,
num_augmentations=nb_augmentations)
ml_privacy_meter/research/2024_rmia/main.py
Line 189 in d327341
| model_logits, _ = load_input_logits(models_path, epoch, model=model_index, num_augmentations=nb_augmentations) |
Config was modified as below:
nb_augmentation: 18 # for aug=18
nb_augmentation: 2 # for aug=2
data:
target_dir: scripts/exp/cifar10_target # directory containing logits of one target model
reference_dir: scripts/exp/cifar10_4 # directory containing logits of 4 reference models
We trained the one target model because specifying the same directory (scripts/exp/cifar10_4) faced a shape error.
I’m happy to share full logs or run additional experiments if that helps.
Thank you for your work!
Best regards,
Haruka Buss