From 5730d8d72705c7adb66196b184cf419cdce9234b Mon Sep 17 00:00:00 2001 From: jin-xiulang Date: Tue, 5 Jul 2022 14:05:52 +0800 Subject: [PATCH] fix api problems --- .../api_python/mindarmour.privacy.diff_privacy.rst | 44 ++++++++++-------- .../api_python/mindarmour.privacy.evaluation.rst | 41 ++++++++--------- .../api_python/mindarmour.privacy.sup_privacy.rst | 18 ++++---- docs/api/api_python/mindarmour.rst | 53 +++++++++++----------- mindarmour/privacy/diff_privacy/train/model.py | 21 ++++++--- .../privacy/evaluation/membership_inference.py | 5 +- mindarmour/privacy/sup_privacy/sup_ctrl/conctrl.py | 8 ++-- mindarmour/privacy/sup_privacy/train/model.py | 5 +- 8 files changed, 102 insertions(+), 93 deletions(-) diff --git a/docs/api/api_python/mindarmour.privacy.diff_privacy.rst b/docs/api/api_python/mindarmour.privacy.diff_privacy.rst index 7ba6454..15cd9c5 100644 --- a/docs/api/api_python/mindarmour.privacy.diff_privacy.rst +++ b/docs/api/api_python/mindarmour.privacy.diff_privacy.rst @@ -5,18 +5,18 @@ mindarmour.privacy.diff_privacy .. py:class:: mindarmour.privacy.diff_privacy.NoiseGaussianRandom(norm_bound=1.0, initial_noise_multiplier=1.0, seed=0, decay_policy=None) - 基于高斯机制产生噪声,方法是 :math:`mean=0` 以及 :math:`standard\_deviation = norm\_bound * initial\_noise\_multiplier` 。 + 基于 :math:`mean=0` 以及 :math:`standard\_deviation = norm\_bound * initial\_noise\_multiplier` 的高斯分布产生噪声。 **参数:** - **norm_bound** (float)- 梯度的l2范数的裁剪范围。默认值:1.0。 - - **initial_noise_multiplier** (float)- 高斯噪声标准偏差除以norm_bound的比率,将用于计算隐私预算。默认值:1.0。 + - **initial_noise_multiplier** (float)- 高斯噪声标准偏差除以 `norm_bound` 的比率,将用于计算隐私预算。默认值:1.0。 - **seed** (int)- 原始随机种子,如果seed=0随机正态将使用安全随机数。如果seed!=0随机正态将使用给定的种子生成值。默认值:0。 - **decay_policy** (str)- 衰减策略。默认值:None。 .. py:method:: construct(gradients) - 产生的高斯噪声。 + 产生高斯噪声。 **参数:** @@ -34,14 +34,14 @@ mindarmour.privacy.diff_privacy **参数:** - **norm_bound** (float) - 梯度的l2范数的裁剪范围。默认值:1.0。 - - **initial_noise_multiplier** (float) - 高斯噪声标准偏差除以norm_bound的比率,将用于计算隐私预算。默认值:1.0。 + - **initial_noise_multiplier** (float) - 高斯噪声标准偏差除以 `norm_bound` 的比率,将用于计算隐私预算。默认值:1.0。 - **seed** (int) - 原始随机种子,如果seed=0随机正态将使用安全随机数。如果seed!=0随机正态将使用给定的种子生成值。默认值:0。 - **noise_decay_rate** (float) - 控制噪声衰减的超参数。默认值:6e-6。 - **decay_policy** (str) - 噪声衰减策略包括'Step'、'Time'、'Exp'。默认值:'Exp'。 .. py:method:: construct(gradients) - 生成的自适应高斯噪声。 + 生成自适应高斯噪声。 **参数:** @@ -53,9 +53,10 @@ mindarmour.privacy.diff_privacy .. 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) - 自适应剪裁。如果 `deay_policy` 是'Linear',则更新公式 :math:`norm\_bound = norm\_bound - learning\_rate*(beta - target\_unclipped\_quantile)` 。 + 自适应剪裁。 + 如果 `decay_policy` 是'Linear',则更新公式为::math:`norm\_bound = norm\_bound - learning\_rate*(beta - target\_unclipped\_quantile)` 。 - 如果 `deay_policy` 是'Geometric',则更新公式为 :math:`norm\_bound = norm\_bound*exp(-learning\_rate*(empirical\_fraction - target\_unclipped\_quantile))` 。 + 如果 `decay_policy` 是'Geometric',则更新公式为 :math:`norm\_bound = norm\_bound*exp(-learning\_rate*(empirical\_fraction - target\_unclipped\_quantile))` 。 其中,beta是值最多为 `target_unclipped_quantile` 的样本的经验分数。 @@ -73,7 +74,7 @@ mindarmour.privacy.diff_privacy .. py:method:: construct(empirical_fraction, norm_bound) - 更新norm_bound的值。 + 更新 `norm_bound` 的值。 **参数:** @@ -96,7 +97,7 @@ mindarmour.privacy.diff_privacy - **mech_name** (str) - 噪声生成策略,可以是'Gaussian'或'AdaGaussian'。噪声在'AdaGaussian'机制下衰减,而在'Gaussian'机制下则恒定。 - **norm_bound** (float) - 梯度的l2范数的裁剪范围。默认值:1.0。 - - **initial_noise_multiplier** (float) - 高斯噪声标准偏差除以norm_bound的比率,将用于计算隐私预算。默认值:1.0。 + - **initial_noise_multiplier** (float) - 高斯噪声标准偏差除以 `norm_bound` 的比率,将用于计算隐私预算。默认值:1.0。 - **seed** (int) - 原始随机种子,如果seed=0随机正态将使用安全随机数。如果seed!=0随机正态将使用给定的种子生成值。默认值:0。 - **noise_decay_rate** (float) - 控制噪声衰减的超参数。默认值:6e-6。 - **decay_policy** (str) - 衰减策略。如果decay_policy为None,则不需要更新参数。默认值:None。 @@ -147,6 +148,7 @@ mindarmour.privacy.diff_privacy **参数:** - **policy** (str) - 监控策略,现支持'rdp'和'zcdp'。 + - 如果策略为'rdp',监控器将根据Renyi差分隐私(Renyi differential privacy,RDP)理论计算DP训练的隐私预算; - 如果策略为'zcdp',监控器将根据零集中差分隐私(zero-concentrated differential privacy,zCDP)理论计算DP训练的隐私预算。注意,'zcdp'不适合子采样噪声机制。 - **args** (Union[int, float, numpy.ndarray, list, str]) - 用于创建隐私监视器的参数。 @@ -173,8 +175,8 @@ mindarmour.privacy.diff_privacy - **batch_size** (int) - 训练时批处理中的样本数。 - **initial_noise_multiplier** (Union[float, int]) - 高斯噪声标准偏差除以norm_bound的比率,将用于计算隐私预算。默认值:1.5。 - **max_eps** (Union[float, int, None]) - DP训练的最大可接受epsilon预算,用于估计最大训练epoch。'None'表示epsilon预算没有限制。默认值:10.0。 - - **target_delta** (Union[float, int, None]) - DP训练的目标delta预算。如果target_delta设置为δ,则隐私预算δ将在整个训练过程中是固定的。默认值:1e-3。 - - **max_delta** (Union[float, int, None]) - DP训练的最大可接受delta预算,用于估计最大训练epoch。max_delta必须小于1,建议小于1e-3,否则会溢出。'None'表示delta预算没有限制。默认值:None。 + - **target_delta** (Union[float, int, None]) - DP训练的目标delta预算。如果 `target_delta` 设置为δ,则隐私预算δ将在整个训练过程中是固定的。默认值:1e-3。 + - **max_delta** (Union[float, int, None]) - DP训练的最大可接受delta预算,用于估计最大训练epoch。 `max_delta` 必须小于1,建议小于1e-3,否则会溢出。'None'表示delta预算没有限制。默认值:None。 - **target_eps** (Union[float, int, None]) - DP训练的目标epsilon预算。如果target_eps设置为ε,则隐私预算ε将在整个训练过程中是固定的。默认值:None。 - **orders** (Union[None, list[int, float]]) - 用于计算rdp的有限阶数,必须大于1。不同阶的隐私预算计算结果会有所不同。为了获得更严格(更小)的隐私预算估计,可以尝试阶列表。默认值:None。 - **noise_decay_mode** (Union[None, str]) - 训练时添加噪音的衰减模式,可以是None、'Time'、'Step'、'Exp'。默认值:'Time'。 @@ -207,7 +209,7 @@ mindarmour.privacy.diff_privacy 注意,ZCDPMonitor不适合子采样噪声机制(如NoiseAdaGaussianRandom和NoiseGaussianRandom)。未来将开发zCDP的匹配噪声机制。 - 详情请查看: `教程 `_。 + 详情请查看:`教程 `_。 参考文献:`Concentrated Differentially Private Gradient Descent with Adaptive per-Iteration Privacy Budget `_。 @@ -217,7 +219,7 @@ mindarmour.privacy.diff_privacy - **batch_size** (int) - 训练时批处理中的样本数。 - **initial_noise_multiplier** (Union[float, int]) - 高斯噪声标准偏差除以norm_bound的比率,将用于计算隐私预算。默认值:1.5。 - **max_eps** (Union[float, int]) - DP训练的最大可接受epsilon预算,用于估计最大训练epoch。默认值:10.0。 - - **target_delta** (Union[float, int]) - DP训练的目标delta预算。如果target_delta设置为δ,则隐私预算δ将在整个训练过程中是固定的。默认值:1e-3。 + - **target_delta** (Union[float, int]) - DP训练的目标delta预算。如果 `target_delta` 设置为δ,则隐私预算δ将在整个训练过程中是固定的。默认值:1e-3。 - **noise_decay_mode** (Union[None, str]) - 训练时添加噪音的衰减模式,可以是None、'Time'、'Step'、'Exp'。默认值:'Time'。 - **noise_decay_rate** (float) - 训练时噪音的衰变率。默认值:6e-4。 - **per_print_times** (int) - 计算和打印隐私预算的间隔步数。默认值:50。 @@ -265,7 +267,8 @@ mindarmour.privacy.diff_privacy .. py:method:: set_mechanisms(policy, *args, **kwargs) - 获取噪音机制对象。策略可以是'Gaussian'或'AdaGaussian'。候选的args和kwargs可以在mechanisms.py的NoiseMechanismsFactory类中看到。 + 获取噪音机制对象。策略可以是'Gaussian'或'AdaGaussian'。候选的args和kwargs可以在mechanisms.py + 的 :class:`NoiseMechanismsFactory` 类中看到。 **参数:** @@ -275,7 +278,7 @@ mindarmour.privacy.diff_privacy DPModel用于构建差分隐私训练的模型。 - 这个类重载自Mindpore.train.model.Model。 + 这个类重载自 :class:`mindspore.Model` 。 详情请查看: `教程 `_。 @@ -283,10 +286,13 @@ mindarmour.privacy.diff_privacy - **micro_batches** (int) - 从原始批次拆分的小批次数。默认值:2。 - **norm_bound** (float) - 用于裁剪范围,如果设置为1,将返回原始数据。默认值:1.0。 - - **noise_mech** (Mechanisms) - 对象可以生成不同类型的噪音。默认值:None。 - - **clip_mech** (Mechanisms) - 该对象用于更新自适应剪裁。默认值:None。 + - **noise_mech** (Mechanisms) - 用于生成不同类型的噪音。默认值:None。 + - **clip_mech** (Mechanisms) - 用于更新自适应剪裁。默认值:None。 + - **optimizer** (Cell) - 用于更新差分隐私训练过程中的模型权重值。默认值:nn.Momentum。 **异常:** - - **ValueError** - DPOptimizer和noise_mech都为None或非None。 - - **ValueError** - noise_mech或DPOtimizer的mech方法是自适应的,而clip_mech不是None。 + - **ValueError** - optimizer值为None。 + - **ValueError** - optimizer不是DPOptimizer,且noise_mech为None。 + - **ValueError** - optimizer是DPOptimizer,且noise_mech非None。 + - **ValueError** - noise_mech或DPOptimizer的mech方法是自适应的,而clip_mech不是None。 diff --git a/docs/api/api_python/mindarmour.privacy.evaluation.rst b/docs/api/api_python/mindarmour.privacy.evaluation.rst index 286dcad..76600bc 100644 --- a/docs/api/api_python/mindarmour.privacy.evaluation.rst +++ b/docs/api/api_python/mindarmour.privacy.evaluation.rst @@ -5,10 +5,9 @@ mindarmour.privacy.evaluation .. py:class:: mindarmour.privacy.evaluation.MembershipInference(model, n_jobs=-1) - 成员推理是由Shokri、Stronati、Song和Shmatikov提出的一种用于推断用户隐私数据的灰盒攻击。它需要训练样本的loss或logits结果。 - (隐私是指单个用户的一些敏感属性)。 + 成员推理是由Shokri、Stronati、Song和Shmatikov提出的一种用于推断用户隐私数据的灰盒攻击。它需要训练样本的loss或logits结果,隐私是指单个用户的一些敏感属性。 - 有关详细信息,请参见: `教程 `_。 + 有关详细信息,请参见: `教程 `_。 参考文献:`Reza Shokri, Marco Stronati, Congzheng Song, Vitaly Shmatikov. Membership Inference Attacks against Machine Learning Models. 2017. `_。 @@ -19,9 +18,9 @@ mindarmour.privacy.evaluation **异常:** - - **TypeError** - 模型的类型不是Mindpore.train.Model。 - - **TypeError** - n_jobs的类型不是int。 - - **ValueError** - n_jobs的值既不是-1,也不是正整数。 + - **TypeError** - 模型的类型不是 :class:`mindspore.Model` 。 + - **TypeError** - `n_jobs` 的类型不是int。 + - **ValueError** - `n_jobs` 的值既不是-1,也不是正整数。 .. py:method:: eval(dataset_train, dataset_test, metrics) @@ -42,14 +41,11 @@ mindarmour.privacy.evaluation 根据配置,使用输入数据集训练攻击模型。 - 将攻击模型保存至self._attack_list。 - **参数:** - **dataset_train** (minspore.dataset) - 目标模型的训练数据集。 - **dataset_test** (minspore.dataset) - 目标模型的测试集。 - **attack_config** (Union[list, tuple]) - 攻击模型的参数设置。格式为 - .. code-block:: python attack_config = @@ -57,19 +53,20 @@ mindarmour.privacy.evaluation {"method": "lr", "params": {"C": np.logspace(-4, 2, 10)}}] - 支持的方法有knn、lr、mlp和rf,每个方法的参数必须在可变参数的范围内。参数实现的提示可在下面找到: - - `KNN `_, - - `LR `_, - - `RF `_, - - `MLP `_. + + - `KNN `_ + - `LR `_ + - `RF `_ + - `MLP `_ **异常:** - - **KeyError** - attack_config中的配置没有键{"method", "params"}。 - - **NameError** - attack_config中的方法(不区分大小写)不在["lr", "knn", "rf", "mlp"]中。 + - **KeyError** - `attack_config` 中的配置没有键{"method", "params"}。 + - **NameError** - `attack_config` 中的方法(不区分大小写)不在["lr", "knn", "rf", "mlp"]中。 .. py:class:: mindarmour.privacy.evaluation.ImageInversionAttack(network, input_shape, input_bound, loss_weights=(1, 0.2, 5)) - 一种用于通过还原图像的深层表达来重建图像的攻击方法。 + 一种通过还原图像的深层表达来重建图像的攻击方法。 参考文献:`Aravindh Mahendran, Andrea Vedaldi. Understanding Deep Image Representations by Inverting Them. 2014. `_。 @@ -83,8 +80,8 @@ mindarmour.privacy.evaluation **异常:** - **TypeError** - 网络类型不是Cell。 - - **ValueError** - input_shape的值都不是正int。 - - **ValueError** - loss_weights的值都不是正值。 + - **ValueError** - `input_shape` 的值有非正整数。 + - **ValueError** - `loss_weights` 的值有非正数。 .. py:method:: evaluate(original_images, inversion_images, labels=None, new_network=None) @@ -95,17 +92,17 @@ mindarmour.privacy.evaluation - **original_images** (numpy.ndarray) - 原始图像,其形状应为(img_num, channels, img_width, img_height)。 - **inversion_images** (numpy.ndarray) - 还原图像,其形状应为(img_num, channels, img_width, img_height)。 - **labels** (numpy.ndarray) - 原始图像的ground truth标签。默认值:None。 - - **new_network** (Cell) - 其结构包含self._network所有部分的网络。_network,但加载了不同的模型文件。默认值:None。 + - **new_network** (Cell) - 其结构包含self._network中所有网络,但加载了不同的模型文件。默认值:None。 **返回:** - **float** - l2距离。 - **float** - 平均ssim值。 - - **Union[float, None]** - 平均置信度。如果labels或new_network为 None,则该值为None。 + - **Union[float, None]** - 平均置信度。如果 `labels` 或 `new_network` 为None,则该值为None。 .. py:method:: generate(target_features, iters=100) - 根据target_features重建图像。 + 根据 `target_features` 重建图像。 **参数:** @@ -119,5 +116,5 @@ mindarmour.privacy.evaluation **异常:** - **TypeError** - target_features的类型不是numpy.ndarray。 - - **ValueError** - iters的值都不是正int.Z + - **ValueError** - `iters` 的值都不是正整数. diff --git a/docs/api/api_python/mindarmour.privacy.sup_privacy.rst b/docs/api/api_python/mindarmour.privacy.sup_privacy.rst index 23e32d6..c6f67b1 100644 --- a/docs/api/api_python/mindarmour.privacy.sup_privacy.rst +++ b/docs/api/api_python/mindarmour.privacy.sup_privacy.rst @@ -13,7 +13,7 @@ mindarmour.privacy.sup_privacy **参数:** - **model** (SuppressModel) - SuppressModel 实例。 - - **suppress_ctrl** (SuppressCtrl) - SuppressCtrl实例。 + - **suppress_ctrl** (SuppressCtrl) - SuppressCtrl 实例。 .. py:method:: step_end(run_context) @@ -25,14 +25,14 @@ mindarmour.privacy.sup_privacy .. py:class:: mindarmour.privacy.sup_privacy.SuppressModel(network, loss_fn, optimizer, **kwargs) - 完整的模型训练功能。抑制隐私函数嵌入到重载的mindspore.train.model.Model中。 + 抑制隐私训练器,重载自 :class:`mindspore.Model` 。 有关详细信息,请查看: `应用抑制隐私机制保护用户隐私 `_。 **参数:** - **network** (Cell) - 要训练的神经网络模型。 - - **loss_fn** (Cell) - 计算logits和labels之间的softmax交叉熵。 + - **loss_fn** (Cell) - 优化器的损失函数。 - **optimizer** (Optimizer) - 优化器实例。 - **kwargs** - 创建抑制模型时使用的关键字参数。 @@ -80,7 +80,7 @@ mindarmour.privacy.sup_privacy - **networks** (Cell) - 要训练的神经网络模型。 - **mask_layers** (list) - 需要抑制的层的描述。 - **end_epoch** (int) - 最后一次抑制操作对应的epoch序号。 - - **batch_num** (int) - 一个epoch中的grad操作的数量。 + - **batch_num** (int) - 一个epoch中的batch数量。 - **start_epoch** (int) - 第一个抑制操作对应的epoch序号。 - **mask_times** (int) - 抑制操作的数量。 - **lr** (Union[float, int]) - 学习率。 @@ -114,7 +114,7 @@ mindarmour.privacy.sup_privacy .. py:method:: calc_theoretical_sparse_for_conv() - 计算con1层和con2层的掩码矩阵的实际稀疏性。 + 计算卷积层的掩码矩阵的实际稀疏性。 .. py:method:: print_paras() @@ -171,7 +171,7 @@ mindarmour.privacy.sup_privacy .. py:class:: mindarmour.privacy.sup_privacy.MaskLayerDes(layer_name, grad_idx, is_add_noise, is_lower_clip, min_num, upper_bound=1.20) - 描述需要抑制的层。 + 对抑制目标层的描述。 **参数:** @@ -181,9 +181,9 @@ mindarmour.privacy.sup_privacy for layer in networks.get_parameters(expand=True): if layer.name == "conv": ... - - **grad_idx** (int) - Grad层索引,在grad元组中获取掩码层的索引。您可以参考mindarmour/privacy/sup_privacy/train/model.py中TrainOneStepCell的构造函数,获取某些指定的grad层的索引(在PYNATIVE_MODE中打印)。 - - **is_add_noise** (bool) - 如果为True,则此层的权重可以添加噪声。如果为False,则此层的权重不能添加噪声。如果参数num大于100000,则is_add_noise无效。 + - **grad_idx** (int) - 掩码层在梯度元组中的索引。可参考 `model.py `_ 中TrainOneStepCell的构造函数,在PYNATIVE_MODE模式下打印某些层的索引值。 + - **is_add_noise** (bool) - 如果为True,则此层的权重可以添加噪声。如果为False,则此层的权重不能添加噪声。如果参数num大于100000,则 `is_add_noise` 无效。 - **is_lower_clip** (bool) - 如果为True,则此层的权重将被剪裁到大于下限值。如果为False,此层的权重不会被要求大于下限制。如果参数num大于100000,则is_lower_clip无效。 - - **min_num** (int) - 未抑制的剩余权重数。如果min_num小于(参数num*SupperssCtrl.sparse_end),则min_num无效。 + - **min_num** (int) - 未抑制的剩余权重数。如果min_num小于(参数总数量 * `SupperssCtrl.sparse_end` ),则min_num无效。 - **upper_bound** (Union[float, int]) - 此层权重的最大abs值,默认值:1.20。如果参数num大于100000,则upper_bound无效。 diff --git a/docs/api/api_python/mindarmour.rst b/docs/api/api_python/mindarmour.rst index 6204dc8..f5518ea 100644 --- a/docs/api/api_python/mindarmour.rst +++ b/docs/api/api_python/mindarmour.rst @@ -228,19 +228,21 @@ MindArmour是MindSpore的工具箱,用于增强模型可信,实现隐私保 **参数:** - **micro_batches** (int) - 从原始批次拆分的小批次数。默认值:2。 - - **norm_bound** (float) - 用于剪裁的约束,如果设置为1,将返回原始数据。默认值:1.0。 - - **noise_mech** (Mechanisms) - 对象可以生成不同类型的噪音。默认值:None。 - - **clip_mech** (Mechanisms) - 该对象用于更新自适应剪裁。默认值:None。 - - **optimizer** (Cell) - 差分隐私训练用到的优化器,可以是MindSpore提供的原装优化器或者'DPOptimizerClassFatory'构造的差分隐私优化器。默认值:None。 + - **norm_bound** (float) - 用于裁剪的约束,如果设置为1,将返回原始数据。默认值:1.0。 + - **noise_mech** (Mechanisms) - 用于生成不同类型的噪音。默认值:None。 + - **clip_mech** (Mechanisms) - 用于更新自适应剪裁。默认值:None。 + - **optimizer** (Cell) - 用于更新差分隐私训练过程中的模型权重值。默认值:nn.Momentum。 **异常:** - - **ValueError** - `optimizer` 和 `noise_mech` 都为None或都为非None。 - - **ValueError** - `noise_mech` 或 `optimizer` 的'mech'方法是自适应的,而clip_mech不是None。 + - **ValueError** - `optimizer` 值为None。 + - **ValueError** - `optimizer` 不是DPOptimizer,且 `noise_mech` 为None。 + - **ValueError** - `optimizer` 是DPOptimizer,且 `noise_mech` 非None。 + - **ValueError** - `noise_mech` 或DPOptimizer的mech方法是自适应的,而 `clip_mech` 不是None。 .. py:class:: mindarmour.MembershipInference(model, n_jobs=-1) - 成员推理是由Shokri、Stronati、Song和Shmatikov提出的一种用于推测用户隐私数据的灰盒攻击。它需要训练样本的loss或logits结果。(隐私是指单个用户的一些敏感属性)。 + 成员推理是由Shokri、Stronati、Song和Shmatikov提出的一种用于推测用户隐私数据的灰盒攻击。它需要训练样本的loss或logits结果,隐私是指单个用户的一些敏感属性。 有关详细信息,请参见:`使用成员推理测试模型安全性 `_。 @@ -254,8 +256,8 @@ MindArmour是MindSpore的工具箱,用于增强模型可信,实现隐私保 **异常:** - **TypeError** - 模型的类型不是Mindspore.Model。 - - **TypeError** - n_jobs的类型不是int。 - - **ValueError** - n_jobs的值既不是-1,也不是正整数。 + - **TypeError** - `n_jobs` 的类型不是int。 + - **ValueError** - `n_jobs` 的值既不是-1,也不是正整数。 .. py:method:: eval(dataset_train, dataset_test, metrics) @@ -276,8 +278,6 @@ MindArmour是MindSpore的工具箱,用于增强模型可信,实现隐私保 根据配置,使用输入数据集训练攻击模型。 - 将攻击模型保存至self._attack_list。 - **参数:** - **dataset_train** (minspore.dataset) - 目标模型的训练数据集。 @@ -290,19 +290,20 @@ MindArmour是MindSpore的工具箱,用于增强模型可信,实现隐私保 {"method": "lr", "params": {"C": np.logspace(-4, 2, 10)}}] - 支持的方法有knn、lr、mlp和rf,每个方法的参数必须在可变参数的范围内。参数实现的提示可在下面找到: - - `KNN `_ , - - `LR `_ , - - `RF `_ , - - `MLP `_ 。 + + - `KNN `_ + - `LR `_ + - `RF `_ + - `MLP `_ **异常:** - - **KeyError** - attack_config中的配置没有键{"method", "params"}。 - - **NameError** - attack_config中的方法(不区分大小写)不在["lr", "knn", "rf", "mlp"]中。 + - **KeyError** - `attack_config` 中的配置没有键{"method", "params"}。 + - **NameError** - `attack_config` 中的方法(不区分大小写)不在["lr", "knn", "rf", "mlp"]中。 .. py:class:: mindarmour.ImageInversionAttack(network, input_shape, input_bound, loss_weights=(1, 0.2, 5)) - 一种用于通过还原图像的深层表达来重建图像的攻击方法。 + 一种通过还原图像的深层表达来重建图像的攻击方法。 参考文献:`Aravindh Mahendran, Andrea Vedaldi. Understanding Deep Image Representations by Inverting Them. 2014. `_。 @@ -316,8 +317,8 @@ MindArmour是MindSpore的工具箱,用于增强模型可信,实现隐私保 **异常:** - **TypeError** - 网络类型不是Cell。 - - **ValueError** - `input_shape` 的值都不是正int。 - - **ValueError** - `loss_weights` 的值都不是正值。 + - **ValueError** - `input_shape` 的值有非正整数。 + - **ValueError** - `loss_weights` 的值有非正数。 .. py:method:: evaluate(original_images, inversion_images, labels=None, new_network=None) @@ -327,8 +328,8 @@ MindArmour是MindSpore的工具箱,用于增强模型可信,实现隐私保 - **original_images** (numpy.ndarray) - 原始图像,其形状应为(img_num, channels, img_width, img_height)。 - **inversion_images** (numpy.ndarray) - 还原图像,其形状应为(img_num, channels, img_width, img_height)。 - - **labels** (numpy.ndarray) - 原始图像的ground-truth标签。默认值:None。 - - **new_network** (Cell) - 其结构包含self._network所有部分的网络,但加载了不同的模型文件。默认值:None。 + - **labels** (numpy.ndarray) - 原始图像的ground truth标签。默认值:None。 + - **new_network** (Cell) - 其结构包含self._network中所有网络,但加载了不同的模型文件。默认值:None。 **返回:** @@ -338,7 +339,7 @@ MindArmour是MindSpore的工具箱,用于增强模型可信,实现隐私保 .. py:method:: generate(target_features, iters=100) - 根据target_features重建图像。 + 根据 `target_features` 重建图像。 **参数:** @@ -352,8 +353,8 @@ MindArmour是MindSpore的工具箱,用于增强模型可信,实现隐私保 **异常:** - - **TypeError** - `target_features` 的类型不是numpy.ndarray。 - - **ValueError** - `iters` 的值都不是正int.Z + - **TypeError** - target_features的类型不是numpy.ndarray。 + - **ValueError** - `iters` 的有非正整数. .. py:class:: mindarmour.ConceptDriftCheckTimeSeries(window_size=100, rolling_window=10, step=10, threshold_index=1.5, need_label=False) @@ -366,7 +367,7 @@ MindArmour是MindSpore的工具箱,用于增强模型可信,实现隐私保 - **window_size** (int) - 概念窗口的大小,不小于10。如果给定输入数据,window_size在[10, 1/3*len(input data)]中。如果数据是周期性的,通常window_size等于2-5个周期,例如,对于月/周数据,30/7天的数据量是一个周期。默认值:100。 - **rolling_window** (int) - 平滑窗口大小,在[1, window_size]中。默认值:10。 - **step** (int) - 滑动窗口的跳跃长度,在[1, window_size]中。默认值:10。 - - **threshold_index** (float) - 阈值索引,:math:`(-\infty, +\infty)`。默认值:1.5。 + - **threshold_index** (float) - 阈值索引,:math:`(-\infty, +\infty)` 。默认值:1.5。 - **need_label** (bool) - False或True。如果need_label=True,则需要概念漂移标签。默认值:False。 .. py:method:: concept_check(data) diff --git a/mindarmour/privacy/diff_privacy/train/model.py b/mindarmour/privacy/diff_privacy/train/model.py index a3feec7..c68c119 100644 --- a/mindarmour/privacy/diff_privacy/train/model.py +++ b/mindarmour/privacy/diff_privacy/train/model.py @@ -82,15 +82,20 @@ class DPModel(Model): noise. Default: None. clip_mech (Mechanisms): The object is used to update the adaptive clip. Default: None. + optimizer (Cell): Optimizer used for differential privacy training, which can be original mindspore + optimizers (for example, Momentum optimizer) or optimizers generated by DPOptimizerClassFactory. + Default: nn.Momentum. Raises: - ValueError: If DPOptimizer and noise_mech are both None or not None. - ValueError: If noise_mech or DPOtimizer's mech method is adaptive while clip_mech is not None. + ValueError: If optimizer is None. + ValueError: If optimizer is not DPOptimizer and noise_mech is None. + ValueError: If optimizer is DPOptimizer and noise_mech is not None. + ValueError: If noise_mech or DPOptimizer's mech method is adaptive while clip_mech is not None. """ def __init__(self, micro_batches=2, norm_bound=1.0, noise_mech=None, - clip_mech=None, **kwargs): + clip_mech=None, optimizer=nn.Momentum, **kwargs): if micro_batches: self._micro_batches = check_int_positive('micro_batches', micro_batches) @@ -100,9 +105,11 @@ class DPModel(Model): norm_bound = check_value_positive('norm_bound', norm_bound) norm_bound = Tensor(norm_bound, mstype.float32) self._norm_bound = Parameter(norm_bound, 'norm_bound') - - opt = kwargs['optimizer'] - opt_name = opt.__class__.__name__ + if optimizer is None: + msg = 'Optimizer need to be set, but got None.' + LOGGER.error(TAG, msg) + raise ValueError(msg) + opt_name = optimizer.__class__.__name__ # Check whether noise_mech and DPOptimizer are both None or not None, if so, raise ValueError. # And check whether noise_mech or DPOtimizer's mech method is adaptive while clip_mech is not None, # if so, raise ValuerError too. @@ -112,7 +119,7 @@ class DPModel(Model): raise ValueError(msg) if noise_mech is None: if "DPOptimizer" in opt_name: - if 'Ada' in opt._mech.__class__.__name__ and clip_mech is not None: + if 'Ada' in optimizer._mech.__class__.__name__ and clip_mech is not None: msg = "When DPOptimizer's mech method is adaptive, clip_mech must be None." LOGGER.error(TAG, msg) raise ValueError(msg) diff --git a/mindarmour/privacy/evaluation/membership_inference.py b/mindarmour/privacy/evaluation/membership_inference.py index 9cd37a4..7792faf 100644 --- a/mindarmour/privacy/evaluation/membership_inference.py +++ b/mindarmour/privacy/evaluation/membership_inference.py @@ -95,8 +95,8 @@ def _softmax_cross_entropy(logits, labels, epsilon=1e-12): class MembershipInference: """ Proposed by Shokri, Stronati, Song and Shmatikov, membership inference is a grey-box attack - for inferring user's privacy data. It requires loss or logits results of the training samples. - (Privacy refers to some sensitive attributes of a single user). + for inferring user's privacy data. It requires loss or logits results of the training samples. Privacy refers + to some sensitive attributes of a single user. For details, please refer to the `Using Membership Inference to Test Model Security `_. @@ -171,7 +171,6 @@ class MembershipInference: def train(self, dataset_train, dataset_test, attack_config): """ Depending on the configuration, use the input dataset to train the attack model. - Save the attack model to self._attack_list. Args: dataset_train (mindspore.dataset): The training dataset for the target model. diff --git a/mindarmour/privacy/sup_privacy/sup_ctrl/conctrl.py b/mindarmour/privacy/sup_privacy/sup_ctrl/conctrl.py index 684b507..373fc87 100644 --- a/mindarmour/privacy/sup_privacy/sup_ctrl/conctrl.py +++ b/mindarmour/privacy/sup_privacy/sup_ctrl/conctrl.py @@ -53,7 +53,7 @@ class SuppressPrivacyFactory: policy (str): Training policy for suppress privacy training. Default: "local_train", means local training. end_epoch (int): The last epoch in suppress operations, 0`_. Args: network (Cell): The training network. - loss_fn (Cell): Computes softmax cross entropy between logits and labels. + loss_fn (Cell): Loss function of optimizers. optimizer (Optimizer): optimizer instance. kwargs: Keyword parameters used for creating a suppress model. """