【问题标题】:How to change clipping and noise parameters during differentially private training with Tensorflow Federated如何在使用 Tensorflow Federated 进行差分私人训练期间更改削波和噪声参数
【发布时间】:2021-09-22 08:53:09
【问题描述】:

我正在使用 Tensorflow Federated (TFF) 进行差分隐私训练。目前我正在创建一个 Tensorflow Privacy NormalizedQuery,然后将其传递给 TFF DifferentiallyPrivateFactory 以创建一个 AggregationProcess:

_weights_type = tff.learning.framework.weights_type_from_model(placeholder_model)
query = tensorflow_privacy.GaussianSumQuery(l2_norm_clip=10.0, stddev=0.1)
query = tensorflow_privacy.NormalizedQuery(query, 20)
agg_proc = tff.aggregators.DifferentiallyPrivateFactory(query)
agg_proc = agg_proc.create(_weights_type.trainable)

在向客户端广播服务器状态后,我运行客户端更新功能,然后像这样使用 AggregationProcess:

agg_output = agg_proc.next(
    server_state.delta_aggregate_state,
    client_outputs.weights_delta)

这很好用,但是我想在训练期间尝试多次更改 l2_norm_clip 和 stddev(使剪辑在不同的训练轮次中越来越大),但似乎我只能在创建 AggregationProcess 时设置这些参数。

是否可以在训练期间以某种方式更改这些参数?

【问题讨论】:

    标签: tensorflow-federated


    【解决方案1】:

    我可以想到两种方法来做你想做的事:简单的方法和正确的方法。

    正确的方法是创建一种新型 DPQuery,它在其全局状态下跟踪训练轮次,并在其get_noised_result 函数中按照您想要的方式调整剪辑和 stddev。然后你可以将这个新的 DPQuery 传递给tff.aggregators.DifferentiallyPrivateFactory 并像往常一样使用它。

    简单的方法是直接入侵server_state.delta_aggregate_state。在那里的某个地方,您应该找到 DPQuery 的全局状态,其中应该包含 l2_norm_clipstddev,您可以在轮次之间直接操作它们。这种方法可能很脆弱,因为聚合器状态和 DPQuery 状态表示可能会发生变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-21
      • 2017-12-21
      • 2018-11-13
      • 1970-01-01
      • 2022-06-30
      相关资源
      最近更新 更多