SMILELab-FL / FedLab

A flexible Federated Learning Framework based on PyTorch, simplifying your Federated Learning research.
https://fedlab.readthedocs.io
Apache License 2.0
743 stars 127 forks source link

平衡迪利克雷分布的数据划分结果相差不大 #326

Closed liyown closed 1 year ago

liyown commented 1 year ago

Describe the bug 平衡迪利克雷分布的数据划分结果相差不大

Environment 这是0.5的情况 image 这是10 的情况 image

Additional context Add any other context about the problem here.

liyown commented 1 year ago

补充:这是CIFAR10Partitioner的结果

liyown commented 1 year ago

已解决,标签不该随机化,这将丢失标签和图像索引的对应关系,相当于在迪利克雷分布之前添加了一个随机分布,将这两行代码注释后,0.5的的分布如下

rand_perm = np.random.permutation(targets.shape[0])

# targets = targets[rand_perm]

image

dunzeng commented 1 year ago

@liyown 厉害啊,请问这个问题是我们提供的代码里面的bug吗?如果是的话,欢迎提交pull-request帮助我们修正。

liyown commented 1 year ago

@Zengdun-cs 谢谢,我自己联邦学习代码的数据切割部分都是借鉴于这个仓库,所以基本上都去看了实现代码。 稍后将提交pull-request,不麻烦的话,另外我想请教一下您几个问题 1、我看联邦学习的开山之作里,cifar10用一个很简单的模型,加了几个数据预处理,准确率可以达到86,但是我很难训练到这个准确度 2、在100个客户端最多只有两个类别的情况下,每次选取10个客户端,将难以训练(训练条件一样,但是数据分割的实现可能不一样),准确率如下,但是论文里面是很光滑的。 image 3、在客户端使用优化器,每次通信后需要保存优化器的状态吗,例如SGD的动量信息,adam的梯度累计,还是每次本地训练都实例化一个新的优化器。 期待您的解答,这几个疑惑困恼我许久,对比试验无法顺利进行。

dunzeng commented 1 year ago

@liyown

  1. 我的经验里CIFAR10的实验需要比较精细的调优,且受non-iid和模型设置影响较大,很多paper在cifar10上也没有达到80的效果。比如我的研究复现里,[Adaptive Federated Optimization]这篇文章是比较sota的,他的结果仍然没有达到80以上。
  2. 论文report的curve可能会调用滑动平均去平滑一下,我个人的non-iid研究实验,锯齿型曲线是常见的。
  3. 我认为这是一个很好的问题,值得去深入调查一下。FedLab的实现里没有考虑缓存本地优化状态,因为根据标准的联邦学习范式,本地优化器状态是没有被缓存的。FedOpt,SCAFFOLD的实现里会额外保存一些信息,可以参考我们的复现代码。
dunzeng commented 1 year ago

CIFAR10的实验本地可以用adam优化器,并且增加本地epoch和采用较小的学习率。

liyown commented 1 year ago
3.是的,这是我很疑惑的,如果不保存优化器状态,那么在有限的本地epoch内,Adam的自适应调节将很难起到作用,或者说没有“启动”就结束了。 刘耀文 15798099725 @.***

---- 回复的原邮件 ---- | 发件人 | Dun @.> | | 发送日期 | 2023年07月21日 14:57 | | 收件人 | SMILELab-FL/FedLab @.> | | 抄送人 | liuyaowen @.>, Mention @.> | | 主题 | Re: [SMILELab-FL/FedLab] 平衡迪利克雷分布的数据划分结果相差不大 (Issue #326) |

@liyown

我的经验里CIFAR10的实验需要比较精细的调优,且受non-iid和模型设置影响较大,很多paper在cifar10上也没有达到80的效果。比如我的研究里,[Adaptive Federated Optimization]这篇文章是比较sota的。 论文report的curve可能会调用滑动平均去平滑一下,我个人的non-iid研究实验,锯齿型曲线是常见的。 我认为这是一个很好的问题,值得去深入调查一下。FedLab的实现里没有考虑缓存本地优化状态,因为根据标准的联邦学习范式,本地优化器状态是没有被缓存的。FedOpt,SCAFFOLD的实现里会额外保存一些信息,可以参考我们的复现代码。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

liyown commented 1 year ago
好的,谢谢解答,很愉快的交流,是否可以留一个邮箱,不甚感激 刘耀文 15798099725 @.***

---- 回复的原邮件 ---- | 发件人 | Dun @.> | | 发送日期 | 2023年07月21日 14:58 | | 收件人 | SMILELab-FL/FedLab @.> | | 抄送人 | liuyaowen @.>, Mention @.> | | 主题 | Re: [SMILELab-FL/FedLab] 平衡迪利克雷分布的数据划分结果相差不大 (Issue #326) |

CIFAR10的实验本地可以用adam优化器,并且增加本地epoch和采用较小的学习率。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

dunzeng commented 1 year ago

@liyown 我的邮箱在首页README的最下面,欢迎交流。

AgentDS commented 1 year ago

已修正,谢谢指出