ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

联邦学习三大范式详解:横向、纵向与联邦迁移的选型与实践

联邦学习三大范式详解:横向、纵向与联邦迁移的选型与实践 从一开始的单一模型训练到后来的分布式计算再到今天这个绕不开的隐私计算时代机器学习工程里最让人头疼的往往不是算法本身而是数据能不能动、敢不敢动。联邦学习这个词这几年被反复提起但真正把它拆开看会发现横向、纵向、联邦迁移这三条技术路线解决的问题完全不一样选错方向比不选更痛苦。这篇文章我想抛开各种百科式的定义从实际业务视角聊聊这三种联邦学习范式到底是怎么运作的、各自适合什么场景、以及我在真实部署过程中踩过的那些坑。1. 三个名字看着像兄弟实际解决的是三类完全不同的数据困境我第一次接触联邦学习的时候习惯性地把它归类为分布式训练的一种变体。这种理解不能说是错的但非常容易让人误判技术选型。传统分布式解决的是“数据太多、一台机器算不动”的问题而联邦学习解决的是“数据在各个机构手里、因为隐私和合规原因不能集中到一起”的问题。这两者的出发点完全不同。具体到业务场景里数据被割裂的方式通常有三种三种范式正好对应三种割裂形态。第一种情况两家银行各自有几十万本地客户客户名单几乎不重叠但记录的特征字段高度一致比如年龄、收入、历史信贷记录。你有的我也有只是人不同。这种叫样本不同、特征重叠横向联邦学习就是干这个的。第二种情况一家银行和一家电商平台服务的是同一批城市用户但银行记录的是资产负债和还款表现电商记录的是消费偏好和浏览行为两边样本高度重叠可描述用户的维度完全不同。这种叫样本重叠、特征不同纵向联邦学习负责把两边特征凑到一起。第三种情况更拧巴两边既没有太多重叠的样本特征空间也差异很大比如一个是国内某银行的信贷数据另一个是东南亚某家小贷公司的交易流水从特征到客群都有差异但又希望能借用对方的知识来增强模型。这种就叫联邦迁移学习。三种需求没有优劣之分只是数据隔离的现实世界恰好演化出了这三种协作方式。做技术选型之前先回答清楚一个问题我手里这份数据和合作方那份数据到底在“样本维度”上重叠还是在“特征维度”上重叠这个判断直接决定后续整个技术架构。还有一个容易混淆的点需要澄清联邦学习不等同于安全多方计算也不等同于差分隐私。它是一个系统级设计强调的是“数据不动模型动”而安全多方计算、同态加密、差分隐私这些是它在实现过程中可能用到的隐私保护技术组件。理解了这层关系后面看各种框架的功能模块就会顺很多。2. 横向联邦学习参与方数据特征一样样本各管各的横向联邦学习是三种范式里最容易理解、工程实践也最成熟的一种。它的典型架构是中心化联邦一个协调方服务端把初始模型推给各个参与方各参与方用本地数据训练若干轮然后只把模型更新梯度或者参数发回服务端服务端聚合后再下发新模型。整个过程中原始数据从未离开本地隐私边界非常干净。2.1 FedAvg聚合逻辑为什么各练各的还能得到一个好模型这里绕不开的算法是联邦平均FedAvg。它的核心思路很朴素每一轮训练中服务端随机挑选一部分客户端参与每个被选中客户端在本地用自己的数据跑若干个epoch的梯度下降训练结束后服务端将各客户端传来的模型参数按样本量加权平均作为下一轮的全局模型初值。写成公式就是这样的感觉 全局模型 (w_{t1}) 服务端计算出的加权平均结果权重正比于该客户端本地样本量 (n_k) 占总样本量 (n) 的比例把所有参与客户端的更新加权求和后更新全局模型。这其实就是经验风险最小化在分布式环境下的近似解。它成立的前提是所有客户端本地数据是独立同分布采样自同一个总体。但这个前提在真实场景里非常脆弱后面我会专门讲这个坑。我用一个生活中的类比来解释FedAvg大家各自在家做同一套数学卷子的最后一道大题做完后只汇报自己的解题思路和关键步骤老师把这些思路汇总成一套新的标准答案再发回去。不交卷子只交心得。2.2 横向联邦的典型落地场景横向联邦最常见的落地场景。输入法联想词训练手机上的键盘数据极具隐私性没有人愿意把自己的打字记录传到服务器但输入法公司又需要海量语料来训练联想模型。横向联邦让每台手机在本地训练模型只上传梯度服务器聚合出全球通用的语言模型。多家医院联合训练医学影像模型各家医院都拍CT、X光片影像特征空间一致但患者群体不同不能直接合并病例导出。用横向联邦可以共同训练一个泛化能力更强的病灶识别模型而不共享任何影像原图。不同地区的分支机构联合建模比如一家集团在各省有独立子公司每家公司客户不同但业务字段统一用横向联邦统一风控策略省去数据汇总的合规风险。2.3 横向联邦的通信机制设计横向联邦的每个训练轮次参与客户端都需要下载全局模型、上传本地更新。通信频率 训练轮数 × 参与客户端数这个量在模型体积稍大时非常吓人。比如一个数百MB的推荐模型如果要跑上百轮单是网络传输成本就可能超过算力成本。我在工程里常用的优化手段有几种增大本地迭代步数让客户端多训练几个epoch再上传减少通信轮次。梯度稀疏化/量化只上传绝对值较大的梯度或者把浮点梯度压缩成低精度整数能减少80%以上的通信量。异步更新允许不同客户端以不同节奏参与避免最慢的客户端拖垮整体训练速度。这三种手段不是选择题而是组合题。实测下来“本地多练几轮 高比例梯度量化 限制每轮参与客户端比例”是目前性价比最高的组合模型精度损失往往在1%以内但训练耗时可以缩短一半以上。3. 纵向联邦学习同一批人不同维度的特征拼成一个完整画像横向联邦是“人各不同、题目一样”纵向联邦则反过来是“同一批人、各答各的题集”。它解决的场景是合作双方的样本高度重叠但特征完全不同希望在不交换原始数据的前提下把双方的特征联合起来训练一个模型。我在做银行与电商联合建模时就是典型的纵向场景。银行有客户的信贷历史、还款行为电商平台有同一个客户的消费记录、客单价、活跃度。两边客户ID经过加密对齐之后本质上就是一张横跨两边的宽表只不过这张宽表的每一列分别存放在不同机构的数据库里永远不能物理拼接。3.1 实体对齐是纵向联邦的命门纵向联邦的第一步是找出两边共有的用户而且整个过程不能泄露非交集用户信息。这个技术叫隐私保护实体对齐目前主流实现是隐私集合求交。它的原理可以理解成这样双方先用哈希函数对各自的用户ID做盲化处理再通过一系列基于不经意传输或公钥加密的协议进行比对最终只拿到一个交集ID列表却不知道对方在交集之外还有哪些用户。PSI在大规模数据下的性能优化是个深坑几千万级样本的求交如果协议选得不好可能跑到天荒地老。这里我特别想提醒一点实体对齐不是简单的用户ID精确匹配就完了。真实数据里普遍存在同一用户在不同平台注册手机号不一致、身份证号脱敏规则不同的问题。做纵向联邦前先花三分之一的项目时间去清洗和标准化ID比后期绞尽脑汁调对齐算法划算得多。3.2 样本对齐之后梯度怎么安全地“过河”拿到了交集样本双方也不能直接把特征合并喂给模型。因为特征和标签往往分散在两边银行有标签是否违约电商有特征消费行为。模型训练需要两者的共同作用但银行不能把标签明文给电商电商也不该把特征直接发给银行。解决思路是加密梯度交换。以逻辑回归为例拥有标签的一方主动方和拥有特征的一方被动方分别持有模型参数的一部分每次前向传播时通过同态加密或秘密共享方式交换中间结果反向传播时双方各自计算自身参数的梯度其中被对方的梯度通过密文形式传输最终由主动方聚合更新完整模型。整个过程双方都拿不到对方的原始数据只能得到加密状态下的中间信息。这个过程中同态加密的运算开销是巨大的。我在测试环境里跑过带Paillier同态加密的纵向逻辑回归比明文训练整整慢了两个数量级。如果样本量到了百万级一台机器根本扛不住。工程上的折中方案是先用联邦特征工程筛选出信息量最高的几十个特征再进入加密训练阶段把不必要的列全部挡在门外。3.3 纵向联邦的安全风险边界很多人以为纵向联邦只要做了PSI对齐和同态加密就万事大吉但实际上仍有不少攻击面和隐私泄露风险。梯度逆向攻击恶意参与方可以通过观察梯度变化反推对方的特征或标签尤其是标签是离散值时泄露风险更高。对齐信息泄露PSI虽能保护非交集用户但交集的规模本身就是敏感信息对方能推算出你们共同覆盖了多少客户。模型结果归属模糊训练完成后模型部署在哪里谁有权限调用预测时是否需要双方同时在线的协同推理这些运营层面的问题不解决模型根本落不了地。说到底纵向联邦学习的技术难点不在模型而在数据的“密码学包装”上。它是最接近业务价值特征补全但工程复杂度也最高的一种范式。4. 联邦迁移学习当样本和特征都凑不齐时就借点“知识”过来前两种范式都有个隐含前提样本或特征至少有一个维度是重叠的。但现实中还有一个更常见的情况A机构的数据是B城白领、有完善的消费标签B机构的数据是C城蓝领、几乎没有像样的标签体系两边用户和特征体系差异巨大。这种情况下横向和纵向都使不上劲真正能用的是联邦迁移学习。4.1 迁移学习的那套逻辑搬到隐私保护环境里传统迁移学习解决的问题是源域里有大量标注数据、目标域标注数据稀缺把源域学到的知识迁移到目标域来提升效果。联邦迁移学习等于给这个框架加了一条硬约束源域和目标域的数据分布在不同机构手里不允许直接汇合。具体实现思路一般分两条线基于特征的迁移两个域通过一个共享的映射函数映射到公共特征空间使得源域和目标域在这个空间里的分布尽量接近然后在公共空间上训练分类器。训练过程中用对抗学习或最大均值差异来约束分布一致性所有特征映射过程都在加密通道中完成。基于模型的迁移预训练一个源域模型然后只把模型结构或者底层特征提取层的参数迁移到目标域目标域仅用自己的少量数据微调上层参数。联邦化改造后源域机构只提供下游任务需要的特征表示而不是模型本身或者原始数据。4.2 联邦迁移学习的现实场景我见过比较典型的落地尝试是小微企业信贷。一家大型银行拥有大量成熟企业客户的经营数据和违约标签一家新型小贷公司只有少量初创企业客户特征字段和客群定位都差异很大。通过联邦迁移学习小贷公司可以在不拿到银行原始数据的情况下借用银行学到的企业风险表征能力来训练自己的风控模型。联邦迁移的另一个重要场景是跨地域迁移。同一个集团在不同国家的子公司由于用户习惯、政策环境不同数据分布完全不同但集团希望把总部积累的算法能力输出到海外子公司。联邦迁移学习在保证各子公司数据隔离的前提下用总部数据域辅助训练当地模型比从零训练收敛更快、效果也更好。4.3 联邦迁移学习的难点所在说实话联邦迁移学习是三种范式里最不成熟、论文最多但落地最少的一种。难点集中在三个方面找公共表征空间本身就难迁移学习在明文环境下都容易产生负迁移更何况在加密约束下特征分布对齐的手段受限效果更难保障。目标域数据太少导致微调不稳定联邦迁移非常依赖目标域有一定量的数据来引导迁移方向如果目标域数据极稀疏迁移过来的知识很容易被噪声淹没。评估困难由于不能合并数据做离线测试模型在目标域上的真实表现只能通过在线A/B测试来反馈迭代周期非常长。所以我对联邦迁移学习的建议是如果你的源域和目标域至少还有一部分重叠特征可以直接借用优先尝试纵向联邦只有确认两个域在样本和特征层面都几乎没有交集时才考虑上迁移学习。不要为了技术上的“高级感”而去选最复杂但不稳定的方案。5. 三种范式对照速查给技术选型一张决策地图很多朋友会问这三种范式到底怎么选我整理了一张对照表把决定选型的关键维度列出来方便做决策。维度横向联邦学习纵向联邦学习联邦迁移学习样本重叠度低高低特征重叠度高低低核心目标扩大训练样本量补全特征维度跨域知识迁移类比不同人做同一套卷子同一人回答各自擅长的题借别人的解题思路答新题技术难点通信开销、非独立同分布实体对齐、加密计算开销负迁移、目标域数据稀疏常用隐私技术安全聚合、差分隐私隐私集合求交、同态加密加密特征表示、对抗训练成熟度高已有大量工业落地中业务价值明确但工程复杂低研究多于落地选型时我习惯按两步走先看样本重叠再看特征重叠。如果双方样本重叠度低但特征重合度高横向如果样本重叠度高、特征重合度低纵向如果两者都低评估一下是否还有必要联邦实在有业务诉求就尝试迁移。还有一种组合情况是两边样本和特征都有部分重叠但不完全匹配这种混合场景通常以纵向联邦为主体框架再局部引入迁移组件架构复杂度极高团队没有密码学和系统工程双线能力的话要谨慎入场。另外不管选哪种范式都建议在设计阶段就先想好模型评估方案而不是等模型训练完了才考虑。联邦环境下无法像传统方式那样把测试集统一汇总常见的替代方案包括各参与方在本地保留一份测试集轮流用全局模型在本地测试集上跑指标后加权平均或者由协调方维护一个公共的、脱敏后的验证集。这两种方案都有偏差但总比拍脑袋上线强。6. 我在三次真实联邦项目里踩过的坑理论讲再多不如真实项目的毒打来得深入。下面这几个坑是我在不同联邦学习项目中真实遇到过的写出来给你们当预警。6.1 非独立同分布数据导致聚合后的模型准确率塌方第一次跑横向联邦时我用的是模拟的独立同分布数据效果非常好准确率跟集中式训练几乎一致。于是我很自信地换到了真实业务数据上结果全局模型在每一轮聚合后都在震荡甚至出现了一轮比一轮差的“负收敛”。问题根源就是各客户端数据分布差异太大有的客户端大部分样本来自高活跃用户有的则集中于低活跃用户模型在各客户端本地更新时梯度方向南辕北辙简单加权平均后得到一个四不像的参数点。我的解决方案是引入多任务学习思路全局模型只作为初始化或者正则化指导每个客户端保留一部分本地独立参数。同时在服务端对参与客户端的更新做异常值检测梯度方向与其他客户端差异过大的更新直接淘汰避免被某个极端客户端带偏。这两个改动加在一起全局模型才稳定下来。6.2 通信耗时远超训练耗时纵向联邦项目里有一段时间我们每天只能跑完两个训练轮次排查下来发现有80%的时间消耗在网络传输和PSI对齐上。我们当时的模型特征是200多维每个特征在加密通道里都要做一轮复杂的密文交换参与方之间的带宽只有50Mbps。后来做了两处调整一是在进入加密训练前先做联邦特征筛选把200多维特征压到40维二是把原来逐特征传输改成批量张量加密一次传输承载多个特征的计算结果。优化之后整个训练耗时缩短到原来的十分之一。6.3 同态加密参数设得太保守把算力烧穿了这里要说一个很隐蔽的坑。为了追求安全强度我把同态加密的密钥位数设到了2048位训练之前自己还觉得这样特别安全。结果模型训练时单次加密乘法的耗时从毫秒级暴涨到秒级一周跑下来GPU集群的电费比项目预算还高。同态加密的密钥长度和计算开销并不是线性关系而是指数级的。建议在项目初期用128位或112位安全级别的参数跑通整个流程确认模型效果满足需求后再评估是否确实需要提升安全强度。安全级别只是合规底线不是越高越好计算成本同样是项目成败的关键因素。6.4 实体对齐阶段把用户匹配错了纵向联邦里隐私求交结果出现误差的后果是灾难性的因为一旦ID对齐错了后续所有联合特征和标签都建立在错误的样本对上模型训练得越久错得越离谱。我之前在一个项目里遇到过双方都用手机号作为对齐ID但一方存的是用户注册时的手机号另一方存的是用户绑卡时的手机号。看起来都是11位数字实际上有相当比例的用户换过手机号导致匹配不上或匹配到错误ID。最后被迫加了二次校验用设备指纹、注册时间等多个弱标识做交叉验证把匹配准确率从92%拉到了99.7%。这个步骤没做好之前后面的模型训练再好也是白搭。6.5 评估体系没有提前设计模型跑完无法决策这个坑发生在联邦迁移项目里。模型训练完成后甲方问我模型上线前AUC是多少我一时语塞因为联邦环境下的测试集无法像集中式一样合在一起来算指标。最后花了整整两周时间设计了一套跨机构的指标聚合流程才拿到各方都能接受的评估结果。现在我的习惯是项目启动第一周就把评估方案定下来包括各参与方需要保留多少比例的数据作为本地测试集、指标如何跨机构聚合、由谁主导统计校验。评估体系与训练体系同步设计而不是事后补救。7. 不同阶段的玩家如何规划自己的联邦学习路线最后聊聊怎么上手这件事。联邦学习的框架已经不少但选错学习路径会浪费大量时间。7.1 研究探索期从横向联邦入手最稳妥对于刚接触联邦学习的团队我的建议是从横向联邦开始因为它相对容易理解开源的成熟框架也最多。可以在公开数据集上模拟多个客户端自己实现一遍FedAvg流程然后用工具监控每一轮的通信量、聚合后的loss曲线、参与方之间的模型差异。这个过程能把联邦学习的基本概念、通信开销、非独立同分布影响都直观地过一遍。先把横向联邦吃透再去做纵向联邦会容易很多因为纵向联邦的核心难点已经不在模型训练上而在安全计算框架的理解和调优上。7.2 工程落地期选择靠谱的联邦框架横向联邦可以选择的框架有TensorFlow Federated、Flower、FedML其中Flower对已有模型代码的改造最为友好适合快速验证。纵向联邦目前工业界用得比较多的是FATE它对PSI、同态加密、安全多方计算等组件做了完整封装可以专注于业务逻辑而不是底层密码学实现。我个人在使用框架时的建议是不要一上来就追求大而全的平台先用一个轻量框架把最小可行项目跑通确认业务价值和模型收益之后再评估要不要上重型平台。很多项目是在POC阶段就死掉的原因不是技术不行而是前期投入太重、决策链太长。7.3 团队配置联邦学习不是纯算法活一个能打硬仗的联邦学习团队至少要包含三种角色算法工程师负责建模方案和效果调优系统工程师负责通信链路、网络带宽、资源调度安全工程师负责密码学协议的选型、参数配置和审计。很多公司只配了算法工程师结果模型在实验室跑得很好一上生产环境就卡死大多是因为只有算法角色、没人解决系统级问题。如果团队规模不大我建议把安全工程能力外包给成熟的框架和平台把内部人力集中在算法调优和业务对接上。这不是妥协而是务实的资源分配。等业务体量增长到框架无法满足时再自研定制模块这个节奏才比较健康。8. 我的个人体会与几个思考方向做了几个联邦学习项目后我有一个越来越强烈的感受联邦学习表面上是算法问题深层本质是系统工程问题和信任机制问题。你需要在让模型变好和让合作方放心之间找平衡点。很多技术决策看起来是在选算法实际上是在选信任模型。还有个容易被忽视的维度是可解释性。集中式训练里你可以通过特征重要性分析定位模型依赖哪些特征但在联邦环境里参与方的特征不能集中在一起做全局解释性分析每个参与方只能看到本地特征的贡献度。这会带来一个很实际的问题模型上线后如果合作方问“为什么我的特征权重越来越低”你很难给出一个全局层面的解释。这个问题目前还没有特别好的通用解法但至少要在合作条款里提前约定特征贡献评估的标准。未来我比较看好的方向是把联邦学习和在线学习结合起来让模型不仅在联邦框架下训练也能在联邦框架下持续更新。目前大多数项目停留在静态模型但真实业务场景的特征分布时时刻刻都在变。联邦在线学习对通信效率和系统稳定性要求更高三个范式里横向联邦在这方面最接近落地纵向和迁移还有不少工程难题要解。如果你正准备在团队里引入联邦学习我最后有几条非常实际的经验供参考。先找一个小而清晰的业务场景做POC不要一上来就规划全景平台建设。POC成功的标准不是模型AUC提升多少而是能回答清楚“联邦学习相比中心化学习在效果损失可控的前提下到底解决了什么数据合规问题”。把这个答案想明白了后面所有技术投入都有了真正的锚点。
返回列表