联邦学习中客户端大小不平衡
Unbalanced client size in federated learning
我正在使用 Tensoflow Federated 对多个文件应用联合学习。问题是,每个文件中的数据大小(记录数)不同。
- 联邦学习训练中每个客户端的大小不同是否存在问题?如果有我该如何克服?
- 有没有一种方法可以让我看到每个客户端在联合计算训练时的表现?
联邦学习训练中每个客户端的大小不同是否存在问题?如果有我该如何克服?
这取决于多种因素,其中很大一部分是客户端上的数据分布。例如,如果每个客户端数据看起来 非常 相似(例如实际上相同的分布,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
为例将是一个很好的起点。
我正在使用 Tensoflow Federated 对多个文件应用联合学习。问题是,每个文件中的数据大小(记录数)不同。
- 联邦学习训练中每个客户端的大小不同是否存在问题?如果有我该如何克服?
- 有没有一种方法可以让我看到每个客户端在联合计算训练时的表现?
联邦学习训练中每个客户端的大小不同是否存在问题?如果有我该如何克服?
这取决于多种因素,其中很大一部分是客户端上的数据分布。例如,如果每个客户端数据看起来 非常 相似(例如实际上相同的分布,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
为例将是一个很好的起点。