1.研究背景:
为了改进Fedavg算法当数据是异构(非iid)时,它遭受“客户漂移”,导致不稳定和缓慢的收敛。
2.提出的方法:
它使用控制变量(方差减少)来纠正本地更新中的“客户端漂移”。我们证明了SCAFFOLD需要更少的通信轮数,并且不受数据异构性或客户端采样的影响。进一步,我们证明(对于二次方程)
SCAFFOLD可以利用客户端数据的相似性,从而产生更快的收敛。 后者是量化局部步骤在分布式优化中的作用的第一个结果。 1).创新点: a.可以克服客户端异质性(可以将异质性视为在不同客户端之间的更新中引入“客户端方差”,然后该算法会执行客户端方差减少); b.在明显较少的通信回合中达到收敛状态; c.我们推导出FEDAVG比之前已知的凸函数和非凸函数在客户端采样和异构数据下更紧密的收敛速度 d.我们给出匹配下界来证明即使没有客户取样和全批梯度,FEDAVG也会由于客户漂移而比SGD慢。 e.SCAFFOLD相对不受客户端抽样获得方差降低率的影响,使其特别适合联合学习。
3.SCAFFOLD算法核心:
3.1FedAvg算法更新公式: 3.2.SCAFFOLD更新公式: 本论文中的算法只是比FEDAVG多了一个修正项:c-ci,有这个修正项便可以有效的解决本地更新时的客户端漂移,让每个客户端在本地更新的时候假装看到其他客户端的数据信息,就像是每次更新的时候去猜测别人可能做什莫,有了这个猜测就好像是在进行正常的数据训练,对于这个算法,我不仅每次更新参数,还要更新我的这种猜测。 小细节: 1-SGD的更新过程:在本地更新一次就进行一次通信(路径与server理想的更新路径相近,但是通信代价大) 2-FedAvg更新过程:在本地更新k次才进行一次通信(由于Non-IID,路径与server理想的更新路径发生了偏移,即client-drift,导致收敛速度缓慢) 3-SCAFFOLD更新过程:在本地更新k次才进行一次通信(由于修正项的存在,每次本地更新都会被拉回到理想的更新路径附近,收敛速度较快) 算法伪代码: 对比祖师爷fedavg:
4.实验结果分析:
证明了本文中所提出的算法相比在数据异质性程度改变时具有很好的适应性; 由表可以看出:fedprox的效果最差,其次是fedavg,最好的是SCAFFOLD。 可以看出:在抽样客户端相同数目以及异质性相同时,我们所提出的方法明显优于其他方法;
结论:在EMNIST上用2层全连接神经网络(非凸)训练1k轮后的最佳测试精度 本地方法每轮5个epoch(25步),20%的客户每轮取样。SCAFFOLD的准确率最高,SGD的准确率最低。SCAFFOLD同样优于其他方法。SGD基本不受相似度的影响,而局部方法会随着客户端的相似度而提高。 总结不足之处:1.每次传给服务器的时候不仅要传模型的参数,还要传控制变量(梯度和参数向量维度一样),这增加了单次通信的代价(2倍)2因为要求每个client是stateful的,因此只适用于少量的客户端(thousands级别)3.本文用的是上一轮的梯度状态去猜测下一轮梯度应该往这个方向,这就要求所有的损失函数是光滑的。
|