You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

mindarmour.privacy.evaluation.rst 6.2 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. mindarmour.privacy.evaluation
  2. =============================
  3. 本模块提供了一些评估给定模型隐私泄露风险的方法。
  4. .. py:class:: mindarmour.privacy.evaluation.MembershipInference(model, n_jobs=-1)
  5. 成员推理是由Shokri、Stronati、Song和Shmatikov提出的一种用于推断用户隐私数据的灰盒攻击。它需要训练样本的loss或logits结果。
  6. (隐私是指单个用户的一些敏感属性)。
  7. 有关详细信息,请参见: `教程 <https://mindspore.cn/mindarmour/docs/en/master/test_model_security_membership_inference.html>`_。
  8. 参考文献:`Reza Shokri, Marco Stronati, Congzheng Song, Vitaly Shmatikov. Membership Inference Attacks against Machine Learning Models. 2017. <https://arxiv.org/abs/1610.05820v2>`_。
  9. **参数:**
  10. - **model** (Model) - 目标模型。
  11. - **n_jobs** (int) - 并行运行的任务数量。-1表示使用所有处理器,否则n_jobs的值必须为正整数。
  12. **异常:**
  13. - **TypeError** - 模型的类型不是Mindpore.train.Model。
  14. - **TypeError** - n_jobs的类型不是int。
  15. - **ValueError** - n_jobs的值既不是-1,也不是正整数。
  16. .. py:method:: eval(dataset_train, dataset_test, metrics)
  17. 评估目标模型的隐私泄露程度。
  18. 评估指标应由metrics规定。
  19. **参数:**
  20. - **dataset_train** (minspore.dataset) - 目标模型的训练数据集。
  21. - **dataset_test** (minspore.dataset) - 目标模型的测试数据集。
  22. - **metrics** (Union[list, tuple]) - 评估指标。指标的值必须在["precision", "accuracy", "recall"]中。默认值:["precision"]。
  23. **返回:**
  24. - **list** - 每个元素都包含攻击模型的评估指标。
  25. .. py:method:: train(dataset_train, dataset_test, attack_config)
  26. 根据配置,使用输入数据集训练攻击模型。
  27. 将攻击模型保存至self._attack_list。
  28. **参数:**
  29. - **dataset_train** (minspore.dataset) - 目标模型的训练数据集。
  30. - **dataset_test** (minspore.dataset) - 目标模型的测试集。
  31. - **attack_config** (Union[list, tuple]) - 攻击模型的参数设置。格式为
  32. .. code-block:: python
  33. attack_config =
  34. [{"method": "knn", "params": {"n_neighbors": [3, 5, 7]}},
  35. {"method": "lr", "params": {"C": np.logspace(-4, 2, 10)}}]
  36. - 支持的方法有knn、lr、mlp和rf,每个方法的参数必须在可变参数的范围内。参数实现的提示可在下面找到:
  37. - `KNN <https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html>`_,
  38. - `LR <https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html>`_,
  39. - `RF <https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html>`_,
  40. - `MLP <https://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html>`_.
  41. **异常:**
  42. - **KeyError** - attack_config中的配置没有键{"method", "params"}。
  43. - **NameError** - attack_config中的方法(不区分大小写)不在["lr", "knn", "rf", "mlp"]中。
  44. .. py:class:: mindarmour.privacy.evaluation.ImageInversionAttack(network, input_shape, input_bound, loss_weights=(1, 0.2, 5))
  45. 一种用于通过还原图像的深层表达来重建图像的攻击方法。
  46. 参考文献:`Aravindh Mahendran, Andrea Vedaldi. Understanding Deep Image Representations by Inverting Them. 2014. <https://arxiv.org/pdf/1412.0035.pdf>`_。
  47. **参数:**
  48. - **network** (Cell) - 网络,用于推断图像的深层特征。
  49. - **input_shape** (tuple) - 单个网络输入的数据形状,应与给定网络一致。形状的格式应为(channel, image_width, image_height)。
  50. - **input_bound** (Union[tuple, list]) - 原始图像的像素范围,应该像[minimum_pixel, maximum_pixel]或(minimum_pixel, maximum_pixel)。
  51. - **loss_weights** (Union[list, tuple]) - InversionLoss中三个子损失的权重,可以调整以获得更好的结果。默认值:(1, 0.2, 5)。
  52. **异常:**
  53. - **TypeError** - 网络类型不是Cell。
  54. - **ValueError** - input_shape的值都不是正int。
  55. - **ValueError** - loss_weights的值都不是正值。
  56. .. py:method:: evaluate(original_images, inversion_images, labels=None, new_network=None)
  57. 通过三个指标评估还原图像的质量:原始图像和还原图像之间的平均L2距离和SSIM值,以及新模型对还原图像的推理结果在真实标签上的置信度平均值。
  58. **参数:**
  59. - **original_images** (numpy.ndarray) - 原始图像,其形状应为(img_num, channels, img_width, img_height)。
  60. - **inversion_images** (numpy.ndarray) - 还原图像,其形状应为(img_num, channels, img_width, img_height)。
  61. - **labels** (numpy.ndarray) - 原始图像的ground truth标签。默认值:None。
  62. - **new_network** (Cell) - 其结构包含self._network所有部分的网络。_network,但加载了不同的模型文件。默认值:None。
  63. **返回:**
  64. - **float** - l2距离。
  65. - **float** - 平均ssim值。
  66. - **Union[float, None]** - 平均置信度。如果labels或new_network为 None,则该值为None。
  67. .. py:method:: generate(target_features, iters=100)
  68. 根据target_features重建图像。
  69. **参数:**
  70. - **target_features** (numpy.ndarray) - 原始图像的深度表示。 `target_features` 的第一个维度应该是img_num。需要注意的是,如果img_num等于1,则 `target_features` 的形状应该是(1, dim2, dim3, ...)。
  71. - **iters** (int) - 逆向攻击的迭代次数,应为正整数。默认值:100。
  72. **返回:**
  73. - **numpy.ndarray** - 重建图像,预计与原始图像相似。
  74. **异常:**
  75. - **TypeError** - target_features的类型不是numpy.ndarray。
  76. - **ValueError** - iters的值都不是正int.Z

MindArmour关注AI的安全和隐私问题。致力于增强模型的安全可信、保护用户的数据隐私。主要包含3个模块:对抗样本鲁棒性模块、Fuzz Testing模块、隐私保护与评估模块。 对抗样本鲁棒性模块 对抗样本鲁棒性模块用于评估模型对于对抗样本的鲁棒性,并提供模型增强方法用于增强模型抗对抗样本攻击的能力,提升模型鲁棒性。对抗样本鲁棒性模块包含了4个子模块:对抗样本的生成、对抗样本的检测、模型防御、攻防评估。