问题描述
我正在尝试使用 EMNIST 数据集训练差异私有联合模型,我已将 DP-Query
附加到 aggregation_process
。此外,我通过使用 DP-FedAvg
作为客户端和服务器优化器并将服务器学习率设置为 1 来类似于 SGD
算法。
查询是:
dp_query = tff.utils.build_dp_query(
clip=0.6
noise_multiplier=1.2,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
)
此查询执行哪种类型的裁剪,是批量裁剪,还是每个示例裁剪?
在 TFP
中,使用每个示例剪辑的选项是将 num_microbatches
设置为 None
,因此它默认为 batch_size
。
我如何在这里做类似的事情,并在联合设置中的批量剪辑和每个示例剪辑之间切换?
解决方法
DPQuery 只指定如何剪辑,它没有指定什么被剪辑。在联合上下文中,整个客户端更新被剪辑。您可以说每个客户端的更新功能类似于集中(非联合)上下文中的微批处理。这提供了强大的“用户级”DP 保证。将客户端分组为“客户端微批次”并没有多大用处。