首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DP-query跟踪联邦学习过程中的隐私保障。

使用DP-query跟踪联邦学习过程中的隐私保障。
EN

Stack Overflow用户
提问于 2021-01-28 18:47:42
回答 1查看 262关注 0票数 3

我对TFF有点陌生,我已经检查了github,并遵循EMNIST的例子,使用DP-FedAvg算法训练了一个不同的私有联邦模型。这主要是通过将dp-query附加到aggregation_process,然后训练联邦模型来完成的。

我有一个问题,请:

考虑到将一个dp-query 附加到聚合过程中将导致参与者级的中央DP,那么在培训期间如何跟踪隐私保障(eps,delta) ?。

下面是一个由100个参与者组成的不同私有联邦模型的代码片段,这就是为什么expected_total_weightexpected_clients_per_round都设置为100。

代码语言:javascript
复制
def model_fn():
    keras_model = create_keras_model()
    return tff.learning.from_keras_model(
        keras_model=keras_model,
        loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
        input_spec=preprocessed_first_client_dataset.element_spec,
        metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])


dp_query = tff.utils.build_dp_query(
    clip=1.0,
    noise_multiplier=0.3,
    expected_total_weight=100,
    adaptive_clip_learning_rate=0,
    target_unclipped_quantile=0.5,
    clipped_count_budget_allocation=0.1,
    expected_clients_per_round=100
)


weights_type = tff.learning.framework.weights_type_from_model(model_fn)

aggregation_process = tff.utils.build_dp_aggregate_process(weights_type.trainable, dp_query)

iterative_process = tff.learning.build_federated_averaging_process(
    model_fn=model_fn,
    client_optimizer_fn=lambda: tf.keras.optimizers.SGD(0.1),
    server_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=1.0),
    aggregation_process=aggregation_process
)

在TF-隐私中,我遇到了几种计算epsilon和delta的方法,但它们似乎是为了跟踪传统DP-SGD算法的隐私保障,并期望接收stepsnbatch_size等参数。

提前谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-30 20:56:19

有几种方法可以执行此计算。我们将在下面讨论两个备选方案。

重新设计DPSGD分析工具

正确的是,这些工具接受以DP-SGD设置命名的参数;但是,它们的参数可以以相当简单的方式映射到联邦设置。

假设我们有来自TFP分析库的符号TFP分析库。我们可以编写一个简单的函数,从本质上修改联邦设置的compute_dp_sgd_privacy主体:

代码语言:javascript
复制
def compute_fl_privacy(num_rounds, noise_multiplier, num_users, users_per_round):
  # This actually assumes Poisson subsampling, which may not be *quite*
  # right in your setting, but the approximation should be close either way.
  q = users_per_round / num_users  # q - the sampling ratio.

  # These orders are inlined from the body of compute_dp_sgd_privacy
  orders = ([1.25, 1.5, 1.75, 2., 2.25, 2.5, 3., 3.5, 4., 4.5] +
            list(range(5, 64)) + [128, 256, 512])
  
  # Depending on whether your TFF code by default uses adaptive clipping or not,
  # you may need to rescale your noise_multiplier argument.

  return apply_dp_sgd_analysis(
    q, sigma=noise_multiplier, steps=num_rounds, orders=orders, delta=num_users ** (-1))

使用TFP PrivacyLedger

如果您使用的是相对较新的tff.aggregators.DifferentiallyPrivateFactory (我将在上面使用的DP过程中建议使用),您可以传递一个已经构建的DPQuery,该DPQuery可以使用PrivacyLedger进行修饰。然后,这个分类账可以直接传递到像compute_rdp_from_ledger这样的函数中,并且它应该跟踪每个查询调用所花费的隐私。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65943395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档