联邦学习通过调整模型在客户端之间的训练和聚合方式来处理不平衡的数据分布。在联邦设置中,数据不平衡可能以两种方式发生:(1)单个客户端可能具有倾斜的类别分布(例如,一个客户端具有 90% 的 A 类数据),或者(2)客户端自身在数据大小上差异很大(例如,一个客户端有 10,000 个样本,另一个有 100 个)。该系统通过算法调整和聚合策略来解决这些问题,而不是集中数据。例如,医疗保健联邦网络中的一家医院可能比罕见疾病拥有更多的癌症病例,而另一家诊所的情况则相反。全局模型必须从两者中学习,而不能假设统一的数据分布。
一种常见的方法是服务器模型更新阶段的加权聚合。服务器不是平等地平均客户端模型更新,而是根据每个客户端的数据大小或类别分布分配权重。例如,具有 1,000 个样本的客户端对全局模型的贡献可能是一个具有 500 个样本的客户端的两倍。为了处理客户端内部的类别不平衡,可以局部应用诸如类别感知抽样或损失重新加权之类的技术。开发人员可以通过修改每个客户端上的训练循环来使用特定于类别的权重计算损失(例如,更重地惩罚罕见类别上的错误)来实现这一点。像 TensorFlow Federated 或 PyTorch 的 Substra 这样的框架为这些调整提供了内置工具,允许开发人员自定义客户端训练,而无需重新发明轮子。
高级方法包括动态客户端选择和个性化联邦学习。例如,如果罕见类别集中在少数几个客户端中,服务器可能会在训练轮次期间优先对这些客户端进行更频繁的抽样。或者,个性化方法允许客户端在本地微调全局模型,以更好地适应其独特的数据分布。一个实际的实现可能包括将基本模型发送到所有客户端,然后允许每个客户端应用一些仅在其数据上训练的额外层。这平衡了共享知识与本地适应。像 FedML 或 Flower 这样的库通过可配置的客户端/服务器工作流程支持这些策略。虽然没有单一的方法可以完全消除不平衡,但结合这些技术有助于减轻偏差并提高模型在不同数据源中的鲁棒性。