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.adv_robustness.detectors.rst 13 kB

3 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
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
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
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 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
2 years ago
3 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
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 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
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 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
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
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. mindarmour.adv_robustness.detectors
  2. ===================================
  3. 此模块是用于区分对抗样本和良性样本的检测器方法。
  4. .. py:class:: mindarmour.adv_robustness.detectors.ErrorBasedDetector(auto_encoder, false_positive_rate=0.01, bounds=(0.0, 1.0))
  5. 检测器重建输入样本,测量重建误差,并拒绝重建误差大的样本。
  6. 参考文献: `MagNet: a Two-Pronged Defense against Adversarial Examples, by Dongyu Meng and Hao Chen, at CCS 2017. <https://arxiv.org/abs/1705.09064>`_。
  7. 参数:
  8. - **auto_encoder** (Model) - 一个(训练过的)自动编码器,对输入图片进行重构。
  9. - **false_positive_rate** (float) - 检测器的误报率。默认值:0.01。
  10. - **bounds** (tuple) - (clip_min, clip_max)。默认值:(0.0, 1.0)。
  11. .. py:method:: detect(inputs)
  12. 检测输入样本是否具有对抗性。
  13. 参数:
  14. - **inputs** (numpy.ndarray) - 待判断的可疑样本。
  15. 返回:
  16. - **list[int]** - 样本是否具有对抗性。如果res[i]=1,则索引为i的输入样本是对抗性的。
  17. .. py:method:: detect_diff(inputs)
  18. 检测原始样本和重建样本之间的距离。
  19. 参数:
  20. - **inputs** (numpy.ndarray) - 输入样本。
  21. 返回:
  22. - **float** - 重建样本和原始样本之间的距离。
  23. .. py:method:: fit(inputs, labels=None)
  24. 查找给定数据集的阈值,以区分对抗样本。
  25. 参数:
  26. - **inputs** (numpy.ndarray) - 输入样本。
  27. - **labels** (numpy.ndarray) - 输入样本的标签。默认值:None。
  28. 返回:
  29. - **float** - 区分对抗样本和良性样本的阈值。
  30. .. py:method:: set_threshold(threshold)
  31. 设置阈值。
  32. 参数:
  33. - **threshold** (float) - 检测阈值。
  34. .. py:method:: transform(inputs)
  35. 重建输入样本。
  36. 参数:
  37. - **inputs** (numpy.ndarray) - 输入样本。
  38. 返回:
  39. - **numpy.ndarray** - 重建图像。
  40. .. py:class:: mindarmour.adv_robustness.detectors.DivergenceBasedDetector(auto_encoder, model, option='jsd', t=1, bounds=(0.0, 1.0))
  41. 基于发散的检测器学习通过js发散来区分正常样本和对抗样本。
  42. 参考文献: `MagNet: a Two-Pronged Defense against Adversarial Examples, by Dongyu Meng and Hao Chen, at CCS 2017. <https://arxiv.org/abs/1705.09064>`_。
  43. 参数:
  44. - **auto_encoder** (Model) - 编码器模型。
  45. - **model** (Model) - 目标模型。
  46. - **option** (str) - 用于计算发散的方法。默认值:'jsd'。
  47. - **t** (int) - 用于克服数值问题的温度。默认值:1。
  48. - **bounds** (tuple) - 数据的上下界。以(clip_min, clip_max)的形式出现。默认值:(0.0, 1.0)。
  49. .. py:method:: detect_diff(inputs)
  50. 检测原始样本和重建样本之间的距离。
  51. 距离由JSD计算。
  52. 参数:
  53. - **inputs** (numpy.ndarray) - 输入样本。
  54. 返回:
  55. - **float** - 距离。
  56. 异常:
  57. - **NotImplementedError** - 不支持参数 `option` 。
  58. .. py:class:: mindarmour.adv_robustness.detectors.RegionBasedDetector(model, number_points=10, initial_radius=0.0, max_radius=1.0, search_step=0.01, degrade_limit=0.0, sparse=False)
  59. 基于区域的检测器利用对抗样本靠近分类边界的事实,并通过集成给定示例周围的信息,以检测输入是否为对抗样本。
  60. 参考文献: `Mitigating evasion attacks to deep neural networks via region-based classification <https://arxiv.org/abs/1709.05583>`_。
  61. 参数:
  62. - **model** (Model) - 目标模型。
  63. - **number_points** (int) - 从原始样本的超立方体生成的样本数。默认值:10。
  64. - **initial_radius** (float) - 超立方体的初始半径。默认值:0.0。
  65. - **max_radius** (float) - 超立方体的最大半径。默认值:1.0。
  66. - **search_step** (float) - 半径搜索增量。默认值:0.01。
  67. - **degrade_limit** (float) - 分类精度的可接受下降。默认值:0.0。
  68. - **sparse** (bool) - 如果为True,则输入标签为稀疏编码。如果为False,则输入标签为onehot编码。默认值:False。
  69. .. py:method:: detect(inputs)
  70. 判断输入样本是否具有对抗性。
  71. 参数:
  72. - **inputs** (numpy.ndarray) - 待判断的可疑样本。
  73. 返回:
  74. - **list[int]** - 样本是否具有对抗性。如果res[i]=1,则索引为i的输入样本是对抗性的。
  75. .. py:method:: detect_diff(inputs)
  76. 返回原始预测结果和基于区域的预测结果。
  77. 参数:
  78. - **inputs** (numpy.ndarray) - 输入样本。
  79. 返回:
  80. - **numpy.ndarray** - 输入样本的原始预测结果和基于区域的预测结果。
  81. .. py:method:: fit(inputs, labels=None)
  82. 训练检测器来决定最佳半径。
  83. 参数:
  84. - **inputs** (numpy.ndarray) - 良性样本。
  85. - **labels** (numpy.ndarray) - 输入样本的ground truth标签。默认值:None。
  86. 返回:
  87. - **float** - 最佳半径。
  88. .. py:method:: set_radius(radius)
  89. 设置半径。
  90. 参数:
  91. - **radius** (float) - 区域的半径。
  92. .. py:method:: transform(inputs)
  93. 为输入样本生成超级立方体。
  94. 参数:
  95. - **inputs** (numpy.ndarray) - 输入样本。
  96. 返回:
  97. - **numpy.ndarray** - 每个样本对应的超立方体。
  98. .. py:class:: mindarmour.adv_robustness.detectors.SpatialSmoothing(model, ksize=3, is_local_smooth=True, metric='l1', false_positive_ratio=0.05)
  99. 基于空间平滑的检测方法。
  100. 使用高斯滤波、中值滤波和均值滤波,模糊原始图像。当模型在样本模糊前后的预测值之间有很大的阈值差异时,将其判断为对抗样本。
  101. 参数:
  102. - **model** (Model) - 目标模型。
  103. - **ksize** (int) - 平滑窗口大小。默认值:3。
  104. - **is_local_smooth** (bool) - 如果为True,则触发局部平滑。如果为False,则无局部平滑。默认值:True。
  105. - **metric** (str) - 距离方法。默认值:'l1'。
  106. - **false_positive_ratio** (float) - 良性样本上的假正率。默认值:0.05。
  107. .. py:method:: detect(inputs)
  108. 检测输入样本是否为对抗样本。
  109. 参数:
  110. - **inputs** (numpy.ndarray) - 待判断的可疑样本。
  111. 返回:
  112. - **list[int]** - 样本是否具有对抗性。如果res[i]=1,则索引为i的输入样本是对抗样本。
  113. .. py:method:: detect_diff(inputs)
  114. 返回输入样本与其平滑对应样本之间的原始距离值(在应用阈值之前)。
  115. 参数:
  116. - **inputs** (numpy.ndarray) - 待判断的可疑样本。
  117. 返回:
  118. - **float** - 距离。
  119. .. py:method:: fit(inputs, labels=None)
  120. 训练检测器来决定阈值。适当的阈值能够确保良性样本上的实际假正率小于给定值。
  121. 参数:
  122. - **inputs** (numpy.ndarray) - 良性样本。
  123. - **labels** (numpy.ndarray) - 默认None。
  124. 返回:
  125. - **float** - 阈值,大于该距离的距离报告为正,即对抗性。
  126. .. py:method:: set_threshold(threshold)
  127. 设置阈值。
  128. 参数:
  129. - **threshold** (float) - 检测阈值。
  130. .. py:class:: mindarmour.adv_robustness.detectors.EnsembleDetector(detectors, policy='vote')
  131. 集合检测器,通过检测器列表从输入样本中检测对抗样本。
  132. 参数:
  133. - **detectors** (Union[tuple, list]) - 检测器方法列表。
  134. - **policy** (str) - 决策策略,取值可为'vote'、'all'、'any'。默认值:'vote'
  135. .. py:method:: detect(inputs)
  136. 从输入样本中检测对抗性示例。
  137. 参数:
  138. - **inputs** (numpy.ndarray) - 输入样本。
  139. 返回:
  140. - **list[int]** - 样本是否具有对抗性。如果res[i]=1,则索引为i的输入样本是对抗样本。
  141. 异常:
  142. - **ValueError** - 不支持策略。
  143. .. py:method:: detect_diff(inputs)
  144. 此方法在此类中不可用。
  145. 参数:
  146. - **inputs** (Union[numpy.ndarray, list, tuple]) - 用于创建对抗样本。
  147. 异常:
  148. - **NotImplementedError** - 此函数在集成中不可用。
  149. .. py:method:: fit(inputs, labels=None)
  150. 像机器学习模型一样拟合检测器。此方法在此类中不可用。
  151. 参数:
  152. - **inputs** (numpy.ndarray) - 计算阈值的数据。
  153. - **labels** (numpy.ndarray) - 数据的标签。默认值:None。
  154. 异常:
  155. - **NotImplementedError** - 此函数在集成中不可用。
  156. .. py:method:: transform(inputs)
  157. 过滤输入样本中的对抗性噪声。
  158. 此方法在此类中不可用。
  159. 参数:
  160. - **inputs** (Union[numpy.ndarray, list, tuple]) - 用于创建对抗样本。
  161. 异常:
  162. - **NotImplementedError** - 此函数在集成中不可用。
  163. .. py:class:: mindarmour.adv_robustness.detectors.SimilarityDetector(trans_model, max_k_neighbor=1000, chunk_size=1000, max_buffer_size=10000, tuning=False, fpr=0.001)
  164. 检测器测量相邻查询之间的相似性,并拒绝与以前的查询非常相似的查询。
  165. 参考文献: `Stateful Detection of Black-Box Adversarial Attacks by Steven Chen, Nicholas Carlini, and David Wagner. at arxiv 2019 <https://arxiv.org/abs/1907.05587>`_。
  166. 参数:
  167. - **trans_model** (Model) - 一个MindSpore模型,将输入数据编码为低维向量。
  168. - **max_k_neighbor** (int) - 最近邻的最大数量。默认值:1000。
  169. - **chunk_size** (int) - 缓冲区大小。默认值:1000。
  170. - **max_buffer_size** (int) - 最大缓冲区大小。默认值:10000。
  171. - **tuning** (bool) - 计算k个最近邻的平均距离。
  172. - 如果'tuning'为true,k= `max_k_neighbor` 。
  173. - 如果为False,k=1,..., `max_k_neighbor` 。默认值:False。
  174. - **fpr** (float) - 合法查询序列上的误报率。默认值:0.001
  175. .. py:method:: clear_buffer()
  176. 清除缓冲区内存。
  177. .. py:method:: detect(inputs)
  178. 处理查询以检测黑盒攻击。
  179. 参数:
  180. - **inputs** (numpy.ndarray) - 查询序列。
  181. 异常:
  182. - **ValueError** - 阈值或set_threshold方法中 `num_of_neighbors` 参数不可用。
  183. .. py:method:: detect_diff(inputs)
  184. 从输入样本中检测对抗样本,如常见机器学习模型中的predict_proba函数。
  185. 参数:
  186. - **inputs** (Union[numpy.ndarray, list, tuple]) - 用于创建对抗样本。
  187. 异常:
  188. - **NotImplementedError** - 此函数在 `SimilarityDetector` 类(class)中不可用。
  189. .. py:method:: fit(inputs, labels=None)
  190. 处理输入训练数据以计算阈值。
  191. 适当的阈值应确保假正率低于给定值。
  192. 参数:
  193. - **inputs** (numpy.ndarray) - 用于计算阈值的训练数据。
  194. - **labels** (numpy.ndarray) - 训练数据的标签。
  195. 返回:
  196. - **list[int]** - 最近邻的数量。
  197. - **list[float]** - 不同k的阈值。
  198. 异常:
  199. - **ValueError** - 训练数据个数小于 `max_k_neighbor`。
  200. .. py:method:: get_detected_queries()
  201. 获取检测到的查询的索引。
  202. 返回:
  203. - **list[int]** - 检测到的恶意查询的序列号。
  204. .. py:method:: get_detection_interval()
  205. 获取相邻检测之间的间隔。
  206. 返回:
  207. - **list[int]** - 相邻检测之间的查询数。
  208. .. py:method:: set_threshold(num_of_neighbors, threshold)
  209. 设置参数num_of_neighbors和threshold。
  210. 参数:
  211. - **num_of_neighbors** (int) - 最近邻的数量。
  212. - **threshold** (float) - 检测阈值。
  213. .. py:method:: transform(inputs)
  214. 过滤输入样本中的对抗性噪声。
  215. 参数:
  216. - **inputs** (Union[numpy.ndarray, list, tuple]) - 用于创建对抗样本。
  217. 异常:
  218. - **NotImplementedError** - 此函数在 `SimilarityDetector` 类(class)中不可用。

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