设一共有K个客户机,
中心服务器初始化模型参数,执行若干轮(round),每轮选取至少1个至多K个客户机参与训练,接下来每个被选中的客户机同时在自己的本地根据服务器下发的本轮(t轮)模型wt用自己的数据训练自己的模型wkt+1,上传回服务器。服务器将收集来的各客户机的模型根据各方样本数量用加权平均的方式进行聚合,得到下一轮的模型wt+1:
wt+1←K∑k=1nknwkt+1//nk为客户机k上的样本数量,n为所有被选中客户机的总样本数量
【伪代码】
算法1:Federated Averaging算法(FedAvg)。K个客户端编号为k;B,E,η分别代表本地的minibatch size,epochs,学习率learning rate服务器执行:初始化w0for 每轮t=1,2,...,dom←max(C⋅K,1)//C为比例系数St←(随机选取m个客户端)for 每个客户端k∈St同时 dowkt+1←客户端更新(k,wt)wt+1←K∑k=1nknwkt+1//nk为客户机k上的样本数量,n为所有被选中客户机的总样本数量客户端更新(k,w):▹在客户端k上运行β←(将Pk分成若干大小为B的batch)//Pk为客户机k上数据点的索引集,Pk大小为nkfor 每个本地的epoch i(1∼E) dofor batch b∈β dow←w−η▽l(w;b)//▽为计算梯度,l(w;b)为损失函数返回w给服务器
为了增加客户机计算量,可以在中心服务器做聚合(加权平均)操作前在每个客户机上多迭代更新几次。计算量由三个参数决定:
- C,每一轮(round)参与计算的客户机比例。
- E(epochs),每一轮每个客户机投入其全部本地数据训练一遍的次数。
- B(batchsize),用于客户机更新的batch大小。B=∞表示batch为全部样本,此时就是full-batch梯度下降了。
当E=1 B=∞时,对应的就是FedSGD,即每一轮客户机一次性将所有本地数据投入训练,更新模型参数。
对于一个有着nk个本地样本的客户机k来说,每轮的本地更新次数为uk=E⋅nkB。
参考文献:
- H. B. McMahan, E. Moore, D. Ramage, S. Hampson, and B. A. Y. Arcas, “Communication-efficient learning of deep networks from decentralized data,” in Proc. AISTATS, 2016, pp. 1273–1282.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!