联邦学习中的跳步算法#
最早的联邦学习算法 FedAvg [McMahan et al.[1]] 在子节点的内循环中执行多步梯度下降——从某种意义上说,这已经是一种* 跳步* (Skipping) 更新:通信轮以概率 \(1 - p = 0\) 被跳过。 ProxSkip 算法 [Mishchenko et al.[2], Zhang and Loizou[3]](原文献中命名为 Scaffnew )系统地研究了跳步技术在联邦学习优化算法中的应用,使通信轮以* 非零* 的概率被跳过。将 ProxSkip 视作 SCAFFOLD 结合跳步更新技术的改进算法,是不无启发的。
ProxSkip/Scaffnew#
从最优化的视角出发,将联邦学习问题建模为共识集 \(\mathcal{E} = \{ \Theta \mid \theta_1 = \cdots = \theta_K \}\) 上的共识优化问题
正如 算子分裂一节 所述,可以借助共识集的示性函数 \(\iota_{\mathcal{E}}\) 将该约束问题转化为无约束问题,并对其一阶最优性条件 \(0 \in \nabla F(\Theta) + \partial \iota_{\mathcal{E}}(\Theta)\) 进行分裂。更一般地,把 \(\iota_{\mathcal{E}}\) 换成任意 CCP 函数 \(g\) ,相应的不动点求解方法即* 临近梯度下降* (Proximal Gradient Descent, ProxGD)
对问题 \(\minimize \ F(\Theta) + g(\Theta)\) 而言,ProxGD 的实际困难在于 CCP 函数 \(g\) 的临近算子 \(\prox_{s g}\) 通常求解代价高昂 [Friedlander and Goh[4]]。对应到联邦学习中,这一临近步* 正是* 通信本身:先由子节点向中心节点聚合模型参数,再由中心节点向子节点广播。以一定概率跳过这一性能瓶颈步骤便是一种自然的想法——这正是 ProxSkip 所做的事情。
关于控制变量 (Control Variates) 的说明:与 SCAFFOLD 不同, ProxSkip 并未(显式地)使用梯度方差缩减技术。控制变量 \(c_k\) 的首要作用是保证整体迭代的* 正确收敛性* :可以证明在原问题的解点 \(\theta^*\) 处 \(c_k \to \nabla f_k(\theta^*)\) ,从而迭代的稳定点即为原问题的解点——这是 ProxSkip 的关键所在。 ProxSkip 整体上并不维护一个在中心节点与子节点之间通信的全局控制变量;相反,每当通信发生时,子节点上的局部控制变量 \(c_k\) 会由 \(\frac{p}{\gamma} \left( \theta^{(t+1)} - \theta_k^{(t + \frac{1}{2})} \right)\) * 隐式* 地更新,后者起到了全局控制变量的作用。这一点类似于 SCAFFOLD 中局部控制变量的 Option II 更新规则:好处是省去了中心节点与子节点之间额外的参数传递,代价是损失了控制变量更新方法的灵活性。伪代码总结如下。
\begin{algorithm}
\caption{PseudoCode for \texttt{ProxSkip}}
\begin{algorithmic}
\REQUIRE learning rate $\gamma,$ probability $p \in [0, 1)$
\STATE {\bfseries Initiation:}
\STATE $\hspace{1.3em}$ {\bfseries Server init:} global model parameters $\theta^{(0)} \in \mathbb{R}^d$
\STATE $\hspace{1.3em}$ {\bfseries Clients init:} local model parameters $\theta_k^{(0)} \in \mathbb{R}^d,$ control variates $c_k^{(0)} \in \mathbb{R}^d, ~ \forall k \in [K]$
\FOR{each round $t = 0, 1, \cdots, T-1$}
\FOR{each client $k \in [K]$ {\bfseries in parallel}}
\STATE $\theta_k^{(t, 0)} \gets \theta_k^{(t)}$
\FOR{local step $r = 0, 1, \cdots, R-1$}
\COMMENT{$R$ iterates of SGD with variance reduction}
\STATE compute mini-batch gradient $g_k^{(t, r)}$ of $\nabla f_k(\theta_k^{(t, r)})$
\STATE $\theta_k^{(t, r+1)} \gets \theta_k^{(t, r)} - \gamma \left( g_k^{(t, r)} - c_k^{(t)} \right)$
\ENDFOR
\STATE $\theta_k^{(t+\frac{1}{2})} \gets \theta_k^{(t, R)}$
\ENDFOR
\STATE with probability $1 − p$ do global communication
\STATE $\hspace{1.3em}$ client $k$ send $\theta_{k}^{(t+\frac{1}{2})}$ to server $\forall k \in [K]$
\STATE $\hspace{1.3em}$ {\bfseries Server Update:} $\theta^{(t+1)} \gets \frac{1}{K} \sum\limits_{k=1}^K \theta_{k}^{(t+\frac{1}{2})}$ \COMMENT{compute global average}
\STATE $\hspace{1.3em}$ server broadcast $\theta^{(t+1)}$ to clients $k \in [K]$
\STATE $\hspace{1.3em}$ on client $k:$ $\theta^{(t+1)}_{k} \gets \theta^{(t+1)}, ~ c_k^{(t+1)} \gets c_k^{(t)} + \frac{p}{\gamma}(\theta^{(t+1)}_{k} - \theta^{(t+\frac{1}{2})}_{k}), ~ \forall k \in [K]$
\STATE with probability $p$ skip global communication:
\STATE $\hspace{1.3em}$ {\bfseries Client Update:} $\theta^{(t+1)}_{k} \gets \theta_{k}^{(t+\frac{1}{2})}, ~ c_k^{(t+1)} \gets c_k^{(t)}, ~ \forall k \in [K]$
\STATE $\hspace{1.3em}$ \COMMENT{on server, $\theta^{(t+1)} \gets \theta^{(t)}$}
\ENDFOR
\end{algorithmic}
\end{algorithm}参考文献