tensorflow-federated - 调用函数 tff.learning.build_federated_averaging_process 时的学习率设置
问题描述
我正在执行一个联邦学习过程,并使用函数 tff.learning.build_federated_averaging_process 来创建一个联邦学习的迭代过程。正如 TFF 教程中提到的,这个函数有两个参数,分别称为 client_optimizer_fn 和 server_optimizer_fn,在我看来,它们分别代表客户端和服务器的优化器。但是在 FedAvg 论文中,似乎只有客户端进行优化,而服务器只进行平均操作,那么 server_optimizer_fn 到底在做什么,它的学习率是什么意思呢?
解决方案
在McMahan et al., 2017中,客户端在本地训练后将模型权重传递给服务器,然后将其平均并重新广播到下一轮。不需要服务器优化器,平均步骤会更新全局/服务器模型。
tff.learning.build_federated_averaging_process
采用稍微不同的方法:客户端收到的模型权重的增量和本地训练后的模型权重被发送回服务器。这个增量可以看作是一个伪梯度,允许服务器使用标准优化技术将其应用于全局模型。Reddi 等人,2020 年深入研究了这个公式,以及服务器上的自适应优化器(Adagrad、Adam、Yogi)如何大大提高收敛速度。使用没有动量的 SGD 作为服务器优化器,学习率为1.0
,完全恢复了 McMahan et al., 2017 中描述的方法。
推荐阅读
- excel - 询问文件路径并从单个工作表中的多个工作簿复制特定数据
- javascript - 过滤所有键的数组的javascript对象
- php - htaccess 不调用文件 config.php
- android - 在全新安装适用于 Android 和 IOS 的最新 Ubuntu LTS 时安装 Cordova
- python - 合并数据框熊猫时丢失一列
- ironpython - Spotfire 的 IronPython:循环更新文档属性
- woocommerce - woocommerce 优惠券四舍五入到小数点后 1
- javascript - 无法使用 sequelize 和 mysql 根据包含的模型属性过滤数据
- c++ - 访问向量