Closed JokerZhang66 closed 8 months ago
loss值训练几轮之后为Nan,学习率从0.1-0.00001调整都没用,SCAFFOLD参数没动,不知是否实现上有问题
SCAFFOLD
还有一个超参数server_learning_rate
,需要匹配local_learning_rate
进行调整。
按照我之前用常见的模型跑的情况来看,SCAFFOLD
有时候确实会发散,何况你这里用的还是你自己的myCNN。
更重要的一点是:虽然SCAFFOLD
给了收敛性的理论证明,但SCAFFOLD
假设每个client每个iteration执行相同数量(K)的SGD steps,这与大多数其他论文中的实验设定不匹配,也与FedAvg考虑的non-IID场景不匹配。而本项目采用的是用的最多的non-IID场景,也就是FedAvg的那种。每个client每个iteration执行相同数量(E)的local epochs,每个epoch都会完整过一遍该客户机的整个training set,由于unbalanced data,不同client上的training set大小不一样,所以每个client上的SGD steps都不同。
所以,其实SCAFFOLD
能适用的场景比较有限。你可以手动修改数据库分割代码,来匹配SCAFFOLD
的场景。