对ml模型运行成员推断攻击的库
mia的Python项目详细描述
针对机器学习模型运行成员推断攻击(mia)的库。退房 这是documentation。
这些都是对训练数据隐私的攻击。在mia中,攻击者试图猜测 给定的示例在目标模型的训练期间是否使用,仅通过查询模型。见 更多由Shokri et al撰写的论文。目前,您可以使用 库来评估您的keras或pytorch模型对mia的健壮性。
功能:
- 实现原始阴影模型attack
- 是可自定义的,可以使用任何scikit learn的Estimator类对象作为阴影或攻击模型
- 使用Keras和Pythorch进行测试
开始
您可以从pypi安装mia:
pip install mia
用法
shokri等人。攻击
请参阅full runnable example。阅读
攻击paper。
让target_model_fn()将目标模型体系结构作为类似scikit的分类器返回。这个
攻击是白盒,这意味着攻击者假定知道体系结构。让NUM_CLASSES
是分类问题的类数。
首先,攻击者需要训练几个模仿目标模型的影子模型-
在从原始数据分布中采样的不同数据集上。以下代码段
初始化shadow model bundle,并运行阴影的训练。对于每个阴影模型,
2 * SHADOW_DATASET_SIZE对示例进行采样,而不替换完全攻击者的
数据集。其中一半用于控制,另一半用于阴影模型的训练。
frommia.estimatorsimportShadowModelBundlesmb=ShadowModelBundle(target_model_fn,shadow_dataset_size=SHADOW_DATASET_SIZE,num_models=NUM_MODELS,)X_shadow,y_shadow=smb.fit_transform(attacker_X_train,attacker_y_train)
fit_transform返回攻击数据X_shadow, y_shadow。X_shadow中的每一行都是
由阴影模型的预测向量组成的连接向量,例如
原始数据集和示例的类(一个热编码)。因此它的形状是(2 *
SHADOW_DATASET_SIZE, 2 * NUM_CLASSES)。如果y_shadow中的每个标签对应
示例是“超出”阴影模型(控件)的训练数据集,或者是一个,如果它在
训练。
mia提供了一个类来训练一组攻击模型,每个类一个模型。attack_model_fn()
应该返回一个类似scikit的分类器,它接受模型预测的向量(NUM_CLASSES, ),
并返回这些预测的示例是在训练中还是在训练中。
frommia.estimatorsimportAttackModelBundleamb=AttackModelBundle(attack_model_fn,num_classes=NUM_CLASSES)amb.fit(X_shadow,y_shadow)
代替AttackModelBundle,可以使用任何接受(2 *
NUM_CLASSES, )形状示例的二进制分类器(如上所述,输入的前半部分是预测
向量从一个模型中,下半部分是一个对应实例的真类)。
要评估攻击,必须以上述格式对数据进行编码。让target_model成为
目标模型,data_in用于目标模型训练的数据(元组X, y),以及
data_out培训中未使用的数据。
frommia.estimatorsimportprepare_attack_dataattack_test_data,real_membership_labels=prepare_attack_data(target_model,data_in,data_out)attack_guesses=amb.predict(attack_test_data)attack_accuracy=np.mean(attack_guesses==real_membership_labels)
引用
@misc{mia, author = {Bogdan Kulynych and Mohammad Yaghini}, title = {{mia: A library for running membership inference attacks against ML models}}, month = sep, year = 2018, doi = {10.5281/zenodo.1433744}, url = {https://doi.org/10.5281/zenodo.1433744} }