
作为常年混迹各种学术会议和开源社区的人我对IJCAI国际人工智能联合会议一直有特殊关注。这个会议在AI圈子里地位不用多说每年收的论文基本代表了当下AI研究的真实风向。今年的会议上杨强教授关于联邦学习的分享引起了不少讨论。今天不聊八卦也不做会议流水账就围绕这个主题把联邦学习从原理、痛点、技术前沿到落地场景从头到尾拆一遍。如果你正准备调研或者上手联邦学习这篇文章应该能帮你省不少时间。1. 一张图理解联邦学习为什么它成了数据协作的“标准答案”1.1 从“数据集中训练”到“模型围着数据跑”传统机器学习或者说中心化机器学习逻辑很简单把各方数据收集到一个中心节点比如一个数据机房然后集中训练模型。这种方式过去十几年确实好用因为数据多、算力集中、工程实现方便。但当数据分布在不同机构——医院、银行、手机厂商、IoT设备——事情就麻烦了。数据格式、隐私权限、合规要求各有不同最关键的是很多场景根本不允许你把这些数据搬出本地。杨强在分享中反复强调一个词叫“数据不动模型动”。这是联邦学习最核心的设计哲学数据保留在本地模型在各方之间传递和聚合。你有一个模型在A机构本地训练一轮把模型参数而不是数据发给中心服务器中心把各家参数聚合更新出全局模型再分回去循环往复。整个过程数据不出本地模型却越练越聪明。这句话听起来简单但背后是把整个工程范式翻了过来。数据管道、特征工程、模型训练、上线部署每一个环节的“边界条件”全都变了。这也是为什么联邦学习从2016年Google提出到现在真正大规模落地的案例并不多——不是概念不好而是工程复杂性远超想象。1.2 联邦学习解决的“三座大山”过去我们做跨机构数据合作通常逃不过三座大山。第一座是数据孤岛。数据在各家手里标准不一致、ID不对齐、字段含义天差地别。即使各方愿意合作光数据清洗就要消耗大量人力。第二座是隐私合规。医疗、金融、政务这类敏感数据出域即风险。很多机构宁可数据烂在自己手里也不敢冒合规风险。第三座是利益分配。就算数据能合模型是谁的效果提升是共享的但投入成本怎么算这个在商业落地中特别现实。联邦学习的设计刚好同时回应了这三座大山。数据不出域解决合规问题参数聚合解决数据孤岛问题而模型参数本身又可以做成加密和审计的——为利益分配提供了技术基础。所以你现在看到凡是讲跨机构数据协作的会议基本绕不开联邦学习。它就是当前数据协作场景下的一个“标准答案”。1.3 联邦学习和分布式训练、加密计算到底什么关系很多新手容易把联邦学习跟分布式训练搞混。同一个集群里用多张GPU卡训练一个大模型那是分布式训练不叫联邦学习。联邦学习的核心特征是参与方之间“数据不可见、算力各自独立、模型通过参数交互”并且参与方之间有信任边界。联邦学习和安全多方计算MPC、差分隐私DP、可信执行环境TEE也不是一回事。严格来说联邦学习是协作框架MPC/DP/TEE是底层技术组件。联邦学习需要MPC来做参数聚合时的安全保护需要DP来防止通过参数反推数据需要TEE来提供硬件级可信环境。杨强在分享里把联邦学习比作“大厦骨架”隐私计算技术则是“砖块和钢筋”。两者是组合关系而不是互斥关系这一点理解到位了后面做技术选型就不会跑偏。2. 技术前沿拆解个性化和模型异构是怎么成为主战场的2.1 从“一个全局模型”到“一套个性化模型”经典FedAvg联邦平均算法的思路很直接所有客户端共享同一个全局模型聚合时按样本量加权平均。这个方案在数据独立同分布IID时效果很好但真实场景几乎没有IID数据。不同客户端的数据分布差异非常大比如两个医院的病例构成完全不同一个擅长心血管、一个擅长呼吸科你硬让它们共享一个模型结果就是两边都练不好。所以最近几年个性化联邦学习Personalized FL成了热门方向。个性化联邦学习不再追求“一个模型打天下”而是让每个客户端在全局模型基础上长出自己的“本地分支”。常见做法包括本地微调后聚合一部分层、用多任务学习结构给每个客户端分配独立任务头、或者按聚类把相似客户端分组训练。杨强团队在这个方向上有过一个很知名的思路——把联邦学习和迁移学习结合起来。迁移学习的思路是“源域”训练好然后迁移到“目标域”。在联邦场景里全局模型相当于源域知识本地个性化就是目标域适配。这个组合在应对Non-IID场景时非常有效。如果做项目调研建议重点关注这几篇LG-FedAvg本地微调全局聚合的折中、FedBN批量归一化层个性化、FedPer只聚合特征提取层、本地保留分类层。这三篇分别代表了三种个性化策略理解它们的取舍很多实际问题就有了解法。2.2 模型异构不再要求“每个人都用同一个网络”传统FL框架有一个隐藏假设所有参与方的模型结构必须完全一致。这在工业界非常不现实。有的机构GPU充足想上ResNet50有的机构只有几台旧服务器只能跑轻量模型。如果框架强制统一结构等于把参与门槛抬高了很多合作就谈不拢。模型异构联邦学习要解决的就是这个不同客户端用不同的网络结构依然能协作学习。有两条主流路线。一条是蒸馏路线Knowledge Distillation不直接聚合参数而是让各客户端在公共数据集上输出预测软标签服务器端用这些软标签蒸馏出全局模型从而绕开参数结构不一致的问题。另一条是拆层路线模型分为私有层和共享层只同步共享层。共享层结构统一私有层各自保留。再进一步联邦学习还和Split Learning分割学习结合。把模型在某一层切开客户端保留前半段服务器保留后半段客户端传中间层输出而不是完整参数。好处是模型结构可以不一致坏处是中间输出仍有泄露风险通常配合差分隐私使用。这个方向目前在IoT场景特别受关注因为终端设备算力普遍不足切割模型能明显降低终端开销。2.3 灾难性遗忘联邦场景里最被低估的工程陷阱这次讨论里我特别留意了“灾难性遗忘”这个关键词。单机训练中灾难性遗忘指的是模型学新任务时把旧知识覆盖掉了。在联邦场景中灾难性遗忘有另一种非常典型的表现——客户端分布漂移distribution shift。举个我实际见过的例子某智慧城市项目参与方包括交通、环保、安防三个部门。交通数据在白天量大安防数据在夜间活跃。如果用FedAvg聚合模型可能在“某个参与方的活跃时段”偏向学习该方的数据分布等到另一个时段之前的全局知识就被覆盖了。结果模型在白天好用晚上就失忆。这类问题在单机联邦学习模拟中很难暴露因为模拟用的静态数据集不会有时段切换。对应的解法主要有几个路线。一是弹性权重巩固Elastic Weight Consolidation, EWC在聚合时对重要权重施加“记忆保护”防止被大幅度更新覆盖。这个算法从持续学习领域迁移过来在联邦异构数据上效果不错。二是经验回放Experience Replay在客户端本地保存一小部分历史数据的表示注意这里保存的不是原始数据而是特征表示常见做法是保存低维特征或者使用生成式模型重建样本每次训练时混入历史表示。三是联邦遗忘Federated Unlearning当某个参与方退出协作时要有办法让全局模型“忘记”这个参与方的贡献——既要保障数据被遗忘的权利又不能让模型性能大幅度下降。杨强团队近期在这个方向有过不少产出实现思路一般是在聚合时保留历史快照配合知识蒸馏做定向遗忘。3. 应用场景全解金融、医疗、城市治理的落地姿势3.1 金融风控从“不敢共享”到“加密共建”金融是所有行业里数据敏感度最高、合规压力最大、但数据合作需求也最旺盛的领域。银行、消金公司、保险、征信机构每家手里的数据都只是用户画像的一小块拼图。银行有交易流水消金有借贷历史电商平台有消费偏好。过去这些数据彼此隔离风控模型用了很多传统特征效果天花板很明显。联邦学习在金融风控最经典的应用是“联合建模”。举个例子A银行和B消金联合做信贷风控模型。传统做法要么A把脱敏数据给B但脱敏数据也有重识别风险要么B在自有数据上单独建模效果有限。用纵向联邦学习A银行持有的特征是用户收入画像B消金持有的特征是历史借贷行为双方在样本ID对齐的基础上做联合建模。注意这里不需要把A的数据搬到B而是各自本地算梯度、加密、传输、聚合。最终模型效果预期可以接近“数据集中在一起”的理想上限的90%以上。我在实际项目中见过最典型的坑是“样本对齐”环节。纵向联邦学习要求参与方之间做样本ID求交但如果直接用明文求交等于告诉对方“这个用户我们也有”存在隐信息泄露。当前生产环境一般用PSI隐私集合求交协议基于ECDH或OT扩展实现。选型时一定要搞清楚你的隐私预算和性能要求几千万样本量级下PSI的性能会直接决定方案能不能上线。3.2 医疗健康多中心协作的最大受益者医疗场景可能是联邦学习价值最容易讲清楚的地方。单个医院的数据量有限想训练一个能识别罕见病影像的模型往往样本不够。多中心协作把十家医院的影像数据联合建模理论上模型泛化能力会强很多。但医疗数据受监管约束极严数据根本不允许出院。用横向联邦学习就能绕开这个问题。每家医院本地训练同一个检测网络比如胸部CT的病灶检测网络只把模型梯度或参数传给聚合中心完成聚合后下载新模型继续训练。整个过程病人的影像数据不离开医院内网。国内外已经有不少落地报告比如某些多中心眼科AI研究用联邦学习训练糖尿病视网膜病变筛查模型在多中心数据集上取得了和集中训练相当的效果。这里要给一个实操提示医疗场景的数据异构程度比金融更严重。不同医院的CT设备厂商不同、扫描协议不同、甚至像素尺寸都不同。直接拿FedAvg跑模型很容易在某一家医院“漂移”。建议在医疗场景优先考虑两类策略一是聚合时做基于验证集的动态加权而不是按样本量加权二是引入域自适应层如领域对抗网络在服务器端做特征分布对齐。这两种方式对设备差异多的场景有奇效。3.3 城市治理与IoT千万级终端的轻量协作城市物联网场景是联邦学习设备数量最大的应用方向。想象一下一个城市有几十万个路边传感器、摄像头终端、环境监测设备每时每刻都在产生数据。如果全部回传到中心节点带宽和延迟都是重大挑战。联邦学习在IoT中的价值是把模型训练下沉到终端终端只用本地数据做几轮梯度更新把更新结果传回中心网络传输量比原始数据小几个数量级。这个场景下最需要关注的是终端算力差异和断线问题。终端设备有的算力强有的弱训练速度参差不齐。FedAvg天然存在“木桶效应”——同步聚合模式下最慢的终端决定一轮训练的时间。实践中一般用异步联邦学习如FedAsync服务器不等所有客户端谁先传回更新就先聚合。异步模式能显著提升吞吐量但引入了一个新问题——梯度陈旧度即某个客户端传来的梯度是基于一个较旧版本模型计算的直接加权聚合会引入偏差。所以实际设计时通常会给陈旧度高的更新降低学习率或者减小权重。这是IoT联邦平台研发中最常见的调优点。4. 亲手搭一个最小联邦学习系统4.1 框架选型不是只有FATE做联邦学习除了代码第一个要决定的是框架。目前社区主流选择主要有三类。第一类是工业级平台型框架代表性的是微众银行的FATE。它的一整套组件覆盖了纵向、横向、联邦特征、联邦推理、模型管理生产部署比较成熟适合金融机构——但平心而论FATE的学习曲线相对陡峭架构封装层次多想在里面做自定义算法研究有一点门槛。第二类是研究型框架比如Facebook的Flower、NVIDIA的FLARE还有FedML。它们设计更轻量支持模拟环境方便算法快速迭代。如果你要做的是科研或者算法验证强烈建议用这类框架起步。Flower的API设计很友好100行代码左右就能把FedAvg跑起来。第三类是底层自研。如果项目有特殊需求比如定制协议、和已有系统深集成直接用PyTorch/Distributed通信原语手写也行。好处是完全可控坏处是所有坑都要自己趟一遍。选型建议商业项目求稳选FATE研究验证选Flower/FedML有定制需求直接基于PyTorch二次开发。不要一上来就纠结“哪个最好”先用自己的数据集跑通一个最简单版本比调研一个月配置文档都强。4.2 一张图讲清FedAvg的算法逻辑FedAvg是所有联邦学习算法里最基础的一个后面所有变体基本是“FedAvg某个改进”。理解它相当于理解了联邦学习的骨架。算法流程可以总结为四步循环服务器初始化一个全局模型 $w_0$。每轮训练开始服务器从客户端集合中选择参与方 $S_t$把当前全局模型 $w_t$ 分发给这些客户端。选中的客户端在本地数据上跑 $E$ 个epoch的随机梯度下降算出本地更新 $\Delta w^k$。客户端传回更新服务器加权平均得到新一轮模型 $w_{t1}$权重一般是 $\frac{n_k}{n}$即该客户端本地样本量占总样本量的比例。简单说就是发模型、本地练、传参数、加权平均。这个流程的效率瓶颈在第4步——如果客户端数量多、数据分布差异大简单的加权平均很容易让聚合后的模型震荡。这也是为什么很多改进工作是围绕聚合策略如FedProx加近端项、FedNova做归一化展开的。4.3 自己动手基于PyTorch的FedAvg极简实现用Flower框架跑Flower官方自带例子是最快路径这里给一个“理解原理”版本的极简实现思路适合想弄清楚每一步在干嘛的读者。先定义联邦平均的聚合函数import copy import torch def fed_avg(global_model, client_updates, client_sizes): # client_updates: 每个客户端本地训练后的模型state_dict列表 # client_sizes: 每个客户端的样本数列表 total_size sum(client_sizes) global_state copy.deepcopy(global_model.state_dict()) # 初始化聚合结果 for key in global_state.keys(): global_state[key] torch.zeros_like(global_state[key]) # 加权累加 for update, size in zip(client_updates, client_sizes): weight size / total_size for key in global_state.keys(): global_state[key] update[key] * weight global_model.load_state_dict(global_state) return global_model整个函数看起来简单但有两个细节容易踩坑。第一state_dict中的键顺序必须一致不同模型结构混乱时不能直接相加。所以在联邦场景中所有客户端必须用“同一套模型结构”才能用FedAvg模型异构时就需要用蒸馏路线替代。第二这里展示的是“全量参数聚合”实际工程中建议配置只聚合特征提取层、分类层保留本地这对Non-IID数据的效果改善显著。这个思路实现起来就是在聚合时过滤掉分类层的参数。模拟Non-IID数据来测试效果推荐用以下方式把完整数据集按类别排序再按客户端数量切分。比如CIFAR-10是10类如果有10个客户端每个客户端拿到的数据恰好只属于一个类别——这就是极端的标签Non-IID用来检验算法的鲁棒性非常直观。把这种切分结果分别用集中训练、FedAvg、FedProx跑一遍三者的最终精度差异会让你对Non-IID有个非常直观的感受。补充一句如果你用Flower框架它的MockClient可以免去真实的网络通信本地模拟几百个客户端做实验特别方便。我在论文复现阶段经常用这个功能能省不少时间。5. 工程落地中我踩过的坑和排查实录5.1 模型效果始终上不去先查数据分布再调算法很多人跑联邦学习效果比预期差第一反应就是换更复杂的算法。但根据我的经验80%的情况不是算法问题而是数据分布模拟和评估方式有问题。常见误区1用IID数据验证FedAvg。在IID数据下FedAvg和集中训练效果几乎没差别测不出算法能力这种实验没有实际参考价值。常见误区2评估用全局测试集不看每个参与方的本地测试效果。联邦学习的最终目标是服务每个参与方全局指标好不代表各方都好。正确做法是报告全局测试集指标同时按客户端分组报告指标分布均值、方差、最差客户端表现。如果方差大说明全局模型在某些参与方上处于“偏科”状态需要引入个性化机制。常见误区3模拟客户端数量太少。默认用4个客户端模拟真实场景实验结论很容易过度乐观。真实跨机构场景动辄几十上百个参与方建议至少模拟20个以上客户端。聚合轮数也要相应增加。注意客户端数量增加时如果每轮只选一部分客户端参与即部分参与如每轮随机选择十分之一参与方聚合噪声会明显上升需要适当调整学习率。5.2 通信瓶颈如何优化联邦学习的通信量大不大如果传的是“完整模型参数”那么大模型一次几百MB很正常。在跨公网场景下比如几个城市之间的机构协作带宽受限会直接拖垮训练。业界常用的优化思路有梯度压缩。只传重要梯度、稀疏化或者量化到低精度如8bit通信量可以减少一个数量级。FedAvg本身通信代价就是每轮两个模型大小加上压缩后效率提升非常明显。本地更新轮次增加。增加本地epoch数量相当于每轮通信前做更多计算减少通信轮数。FedAvg论文里的经验是本地epoch从1调到5精度和通信效率有明显权衡增益。但要注意epoch过大可能导致客户端过拟合本地数据加剧模型振荡。分层联邦学习。在IoT场景中终端先跟边缘节点聚合边缘节点再跟中心聚合多跳通信树状结构。这是解决超大规模参与方通信瓶颈的常用架构。5.3 隐私保护应该做到什么程度关于隐私保护我最想提醒的是不要“裸奔”也不要过度堆砌。裸奔指的是只用基础联邦学习框架明文传输梯度。虽然梯度比数据要安全但已有大量论文证明可以从梯度反推原始数据——尤其当batch较小时攻击难度更低。所以生产环境至少要加一层安全聚合Secure Aggregation基于MPC常用的有FATE的SPC或者底层用SecretFlow实现。过度堆砌的问题也很常见把差分隐私、MPC、TEE全部叠加效果看似安全实际让模型收敛速度大幅下降、复杂度成倍增加。我的实践建议是分级保护数据极敏感且参与方互不信任时选TEE安全聚合配合差分隐私加入适量噪声参与方有半信任关系时安全聚合加差分隐私就足够噪声可以控制在小范围。还有一个老生常谈但容易被忽略的问题评估用的测试集同样涉及隐私。很多团队做联邦建模时测试集是从各参与方本地汇总的明文数据这本身就是在暴露数据。生产级的做法是让测试集也通过安全聚合来评估而不是汇总明文数据后统一计算指标。5.4 灾难性遗忘的排查清单如果你在实际训练中发现模型效果越来越差尤其是训练后期出现“回退”现象我建议按这个清单排查先确认是不是学习率过大导致的振荡。联邦场景下全局学习率一般比单机要低建议控制在单机训练学习率的0.3到0.5倍。再检查客户端本地epoch是否过高。本地训练太久模型会偏向本地分布聚合时互相产生冲突。确认数据分布是否随时间漂移。比如金融场景月初月末的借贷行为分布可能明显不同如果数据本身就有时间衰减特征建议引入EWC类权重巩固策略。最后才考虑换更复杂的个性化算法。这条排查路径我试过多次至少能解决九成的“效果回退”问题。切记面目全非的先换算法先找超参和数据层面的原因往往最简单直接。6. 一些个人体会和后续扩展联邦学习这个领域有意思的地方在于它同时踩在“学术”和“工程”两条船上。论文里一个小改动工程落地时可能牵涉到通信协议、加密计算、分布式调度任何一个环节都是坑。我在实际项目中体会最深的一点是不要把联邦学习当成一个“开箱即用”的工具它更适合被理解为一套约束条件下的系统设计方法论。你先想清楚约束条件——数据能不能出域、参与方之间信任到什么程度、训练群体的算力差距有多大——再回头选算法和框架方向就基本不会跑偏。最后再分享一个调研资源的小技巧在搜索引擎或学术库里搜“federated learning survey 2024”这类综述时重点看最近两年的综述重点关注杨强团队、TFF团队和国内隐私计算方向团队的发文。这个领域更新速度极快两年前的综述里有些结论已经不适用了。先把综述里引用的经典文献吃透再顺着引用树往下看最新的论文是效率最高的学习路径。