联邦学习依赖于旨在处理去中心化数据、设备异构性和通信约束的优化算法。最广泛使用的算法是 联邦平均 (FedAvg),它在设备(客户端)上本地训练模型,并在中央服务器上聚合更新。 FedAvg 在每个客户端的数据上执行多个本地随机梯度下降 (SGD) 步骤,然后平均客户端之间的模型参数。 与每次批量处理后发送原始梯度相比,这降低了通信开销。 虽然 FedAvg 简单有效,但它假设客户端具有相似的计算资源和数据分布——这是现实场景中的一个限制,因为数据是非 IID(非独立且同分布)。
为了应对客户端数据倾斜和系统异构性等挑战,已经开发了 SCAFFOLD 和 FedProx 等算法。 SCAFFOLD 引入了控制变量(校正项)来缓解由非 IID 数据引起的客户端漂移,确保本地更新与全局模型更好地对齐。 FedProx 将近端项添加到本地损失函数中,惩罚本地训练期间与全局模型的较大偏差。 当设备具有不同的计算能力时(例如,某些客户端运行的本地 epoch 较少),这会稳定收敛。 为了提高通信效率,量化(压缩模型更新)和结构化更新(强制稀疏性)等方法通常与这些算法结合使用。 例如,谷歌的联邦学习实现使用量化将传输的模型权重的大小最多减少 90%。
受集中式深度学习启发,自适应优化技术也已适用于联邦设置。 FedAdam 和 FedYogi 将 Adam 的自适应学习率机制扩展到联邦平均,根据历史梯度统计信息调整每个参数的学习率。 这些方法改进了客户端参与不均匀或更新嘈杂情况下的收敛。 此外,通常将差分隐私和安全聚合集成到优化管道中以保护用户数据。 例如,Apple 的联邦学习框架使用安全聚合来组合来自设备的加密模型更新,然后再进行解密。 开发人员通常根据特定约束选择算法:FedAvg 追求简单性,FedProx 追求设备异构性,或者自适应方法用于不稳定的训练动态。 TensorFlow Federated 和 PyTorch Lightning 等开源库提供了这些算法的实现,允许开发人员试验并使其适应其用例。