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.sup_privacy.rst 9.1 kB

3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. mindarmour.privacy.sup_privacy
  2. ==============================
  3. 本模块提供抑制隐私功能,以保护用户隐私。
  4. .. py:class:: mindarmour.privacy.sup_privacy.SuppressMasker(model, suppress_ctrl)
  5. 周期性检查抑制隐私功能状态和切换(启动/关闭)抑制操作。
  6. 详情请查看: `应用抑制隐私机制保护用户隐私
  7. <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html#%E5%BC%95%E5%85%A5%E6%8A%91%E5%88%B6%E9%9A%90%E7%A7%81%E8%AE%AD%E7%BB%83>`_。
  8. 参数:
  9. - **model** (SuppressModel) - SuppressModel 实例。
  10. - **suppress_ctrl** (SuppressCtrl) - SuppressCtrl 实例。
  11. .. py:method:: step_end(run_context)
  12. 更新用于抑制模型实例的掩码矩阵张量。
  13. 参数:
  14. - **run_context** (RunContext) - 包含模型的一些信息。
  15. .. py:class:: mindarmour.privacy.sup_privacy.SuppressModel(network, loss_fn, optimizer, **kwargs)
  16. 抑制隐私训练器,重载自 :class:`mindspore.Model` 。
  17. 有关详细信息,请查看: `应用抑制隐私机制保护用户隐私 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html>`_。
  18. 参数:
  19. - **network** (Cell) - 要训练的神经网络模型。
  20. - **loss_fn** (Cell) - 优化器的损失函数。
  21. - **optimizer** (Optimizer) - 优化器实例。
  22. - **kwargs** - 创建抑制模型时使用的关键字参数。
  23. .. py:method:: link_suppress_ctrl(suppress_pri_ctrl)
  24. SuppressCtrl实例关联到SuppressModel实例。
  25. 参数:
  26. - **suppress_pri_ctrl** (SuppressCtrl) - SuppressCtrl实例。
  27. .. py:class:: mindarmour.privacy.sup_privacy.SuppressPrivacyFactory
  28. SuppressCtrl机制的工厂类。
  29. 详情请查看: `应用抑制隐私机制保护用户隐私 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html#%E5%BC%95%E5%85%A5%E6%8A%91%E5%88%B6%E9%9A%90%E7%A7%81%E8%AE%AD%E7%BB%83>`_。
  30. .. py:method:: create(networks, mask_layers, policy='local_train', end_epoch=10, batch_num=20, start_epoch=3, mask_times=1000, lr=0.05, sparse_end=0.90, sparse_start=0.0)
  31. 参数:
  32. - **networks** (Cell) - 要训练的神经网络模型。此网络参数应与SuppressModel()的'network'参数相同。
  33. - **mask_layers** (list) - 需要抑制的训练网络层的描述。
  34. - **policy** (str) - 抑制隐私训练的训练策略。默认值:"local_train",表示本地训练。
  35. - **end_epoch** (int) - 最后一次抑制操作对应的epoch序号,0<start_epoch<=end_epoch<=100。默认值:10。此end_epoch参数应与mindspore.train.model.train()的'epoch'参数相同。
  36. - **batch_num** (int) - 一个epoch中批次的数量,应等于num_samples/batch_size。默认值:20。
  37. - **start_epoch** (int) - 第一个抑制操作对应的epoch序号,0<start_epoch<=end_epoch<=100。默认值:3。
  38. - **mask_times** (int) - 抑制操作的数量。默认值:1000。
  39. - **lr** (Union[float, int]) - 学习率,在训练期间应保持不变。0<lr<=0.50. 默认值:0.05。此lr参数应与mindspore.nn.SGD()的'learning_rate'参数相同。
  40. - **sparse_end** (float) - 要到达的稀疏性,0.0<=sparse_start<sparse_end<1.0。默认值:0.90。
  41. - **sparse_start** (Union[float, int]) - 抑制操作启动时对应的稀疏性,0.0<=sparse_start<sparse_end<1.0。默认值:0.0。
  42. 返回:
  43. - **SuppressCtrl** - 抑制隐私机制的类。
  44. .. py:class:: mindarmour.privacy.sup_privacy.SuppressCtrl(networks, mask_layers, end_epoch, batch_num, start_epoch, mask_times, lr, sparse_end, sparse_start)
  45. 完成抑制隐私操作,包括计算抑制比例,找到应该抑制的参数,并永久抑制这些参数。
  46. 详情请查看: `应用抑制隐私机制保护用户隐私 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_suppress_privacy.html#%E5%BC%95%E5%85%A5%E6%8A%91%E5%88%B6%E9%9A%90%E7%A7%81%E8%AE%AD%E7%BB%83>`_。
  47. 参数:
  48. - **networks** (Cell) - 要训练的神经网络模型。
  49. - **mask_layers** (list) - 需要抑制的层的描述。
  50. - **end_epoch** (int) - 最后一次抑制操作对应的epoch序号。
  51. - **batch_num** (int) - 一个epoch中的batch数量。
  52. - **start_epoch** (int) - 第一个抑制操作对应的epoch序号。
  53. - **mask_times** (int) - 抑制操作的数量。
  54. - **lr** (Union[float, int]) - 学习率。
  55. - **sparse_end** (float) - 要到达的稀疏性。
  56. - **sparse_start** (Union[float, int]) - 要启动的稀疏性。
  57. .. py:method:: calc_actual_sparse_for_conv(networks)
  58. 计算con1层和con2层的网络稀疏性。
  59. 参数:
  60. - **networks** (Cell) - 要训练的神经网络模型。
  61. .. py:method:: calc_actual_sparse_for_fc1(networks)
  62. 计算全连接1层的实际稀疏
  63. 参数:
  64. - **networks** (Cell) - 要训练的神经网络模型。
  65. .. py:method:: calc_actual_sparse_for_layer(networks, layer_name)
  66. 计算一个网络层的实际稀疏性
  67. 参数:
  68. - **networks** (Cell) - 要训练的神经网络模型。
  69. - **layer_name** (str) - 目标层的名称。
  70. .. py:method:: calc_theoretical_sparse_for_conv()
  71. 计算卷积层的掩码矩阵的实际稀疏性。
  72. .. py:method:: print_paras()
  73. 显示参数信息
  74. .. py:method:: reset_zeros()
  75. 将用于加法运算的掩码数组设置为0。
  76. .. py:method:: update_mask(networks, cur_step, target_sparse=0.0)
  77. 对整个模型的用于加法运算和乘法运算的掩码数组进行更新。
  78. 参数:
  79. - **networks** (Cell) - 训练网络。
  80. - **cur_step** (int) - 整个训练过程的当前epoch。
  81. - **target_sparse** (float) - 要到达的稀疏性。默认值:0.0。
  82. .. py:method:: update_mask_layer(weight_array_flat, sparse_weight_thd, sparse_stop_pos, weight_abs_max, layer_index)
  83. 对单层的用于加法运算和乘法运算的掩码数组进行更新。
  84. 参数:
  85. - **weight_array_flat** (numpy.ndarray) - 层参数权重数组。
  86. - **sparse_weight_thd** (float) - 绝对值小于该阈值的权重会被抑制。
  87. - **sparse_stop_pos** (int) - 要抑制的最大元素数。
  88. - **weight_abs_max** (float) - 权重的最大绝对值。
  89. - **layer_index** (int) - 目标层的索引。
  90. .. py:method:: update_mask_layer_approximity(weight_array_flat, weight_array_flat_abs, actual_stop_pos, layer_index)
  91. 对单层的用于加法运算和乘法运算的掩码数组进行更新。
  92. 禁用clipping lower、clipping、adding noise操作。
  93. 参数:
  94. - **weight_array_flat** (numpy.ndarray) - 层参数权重数组。
  95. - **weight_array_flat_abs** (numpy.ndarray) - 层参数权重的绝对值的数组。
  96. - **actual_stop_pos** (int) - 应隐藏实际参数编号。
  97. - **layer_index** (int) - 目标层的索引。
  98. .. py:method:: update_status(cur_epoch, cur_step, cur_step_in_epoch)
  99. 更新抑制操作状态。
  100. 参数:
  101. - **cur_epoch** (int) - 整个训练过程的当前epoch。
  102. - **cur_step** (int) - 整个训练过程的当前步骤。
  103. - **cur_step_in_epoch** (int) - 当前epoch的当前步骤。
  104. .. py:class:: mindarmour.privacy.sup_privacy.MaskLayerDes(layer_name, grad_idx, is_add_noise, is_lower_clip, min_num, upper_bound=1.20)
  105. 对抑制目标层的描述。
  106. 参数:
  107. - **layer_name** (str) - 层名称,如下获取一个层的名称:
  108. .. code-block::
  109. for layer in networks.get_parameters(expand=True):
  110. if layer.name == "conv": ...
  111. - **grad_idx** (int) - 掩码层在梯度元组中的索引。可参考 `model.py <https://gitee.com/mindspore/mindarmour/blob/master/mindarmour/privacy/sup_privacy/train/model.py>`_ 中TrainOneStepCell的构造函数,在PYNATIVE_MODE模式下打印某些层的索引值。
  112. - **is_add_noise** (bool) - 如果为True,则此层的权重可以添加噪声。如果为False,则此层的权重不能添加噪声。如果参数num大于100000,则 `is_add_noise` 无效。
  113. - **is_lower_clip** (bool) - 如果为True,则此层的权重将被剪裁到大于下限值。如果为False,此层的权重不会被要求大于下限制。如果参数num大于100000,则is_lower_clip无效。
  114. - **min_num** (int) - 未抑制的剩余权重数。如果min_num小于(参数总数量 * `SupperssCtrl.sparse_end` ),则min_num无效。
  115. - **upper_bound** (Union[float, int]) - 此层权重的最大abs值,默认值:1.20。如果参数num大于100000,则upper_bound无效。

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