联邦平均算法(Federated Averaging Algorithm,FedAvg)

设一共有 K K K个客户机,

中心服务器初始化模型参数,执行若干轮(round),每轮选取至少1个至多 K K K个客户机参与训练,接下来每个被选中的客户机同时在自己的本地根据服务器下发的本轮( t t t轮)模型 w t w_t wt用自己的数据训练自己的模型 w t + 1 k w^k_{t+1} wt+1k,上传回服务器。服务器将收集来的各客户机的模型根据各方样本数量用加权平均的方式进行聚合,得到下一轮的模型 w t + 1 w_{t+1} wt+1
w t + 1 ← ∑ k = 1 K n k n w t + 1 k / / n k 为 客 户 机 k 上 的 样 本 数 量 , n 为 所 有 被 选 中 客 户 机 的 总 样 本 数 量 \begin{aligned} & \qquad w_{t+1} \leftarrow \sum^K_{k=1} \frac{n_k}{n} w^k_{t+1} \qquad\qquad //n_k为客户机k上的样本数量,n为所有被选中客户机的总样本数量\\ \end{aligned} wt+1k=1Knnkwt+1k//nkkn

【伪代码】
算 法 1 : F e d e r a t e d   A v e r a g i n g 算 法 ( F e d A v g ) 。 K 个 客 户 端 编 号 为 k ; B , E , η 分 别 代 表 本 地 的 m i n i b a t c h   s i z e , e p o c h s , 学 习 率 l e a r n i n g   r a t e 服 务 器 执 行 : 初 始 化 w 0 f o r   每 轮 t = 1 , 2 , . . . , d o m ← m a x ( C ⋅ K , 1 ) / / C 为 比 例 系 数 S t ← ( 随 机 选 取 m 个 客 户 端 ) f o r   每 个 客 户 端 k ∈ S t 同 时   d o w t + 1 k ← 客 户 端 更 新 ( k , w t ) w t + 1 ← ∑ k = 1 K n k n w t + 1 k / / n k 为 客 户 机 k 上 的 样 本 数 量 , n 为 所 有 被 选 中 客 户 机 的 总 样 本 数 量 客 户 端 更 新 ( k , w ) : ▹ 在 客 户 端 k 上 运 行 β ← ( 将 P k 分 成 若 干 大 小 为 B 的 b a t c h ) / / P k 为 客 户 机 k 上 数 据 点 的 索 引 集 , P k 大 小 为 n k f o r   每 个 本 地 的 e p o c h   i ( 1 ∼ E )   d o f o r   b a t c h   b ∈ β   d o w ← w − η ▽ l ( w ; b ) / / ▽ 为 计 算 梯 度 , l ( w ; b ) 为 损 失 函 数 返 回 w 给 服 务 器 \begin{aligned} & 算法1:Federated\ Averaging算法(FedAvg)。 \\ & K个客户端编号为k;B,E,\eta分别代表本地的minibatch\ size,epochs,学习率learning\ rate \\ & \\ & 服务器执行:\\ & \quad 初始化w_0 \\ & \quad for \ 每轮t=1,2,...,do \\ & \qquad m \leftarrow max(C \cdot K,1) \qquad\qquad //C为比例系数 \\ & \qquad S_t \leftarrow (随机选取m个客户端) \\ & \qquad for \ 每个客户端k \in S_t 同时\ do \\ & \qquad \qquad w^k_{t+1} \leftarrow 客户端更新(k,w_t) \\ & \qquad w_{t+1} \leftarrow \sum^K_{k=1} \frac{n_k}{n} w^k_{t+1} \qquad\qquad //n_k为客户机k上的样本数量,n为所有被选中客户机的总样本数量\\ & \\ & 客户端更新(k,w): \qquad \triangleright 在客户端k上运行 \\ & \quad \beta \leftarrow (将P_k分成若干大小为B的batch) \qquad\qquad //P_k为客户机k上数据点的索引集,P_k大小为n_k \\ & \quad for\ 每个本地的epoch\ i(1\sim E) \ do \\ & \qquad for\ batch\ b \in \beta \ do \\ & \qquad \qquad w \leftarrow w-\eta \triangledown l(w;b) \qquad\qquad //\triangledown 为计算梯度,l(w;b)为损失函数\\ & \quad 返回w给服务器 \end{aligned} 1Federated AveragingFedAvgKkBEηminibatch sizeepochslearning ratew0for t=1,2,...,dommax(CK,1)//CSt(m)for kSt dowt+1k(k,wt)wt+1k=1Knnkwt+1k//nkkn(k,w):kβ(PkBbatch)//PkkPknkfor epoch i(1E) dofor batch bβ dowwηl(w;b)//l(w;b)w
为了增加客户机计算量,可以在中心服务器做聚合(加权平均)操作前在每个客户机上多迭代更新几次。计算量由三个参数决定:

  • C C C,每一轮(round)参与计算的客户机比例。
  • E ( e p o c h s ) E(epochs) E(epochs),每一轮每个客户机投入其全部本地数据训练一遍的次数。
  • B ( b a t c h s i z e ) B(batch size) B(batchsize),用于客户机更新的batch大小。 B = ∞ B=\infty B=表示batch为全部样本,此时就是full-batch梯度下降了。

E = 1   B = ∞ E=1\ B=\infty E=1 B=时,对应的就是FedSGD,即每一轮客户机一次性将所有本地数据投入训练,更新模型参数。

对于一个有着 n k n_k nk个本地样本的客户机 k k k来说,每轮的本地更新次数为 u k = E ⋅ n k B u_k=E\cdot \frac{n_k}{B} uk=EBnk

参考文献:

  1. 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.
  • 27
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值