我正在执行联邦学习过程,并使用函数tff.learning.build_federated_averaging_process创建联邦学习的迭代过程。正如在TFF教程中提到的,该函数有两个参数client_optimizer_fn和server_optimizer_fn,在我看来,这两个参数分别表示客户端和服务器的优化器。但是在FedAvg的论文中,似乎只有客户端执行优化,而服务器只执行平均操作,那么server_optimizer_fn到底在做什么,它的学习率意味着什么?
发布于 2020-08-03 21:11:24
在McMahan et al., 2017中,客户端将本地训练后的模型权重传递给服务器,然后对其进行平均并为下一轮重新广播。不需要服务器优化器,平均步骤会更新全局/服务器模型。
tff.learning.build_federated_averaging_process采用了一种略有不同的方法:客户端收到的模型权重的增量和本地训练后的模型权重被发送回服务器。可以将此增量视为伪梯度,允许服务器使用标准优化技术将其应用于全局模型。Reddi et al., 2020深入研究了这种公式以及服务器上的自适应优化器(Adagrad,Adam,Yogi)如何极大地提高收敛速度。使用没有动量的SGD作为服务器优化器,学习率为1.0,完全恢复了McMahan等人,2017年描述的方法。
发布于 2020-08-04 16:35:55
感谢你的回答,扎卡里。在McMahan等人,2017年,介绍了两种实现联合学习的方法,要么计算客户端的平均梯度并将其发送到服务器进行平均操作,要么将平均梯度应用于每个客户端模型并将客户端模型发送到服务器进行平均操作。McMahan等人,2017年的算法1使用第二种方法来实现联邦学习,而TFF根据您的回答使用第一种方法。令我困惑的是,在我看来,无论TFF使用哪种方式,都应该只有一个学习率,即第一种方式应该只有服务器lr而没有客户端lr,而第二种方式应该只有客户端lr而没有服务器lr。正如在McMahan等人,2017年提到的,只有一个符号Eta表示lr,没有Eta_client或Eta_server。
https://stackoverflow.com/questions/63229611
复制相似问题