TFF 中的范数裁剪技术

Norm clipping technique in TFF

我正在使用基于以下论文的“DP-FedAvg”算法训练 DP 联合学习模型:

Learning Differentially Private Recurrent Language Models

论文提出了两种范数裁剪技术“平面裁剪”和“逐层裁剪”,然后使用“逐层裁剪”进行实验。

在 TFF 的情况下,将 DP 查询和聚合过程附加到联邦模型时,默认实现哪种裁剪技术?有没有办法指定使用的裁剪技术?

您可以使用 tff.learning.dp_aggregator 获得基本的推荐设置,并将其用作

iterative_process = tff.learning.build_federated_averaging_process(
    ...,
    model_update_aggregation_factory=tff.learning.dp_aggregator(...))

有关如何在一般学习算法中使用它的指导,请参阅教程:Tuning recommended aggregations for learning

使用的默认裁剪方法对应于您 link 的论文中的“平面裁剪”。然而,裁剪范数不是固定的,而是根据前几轮训练中看到的值自动调整的。有关详细信息,请参阅文档和论文 Differentially Private Learning with Adaptive Clipping.

如果想使用固定的裁剪范数my_clip_norm,可以看看实现,看看哪些组件可以修改。我相信你应该能够简单地使用:

tff.aggregators.DifferentiallyPrivateFactory.gaussian_fixed(..., clip=my_clip_norm)

如果您想使用某种形式的每层裁剪,您需要编写自己的聚合器。 tff.aggregators.DifferentiallyPrivateFactory 的实施可能是一个好的开始,另请参阅教程 Implementing Custom Aggregations