对ml模型运行成员推断攻击的库

mia的Python项目详细描述


PyPI versionLicenseBuild statusDocumentation statusCiting with the Zenodo

针对机器学习模型运行成员推断攻击(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_shadowX_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}
}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java数组。按字符串排序   如何使用Netbeans设置Java打印的页面大小   java有没有一种方法可以获取sparkjava/嵌入式jetty服务器的主线程执行器?   正则表达式Java正则表达式:需要更简单的解决方案   无法使用java解析XML   MySQL Java JDBC:如何获取自动递增列的名称?   java错误:“限定符必须是表达式”Android Studio   Spring+java。lang.NoClassDefFoundError:weblogic/logging/LogEntryFormatter   java将JList插入GridLayout   listview中的java Get selected复选框   使用CriteriaBuilder的java JPA左外部联接会导致错误:不允许部分对象查询维护缓存或进行编辑   java循环双链接列表addToHead和print   java更好地检测三角形按钮(libgdx)   java ConcurrentHashMap迭代保证人   java如何获取控制台。通过webdriver记录信息?   java Javafx阶段为空   java如何使用apachetika从excel文件中访问空白单元格   java使用SQlite数据库列填充AutoCompleteTextView   java如何在不使用idea构建整个maven项目的情况下运行主方法?