1. 标题

Communication-Efficient Heterogeneous Federated Learning with Sparse Prototypes in Resource-Constrained Environments
资源受限环境下基于稀疏原型的高通信效率异构联邦学习
①研究的是“异构联邦学习”,说明各客户端差别很明显。
②解决的问题是联邦学习中的“通信效率不足”,使用的方法是“稀疏原型”。

2. 摘要

①在资源受限环境中,联邦学习需要频繁在客户端和服务器之间交换模型信息,通信开销较大。现有的基于原型的联邦学习方法虽然不直接传输完整模型参数,而是传输类别原型,因此能够减少通信量,但当特征维度较高、类别数量较多时,原型本身也会变得很大,通信效率会明显下降。此外,不同客户端可能使用不同的模型结构,传统联邦学习方法难以适应这种模型异构问题。
②本文方法

——>原型联邦学习:原型联邦学习并不是完全不使用模型参数。客户端仍然会在本地训练模型,只是客户端之间共享和聚合的核心信息从“完整模型参数”变成了“类别特征原型”。
——>第一个模块大致就是“解决通信开销太大”的问题;第二个模块大致就是“解决不同客户端贡献不公平、模型性能下降”问题。

3. 场景流程

①每个客户端都有自己的数据和模型
客户端可以理解成一辆车、一台手机或一个机构。它有自己的本地数据,以及一个能处理数据的模型。不同客户端的数据不一定相同,模型结构也可以不同。

②服务器先给类别分配“特征位置”
假设有很多辆车参加联邦学习,每辆车都用自己的车载摄像头数据训练本地模型。它们想一起改进“汽车、行人、交通标志”的识别能力,但原始图片不上传。
服务器给每个类别发一张固定的“选数清单”,比如规定“汽车原型只传第 2、5、9……这些位置”,而“行人原型只传另一组位置”。车 A 和车 B 都处理“汽车”时,必须保留相同编号的特征位置。比如都传第 2、5、9 维,这样服务器收到后能把对应的数字放在一起汇总。

③客户端先用自己的数据训练本地模型
比如某客户端有汽车和行人的图片,就用这些图片训练自己的模型。模型会学习如何从图片中提取有用信息、区分不同类别。
第一轮开始时还没有服务器的全局原型可参考,所以先做普通本地训练;之后的轮次才会利用服务器发回的原型。

④模型把样本变成“特征”,客户端再按类别求平均,得到原型
以“汽车”类别为例:客户端把本地多张汽车图片输入自己的模型,每张图片会得到一串特征数字。客户端把这些汽车图片的特征求平均,得到本地的“汽车原型”。
所以原型不是模型,也不是模型参数,而是模型对本地某一类数据的概括性特征总结。客户端没有某个类别的数据,就无法生成该类别的本地原型。

⑤客户端用 CPS 压缩原型
普通原型可能有很多维度。客户端按照第 2 步收到的维度表,只挑该类别被分配的位置保留并传输,其他位置不发。这样做有两个作用:减少传输数字的数量;让不同客户端对同一类别保留相同位置,避免大家各自保留的位置不同,汇总后反而把所有维度都占满。

⑥客户端用 APS 调整原型的贡献,再上传给服务器
假设客户端 A 有很多“汽车”样本,客户端 B 只有少量“汽车”样本。APS 会把各自的本地汽车原型按本地该类样本数量进行缩放。直观地说,数据较多的客户端提供的汽车原型,在汇总时会有更大影响。
客户端上传的是压缩并缩放后的类别原型,不是汽车图片,也不是完整模型参数。论文这样设计,是为了在考虑样本数量影响的同时,不必把类别样本数单独作为信息上传。

⑦服务器把同一类别的原型汇总,形成全局原型
服务器收到客户端的原型后,按类别分别汇总:把汽车原型和汽车原型放在一起聚合,行人原型和行人原型放在一起聚合。得到的是“全局汽车原型”“全局行人原型”等。【服务器汇总的是类别原型,不是模型权重,所以它不会因此得到一个完整的全局模型。】

⑧服务器把全局原型发回客户端,客户端恢复位置并继续训练
服务器把压缩后的全局原型发回客户端。客户端按照之前那张维度位置表,把收到的数字放回对应位置,其他位置补零。之后客户端用这些全局原型作为训练参考,继续训练自己的模型。
下一轮,客户端又会从自己的新模型和本地数据生成新原型,再压缩、上传、汇总。这个循环持续进行。

⑨训练结束后,每个客户端保留自己的模型
最终得到的是多个经过协同训练的本地模型,以及服务器端汇总的全局类别原型。不是一个由服务器聚合出来、可以直接下发使用的统一全局模型。

4. 总结

正常情况下:

而这篇论文的主要创新点如下:

最后训练出来的东西是在各自的客户端中的

感觉这原型就和我看的其它那论文中的“只上传目标级特征”一样,搞不懂有什么区别,好像只是换了个说法……【Ai给我区别如下】

这篇论文主要提出了两样东西:
①提出 CPS:类别级原型稀疏化

②提出 APS:自适应原型缩放

而论文中的TinyProto框架就是上面这两个东西的结合体。