联邦学习中客户端大小不平衡

Unbalanced client size in federated learning

我正在使用 Tensoflow Federated 对多个文件应用联合学习。问题是,每个文件中的数据大小(记录数)不同。

  1. 联邦学习训练中每个客户端的大小不同是否存在问题?如果有我该如何克服?
  2. 有没有一种方法可以让我看到每个客户端在联合计算训练时的表现?

联邦学习训练中每个客户端的大小不同是否存在问题?如果有我该如何克服?

这取决于多种因素,其中很大一部分是客户端上的数据分布。例如,如果每个客户端数据看起来 非常 相似(例如实际上相同的分布,IID)使用哪个客户端并不特别重要。

如果不是这种情况,一种常见的技术是限制客户端每轮对其数据集采取的 最大 步数,以促进更平等地参与培训过程。在 TensorFlow 和 TFF 中,这可以使用 tf.data.Dataset.take to restrict to a maximum number of iterations. In TFF this can be applied to every client using tff.simulation.datasets.ClientData.preprocess. This is discussed with examples in the tutorial Working with TFF's ClientData.

来完成

有没有一种方法可以查看每个客户端在联合计算训练时的表现?

客户可以 return 单独的指标来报告他们的表现,但默认情况下不会这样做。在 tff.learning.algorithms.build_weighted_fed_avg the metrics_aggregator defaults to tff.learning.metrics.sum_then_finalize which in usually creates global averages of metrics. There isn't an out-of-the-box solution, but one could implement a "finalize-then-sample" that would likely meet this need. Re-using tff.aggregators.federated_sample and looking at the source code 中以 sum_then_finalize 为例将是一个很好的起点。