Proceedings of Machine learning and systems, 2020
FedAvg的问题
系统异构:
FedAvg遇到规定时间内计算不完E次更新的设备会直接丢弃,不能让不同设备执行不同次数的更新。
统计异构:
FedAvg在非IID数据上存在经验差异。
FedProx:致力于解决系统异构性和统计异构性
联邦学习的目的
FedProx思想
背景:FedAvg限制每个设备每一轮训练epoch数为E
问题:每个设备的能力不同,这样做会导致部分设备可能不能完成训练,丢弃掉队者(FedAvg)或是直接合并掉队者未迭代完成的模型(FedProx且近端项为0)都会增加统计异质性。
解决:每个设备、每个轮次的最佳epoch数不一定要相同
这一段的意思是,对于第t轮传过来的模型wt,客户端有一个度量γkt只要模型经过一定训练使模型当前的梯度小于γ~[0-1]倍的原始wt模型的梯度,就表明现在的模型已经是一个γ-不精确解了,就可以接受了,这个γ即接受程度应当是每个用户每一轮都自适应的,但是本文的实验代码只是取了一个随机数,代码中没有γ,让不同客户端完成不同epoch数的训练来模拟这个效果,这可能是一个可以延申的地方。
增加一个近端项的目的是,避免模型距离初始模型过远,减少Non-IID统计异质性的影响,避免局部模型陷入局部最优化而导致全局模型不能实现最优化。
实验
想法
1.创造具体的算法使γ可以真正随轮次和用户的不同自动取值。
如何确定γ?有什么标准?
全部的客户端默认设置一个γ,在每轮中根据参与度,设备硬件计算能力等指标确定一个指标,把所有的客户端按照这个指标排列,并按照正态分布(随便想的,可以等差数列、正态分布都试试)设置γ值。
2.沿用文章的实现,不去真正地设置γ,而是通过划分客户端,使其epoch数不同。
如何“创新”使自己的方法与他的原方法不同呢?原文仅仅是用了掉队率这一指标,把客户端分为活跃的和非活跃的。
再加一个客户端数据量作为指标,如果有一个数据量很大的客户端,但由于数据量和设备硬件问题导致掉队,那么应该是不合适的。还有,文章使用的随机epoch数,改为通过掉队率(参与度)、硬件、数据量等指标来确定。这两种想法本质上一样,就是“采用γ来判断训练结束”还是“直接设置epoch数”的区别。