FedAvg

Communication-Efficient Learning of Deep Networks from Decentralized Data

blog:[1],[2]

code:[1],[2]

1->blog:[1],[2]

baseline:FedSGD,每计算一个client梯度值就传给server进行聚合。fedavg在本地聚合多次,传给server最终聚合。

对于一般的非凸目标函数,参数空间中的平均模型可能会产生任意不好的模型结果。 当我们平均两个从不同初始条件训练的MNIST数字识别模型时,我们恰好看到了这种不良结果。在共享初始化的情况下,对模型求平均值会显著减少整个训练集的损失(比任何一个父模型的损失都好得多)。

mnist数据划分:

iid:打乱划分100个客户端

no-iid:按数字标签对数据排序,将其划分为200个大小为300的碎片,并为100个客户端中的每个分配2个碎片。最终每个客户端只有两种label

C,在每轮上执行计算的客户端的比例;E,那么每个客户端在每轮上对其本地数据集进行的训练通过数,本地客户端训练多少epoch;以及B,用于客户端更新的本地小批量大小,本地数据上的batch size。对于具有nk个本地数据的客户端来说,每轮本地更新次数为:uk=E*nk/B

C:每轮选择客户端的比例。将 C 从0.0(代表每轮计算只选取一个客户端)调整到1.0(选取全部客户端),计算达到要求精确度需要的通信回合数达到预先设定好的 test accuracy需要多少个 round。如果是横线,代表这种方法永远无法达到预先设定的 accuracy。

当FedAvg使用相对较少的交流轮次来训练高质量的模型时,联邦学习是实际可行的

从这个表我们观察出来的这些信息:

  1. Local Batch Size, B 小一点反而有利于 Global Model 的收敛。
  2. 增加 C 对 Full Batch Size (B 是正无穷)帮助不大。
  3. 相对于 IID 的情况,Non-IID 情况下,增加 C 对网络收敛帮助更大。
  4. 从上面看,增加 C 对收敛的提速作用并不是线性的

E 确实不是越大越好。这件事情说来也好理解,如果在每个 local device 优化的太远的话,那么在 local dataset 就 over-optimized 了,而且这样的话,每个 local model 之间的 bias 也太大了。

?随机是随机一次固定还是每次都随机

–>

blog:[1],[2],[3]

每轮训练开始时,中心服务器随机选出m个客户端,将当前的模型参数wt发给这些客户端。在这些客户端上,将本地数据随机分成 B 份,选取其中的一份,进行E次迭代训练,算出本地的 wt+1 k发送给中心服务器。中心服务器收到所有客户端发来的局部模型更新 wt+1 k之后,通过∑nk*wt+1 k/n来进行聚合运算,计算出全局的模型更新 wt+1 。

[6]中介绍了几种数据偏离同分布的常见方式,包括:特征分布倾斜(协变量偏移);标签分布倾斜(先验概率偏移);标签相同、特征不同(概念偏移);特征相同,标签不同(概念偏移);数量倾斜。真实世界中的联邦学习数据集可能包含这些影响的混合,学术研究时都是对某些情况做模拟,而且不同的情况可能也要求不同的聚合策略。

FedProx

Federated Optimization in Heterogeneous Networks

blog:[1],[2],[3],[4]

code:[1],[2]->blog:[1.1],[1.2]

联邦学习在使用过程中面临的两大挑战:

数据异构(主要是用户间数据Non-IID) 系统异构(设备间通信和计算能力的差异)

本文在对 FedAvg 更新策略上稍作调整设计了 FedProx 算法并给出了收敛性证明。

一方面,本地迭代次数 E 的增大能减少通信成本;另一方面,不同 local objectives Fk 在本地迭代次数过多后容易偏离全局最优解,影响收敛。

并且 FedAvg 这种固定 E 的操作没考虑到不同硬件间的差异,如果在固定时间内未完成 E epochs 的迭代就会被系统 drop 掉。

文章指出直接 drop 掉这些用户或者单纯把他们未迭代完成的模型进行聚合都会严重影响收敛的表现。因为丢掉的这些设备可能导致模型产生 bias,并且减少了设备数量也会对结果精度造成影响。

文章提出了 proximal term 来保证对这些未完成计算的 partial information 进行聚合

文章将 FedAvg 作为 FedProx 的特殊情况 (μ=0) ,对原有算法进行了微调,考虑到了数据异构和系统异构的情况,并推导了收敛证明。

通过加入 proximal term 修正项,提高了整体收敛的稳定性。通过对本地设备动态调整迭代轮数,保证了对系统异构的容忍性。

FedProx对clients端的Loss加了修正项,使得模型效果更好收敛更快。

1.它通过限制本地更新,使其更接近初始(全局)模型,而不需要手动设置本地epochs的数量,解决了统计异质性的问题。(限制)

2.它允许安全地合并由系统异构性产生的可变数量的本地工作。(辅助)

在FedProx中,将FedAvg泛化,允许根据本地数据和可用的系统资源在本地执行可变数量的工作(相比于丢弃设备,该机制会聚合从掉线设备发送的部分结果。)

FedProx的特点 1、可以应用于Non-IID场景。 2、可以选择任意的local server,而不单单局限于SGD。 3、允许某些设备使用inexact update。 4、不要求所有设备都参与每轮global update。 5、当μ=0,local solver选择SGD,不同设备在每轮global update都使用相同的local epoch,FedProx就变成了FedAvg,所以实际上,FedProx是FedAvg的一种泛化形式。

文章提出了一个基于FedAvg的优化框架Fedprox,用于解决联邦学习中的数据异构和设备异构问题。 通过加入 proximal term,缓解了数据异构性,提高了全局模型收敛的稳定性。 通过Tolerating partial work,缓解了设备异构性。

本文提出了称之为tolerating partial work得工作方式,意为把固定工作量变为可变工作量来进行更新,来防止由于硬件、网络等问题导致的不能按时更新的问题

在针对于损失函数加了一个余项后,可以有两个优点: 1.通过限制本地更新,也就是得到一个不精确的解不用手动调整E轮次; 2.允许系统异构的设备算力等因素存在,可以完成部分任务,而不是指定的全部任务;

能够处理异构联邦数据,同时保持类似的隐私和计算优势; 分析了框架的收敛性,不仅考虑局部函数间存在统计异构表征,还考虑到实际的系统约束; 对统计异构的处理方法,受到求解线性方程组的随机化Kaczmarz方法的启发,该方法的类似假设已被用于分析其他情况下的SGD变种; 所提框架在异构联邦网络中有更好的鲁棒性和稳定性。

fedprox就是,但这俩paper的出发点不一样。fedprox是通过正则缓解local update时的weight divergence.但moon的motivation是global效果好,local不行。区别在于在moon里不仅要靠近 global,还要远离上一步的local model

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class FedProxOptimizer(Optimizer):
    def __init__(self, params, lr=0.01, lamda=0.1, mu=0.001):
        if lr < 0.0:
            raise ValueError("Invalid learning rate: {}".format(lr))
        defaults=dict(lr=lr, lamda=lamda, mu=mu)
        super(FedProxOptimizer, self).__init__(params, defaults)

    def step(self, vstar, closure=None):
        loss=None
        if closure is not None:
            loss=closure
        for group in self.param_groups:
            for p, pstar in zip(group['params'], vstar):
                # w <=== w - lr * ( w'  + lambda * (w - w* ) + mu * w )
                p.data=p.data - group['lr'] * (
                            p.grad.data + group['lamda'] * (p.data - pstar.data.clone()) + group['mu'] * p.data)
        return group['params'], loss

NOIID

BLOG,CODE

数据分割的方式:

1.Label distribution skew 标签分布倾斜

  • Quantity-based label imbalance:基于数量的标签不平衡

    每一方只能获得特定个数的标签(例如在MNIST中,只能获得任意2个标签的样本构成数据集)

    对于有相同标签的一组参与方,将对应标签的数据集随机并平均地分配到参与方手中

  • Distribution-based label imbalance:基于分布的标签不平衡

    根据狄利克雷分布,每一方将获得对应地数据集,具体来说: pk∼DirN(β)

    其中 pk,i 记为类别k分到第i方的数据量

2.Feature distribution skew 特征分布倾斜

  • Noise-based feature imbalance 基于噪声的

    首先将数据平均并随机分配至各参与方手中

    对图像数据集加上x ∼ Gau(σ · i/N ) 均值为0,方差为σ · i/N的高斯噪声

  • Synthetic feature imbalance 生成特征不平衡

    文章中生成了一个feature imbalance的数据集FCUBE

  • Real-world feature imbalance 现实世界的特征不平衡

    EMNIST数据集中,手写数字来自于不同的人,因此将不同的人的数据分发给不同的参与方,即可实现天然的feature imbalance

3.Quantity skew 数量偏移

  • 各参与方数据集大小不同

狄利克雷分布(Dirichlet Distribution)

BLOG

可视化

Yasaman Khazaeni. Bayesian nonparametric federated learning of neural networks. In InternationalConference on Machine Learning, pp. 7252–7261. PMLR, 2019.这篇文章带的好头

fedavg+finetune yyds?

Rethinking Data Heterogeneity in Federated Learning: Introducing a New Notion and Standard Benchmarks


隐语小课

模型聚合、梯度聚合

通信优化:client采样–RiberoM, Vikalo H. Communication-efficient federated learning via optimalclient sampling[J]. arXiv preprint arXiv:2007.15197, 2020.

noiid:

据client和server端的样本分布得到对应的JS散度,并以JS散度作为client端模型更新时的权重系数

根据client端模型和server端模型的差异,对权重系数进行迭代更新

在进行server端模型聚合时,将client模型在client验证集上的score而非样本数量作为该模型的权重进行聚合。ww


FedProx算法:FedProx基于FedAvg改进了局部目标,直接限制了本地更新的大小,具体而言,它在局部目标函数中引入了一个附加的L2正则化项,从而限制局部模型与全局模型之间的优化距离,这是一种限制局部更新的直接方法,因此平均模型离全局最优值之间的距离被缩短,并引入了超参数μ来控制L2正则化的权值。

总体而言,其对FedAvg的修改是轻量级的且易于实现,FedProx会带来额外的计算开销,而不会带来额外的通信开销。然而,其中一个问题是用户可能需要仔细调整μ才能获得良好的准确性:如果μ太小,则正则化项几乎没有影响;如果μ太大,则局部更新很小,收敛速度较慢。

FedNova,1,2

最近的另一项研究FedNova对FedAvg的模型聚合阶段进行了改进,其认为当各方具有不同的计算能力时(时间限制或不同的本地数据集大小),不同客户端参与方可能在每轮需要执行不同数量的局部步骤(自适应调整)。

因此,为了确保全局更新没有偏差,FedNova在更新全局模型之前,根据其局部迭代次数对每一方的局部更新进行归一化和缩放。FedNova也只对FedAvg进行了轻量级的修改,并且在更新全局模型时计算开销可以忽略不计。

SCAFFOLD,2,3

当客户端数据是非独立同分布时,FedAvg的收敛速度会受到所谓client-drift的影响。作为一种解决方案,本文作者提出了SCAFFOLD,该算法使用控制变量(方差缩减)来纠正其局部更新中的client-drift。

client-drift在之前的一篇文章中实际上已经提到过了:如果数据是独立同分布的,那么本地模型训练较多的epoch会加快全局模型的收敛;如果不是独立同分布的,不同设备在利用非IID的本地数据进行训练并且训练轮数较大时,本地模型将会偏离初始的全局模型。

如果客户端数据分布不一致,那么本地模型在更新时会朝着不同方向进行优化,这会使得我们很难得到一个普适的全局模型。

为了缓解client-drift,本文作者提出了一种新的联邦优化算法SCAFFOLD,SCAFFOLD引入了服务器控制变量c和客户端控制变量ci,控制变量中含有模型的更新方向信息,通过在本地模型的更新公式中添加一个修正项c−ci,SCAFFOLD克服了梯度差异,有效缓解了client-drift。

pfedme blog

DITTO

MOON:模型对比联邦学习,2

FedAsync:异步联邦优化

FedBN,2

元学习

FedIC: 通过校准蒸馏对非独立同分布和长尾数据进行联合学习(ICME 2022)

NIID-Bench

fedsim:根据梯度聚类,每个聚类先聚合,然后再聚合。在iid下一般。

PENS:blogPDFPDFCode去中心化的fl,没有服务器端,每个客户端在网络中与若干个邻居结点随机通信,分别用本地数据测试这n个模型的loss,选择性能最好的前m个客户端作为具有类似数据分布的邻居,然后聚合成一个新的模型。本文提出的方法在去中心化联邦学习架构下能够有效地帮助客户端节点识别具有相似数据分布的相邻节点,并以这种方式指导客户端节点的学习以实现高性能。PENS的工作原理是利用训练损失在网络中找到类似数据分布的客户端,然后专注于彼此之间的通信,而不是随机的邻居。

blog:[1],[2]

paperlist:

[1]

[2]

[3]

[4]

[5]

[6]

综述:1234


code:[1]-[blog]

[2]-[blog]

[fedlab]-blog->github

cvpr2022

[1] Federated Class-Incremental Learning(联邦类增量学习) paper:https://arxiv.org/abs/2203.11473 code:https://github.com/conditionWang/FCIL

[2] FedDC: Federated Learning with Non-IID Data via Local Drift Decoupling and Correction(通过局部漂移解耦和校正与非 IID 数据进行联邦学习) paper:https://arxiv.org/abs/2203.11751 code:https://github.com/gaoliang13/FedDC

[3] FedCor: Correlation-Based Active Client Selection Strategy for Heterogeneous Federated Learning(用于异构联邦学习的基于相关性的主动客户端选择策略) paper:https://arxiv.org/abs/2103.1382


Paperlist

1

很不错的总结2-blog


FedDecorr iclr2023 blog

数据异构性 场景 进展 bili

虚拟同构化学习 blog