最近在复现一些论文代码,在复现联邦学习开山之作《Communication-Efficient Learning of Deep Networks from Decentralized Data》中的FedAvg时候有了一些困惑。
算法如图,讲一下该算法的流程:首先是在个客户端(客户端总数为
)中随机选择
个客户端,组成
,然后
中的每个客户端执行本地训练得到
,然后服务器在接收到本地训练结果
之后执行加权聚合。
疑惑的点就出现在加权聚合的方式上,首先看加权聚合公式:
在这里求和符号上标是,意味着全部客户端都要参与聚合,那么没有被选择的客户端都不进行本地训练,怎么会有
?再看聚合权重
,
是
个客户端的数据量求和,这也是因为求和是
个客户端参与。
但这里就有疑问了,不应该是参与训练的客户端才会执行聚合吗?为了节省带宽等,有时候甚至只有参与训练的客户端才会得到最新的全局模型,那么怎么会所有客户端参与聚合呢?
带着这个疑问,开始在网上找答案,最终发现《Communication-Efficient Learning of Deep Networks from Decentralized Data》在arXiv上竟然有了新的一版(2023年更新的),话不多说,直接上原文
与之前版本不同之后就在于加权聚合,首先是训练集合中的客户端参与聚合,其次是聚合权重是第
个客户端的本地数据量
除以参与训练个所有客户端数据量总和(
)。
在文章中作者还特别标注
ok,所有疑惑都解决,继续写代码了