本期我们将为大家介绍最近开源的「个性化联邦学习代码库」。联邦学习(Federated Learning, FL)是近几年非常热门的一个研究方向。它研究的问题是在「保护数据隐私安全」的前提下,「聚合分散数据中的信息」,学习强大鲁棒的模型。在联邦学习中,存在一个问题,在客户端数据「非独立同分布」(Non-IID)情形下,如何让每个客户端获取适合自己的「个性化」模型?尽管已经有很多学者对个性化联邦问题展开研究,也有一大批公共库进入公众视野。但是,依然缺少一个个性化联邦学习研究领域入门研究者更容易学习、拓展、公平比较的库。因此,我们重新整理和实现了一些个性化联邦学习方法,采用同样的基础代码和网络结构、用统一的评估流程进行评估。
「代码地址」:https://github.com/microsoft/PersonalizedFL
代码主要作者:MSRA前实习生、中科院计算所博士生卢旺、MSRA研究员王晋东
背景介绍
什么是个性化联邦?
联邦学习就是在保护客户端数据安全的前提下,进行有效的客户端数据信息聚合的机器学习范式。联邦学习领域的开山之作FedAVG[2]通过传递聚合客户端的梯度信息代替直接传递数据来达到保护数据安全的同时进行客户端信息交互的目的。尽管FedAVG已经能解决很多现实中的问题,但是它在遇到个性化联邦学习的时候会遇到以下几个问题。
各客户端模型表现差; 收敛速度慢,交互传递代价大。
考虑一下个性化联邦的定义,个性化联邦主要针对的是各客户端数据存在「分布差异」的情形下,为每个客户端训练一个「专有」的模型。FedAVG并不关注客户端数据分布差异性,且只建立统一的共有模型,因此,在处理个性化联邦时,无能为力也是理所当然。
个性化联邦学习的经典方法
现实中存在着大量的个性化联邦问题,比如不同地区医院的数据分布往往存在差异性,因此亟需针对性的解决方案。
FedBN[5]是一种通过维护本地客户端模型BN(Batch Normalization)层参数不变,共享聚合其它层参数的个性化联邦方法,它主要通过BN层参数能潜在代表数据特征分布的特点,达到解决特征偏移个性化问题的目的。在FedBN的基础上,FedAP[3]考虑了客户端之间的相似度,通过Wasserstein距离,计算客户端数据分布的距离,让相近的客户端在聚合的时候起到更大的作用,从而以一种软分组聚合的形式,达到为每个客户端构建专有个性化联邦模型的目的。FedAP的核心更新公式如下,
其中BN层参数仍然维持不变,其它参数加权聚合,权重通过客户端数据特征统计值距离获取。实验表明,FedAP个性化「精度更高」,同时更重要的是,「在通信代价受限的情况下,FedAP表现了强大的稳定性」。
在普通个性化联邦问题的基础上,MetaFed[4]更进一步,考虑了一个更加困难的现实情形,客户端各自分组构成不同的联邦,且不存在中央服务器,如何为每个联邦构建个性化模型?MetaFed首次提出一种环形的信息传递架构,将整个联邦过程分成共有知识累积以及个性化两个阶段,通过自适应的知识蒸馏方法,自适应地进行知识的传递和丢弃,来达到为每个联邦构建一个专有模型的目的。MetaFed的框架如下,
实验表明,MetaFed不仅仅可以解决「特征偏移」个性化问题,还可以解决「标签偏移」个性化问题。同时,「在受限通信代价情况下,它表现出远超过FedAVG的性能」。
现有的开源库
联邦学习是一个近年来相对热门的领域,受到越来越多学者的关注。尽管目前已有众多开源代码库,然而在实际研究应用中依然存在以下问题:
「对入门研究者不友好」:包含大量核心算法外的代码 「不易拓展」:代码模式相对固定,难以拓展自己的算法以及数据集,进行公开公正的对比 「不够全面」:缺乏数据处理等模块,或仅包含标签偏移情形 「其它问题」:仅包含一些基线方法、模块不够清晰...
考虑到以上这些问题,为了方便个性化联邦领域入门者更快地进入研究,我们大幅度简化了个性化联邦学习的库,构建了一个基于PyTorch的「容易学习、容易拓展、方便公平比较、相对全面」的开源库:「PersonalizedFL」。
如何使用
首先需要下载我们的库,并进入相关目录,安装torch库:
git clone https://github.com/microsoft/PersonalizedFL.git
cd PersonalizedFL
然后根据自己的需求,按照run.sh
文件,修改自己的运行脚本。
当然你也可以完全使用自己的算法或者自己的数据集进行相关的拓展。
「PersonalizedFL」目前支持「六种」个性化联邦算法:独自训练(baseline),FedAvg,FedProx,FedBN,FedAP,MetaFed。如果需要拓展自己的算法,只需:
在alg中加入算法,在alg/algs.py中import算法; (可选)在alg/core中改变通信模式,在network/models.py中加入模型,在main.py中加入独有超参数; 编写脚本指令,然后运行。
经过这三个简单步骤,就可以很快与这6种方法同台比较。
「PersonalizedFL」目前支持「八个」常用的数据集:VLCS、PACS、Office-Home、PAMAP2、COVID-19、OrganS-MNIST、OrganA-MNIST、OrganC-MNIST。这八个库包含时序和图片两个模态,包含特征偏移和标签偏移两种情形。这八个数据集在我们的库中都提供了下载链接。若想使用自己的数据集进行实验,可以按照自己喜欢的方式组织文件结构,然后修改datautil/prepare_data.py
文件即可
实验结果
我们对OrganS-MNIST提供了一个结果,因为数据的划分会导致结果的变化,所以我们以split/medmnist0.1中提供的划分为准(也可以使用datasplit.py中的函数类自己进行划分)。run.sh中我们提供了部分方法的运行脚本。
Non-iid alpha | Base | FedAvg | FedProx | FedBN | FedAP | MetaFed |
---|---|---|---|---|---|---|
0.1 | 73.99 | 75.62 | 75.97 | 79.96 | 81.33 | 83.87 |
0.01 | 75.83 | 74.81 | 75.09 | 81.85 | 82.87 | 84.98 |
总结
「欢迎有志之士将自己的算法、新的算法实现上来,一起将联邦个性化变得更美好!」
Reference
[1] Lu, Wang and Wang, Jindong. PersonalizedFL: Personalized Federated Learning Toolkit. GitHub - microsoft/PersonalizedFL: Personalized federated learning codebase for research
[2] McMahan, Brendan, et al. "Communication-efficient learning of deep networks from decentralized data." Artificial intelligence and statistics. PMLR, 2017.
[3] Lu, Wang, et al. "Personalized Federated Learning with Adaptive Batchnorm for Healthcare." IEEE Transactions on Big Data (2022).
[4] Yiqiang, Chen, et al. "MetaFed: Federated Learning among Federations with Cyclic Knowledge Distillation for Personalized Healthcare." FL-IJCAI Workshop 2022.
[5] Li, Xiaoxiao, et al. "FedBN: Federated Learning on Non-IID Features via Local Batch Normalization." International Conference on Learning Representations. 2021.