首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >差分隐私在TensorFlow联邦中的应用

差分隐私在TensorFlow联邦中的应用
EN

Stack Overflow用户
提问于 2020-09-24 12:15:40
回答 1查看 396关注 0票数 0

我试图在TFF中使用Tensorflow隐私,下面是我自己的数据集在这里中提供的两个示例。在添加带有剪裁和噪声的DP进程之前,我确保了示例和目标的格式正确,并且所有操作都正常。不幸的是,在任何使用dp的执行中,模型都会分散而不是收敛,每一轮的训练和验证损失都会增加。

代码语言:javascript
复制
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

我尝试过不同的剪辑和noise_multiplier的组合,但没有取得任何结果。下面是一个示例:

代码语言:javascript
复制
  '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,

知道问题出在哪里了吗?使用“noise_multiplier”:错误的一切都正常工作。DP_query的定义和平均过程在示例中使用的基本相同:

代码语言:javascript
复制
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)

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-24 16:13:21

您的noise_multiplier对于您的clients_per_round数量来说太高了。按照“学习差异私人语言模式”中的方法,您应该首先找到允许具有良好效用的培训的最大n_m,然后按比例增加n_m和按比例增加c_p_r,以培训具有良好隐私的最终模型。

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

https://stackoverflow.com/questions/64046242

复制
相关文章

相似问题

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