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.diff_privacy.rst 16 kB

3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 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
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. mindarmour.privacy.diff_privacy
  2. ===============================
  3. 本模块提供差分隐私功能,以保护用户隐私。
  4. .. py:class:: mindarmour.privacy.diff_privacy.NoiseGaussianRandom(norm_bound=1.0, initial_noise_multiplier=1.0, seed=0, decay_policy=None)
  5. 基于 :math:`mean=0` 以及 :math:`standard\_deviation = norm\_bound * initial\_noise\_multiplier` 的高斯分布产生噪声。
  6. 参数:
  7. - **norm_bound** (float)- 梯度的l2范数的裁剪范围。默认值:1.0。
  8. - **initial_noise_multiplier** (float)- 高斯噪声标准偏差除以 `norm_bound` 的比率,将用于计算隐私预算。默认值:1.0。
  9. - **seed** (int)- 原始随机种子,如果seed=0随机正态将使用安全随机数。如果seed!=0随机正态将使用给定的种子生成值。默认值:0。
  10. - **decay_policy** (str)- 衰减策略。默认值:None。
  11. .. py:method:: construct(gradients)
  12. 产生高斯噪声。
  13. 参数:
  14. - **gradients** (Tensor) - 梯度。
  15. 返回:
  16. - **Tensor** - 生成的shape与给定梯度相同的噪声。
  17. .. py:class:: mindarmour.privacy.diff_privacy.NoiseAdaGaussianRandom(norm_bound=1.0, initial_noise_multiplier=1.0, seed=0, noise_decay_rate=6e-6, decay_policy='Exp')
  18. 自适应高斯噪声产生机制。噪音会随着训练而衰减。衰减模式可以是'Time'、'Step'、'Exp'。
  19. 在模型训练过程中,将更新 `self._noise_multiplier` 。
  20. 参数:
  21. - **norm_bound** (float) - 梯度的l2范数的裁剪范围。默认值:1.0。
  22. - **initial_noise_multiplier** (float) - 高斯噪声标准偏差除以 `norm_bound` 的比率,将用于计算隐私预算。默认值:1.0。
  23. - **seed** (int) - 原始随机种子,如果seed=0随机正态将使用安全随机数。如果seed!=0随机正态将使用给定的种子生成值。默认值:0。
  24. - **noise_decay_rate** (float) - 控制噪声衰减的超参数。默认值:6e-6。
  25. - **decay_policy** (str) - 噪声衰减策略包括'Step'、'Time'、'Exp'。默认值:'Exp'。
  26. .. py:method:: construct(gradients)
  27. 生成自适应高斯噪声。
  28. 参数:
  29. - **gradients** (Tensor) - 梯度。
  30. 返回:
  31. - **Tensor** - 生成的shape与给定梯度相同的噪声。
  32. .. py:class:: mindarmour.privacy.diff_privacy.AdaClippingWithGaussianRandom(decay_policy='Linear', learning_rate=0.001, target_unclipped_quantile=0.9, fraction_stddev=0.01, seed=0)
  33. 自适应剪裁。
  34. 如果 `decay_policy` 是'Linear',则更新公式为::math:`norm\_bound = norm\_bound - learning\_rate*(beta - target\_unclipped\_quantile)` 。
  35. 如果 `decay_policy` 是'Geometric',则更新公式为 :math:`norm\_bound = norm\_bound*exp(-learning\_rate*(empirical\_fraction - target\_unclipped\_quantile))` 。
  36. 其中,beta是值最多为 `target_unclipped_quantile` 的样本的经验分数。
  37. 参数:
  38. - **decay_policy** (str) - 自适应剪裁的衰变策略, `decay_policy` 必须在['Linear', 'Geometric']中。默认值:'Linear'。
  39. - **learning_rate** (float) - 更新范数裁剪的学习率。默认值:0.001。
  40. - **target_unclipped_quantile** (float) - 范数裁剪的目标分位数。默认值:0.9。
  41. - **fraction_stddev** (float) - 高斯正态的stddev,用于 `empirical_fraction` ,公式为empirical_fraction + N(0, fraction_stddev)。默认值:0.01。
  42. - **seed** (int) - 原始随机种子,如果seed=0随机正态将使用安全随机数。如果seed!=0随机正态将使用给定的种子生成值。默认值:0。
  43. 返回:
  44. - **Tensor** - 更新后的梯度裁剪阈值。
  45. .. py:method:: construct(empirical_fraction, norm_bound)
  46. 更新 `norm_bound` 的值。
  47. 参数:
  48. - **empirical_fraction** (Tensor) - 梯度裁剪的经验分位数,最大值不超过 `target_unclipped_quantile` 。
  49. - **norm_bound** (Tensor) - 梯度的l2范数的裁剪范围。
  50. 返回:
  51. - **Tensor** - 生成的shape与给定梯度相同的噪声。
  52. .. py:class:: mindarmour.privacy.diff_privacy.NoiseMechanismsFactory
  53. 噪声产生机制的工厂类。它目前支持高斯随机噪声(Gaussian Random Noise)和自适应高斯随机噪声(Adaptive Gaussian Random Noise)。
  54. 详情请查看: `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_differential_privacy.html#%E5%B7%AE%E5%88%86%E9%9A%90%E7%A7%81>`_。
  55. .. py:method:: create(mech_name, norm_bound=1.0, initial_noise_multiplier=1.0, seed=0, noise_decay_rate=6e-6, decay_policy=None)
  56. 参数:
  57. - **mech_name** (str) - 噪声生成策略,可以是'Gaussian'或'AdaGaussian'。噪声在'AdaGaussian'机制下衰减,而在'Gaussian'机制下则恒定。
  58. - **norm_bound** (float) - 梯度的l2范数的裁剪范围。默认值:1.0。
  59. - **initial_noise_multiplier** (float) - 高斯噪声标准偏差除以 `norm_bound` 的比率,将用于计算隐私预算。默认值:1.0。
  60. - **seed** (int) - 原始随机种子,如果seed=0随机正态将使用安全随机数。如果seed!=0随机正态将使用给定的种子生成值。默认值:0。
  61. - **noise_decay_rate** (float) - 控制噪声衰减的超参数。默认值:6e-6。
  62. - **decay_policy** (str) - 衰减策略。如果decay_policy为None,则不需要更新参数。默认值:None。
  63. 返回:
  64. - **Mechanisms** - 产生的噪声类别机制。
  65. 异常:
  66. - **NameError** - `mech_name` 必须在['Gaussian', 'AdaGaussian']中。
  67. .. py:class:: mindarmour.privacy.diff_privacy.ClipMechanismsFactory
  68. 梯度剪裁机制的工厂类。它目前支持高斯随机噪声(Gaussian Random Noise)的自适应剪裁(Adaptive Clipping)。
  69. 详情请查看: `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_differential_privacy.html#%E5%B7%AE%E5%88%86%E9%9A%90%E7%A7%81>`_。
  70. .. py:method:: create(mech_name, decay_policy='Linear', learning_rate=0.001, target_unclipped_quantile=0.9, fraction_stddev=0.01, seed=0)
  71. 参数:
  72. - **mech_name** (str) - 噪声裁剪生成策略,现支持'Gaussian'。
  73. - **decay_policy** (str) - 自适应剪裁的衰变策略,decay_policy必须在['Linear', 'Geometric']中。默认值:Linear。
  74. - **learning_rate** (float) - 更新范数裁剪的学习率。默认值:0.001。
  75. - **target_unclipped_quantile** (float) - 范数裁剪的目标分位数。默认值:0.9。
  76. - **fraction_stddev** (float) - 高斯正态的stddev,用于empirical_fraction,公式为 :math:`empirical\_fraction + N(0, fraction\_stddev)` 。默认值:0.01。
  77. - **seed** (int) - 原始随机种子,如果seed=0随机正态将使用安全随机数。如果seed!=0随机正态将使用给定的种子生成值。默认值:0。
  78. 返回:
  79. - **Mechanisms** - 产生的噪声类别机制。
  80. 异常:
  81. - **NameError** - `mech_name` 必须在['Gaussian']中。
  82. .. py:class:: mindarmour.privacy.diff_privacy.PrivacyMonitorFactory
  83. DP训练隐私监视器的工厂类。
  84. 详情请查看: `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_differential_privacy.html#%E5%B7%AE%E5%88%86%E9%9A%90%E7%A7%81>`_。
  85. .. py:method:: create(policy, *args, **kwargs)
  86. 创建隐私预算监测类。
  87. 参数:
  88. - **policy** (str) - 监控策略,现支持'rdp'和'zcdp'。
  89. - 如果策略为'rdp',监控器将根据Renyi差分隐私(Renyi differential privacy,RDP)理论计算DP训练的隐私预算;
  90. - 如果策略为'zcdp',监控器将根据零集中差分隐私(zero-concentrated differential privacy,zCDP)理论计算DP训练的隐私预算。注意,'zcdp'不适合子采样噪声机制。
  91. - **args** (Union[int, float, numpy.ndarray, list, str]) - 用于创建隐私监视器的参数。
  92. - **kwargs** (Union[int, float, numpy.ndarray, list, str]) - 用于创建隐私监视器的关键字参数。
  93. 返回:
  94. - **Callback** - 隐私监视器。
  95. .. py:class:: mindarmour.privacy.diff_privacy.RDPMonitor(num_samples, batch_size, initial_noise_multiplier=1.5, max_eps=10.0, target_delta=1e-3, max_delta=None, target_eps=None, orders=None, noise_decay_mode='Time', noise_decay_rate=6e-4, per_print_times=50, dataset_sink_mode=False)
  96. 基于Renyi差分隐私(RDP)理论,计算DP训练的隐私预算。根据下面的参考文献,如果随机化机制被认为具有α阶的ε'-Renyi差分隐私,它也满足常规差分隐私(ε, δ),如下所示:
  97. .. math::
  98. (ε'+\frac{log(1/δ)}{α-1}, δ)
  99. 详情请查看: `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_differential_privacy.html#%E5%B7%AE%E5%88%86%E9%9A%90%E7%A7%81>`_。
  100. 参考文献: `Rényi Differential Privacy of the Sampled Gaussian Mechanism <https://arxiv.org/abs/1908.10530>`_。
  101. 参数:
  102. - **num_samples** (int) - 训练数据集中的样本总数。
  103. - **batch_size** (int) - 训练时批处理中的样本数。
  104. - **initial_noise_multiplier** (Union[float, int]) - 高斯噪声标准偏差除以norm_bound的比率,将用于计算隐私预算。默认值:1.5。
  105. - **max_eps** (Union[float, int, None]) - DP训练的最大可接受epsilon预算,用于估计最大训练epoch。'None'表示epsilon预算没有限制。默认值:10.0。
  106. - **target_delta** (Union[float, int, None]) - DP训练的目标delta预算。如果 `target_delta` 设置为δ,则隐私预算δ将在整个训练过程中是固定的。默认值:1e-3。
  107. - **max_delta** (Union[float, int, None]) - DP训练的最大可接受delta预算,用于估计最大训练epoch。 `max_delta` 必须小于1,建议小于1e-3,否则会溢出。'None'表示delta预算没有限制。默认值:None。
  108. - **target_eps** (Union[float, int, None]) - DP训练的目标epsilon预算。如果target_eps设置为ε,则隐私预算ε将在整个训练过程中是固定的。默认值:None。
  109. - **orders** (Union[None, list[int, float]]) - 用于计算rdp的有限阶数,必须大于1。不同阶的隐私预算计算结果会有所不同。为了获得更严格(更小)的隐私预算估计,可以尝试阶列表。默认值:None。
  110. - **noise_decay_mode** (Union[None, str]) - 训练时添加噪音的衰减模式,可以是None、'Time'、'Step'、'Exp'。默认值:'Time'。
  111. - **noise_decay_rate** (float) - 训练时噪音的衰变率。默认值:6e-4。
  112. - **per_print_times** (int) - 计算和打印隐私预算的间隔步数。默认值:50。
  113. - **dataset_sink_mode** (bool) - 如果为True,所有训练数据都将一次性传递到设备(Ascend)。如果为False,则训练数据将在每步训练后传递到设备。默认值:False。
  114. .. py:method:: max_epoch_suggest()
  115. 估计最大训练epoch,以满足预定义的隐私预算。
  116. 返回:
  117. - **int** - 建议的最大训练epoch。
  118. .. py:method:: step_end(run_context)
  119. 在每个训练步骤后计算隐私预算。
  120. 参数:
  121. - **run_context** (RunContext) - 包含模型的一些信息。
  122. .. py:class:: mindarmour.privacy.diff_privacy.ZCDPMonitor(num_samples, batch_size, initial_noise_multiplier=1.5, max_eps=10.0, target_delta=1e-3, noise_decay_mode='Time', noise_decay_rate=6e-4, per_print_times=50, dataset_sink_mode=False)
  123. 基于零集中差分隐私(zCDP)理论,计算DP训练的隐私预算。根据下面的参考文献,如果随机化机制满足ρ-zCDP机制,它也满足传统的差分隐私(ε, δ),如下所示:
  124. .. math::
  125. (ρ+2\sqrt{ρ*log(1/δ)}, δ)
  126. 注意,ZCDPMonitor不适合子采样噪声机制(如NoiseAdaGaussianRandom和NoiseGaussianRandom)。未来将开发zCDP的匹配噪声机制。
  127. 详情请查看:`教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_differential_privacy.html#%E5%B7%AE%E5%88%86%E9%9A%90%E7%A7%81>`_。
  128. 参考文献:`Concentrated Differentially Private Gradient Descent with Adaptive per-Iteration Privacy Budget <https://arxiv.org/abs/1808.09501>`_。
  129. 参数:
  130. - **num_samples** (int) - 训练数据集中的样本总数。
  131. - **batch_size** (int) - 训练时批处理中的样本数。
  132. - **initial_noise_multiplier** (Union[float, int]) - 高斯噪声标准偏差除以norm_bound的比率,将用于计算隐私预算。默认值:1.5。
  133. - **max_eps** (Union[float, int]) - DP训练的最大可接受epsilon预算,用于估计最大训练epoch。默认值:10.0。
  134. - **target_delta** (Union[float, int]) - DP训练的目标delta预算。如果 `target_delta` 设置为δ,则隐私预算δ将在整个训练过程中是固定的。默认值:1e-3。
  135. - **noise_decay_mode** (Union[None, str]) - 训练时添加噪音的衰减模式,可以是None、'Time'、'Step'、'Exp'。默认值:'Time'。
  136. - **noise_decay_rate** (float) - 训练时噪音的衰变率。默认值:6e-4。
  137. - **per_print_times** (int) - 计算和打印隐私预算的间隔步数。默认值:50。
  138. - **dataset_sink_mode** (bool) - 如果为True,所有训练数据都将一次性传递到设备(Ascend)。如果为False,则训练数据将在每步训练后传递到设备。默认值:False。
  139. .. py:method:: max_epoch_suggest()
  140. 估计最大训练epoch,以满足预定义的隐私预算。
  141. 返回:
  142. - **int** - 建议的最大训练epoch。
  143. .. py:method:: step_end(run_context)
  144. 在每个训练步骤后计算隐私预算。
  145. 参数:
  146. - **run_context** (RunContext) - 包含模型的一些信息。
  147. .. py:class:: mindarmour.privacy.diff_privacy.DPOptimizerClassFactory(micro_batches=2)
  148. 优化器的工厂类。
  149. 参数:
  150. - **micro_batches** (int) - 从原始批次拆分的小批次中的样本数量。默认值:2。
  151. 返回:
  152. - **Optimizer** - 优化器类。
  153. .. py:method:: create(policy)
  154. 创建DP优化器。策略可以是'sgd'、'momentum'、'adam'。
  155. 参数:
  156. - **policy** (str) - 选择原始优化器类型。
  157. 返回:
  158. - **Optimizer** - 一个带有差分加噪的优化器。
  159. .. py:method:: set_mechanisms(policy, *args, **kwargs)
  160. 获取噪音机制对象。策略可以是'Gaussian'或'AdaGaussian'。候选的args和kwargs可以在mechanisms.py
  161. 的 :class:`NoiseMechanismsFactory` 类中看到。
  162. 参数:
  163. - **policy** (str) - 选择机制类型。
  164. .. py:class:: mindarmour.privacy.diff_privacy.DPModel(micro_batches=2, norm_bound=1.0, noise_mech=None, clip_mech=None, optimizer=nn.Momentum, **kwargs)
  165. DPModel用于构建差分隐私训练的模型。
  166. 这个类重载自 :class:`mindspore.Model` 。
  167. 详情请查看: `教程 <https://mindspore.cn/mindarmour/docs/zh-CN/master/protect_user_privacy_with_differential_privacy.html#%E5%B7%AE%E5%88%86%E9%9A%90%E7%A7%81>`_。
  168. 参数:
  169. - **micro_batches** (int) - 从原始批次拆分的小批次数。默认值:2。
  170. - **norm_bound** (float) - 用于裁剪范围,如果设置为1,将返回原始数据。默认值:1.0。
  171. - **noise_mech** (Mechanisms) - 用于生成不同类型的噪音。默认值:None。
  172. - **clip_mech** (Mechanisms) - 用于更新自适应剪裁。默认值:None。
  173. - **optimizer** (Cell) - 用于更新差分隐私训练过程中的模型权重值。默认值:nn.Momentum。
  174. 异常:
  175. - **ValueError** - optimizer值为None。
  176. - **ValueError** - optimizer不是DPOptimizer,且noise_mech为None。
  177. - **ValueError** - optimizer是DPOptimizer,且noise_mech非None。
  178. - **ValueError** - noise_mech或DPOptimizer的mech方法是自适应的,而clip_mech不是None。

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