首页 > 解决方案 > 调用函数 tff.learning.build_federated_averaging_process 时的学习率设置

问题描述

我正在执行一个联邦学习过程,并使用函数 tff.learning.build_federated_averaging_process 来创建一个联邦学习的迭代过程。正如 TFF 教程中提到的,这个函数有两个参数,分别称为 client_optimizer_fn 和 server_optimizer_fn,在我看来,它们分别代表客户端和服务器的优化器。但是在 FedAvg 论文中,似乎只有客户端进行优化,而服务器只进行平均操作,那么 server_optimizer_fn 到底在做什么,它的学习率是什么意思呢?

标签: tensorflow-federated

解决方案


McMahan et al., 2017中,客户端在本地训练后将模型权重传递给服务器,然后将其平均并重新广播到下一轮。不需要服务器优化器,平均步骤会更新全局/服务器模型。

tff.learning.build_federated_averaging_process采用稍微不同的方法:客户端收到的模型权重的增量和本地训练后的模型权重被发送回服务器。这个增量可以看作是一个伪梯度,允许服务器使用标准优化技术将其应用于全局模型。Reddi 等人,2020 年深入研究了这个公式,以及服务器上的自适应优化器(Adagrad、Adam、Yogi)如何大大提高收敛速度。使用没有动量的 SGD 作为服务器优化器,学习率为1.0,完全恢复了 McMahan et al., 2017 中描述的方法。


推荐阅读