我试图在TFF中使用Tensorflow隐私,下面是我自己的数据集在这里中提供的两个示例。在添加带有剪裁和噪声的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我尝试过不同的剪辑和noise_multiplier的组合,但没有取得任何结果。下面是一个示例:
'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的定义和平均过程在示例中使用的基本相同:
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)谢谢!
发布于 2020-09-24 16:13:21
您的noise_multiplier对于您的clients_per_round数量来说太高了。按照“学习差异私人语言模式”中的方法,您应该首先找到允许具有良好效用的培训的最大n_m,然后按比例增加n_m和按比例增加c_p_r,以培训具有良好隐私的最终模型。
https://stackoverflow.com/questions/64046242
复制相似问题