FedCom为SWPU2022届本科毕业设计《基于社区检测的多任务聚类联邦学习》。本研究提出了一种多任务聚类联邦学习(clustered federated learning, CFL)的新方法,该方法的特点是基于社区检测(community detection)来进行聚类簇的动态划分。本研究的方法规避了聚类簇由人工指定的弊端,从而在算法后期对前期错误划分进行动态修正,缓解了因前期划分失误带来的负面影响。
在三个不同数据集上进行的实验表明,相比本文对比的其它几个联邦学习方法,本文提出的基于动态划分的多任务聚类联邦学习方法在大多数情况下表现更好。在大多数情况下,本文所提出的算法划分更加准确,达到的准确率更高,收敛速度更快。其中于本文的算法具有动态调整聚簇的特性,所以即使在最初的几轮迭代中划分错误,也能在后面的迭代中对错误的聚簇划分进行调整,从而取得更佳的精度表现。
整体算法流程分为构建带权无向图、任务簇动态划分、任务簇参数更新三个部分,如下图所示:
本研究将
在实际运行环境下,预先并不知道任务之间的关系,便无法预先为边赋权。本研究认为节点数据分布相似性(边权)可以由模型学习到。可以证明分布相似性和参数间的余弦距离相关[1]:
边权的动态调整如下图所示:
首先,将图的一个社团划分和一个聚类簇相对应。然后,采用依据边的权重划分社团的社团划分算法[2]。该算法在每一轮迭代更新参数后先进行试探性的社团检测。此外,本研究采用模块度$M$对划分质量进行评估,如果划分后的模块度
本研究采用的Louvain社区检测算法[2]是一个采用贪心策略的多次迭代算法,每一次迭代都由划分和重构两部分组成。其中划分步骤只使用局部调整优化模块性,做为初步的簇划分;重构步骤则会聚合当前划分出的聚簇,形成新图用于下一次迭代。
以任务簇为单位进行参数更新的共享。也即相同任务簇内的节点对参数更新求加权平均,其权重根据各任务节点的样本数量来分配,如下式所示:
如下图所示,簇
采用联邦学习的benckmark数据集:EMNIST、CIFAR10、FEMNIST等数据集[3]对模型进行评估,采用Dirichlet分布对数据集进行Non-IID划分。下图是对EMNIST数据集采用Dirichlet分布示意图:
假设有
-
$k=2$ ,则client$1-5$ 不变,client$6-10$ 的数据进行旋转$180°$ 。 -
$k=3$ ,则client$1-3$ 不变,client$4-6$ 中图片旋转$120°$ ,client$7-10$ 图片旋转$240°$ 。 -
其它
$k$ 值的情况以此类推。
下面是对CIFAR10数据集进行翻转示意图:
在EMNIST数据集上,
表头 | 精度( |
精度( |
精度( |
---|---|---|---|
Local | |||
FedAvg | |||
Clustered | |||
Ditto | |||
Ours |
可见模型评估精度在各个
在
在CIFAR10数据集上,
算法 | 精度( |
精度( |
精度( |
---|---|---|---|
Local | |||
FedAvg | |||
Clustered | |||
Ditto | |||
Ours |
可见模型评估精度在多数
在
在FEMNIST数据集上,
算法 | 精度( |
精度( |
精度( |
---|---|---|---|
Local | |||
FedAvg | |||
Clustered | |||
Ditto | |||
Ours |
可见模型评估精度在各个
运行以下命令安装环境依赖:
pip install -r requirements.txt
注意我的Python版本是3.8.13。此外尤其还需要注意Matplotlib版本需要满足<=3.4.3,否则社区动态划分的可视化部分会报错。
运行:
python main.py \
--dataset CIFAR10 \
--method My \
--n_rounds 300 \
--n_clients 10 \
--n_clusters 2
dataset
参数用于选择数据集,选项有:EMNIST
, FashionMNIST
, CIFAR10
,CIFAR100
, Shakespeare
;
参数method
用于选择需要验证的方法,选项有:My
,Clustered
, FedAvg
, Ditto
, Local
;
参数n_rounds
用于调整迭代轮数;
参数n_clients
用于调整客户端个数;
参数n_clusters
用于初始化数据分布中潜在的聚类簇个数(潜在的$k$值)。
运行完毕后,可于result_pic
目录下查看实验的动态运行结果,其中result_pic/cluster_log.html
记录每轮迭代的聚簇划分情况,result_pic/result.png
记录在测试集上的准确率(所有client在本地测试后平均)随迭代轮数的变化曲线,result_pic/pecialized_acc.html
为更详细的每个client在每轮迭代中的测试集评估结果。此外,你还可以于result_pic/graph
目录下查看社区动态划分的可视化结果。
[1] Sattler F, Clustered federated learning: Model-agnostic distributed multitask optimization under privacy constraints[J], TNNLS 2020
[2] Blondel V D etc. Fast unfolding of communities in large networks[J]. Journal of statistical mechanics: theory and exp, 2008
[3] https://github.com/TalwalkarLab/leaf
[4] Sattler F, Müller K R, Samek W. Clustered federated learning: Model-agnostic distributed multitask optimization under privacy constraints[J]. IEEE transactions on neural networks and learning systems, 2020, 32(8): 3710-3722.
[5] Li T, Hu S, Beirami A, et al. Ditto: Fair and robust federated learning through personalization[C]//International Conference on Machine Learning. PMLR, 2021: 6357-6368.