深夜的美食街,老王的面馆、阿珍的茶饮店、小林的甜品铺都亮着暖黄的灯。街上要推一个「AI 主厨助手」,能根据客人偏好推荐菜品。本应让三家店的数据汇聚到一起、训练一个聪明的模型,可谁也不肯把自家账本交出去——口味数据是最核心的商业机密。于是,「共享后厨联盟」成立了:菜谱不出门,账本不出店,每家厨房只把自己的「口味心得」交到中央经验堂,由经验堂统一调配,再下发各家微调。这个联盟的运行方式,就是联邦学习。 联邦学习要解决的核心问题只有一句话:如何在数据不离开本地的前提下,协作训练出一个更好的模型。根据各参与方数据在样本空间和特征空间上的重叠关系,联盟分成三种合作模式:两家面馆卖同一套菜单、客人却完全不同,是「横向联邦」;同一批客人被面馆和甜品铺从不同角度记录,是「纵向联邦」;老店要把一年手艺搬去一条毫无交集的新街,是「联邦迁移」。这篇文章,就带你从这三座厨房开始,看懂联邦学习的原理与系统设计。

岗位关联

对 AI 从业者而言,联邦学习是隐私合规时代必须掌握的协作技能:无论你在金融、医疗还是互联网行业,懂得三种数据划分模式的协议设计与适用边界,才能在数据孤岛之间安全地「借力」,成为团队里不可替代的架构型人才。

目录
  1. 可视化演示
  2. 联邦学习核心思想
  3. 横向联邦机制
  4. 纵向联邦机制
  5. 联邦迁移机制
  6. 隐私保护协议
  7. 系统架构设计
  8. 应用场景与挑战
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

对比横向、纵向、联邦迁移三种数据划分模式的样本特征空间分布与协议设计差异。

本节配有交互动效(进入视口后自动加载,约 3KB)。

横向联邦学习 参与方样本不同但特征相同,FedAvg加权聚合梯度 w=Σ(n_i×w_i)/N 通信压缩是横向联邦的关键瓶颈

联邦学习核心思想

「共享后厨联盟」成立的第一个清晨,老王把面馆的客人口味账本锁进抽屉,只抽出一张纸条,上面写着「本店最近 30 天,客人在『咸度』维度上偏好向右偏移 0.2」。这张纸条就是模型参数,而不是账本本身。联盟的中央经验堂收到来自面馆、茶饮、甜品三家的纸条后,把它们小心地折成一张「综合口味地图」,再各发一份复印件回去。每一家照着地图微调自己的菜单,下一轮再汇报新的心得。如此循环,AI 主厨助手越来越懂整条街的客人。

联邦学习的核心思想正是这句话:数据不动,模型动。训练一个模型通常需要把样本集中到一起,但联邦学习反其道而行——让模型参数代替数据去「旅行」。每一轮协作包含三个步骤:各参与方用本地数据训练模型;只上传模型参数或梯度;中央服务器聚合参数并分发回各参与方。原始数据自始至终停留在本地,这正是它被称为「隐私保护学习」的原因。

用数学语言描述这个聚合过程,就是加权平均。每家厨房的经验都有话语权,但权重与它的样本量成正比——客人越多的店,口味报告越有统计意义。

回到联盟的故事里:老王的面馆客人最多,他的「咸度心得」自然在综合口味地图中占大头。这就是联邦平均的基础直觉——不搬运原材料,只搬运经过提炼的知识。

θ(global)=∑k=1Knknθk(local)\theta^{(\text{global})} = \sum_{k=1}^{K} \frac{n_k}{n} \theta_k^{(\text{local})}
全局模型等于各本地模型的加权平均,权重是每家参与方的数据量占比。
  1. K参与方数量:联盟里一共有几家「厨房」参与协作。
    K\displaystyle K
  2. n_k第 k 个厨房的本地样本量:这家店的口味记账本上有多少条客人记录。
    nk\displaystyle n_k
  3. n全体样本量之和:所有参与方本地数据条数的总和,即 n = n₁ + n₂ + … + n_K。
    n=∑k=1Knk\displaystyle n = \sum_{k=1}^{K} n_k
  4. 加权平均样本多的厨房,其经验在全局口味地图中占比更大;样本少的厨房同样有贡献,只是分量小一些。
    nknθk(local)\displaystyle \frac{n_k}{n} \theta_k^{(\text{local})}

横向联邦机制

美食街东头的老王面馆和西头新开的阿强面馆,是「共享后厨联盟」里关系最好的两家人。两家卖的菜单一模一样:同样的汤底选项、同样的面条粗细。换句话说,它们的特征空间完全相同;但两家的客人几乎不重叠,一个服务东城老客,一个服务西城白领,样本空间截然不同。这种「样本不同、特征相同」的协作,就是横向联邦学习。

横向联邦的协议非常朴素而优雅,业界最著名的实现叫 FedAvg(联邦平均算法)。每一轮开始,中央经验堂把当前全局菜单(模型参数)发给所有参与方;每家厨房用本地账本做几次小步调整;然后把调整后的参数交回中央;中央把这些参数按样本量加权平均,得到新菜单,再进入下一轮。整个过程仿佛一群师父各自带徒弟练功,每旬聚一次,取各家心法之长,修订一本公共武功秘籍。

FedAvg 的更新规则可以写成:

阿强面馆刚开业时只有 80 条口味记录,老王却有 200 条,所以两家合并出的新菜单,更偏向老王那条街的老熟客。这正是横向联邦的适用边界:参与方特征空间完全一致、样本 ID 空间互不重叠的场景——比如不同银行、不同医院之间。

θ(t+1)←θ(t)−η∑k=1Knkn∇Lk(θ(t))\theta^{(t+1)} \leftarrow \theta^{(t)} - \eta \sum_{k=1}^{K} \frac{n_k}{n} \nabla L_k\left( \theta^{(t)} \right)
全局参数沿着「各本地损失梯度的加权平均」方向迈出一步,步长由学习率控制。
  1. t通信轮次:这是联盟第几次「聚会对齐」。
    θ(t)\displaystyle \theta^{(t)}
  2. η学习率:每次聚会之后,菜单调整的幅度;步子太大容易翻车,太小则收敛太慢。
    η\displaystyle \eta
  3. ∇L_k第 k 家厨房的本地梯度:当前公共菜单在这家店的账本上「错得有多远、该往哪个方向改」。
    ∇Lk(θ(t))\displaystyle \nabla L_k\left( \theta^{(t)} \right)
  4. 加权求和后更新每家厨房都给出自己的修改方向,按数据量占比合并,再让全局菜单沿合并方向前进一步。
    ∑k=1Knkn∇Lk(θ(t))\displaystyle \sum_{k=1}^{K} \frac{n_k}{n} \nabla L_k\left( \theta^{(t)} \right)

纵向联邦机制

联盟里最特别的一次合作,发生在老王的综合店内部:一楼是面馆,二楼是小林的甜品铺。两家的客人高度重合——同一批老顾客,既吃面也吃甜品。但两家的记账维度完全不同:面馆记的是「咸度偏好、面量、加辣程度」,甜品铺记的是「甜度上限、奶香偏好、饱腹感」。面馆只看得到客人吃面的样子,甜品铺只看得到客人吃甜品的模样,谁都没见过客人的完整画像。这就是「样本相同、特征不同」的纵向联邦。

纵向联邦的第一步是实体对齐:两家的账本上都只有一串脱敏的顾客编号,需要在不泄露任何其他信息的前提下,确认哪些编号是同一个顾客。这一步通过隐私保护的求交协议完成,等价于两个掌柜隔着帘子互相比对顾客姓名拼音的首字母,而不是直接传顾客名册。对齐之后,两家就可以在同一个顾客身上拼合特征:面馆提供特征 A,甜品铺提供特征 B,模型同时读两边,做出一个「是否会买套餐」的预测。

纵向联邦的美妙之处在于,两边的特征拼合不必暴露原始数据。协议要求在加密状态下交换中间结果:

回到故事里,老王和小林谁都没有把账本拿出来,但共同的 AI 主厨助手还是学会了「客人吃完咸味面后,大概率会点一份微甜的芋圆」这种跨店知识。纵向联邦的适用边界由此清晰:样本空间高度重叠、特征空间互补的参与方,最适合坐下来谈合作。

zi=∑j=1dAxij(A)wj(A)+∑j=1dBxij(B)wj(B),y^i=σ(zi),L=∑i=1mℓ(y^i,yi)z_i = \sum_{j=1}^{d_A} x_{ij}^{(A)} w_j^{(A)} + \sum_{j=1}^{d_B} x_{ij}^{(B)} w_j^{(B)},\quad \hat{y}_i = \sigma(z_i),\quad L = \sum_{i=1}^{m} \ell \left( \hat{y}_i, y_i \right)
双方各自在自己的特征上计算线性分数,加密后相加得到总分数,再经过激活函数求损失。
  1. xij(A)参与方 A 的第 i 个样本的第 j 个特征:面馆账本上的「咸度」这类特征列。
    xij(A)\displaystyle x_{ij}^{(A)}
  2. xij(B)参与方 B 的特征:甜品铺账本上的「甜度」特征列,两者维度可以完全不同。
    xij(B)\displaystyle x_{ij}^{(B)}
  3. 加密合并 z_i两个分数的求和发生在密文空间,任何一方都看不到另一方的原始特征,但加法结果却能使模型正常前向传播。
    zi=zi(A)+zi(B)\displaystyle z_i = z_i^{(A)} + z_i^{(B)}
  4. σ(z_i)激活函数:把综合分数压成一个 0 到 1 之间的预测概率,好比把两边的观察综合成「这位客人会不会买翻倍套餐」的直觉。
    y^i=σ(zi)\displaystyle \hat{y}_i = \sigma(z_i)
  5. ℓ损失函数:比较预测值与真实标签,驱动双方按链式法则回传梯度,完成一轮联合训练。
    L=∑i=1mℓ(y^i,yi)\displaystyle L = \sum_{i=1}^{m} \ell \left( \hat{y}_i, y_i \right)

联邦迁移机制

联盟遇到过一个特殊场景:老王在城南经营了十年的老面馆生意兴隆,积累了大量口味数据;他决定去城北高校区开分店,但新店的客人是一群学生,口味习惯和城南老客几乎毫无交集——样本不同,连菜单结构都得改(学生更爱轻食)。老店的模型直接搬过去会水土不服,新店又没数据可训练。这就是「样本空间与特征空间都不重叠」的联邦迁移学习。

联邦迁移学习的思路,是让老店交出「手艺骨架」而不是「完整菜谱」。老店用一个共享的特征提取器 f 把口味经验压缩成通用的表征能力——比如「辣与香的平衡应该如何把握」这类底层规律;新店在这个骨架上,用自己稀少但真实的学生口味数据,学出一个适配的分类头 h。为了让骨架不要偏离老店经验太远,损失函数里还要加一项迁移正则,相当于徒弟学拳时要时常回顾师父的录像带。

目标函数的数学形式如下:

三年后,老王的城北分店果然站稳了脚跟:它没有拿到城南一页账本,却借助联邦迁移,把十年手艺悄悄「翻译」成了学生喜欢的新菜单。这正是联邦迁移的用武之地——目标域数据稀疏、与源域几乎无关,却又暗含可迁移的底层结构。

L=1nT∑i=1nTℓ(h(f(xiT)),yiT)+λ⋅Reg⁡(f)L = \frac{1}{n_T} \sum_{i=1}^{n_T} \ell \left( h\left( f(x_i^T) \right), y_i^T \right) + \lambda \cdot \operatorname{Reg}(f)
第一项让模型拟合目标域的少量样本,第二项约束共享表征不偏离源域知识。
  1. n_T目标域样本数:新店开业第一周收集到的少量顾客记录。
    nT\displaystyle n_T
  2. f共享特征提取器:老店交出的「手艺骨架」,负责把原始特征转成通用表征。
    f(xiT)\displaystyle f(x_i^T)
  3. h目标适配模型:新店在骨架上额外学习的「本地口味修正头」。
    h(f(xiT))\displaystyle h\left( f(x_i^T) \right)
  4. Reg(f)迁移正则项:约束骨架不要朝向新店数据剧烈漂移,保留源域通用能力。
    Reg⁡(f)\displaystyle \operatorname{Reg}(f)
  5. λ权衡系数:新店有多信任老经验。学生口味变化大时 λ 调小,老经验靠谱时 λ 调大。
    λ\displaystyle \lambda

隐私保护协议

联盟里每次交换经验,都像在公共走廊里递纸条。老王担心路人拆开看,阿珍担心有人抄走配方。于是联盟配齐了三套「隐私保险装置」:保险箱、匿名面具、背景白噪音。

保险箱是同态加密。它允许店家把数字锁进箱子里直接送出去,中央经验堂不需要开箱,就能在密文上完成加法运算——结果开箱后恰好等于真实计算值。

匿名面具是安全聚合。每家厨房在梯度上各自加上一对随机掩码——可以理解成每个人戴上一个随机表情的面具。汇总时,所有面具恰好两两抵消,服务器最终只能看到全体梯度的总和,却永远看不出任何一个人的原始梯度。

背景白噪音是差分隐私。上传梯度前,在梯度里注入服从高斯分布的随机噪声,让攻击者从参数反推「某个特定顾客是否存在」的置信度被淹没在噪声海洋里。

三样装置各司其职——保险箱是密码学硬承诺,匿名面具是协议层巧妙抵消,白噪音是统计学软扰动。联盟的经验在公共走廊里往返穿梭,却始终密不透风。

[ ⁣[a] ⁣]⊕[ ⁣[b] ⁣]=[ ⁣[a+b] ⁣][\![a]\!] \oplus [\![b]\!] = [\![a + b]\!]
∑k=1K(gk+∑l≠ksk,l−∑l≠ksl,k)=∑k=1Kgk\sum_{k=1}^{K} \left( g_k + \sum_{l \neq k} s_{k,l} - \sum_{l \neq k} s_{l,k} \right) = \sum_{k=1}^{K} g_k
g~k=gk+N(0,σ2S2)\tilde{g}_k = g_k + \mathcal{N}\left(0, \sigma^2 S^2\right)
  1. 同态加密的加法同态性括号 [·] 表示密文,⊕ 表示密文上的加法;密文 x 加密文 y,解开后就是明文 x + y,联盟在看不到内容的情况下完成了拼接。
    [ ⁣[a] ⁣]⊕[ ⁣[b] ⁣]=[ ⁣[a+b] ⁣]\displaystyle [\![a]\!] \oplus [\![b]\!] = [\![a + b]\!]
  2. 安全聚合的掩码抵消s_k,l 是参与方 k 为配对 l 生成的掩码,一加一减后完全消掉;服务器只能算出梯度总和 ∑g_k,而单个 g_k 始终藏在面具里。
    ∑l≠ksk,l−∑l≠ksl,k=0\displaystyle \sum_{l \neq k} s_{k,l} - \sum_{l \neq k} s_{l,k} = 0
  3. 差分隐私的噪声尺度S 是梯度的敏感度(单条数据能造成的最大改变),σ 和 S 共同决定噪声大小;噪声越大,隐私保护越强,但模型精度损失也随之增加。
    g~k=gk+N(0,σ2S2)\displaystyle \tilde{g}_k = g_k + \mathcal{N}\left(0, \sigma^2 S^2\right)

系统架构设计

「共享后厨联盟」运转半年后,加入的店铺越来越多。老王意识到,如果每家店每周都直接和所有其他店两两交换经验,消息会像菜市场的叫卖声一样混乱。于是联盟引入了中央调度台——参数服务器架构。

在经典的客户端-服务器结构中,每家参与方是一个客户端,中央有一个参数服务器(Parameter Server)。所有客户端在自己的本地数据上训练,随后把梯度/参数推送(push)到参数服务器;服务器聚合出新全局参数,再拉取(pull)回客户端。这种星型拓扑极大减少了通信次数:原本 N 家店需要 O(N²) 次两两消息,现在只需要 O(N) 次。

但通信仍然是最大的瓶颈。每轮通信要传输的参数量是模型大小的两倍(上传一份、下发一份),乘以参与方数和轮次:

联盟很快发现,对大模型而言这个成本惊人。于是各家采取了三个方向的优化:一是梯度压缩,把浮点梯度量化成低精度整数,相当于把长篇小说压成电报;二是本地多轮更新,客户端每轮多练几次再上报,减少通信频率;三是异步更新,允许不同厨房按自己的节奏抵达调度台,快店不等慢店,提升整体吞吐。系统的设计哲学与后厨如出一辙:调度台的职责不是帮每家做饭,而是保证消息有序、及时、不堵车。

Ccomm=2⋅K⋅T⋅∣θ∣C_{\text{comm}} = 2 \cdot K \cdot T \cdot |\theta|
  1. 2上传与下发的两程传输:每轮先 push 一次、再 pull 一次,像送菜和取回菜谱各跑一趟。
    2⋅K⋅T⋅∣θ∣\displaystyle 2 \cdot K \cdot T \cdot |\theta|
  2. K参与方数量:联盟里共有多少家厨房同时对话。
    K\displaystyle K
  3. T通信轮次:达到目标精度需要经历多少轮经验交换。
    T\displaystyle T
  4. |θ|单模型参数量:一份完整「口味心得」的体积。

应用场景与挑战

联盟的故事在真实世界里早已落地。最成熟的场景是金融风控协作:多家城商行各自拥有大量不同客户,但客户特征维度完全一致——交易金额、频率、设备指纹。它们用横向联邦共同训练反欺诈模型,彼此不共享客户明细,却让模型 AUC 显著提升。实测中,某省 5 家银行以联邦平均方式训练,单家银行数据量不足时模型 AUC 不到 0.72,联合后提升到 0.81,同时通过国密算法满足了监管合规。

第二个典型场景是医疗跨机构融合。某体检中心与三甲医院横向或纵向协作:体检中心有生化检验特征,医院有影像诊断特征,面对同一批受检者,属典型的纵向联邦。医院持有的「是否患病」标签不离开内网,体检中心在密文协作中获得风险预估模型,用于慢病早筛。传统方案要么因隐私合规无法落地,要么只能放弃一部分特征导致模型欠拟合;纵向联邦让双方特征互补成为可能。

第三个场景是跨域推荐系统的冷启动。某互联网大厂将国内成熟的推荐模型,通过联邦迁移适配到东南亚新市场。源域用户与目标域用户几乎没有重叠,特征空间也因文化差异大相径庭,但「浏览序列→兴趣表征」的底层迁移能力被成功保留,新市场冷启动期的人均点击率比纯本地训练提升 23%。

当然,联盟并非没有烦恼。最大的挑战是数据异构瓶颈:各厨房的数据分布往往不是独立同分布。东街客人嗜辣,西街客人嗜甜,直接把两家梯度平均,会让模型「两头不讨好」,收敛变慢甚至发散。解决思路包括调整参与方权重、按聚类分组聚合、以及设计更鲁棒的聚合算法——这正是联邦学习研究中最活跃的前沿方向。数据孤岛不会被消灭,但联邦学习让孤岛之间有了安全的航线。

AI 应用场景

银行间联合反欺诈模型

阶段:模型训练与联邦聚合

解决的问题:单一银行的黑样本数量有限,欺诈模式识别能力不足;传统方案需要汇聚多方交易数据,这既违反《个人信息保护法》也涉及商业机密。横向联邦让各银行仅交换模型梯度,在数据不出行的前提下扩大训练样本覆盖范围,显著提升对新型欺诈手法的召回率。

具体案例:某省城商行联盟覆盖 8 家机构,每家人均持卡用户 200 万至 800 万不等,特征全部对齐为交易金额、频次、商户类别、设备指纹等 42 维。经过 30 轮联邦平均,联合模型相较单行最优模型的欺诈检出率提升 12.6%,而整个训练过程中没有任何一行的明细数据离开本地机房。

体检中心与保险公司的纵向健康精算

阶段:特征工程与加密联合训练

解决的问题:保险公司有用户理赔标签,体检中心有用户的生化指标特征,两者用户高度重叠、特征互补。由于机构间数据隔离,过去只能使用强规则粗筛;纵向联邦在实体对齐后,以同态加密保护中间梯度,实现精细化风险定价。

具体案例:某健康险公司与体检连锁机构开放 3 万名共同客户,保险方持有「是否发生重疾理赔」标签,体检方持有 88 个血检指标。模型在加密状态下完成逻辑回归训练,最终风险预测 AUC 达 0.83,较仅用保险方内部数据的基线提升 0.09,且体检方从未接触任何理赔明细。

出海 App 的推荐冷启动迁移

阶段:模型迁移与领域适配

解决的问题:新产品进入东南亚市场时既没有本地行为数据,也缺少本地化特征体系,直接套用国内模型效果差。联邦迁移提供「知识骨架」复用方案,让源域模型的经验以正则化方式辅助目标域训练,避免冷启动期模型完全从零学起。

具体案例:某短视频出海产品用联邦迁移,把国内 1.2 亿用户的兴趣表征网络作为共享特征提取器,在印尼新市场仅用 2 万条真实本地数据微调目标头部。上线首月人均观看时长比纯本地冷启动高 31%,模型在两周内就达到本地训练两个月的水平。

Python 演示

python52 行
import numpy as np  def make_data(n, dim, seed):    rng = np.random.default_rng(seed)    X = rng.normal(size=(n, dim))    w_true = rng.normal(size=dim)    prob = 1.0 / (1.0 + np.exp(-np.dot(X, w_true)))    y = (rng.random(n) < prob).astype(float)    return X, y  def sigmoid(z):    return 1.0 / (1.0 + np.exp(-z))  class LogisticRegression:    def __init__(self, dim):        self.w = np.zeros(dim)     def local_train(self, X, y, lr, steps):        for _ in range(steps):            grad = np.dot(X.T, sigmoid(np.dot(X, self.w)) - y) / len(y)            self.w -= lr * grad        return self.w  def fed_avg(client_data, test_data, rounds=15):    X_test, y_test = test_data    dim = client_data[0][0].shape[1]    global_w = np.zeros(dim)    total_n = sum(len(X) for X, _ in client_data)    for r in range(rounds):        local_ws = []        for X, y in client_data:            model = LogisticRegression(dim)            model.w = global_w.copy()            model.local_train(X, y, lr=0.3, steps=4)            local_ws.append((len(X) / total_n, model.w))        global_w = sum(w * theta for w, theta in local_ws)        pred = (sigmoid(np.dot(X_test, global_w)) > 0.5).astype(float)        acc = (pred == y_test).mean()        print("Round {}: test acc = {:.3f}".format(r + 1, acc))    return global_w  if __name__ == "__main__":    xa, ya = make_data(200, 4, seed=1)    xb, yb = make_data(80, 4, seed=2)    xt, yt = make_data(300, 4, seed=3)    final_w = fed_avg([(xa, ya), (xb, yb)], (xt, yt), rounds=15)    print("Final weights:", final_w)
目的:用两个数据量不等的客户端模拟横向联邦学习——每轮各客户端在本地训练几步后只上传参数,由服务器按样本量加权平均,完成逻辑回归的联邦训练。
  1. grad = np.dot(X.T, sigmoid(np.dot(X, self.w)) - y) / len(y)— 计算本地梯度的平均值,等价于这家厨房根据自己账本算出的「修改方向」。
  2. self.w -= lr * grad— 本地参数沿着梯度下降方向更新一步,但这一步只发生在本地。
  3. model.w = global_w.copy()— 每个客户端先用上一轮的全局参数初始化,再从公共起点出发本地训练。
  4. model.local_train(X, y, lr=0.3, steps=4)— 本地多轮迭代(本地步数 4)之后再上报,减少通信频率,这正是横向联邦常用优化手段。
  5. local_ws.append((len(X) / total_n, model.w))— 记录样本量占比作为聚合权重,客源多的厨房话语权更大。
  6. global_w = sum(w * theta for w, theta in local_ws)— 核心的联邦平均聚合:按权重合并各家参数,生成新的全局模型。

常见误区

误区很多初学者觉得联邦学习既然叫「隐私保护」,本质就是把数据去掉姓名、身份证号之后上传给第三方平台训练,相当于「匿名化 + 集中训练」。

正解联邦学习的核心机制是数据不出本地——原始数据根本不会离开参与方机房,中央服务器只能见到模型参数或梯度。匿名化只是数据发布层面的缓解手段,而联邦学习从训练流程上改变了数据流向。但要注意,模型参数本身也可能泄露隐私,所以还要叠加加密与噪声。

为何常见:公开材料常把联邦学习简化描述为「不需要共享数据」,容易被初学者进一步误读为「脱敏后共享数据」。

误区有同学认为三种模式只是同一算法的不同叫法,哪个实现起来方便就用哪个,训练出的模型效果差不多。

正解三种模式由数据在样本空间与特征空间的重叠情况严格界定:横向要求特征空间相同、样本空间不同;纵向要求样本空间相同、特征空间不同;联邦迁移面向两者都不重叠的罕见场景。把横向套在样本重叠的双方身上,会出现大量重复样本干扰聚合;把纵向套在样本不重叠的双方身上,实体对齐会失败。数据拓扑结构决定协议选择。

为何常见:三种模式的流程图看起来都是「本地训练 + 上传 + 聚合」,实现代码甚至能复用,让人误以为适用范围可随意切换。

误区看到多机协作、参数聚合,初学者容易得出结论:联邦学习只是分布式训练在隐私场景下的别名,把数据切分到多台机器并行训练而已。

正解分布式训练的目标是加速,数据可以自由切分、集中调度;联邦学习的目标是隐私隔离,数据天然分布在无法合并的孤岛中,网络波动、掉线、异构设备、加密开销都是必须处理的头等问题。二者架构相似,但动机、约束与工程复杂度完全不同。

为何常见:两者确实共享参数服务器、梯度同步等底层组件,视觉效果高度相似,容易被表象误导。

误区有人认为纵向联邦不过是一个横向表连接操作:双方把相同样本的特征列并排拼成一个大矩阵,然后跑普通训练。

正解纵向联邦的第一步必须是隐私保护的实体对齐,确保双方记录的确实是同一个样本;对齐之后,特征相加、梯度回传等一切操作都必须在密文空间进行。任何一方都不能看到对方的原始特征列或标签,否则就失去了「联邦」的意义。直接用明文拼特征,等于把账本摊在桌上共享。

为何常见:从模型角度看,纵向联邦的数学形式确实等价于特征拼接,容易让人忽略协议层的安全约束。

面试题

Q1. 横向联邦学习适合的数据划分方式是哪种?

单选题 · easy

  • A.样本不同且特征相同← 正确答案
  • B.样本相同且特征不同
  • C.样本与特征都不同
  • D.样本与特征都相同

答案:A。横向联邦的定义即「样本空间不同、特征空间相同」,对应两条不同街上的同菜系面馆。B 是纵向联邦,C 是联邦迁移,D 则根本不需要协作——大家数据都一样,合作没有增量价值。

Q2. 联邦平均中全局模型参数的正确更新方式是?

单选题 · easy

  • A.各本地梯度的简单平均
  • B.各本地参数的加权平均← 正确答案
  • C.各本地样本的加密拼接
  • D.各本地模型的多数投票

答案:B。FedAvg 把每个参与方本地训练后的参数按样本量占比加权平均。A 忽略了样本量差异,C 是纵向联邦的思路,D 属于模型集成而非联邦聚合。

Q3. 纵向联邦学习在训练前必须优先完成哪一步?

单选题 · mid

  • A.先进行安全的实体对齐← 正确答案
  • B.先进行梯度剪裁与压缩
  • C.先进行模型的随机初始化
  • D.先进行本地数据的脱敏化

答案:A。纵向联邦的前提是双方样本空间重叠,必须先通过隐私求交确认哪些样本是同一批客户,否则后续特征拼合无从谈起。梯度压缩是通信优化,模型初始化是训练细节,脱敏虽好但不能替代对齐。

Q4. 关于纵向联邦学习,下列说法正确的是?

多选题 · mid

  • A.参与方样本 ID 需要完全对齐← 正确答案
  • B.特征空间呈互补关系← 正确答案
  • C.密文运算会带来额外代价← 正确答案
  • D.只能处理同分布数据

答案:ABC。纵向联邦要求样本重叠而特征互补,所以 A、B 正确;中间结果需要同态加密或秘密共享,计算开销显著增加,C 正确。D 错误——纵向联邦处理的恰恰是特征分布不同的数据。

Q5. 同态加密的核心承诺是什么?

单选题 · hard

  • A.密文上做运算等价明文← 正确答案
  • B.密钥分发给每个参与方
  • C.密文可以直接比较大小
  • D.只能加密整数无法加密浮点数

答案:A。同态加密允许对密文直接做加法或乘法,解密结果与明文运算一致,这是它在联邦学习中充当「保险箱」的根基。密钥绝不能分发,密文比较大小并非通用同态性质,现代方案也支持浮点近似编码。

Q6. 下列哪些属于联邦学习的隐私保护手段?

多选题 · mid

  • A.同态加密保护交互值← 正确答案
  • B.安全聚合遮蔽单方梯度← 正确答案
  • C.差分隐私注入噪声← 正确答案
  • D.联邦平均压缩通信量

答案:ABC。同态加密保护参与方交互的中间值,安全聚合让服务器只见总和不见单方梯度,差分隐私在梯度中注噪,三者都是隐私保护协议。联邦平均是协作算法,目的是聚合模型而不是保护隐私。

Q7. 安全聚合中随机掩码的主要作用是什么?

单选题 · mid

  • A.掩盖单个客户端的梯度← 正确答案
  • B.加速全局模型的收敛
  • C.降低加密计算的开销
  • D.扩展特征的维度空间

答案:A。每个客户端在梯度上添加与配对客户端的随机掩码,汇总时掩码恰好抵消,于是服务器只能算出全体梯度和,无法区分单个梯度,从而保护成员隐私。它不改变收敛速度、不降低计算开销,也不改变特征维度。

Q8. 联邦迁移学习的适用场景是哪一种?

单选题 · hard

  • A.样本与特征空间均不重叠← 正确答案
  • B.样本重叠特征空间不同
  • C.样本不同特征空间相同
  • D.样本与特征空间均相同

答案:A。联邦迁移面向的是源域与目标域「两无交集」的极端场景——样本不同、特征不同,只能借助共享表征迁移底层知识。B 是纵向联邦,C 是横向联邦,D 不需要联邦。

Q9. 下列哪些方式可以有效降低联邦学习的通信成本?

多选题 · hard

  • A.对梯度进行量化压缩← 正确答案
  • B.本地多轮训练再上传← 正确答案
  • C.采用异步参数更新← 正确答案
  • D.增加每轮通信的次数

答案:ABC。梯度量化把浮点数压成低比特表示,减少单次传输体积;本地多轮训练降低上传频率;异步更新让慢客户端不必阻塞整轮通信,三者均能降低通信成本。D 增加每轮通信次数只会加剧网络压力。

Q10. 差分隐私联邦学习中,注入噪声的尺度主要由什么决定?

单选题 · extreme

  • A.敏感度和隐私预算← 正确答案
  • B.参与方的节点数量
  • C.全连接层的网络宽度
  • D.全局模型的层数深度

答案:A。差分隐私的噪声方差正比于敏感度 S 的平方、反比于隐私预算 ε(以及 δ 的约束)。节点数量、网络宽度和模型深度虽然影响计算图,但都不直接决定噪声尺度。