我想在客户端的渐变中添加噪点。我将 tf.keras.optimizers.Adam()
修改为 DPKerasAdamOptimizer()
,但它不起作用。
iterative_process = tff.learning.build_federated_averaging_process(
model_fn=Create_tff_model,
client_optimizer_fn=lambda: DPKerasAdamOptimizer(1,1.85))
错误是
AssertionError: Neither _compute_gradients() or get_gradients() on the differentially private optimizer was called. This means the training is not differentially private. It may be the case that you need to upgrade to TF 2.4 or higher to use this particular optimizer.
我可以使用 tff.learning.model_update_aggregator.dp_aggregator(noise_multiplier, client_per_round)
在服务器端添加噪音,但是如何在客户端添加噪音?
回答1
首先,看一下教程 https://www.tensorflow.org/federated/tutorials/federated_learning_with_differential_privacy,它展示了使用 tff.learning.dp_aggregator
的简单高斯机制。
如果您想自定义机制的细节,您可以查看 dp_aggregator
是如何实现的,特别是 tff.aggregators.DifferentiallyPrivateFactory
被 TensorFlow 隐私对象参数化,或者编写一个 https://www.tensorflow.org/federated/tutorials/custom_aggregators 从头开始。
请注意,使用 DPKerasAdamOptimizer
作为客户端优化器可能不是正确的路径,因为通常有趣的部分是将离开客户端的任何数据私有化,但客户端的中间步骤并不重要。