差分隐私在TensorFlow中的应用

差分隐私在TensorFlow中的应用,tensorflow,tensorflow-federated,Tensorflow,Tensorflow Federated,我尝试使用Tensorflow Privacy和TFF,下面是我自己的数据集中提供的两个示例。 在添加带有剪辑和噪声的DP过程之前,我确保样本和目标格式正确,并且一切正常。 不幸的是,在使用dp的任何执行中,都会使模型发散而不是收敛,每轮的训练和验证损失都会增加 Round 0, 68.89s per round in average. Train: loss=5.172, accuracy=0.222 Validation: loss=6.181, accuracy=0.00

我尝试使用Tensorflow Privacy和TFF,下面是我自己的数据集中提供的两个示例。 在添加带有剪辑和噪声的DP过程之前,我确保样本和目标格式正确,并且一切正常。 不幸的是,在使用dp的任何执行中,都会使模型发散而不是收敛,每轮的训练和验证损失都会增加

Round  0, 68.89s per round in average.
    Train: loss=5.172, accuracy=0.222
    Validation: loss=6.181, accuracy=0.002

Round  1, 61.52s per round in average.
    Train: loss=4.087, accuracy=0.328
    Validation: loss=6.747, accuracy=0.002

Round  2, 57.98s per round in average.
    Train: loss=4.659, accuracy=0.227
    Validation: loss=7.475, accuracy=0.002

Round  3, 56.62s per round in average.
    Train: loss=5.354, accuracy=0.198
    Validation: loss=8.409, accuracy=0.002
     Updating the best state...

Round  4, 55.25s per round in average.
    Train: loss=6.181, accuracy=0.172
    Validation: loss=9.330, accuracy=0.004

Round  5, 54.36s per round in average.
    Train: loss=7.739, accuracy=0.095
    Validation: loss=10.311, accuracy=0.006

Round  6, 53.83s per round in average.
    Train: loss=9.188, accuracy=0.037
    Validation: loss=11.243, accuracy=0.006

Round  7, 53.63s per round in average.
    Train: loss=9.581, accuracy=0.080
    Validation: loss=12.214, accuracy=0.009
我尝试了不同的剪辑和噪波乘数组合,但没有取得任何效果。。 以下是一个例子:

  'clients_per_round' : 20,
  'client_epochs_per_round' : 2,
  'uniform_weighting' : True,
  'server_optimizer': 'adam',
  'client_optimizer': 'adam',

  'clip':0.05, #l2 norm
  'noise_multiplier' : 1.0,
  'adaptive_clip_learning_rate' : 0,
  'target_unclipped_quantile' : 0.5,
  'clipped_count_budget_allocation' : 0.1,
  'per_vector_clipping' : False,
有什么问题吗?使用“噪波倍增器”:False一切正常。。 DP_查询和平均过程的定义基本上与示例中使用的相同:

dp_query = tff.utils.build_dp_query(
      clip=FLAGS.clip,
      noise_multiplier=FLAGS.noise_multiplier,
      expected_total_weight=FLAGS.clients_per_round,
      adaptive_clip_learning_rate=FLAGS.adaptive_clip_learning_rate,
      target_unclipped_quantile=FLAGS.target_unclipped_quantile,
      clipped_count_budget_allocation=FLAGS.clipped_count_budget_allocation,
      expected_clients_per_round=FLAGS.clients_per_round,
      per_vector_clipping=FLAGS.per_vector_clipping,
      model=model_fn())

  weights_type = tff.learning.framework.weights_type_from_model(model_fn)
  aggregation_process = tff.utils.build_dp_aggregate_process(
      weights_type.trainable, dp_query)

谢谢大家!

对于每轮的客户数量而言,您的噪波乘数太高。按照中的方法,您应该首先找到最大的n_m,以使培训具有良好的实用性,然后放大n_m并按比例放大c_p_r,以培训具有良好隐私性的最终模型。

对于每轮的客户数来说,您的噪声乘数太高了。按照中的方法,您应该首先找到最大的n_m,以使培训具有良好的实用性,然后放大n_m并按比例放大c_p_r,以培训具有良好隐私的最终模型。

问题是否可以扩展到包括关于每轮培训中有多少参与者的详细信息?诸如的文献表明,需要大量用户才能实现良好的实用性(准确性)和隐私权衡。@ZacharyGarrett每轮参与者人数为20,问题可能是高噪音倍增和客户数量少。问题是否可以扩展到包括每轮培训中有多少参与者的详细信息?如等文献表明,需要大量用户才能实现良好的实用性(准确性)和隐私权衡。@ZacharyGarrett每轮参与者人数为20人,问题可能在于高噪声乘数和少量客户端