假如你是一位餐饮连锁集团的老板,旗下有火锅店、奶茶店、烘焙坊,遍布全国。你想训练一个“顾客口味预测模型”,让每家门店都能精准推荐菜品。但每家门店的顾客数据是核心商业机密——不能直接交出顾客名单,更不可能把数据集中到总部。于是,你召集所有门店老板,成立了一个“风味联盟”:大家用自己的数据训练同一个模型,只上传模型参数,不共享原始数据。这就是联邦学习的核心思想。 更妙的是,联盟里不同门店的数据形态千差万别:同品牌火锅店在杭州、成都、北京的分店,菜单结构和评分体系完全一样,只是顾客不同;同一商圈的火锅店、奶茶店、健身房,面对的是同一批食客,但各自掌握的画像维度完全不同;而一家新开的烘焙坊,跟火锅店几乎没有任何共同顾客和共同特征。针对这三种情况,联邦学习演化出了三种协作范式——水平联邦学习、垂直联邦学习和迁移联邦学习。本文就用“风味联盟”的故事,带你一次看懂这三种范式的原理、差异与实际应用。

岗位关联

掌握联邦学习的三种范式,是进入隐私计算与去中心化AI领域的必修课。它直接决定你在跨机构联合建模项目中能否正确选型,也是面试中高频考察的能力点。

目录
  1. 可视化演示
  2. 联邦学习概览
  3. 水平联邦学习
  4. 垂直联邦学习
  5. 迁移联邦学习
  6. 范式对比选型
  7. 隐私保护技术
  8. 应用与挑战
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

演示联邦学习三种范式:水平FedAvg训练聚合流程、垂直PSI对齐与加密梯度交换、三种范式数据分布对比。

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

水平联邦学习(FedAvg) 服务器分发全局模型,各参与方本地训练 参与方上传模型梯度,服务器聚合更新 原始数据不出本地,保护数据隐私 w_global = Σ(n_k/n) × w_k(加权平均聚合) 水平联邦学习面向样本重叠、特征相同的场景

联邦学习概览

“风味联盟”成立的第一天,各家门店老板围坐一桌,讨论的核心问题是:如何在不交出顾客数据的前提下,共同变聪明? 有人提议把数据都发到总部,立刻被否决——顾客点餐记录是每家门店的核心资产,泄露出去会直接失去竞争力。也有人提议干脆各练各的,但那又无法利用群体的力量。联邦学习给出的答案是:人不动,模型动——让模型参数在各门店之间流转,数据永远留在本地。

联邦学习(Federated Learning)是一种分布式的机器学习框架,其核心约定是:每个参与方在本地保存原始数据,只与其他参与方交换模型参数或梯度更新。典型流程就像联盟的“总部-分店”协作模式:总部先把一个初始模型分发给各门店;每家门店用自己的顾客数据在本地训练几轮;然后将更新后的模型参数(而非数据)上传回总部;总部把所有参数合并成新的全局模型,再开始下一轮。如此循环往复,直到模型收敛。

为什么这套机制有效?因为机器学习模型的学习过程本质上是“数据规律”的拟合,而模型的参数恰恰是规律的载体。参与方共享参数,相当于共享了“规律心得”,却不必暴露产生这些规律的具体数据。这让联邦学习天然具备了隐私友好的特性,也让它成为医疗、金融、政务等敏感数据场景的首选方案。

min⁡w∑k=1KnknLk(w)\min_{w} \sum_{k=1}^{K} \frac{n_k}{n} \mathcal{L}_k(w)

1. 参与方编号:\( k \) 从 1 到 \( K \) 表示总共有 K 个参与方,每个参与方持有自己的私有数据集。

Lk(w)=1nk∑i=1nkℓ(w;xi,yi)\mathcal{L}_k(w) = \frac{1}{n_k}\sum_{i=1}^{n_k} \ell(w; x_i, y_i)

2. 样本量权重:\( \frac{n_k}{n} \) 是第 k 方的样本量占比,数据越多的参与方对全局模型的影响越大,这就像联盟中门店越大,对总部决策的声音越响。

n=∑k=1Knkn = \sum_{k=1}^{K} n_k

3. 全局优化目标:\(\min_w\) 表示我们要找一组参数 \( w \),使所有参与方加权损失之和最小,最终得到的模型能在各门店都表现良好。

min⁡w∑k=1KnknLk(w)\min_w \sum_{k=1}^{K} \frac{n_k}{n} \mathcal{L}_k(w)

“风味联盟”的第一步共识达成了:大家只交模型、不交数据。但接下来,真正的问题浮出水面——各个门店的数据形态千差万别,该用什么样的协作方式呢?有的门店菜单结构相同,有的门店顾客重叠,还有的门店干脆毫无交集。于是,联盟需要针对不同数据形态,采用不同的合作模式。

---

水平联邦学习

杭州的“小碗菜”、成都的“小碗菜”、北京的“小碗菜”——这三家连锁门店的菜单结构、评分维度、点单字段完全一致,都是“菜品编号 + 价格 + 顾客评分 + 下单时间”这样的表格。换句话说,它们的特征空间相同。但三家店面对的顾客来自不同城市,各自的样本集合几乎没有重叠。这种场景就像三本同样的练习册,由三个班的学生分别做题——题目的结构完全一样,但做题的人不同。这种“特征相同、样本不同”的协作方式,就是水平联邦学习。

水平联邦学习的标准算法是 FedAvg(联邦平均)。它的运作方式非常直观:总部先把当前全局模型广播给所有门店;每家门店在自己的本地数据上做若干轮梯度下降(SGD),得到一个新的本地模型;然后门店把本地模型的参数上传给总部;总部把所有本地参数按照各店的样本量比例做加权平均,得到新一轮全局模型。整个过程不需要任何原始数据离开门店,而聚合后的模型能学到所有门店数据中的共同规律。

水平联邦学习是三种范式中技术最成熟、应用最广泛的一种。它的优势在于各参与方的数据模式统一,通信协调简单;挑战则在于如何设计高效的聚合策略——当不同客户的样本量差异悬殊时,简单平均会让小门店的贡献被稀释。此外,通信开销、本地训练轮数、非独立同分布(Non-IID)数据等问题也需要仔细权衡。

wt+1=∑k=1Knknwkt+1w^{t+1} = \sum_{k=1}^{K} \frac{n_k}{n} w_k^{t+1}

1. 本地训练:第 k 家门店在自己的数据上从当前全局模型出发做几轮梯度下降,得到本地更新后的模型参数 \( w_k^{t+1} \)。

wkt+1=wt−η∇Lk(wt)w_k^{t+1} = w^t - \eta \nabla \mathcal{L}_k(w^t)

2. 样本量统计:\( n_k \) 是第 k 家门店的本地样本数,所有门店样本之和为 \( n \),二者的比值就是加权系数。

nk=∣Dk∣,n=∑k=1Knkn_k = |D_k|, \quad n = \sum_{k=1}^{K} n_k

3. 加权聚合:总部把各家门店的参数乘以各自的样本占比后求和。样本多的门店贡献大、样本少的门店贡献小,最终得到新的全局参数。

wt+1=∑k=1Knknwkt+1w^{t+1} = \sum_{k=1}^{K} \frac{n_k}{n} w_k^{t+1}

回到“风味联盟”的比喻:杭州、成都、北京三家同名门店,各自在本地练了一套“口味心得”,总部把它们按门店规模加权综合成一份“联盟总心得”,再发回给大家继续迭代。这就是水平联邦学习的全貌——在相同的知识框架下,汇聚不同人群的经验。

---

垂直联邦学习

同一座商圈里,火锅店记录的是顾客偏好的锅底和辣度,奶茶店记录的是甜度和配料选择,健身房记录的是会员的体重和运动时长。三家门店都没有完整的用户画像,但它们服务的是同一批顾客——住在附近小区的同一群消费者。如果能把三家的特征信息拼在一起,就能得到一份完整的“生活画像”,训练出的推荐模型也将精准得多。问题是,如何在不暴露具体顾客是谁的情况下,安全地拼接这些特征?这就是垂直联邦学习要解决的问题。

垂直联邦学习的核心挑战是实体对齐:A 机构和 B 机构拥有的是同一批用户的不同特征维度,必须先找到两个数据集中属于同一物理实体的样本对,才能进行后续的联合建模。由于双方都不能直接交换用户 ID,实体对齐必须借助隐私保护技术——比如加密的样本对齐协议(Private Set Intersection, PSI)——在不泄露非公共用户信息的前提下,找到双方共有的样本。

对齐之后,垂直联邦学习的建模过程也比水平联邦复杂得多。因为没有任何一方拥有完整的样本特征,训练时通常需要由一方发起训练请求,双方各自计算本地特征对应的梯度或中间结果,再通过多方安全计算(Secure Multi-Party Computation, MPC)合成梯度和损失,用于更新彼此的模型分片。整个过程像两个厨师合作做一道菜——一人负责切菜、一人负责调味,最终成品融合了双方的手艺,但每个厨师都没有看到对方完整的操作间。

π={(u,v)∣u∈UA,v∈UB,ID(u)=ID(v)}\pi = \{(u, v) \mid u \in \mathcal{U}_A, v \in \mathcal{U}_B, \text{ID}(u) = \text{ID}(v)\}

1. 双方样本集合:A 机构持有用户集合 \( \mathcal{U}_A \),B 机构持有 \( \mathcal{U}_B \),它们都只掌握自己那一部分特征。

UA={u1,u2,… },UB={v1,v2,… }U_A = \{u_1, u_2, \dots\}, \quad U_B = \{v_1, v_2, \dots\}

2. 身份匹配条件:\(\text{ID}(u) = \text{ID}(v)\) 表示两个样本指向同一个实体——在“风味联盟”里就是同一位顾客。

ID(u)=ID(v)\text{ID}(u) = \text{ID}(v)

3. 配对结果:\( \pi \) 是所有公共用户对的集合。后续的特征拼接、梯度交换都只在这个交集上进行,其他样本的信息不会暴露给对方。

π={(u,v)∣ID(u)=ID(v)}\pi = \{(u, v) \mid \text{ID}(u) = \text{ID}(v)\}

用“风味联盟”的话说,垂直联邦就是三家门店共享同一批客人的不同“档案页”。通过加密的“档案编号匹配”找到同一批顾客后,各家只把自己的特征贡献到联合模型中,顾客的其他信息依然锁在各自的档案柜里。这种方式让“拼图式协作”成为可能——每人手里一块拼图,合在一起才是完整的画面。

---

迁移联邦学习

“风味联盟”计划开一家新品牌的烘焙坊,但烘焙坊刚开业,既没有历史顾客数据,也没有成熟的特征体系。它与火锅店之间既没有重叠的顾客,也没有重叠的特征维度——火锅店记录的是“锅底辣度、涮品偏好”,烘焙坊关心的是“甜度、面包品类、购买时段”。这种情况下,水平联邦和垂直联邦都无能为力。联盟里有人提出:虽然火锅店和烘焙坊差别很大,但“顾客喜欢什么口味”这件事可能有内在的共通规律。能不能把火锅店学到的知识“迁移”到烘焙坊?这就是迁移联邦学习的用武之地。

迁移联邦学习(Federated Transfer Learning)的核心思想是:源域和目标域可以拥有完全不同的样本空间和特征空间,但通过某种共享表示或参数迁移,把源域学到的知识应用到目标域。具体做法通常分两步:先在源域上训练一个“通用口味模型”,然后把这个模型的结构和参数作为初始值,在目标域的少量数据上做微调(fine-tuning)。为了防止目标域数据太少导致过拟合,迁移联邦学习还会在优化目标中加入约束项,让目标模型的参数不要偏离源模型太远。

迁移联邦学习的最大价值在于冷启动。传统机器学习需要大量目标域数据才能训练出可靠模型,而迁移联邦让新领域可以从零开始,借用其他领域已经学到的知识快速起步。当然,它的挑战也很明显:源域与目标域差异过大时,迁移可能带来“负迁移”——不仅没帮助,反而降低模型性能。因此,如何衡量两个域的相似度、如何设计迁移策略,是迁移联邦的核心研究问题。

min⁡θTLT(θT)+λ∥θT−θS∥2\min_{\theta_T} \mathcal{L}_T(\theta_T) + \lambda \|\theta_T - \theta_S\|^2

1. 源模型作为先验:\( \theta_S \) 是从源域(比如火锅店数据)训练好的模型参数,它携带了通用的“口味规律”知识。

θS=arg⁡min⁡θLS(θ)\theta_S = \arg\min_{\theta} \mathcal{L}_S(\theta)

2. 目标域损失:\( \mathcal{L}_T(\theta_T) \) 衡量目标模型在烘焙坊数据上的预测误差,希望模型适应当前的任务。

LT(θT)=1nT∑(x,y)∈DTℓ(θT;x,y)\mathcal{L}_T(\theta_T) = \frac{1}{n_T}\sum_{(x,y)\in D_T} \ell(\theta_T; x, y)

3. 防止偏离:\( \lambda \|\theta_T - \theta_S\|^2 \) 是一个惩罚项,当目标参数偏离源模型太远时会加大惩罚,像一根“橡皮筋”把新模型拉回源知识附近。

min⁡θTLT(θT)+λ∥θT−θS∥2\min_{\theta_T} \mathcal{L}_T(\theta_T) + \lambda \|\theta_T - \theta_S\|^2

回到故事里:火锅店的经验不能直接照搬到烘焙坊,但“顾客对甜度的偏好”与“顾客对辣度的偏好”可能存在某种可迁移的规律。通过迁移联邦,烘焙坊站在火锅店这位“老前辈”的肩膀上快速起步,节省了大量冷启动时间——这就是迁移联邦学习的价值所在。

---

范式对比选型

三种联邦范式摆在一起,该怎么选?“风味联盟”的经验是:先看数据分布,再定协作方式。 如果各家数据集的列(特征)完全一致、只是行(样本)不同,那就是水平联邦;如果各家面对的是同一批样本、只是各自拥有不同的列,那就是垂直联邦;如果连行和列都对不上,那就只能走迁移联邦。一句话概括:水平按样本切,垂直按特征切,迁移靠知识迁。

三种范式在技术复杂度上呈递增趋势。水平联邦只需要简单的参数聚合(FedAvg),通信结构清晰,工程落地最成熟;垂直联邦需要实体对齐、加密计算和多轮联合梯度更新,对密码学协议的要求显著提升;迁移联邦则增加了域适配、迁移策略设计等额外环节,复杂度最高,但适用面也最广。在实际项目中,选型常常不是“哪个最好”,而是“哪个够用”——能用水平解决就不要硬上垂直,能用垂直解决就不要贸然迁移。

从适用场景来看:水平联邦适合同行业跨地域的机构协作,比如多家医院、多家银行分行;垂直联邦适合跨行业的互补型机构,比如银行与电商、保险与医疗;迁移联邦适合冷启动或跨领域场景,比如新市场开拓、新业务孵化。理解三种范式的边界,就像厨师理解不同食材的搭配原则——选对了,协作事半功倍;选错了,数据对不上、训练转不动,整个项目就会陷入泥潭。

选型就像“风味联盟”决定谁跟谁合作:同品牌的连锁店之间共享经验最简单(水平);跨业态但同商圈的门店互补合作更精细(垂直);跨度太大没有任何共同点的,那就借助“师徒制”传承经验(迁移)。选对范式,协作才能顺畅推进。

---

{Xi=Xj,  Yi≠Yj水平联邦Xi≠Xj,  Yi=Yj垂直联邦Xi≠Xj,  Yi≠Yj迁移联邦\begin{cases}X_i = X_j, \; \mathcal{Y}_i \ne \mathcal{Y}_j & \text{水平联邦} \\X_i \ne X_j, \; \mathcal{Y}_i = \mathcal{Y}_j & \text{垂直联邦} \\X_i \ne X_j, \; \mathcal{Y}_i \ne \mathcal{Y}_j & \text{迁移联邦}\end{cases}
这是一个分类判别式:\( X \) 代表特征空间,\( \mathcal{Y} \) 代表样本空间。通过比较两个参与方在特征和样本上的异同,可以快速判断应该采用哪种联邦范式。
  1. 水平范式判定特征空间相同(\( X_i = X_j \))但样本空间不同(\( \mathcal{Y}_i \ne \mathcal{Y}_j \)),即同行不同客,适合水平联邦。
    Xi=Xj(特征空间相同)X_i = X_j \quad (\text{特征空间相同})
  2. 垂直范式判定样本空间相同(\( \mathcal{Y}_i = \mathcal{Y}_j \))但特征空间不同(\( X_i \ne X_j \)),即同客不同行,适合垂直联邦。
    Yi=Yj(样本空间相同)\mathcal{Y}_i = \mathcal{Y}_j \quad (\text{样本空间相同})
  3. 迁移范式判定特征空间和样本空间都不同,只能通过迁移学习在知识层面建立桥梁。
    Xi≠Xj,Yi≠YjX_i \ne X_j, \quad \mathcal{Y}_i \ne \mathcal{Y}_j

隐私保护技术

“风味联盟”虽然达成了“只传参数、不传数据”的共识,但门店老板们仍然不放心:上传的模型参数会不会泄露顾客信息?有研究证明,攻击者可以从模型梯度中反推训练样本的细节——这就是梯度逆向攻击。为了堵住这些漏洞,联盟需要更高级的隐私保护技术作为“保险锁”。

第一把锁是安全聚合(Secure Aggregation)。它的思想很巧妙:各门店在上传参数前,先给参数加上一个随机掩码,同时彼此交换掩码的分发信息,使得所有掩码在求和时恰好抵消。这样一来,总部只能看到所有门店参数的总和,而无法窥探任何一家的单独参数。安全聚合不对数据本身做加密,而是在“聚合过程”上做文章。

第二把锁是差分隐私(Differential Privacy)。它在参数或梯度上主动加入噪声,让攻击者无法判断某一条具体样本是否参与了训练。这就像在调查问卷里加入随机扰动——统计规律依然可以被揭示,但个体的信息被噪声掩盖了。差分隐私的代价是模型精度的损失,噪声越大,隐私保护越强,但模型越不准确。

第三把锁是同态加密(Homomorphic Encryption)。它允许在密文上直接进行数学运算,运算结果解密后与明文上直接运算的结果一致。也就是说,总部可以在“看不懂”各门店参数内容的情况下,完成加法或乘法聚合。同态加密的安全性最高,但计算开销巨大,目前在实际系统中通常只用于特定环节,而非全流程。

w~=w+N(0,σ2)\tilde{w} = w + \mathcal{N}(0, \sigma^2)

1. 原始参数:\( w \) 是客户端本地训练得到的模型参数,它本身包含了从数据中学到的信息。

w=1n∑i=1n∇ℓ(xi,yi)w = \frac{1}{n}\sum_{i=1}^{n} \nabla \ell(x_i, y_i)

2. 高斯噪声:\( \mathcal{N}(0, \sigma^2) \) 表示均值为 0、方差为 \( \sigma^2 \) 的高斯分布采样值,\( \sigma \) 越大噪声越强。

N(0,σ2)=12πσ2e−x22σ2\mathcal{N}(0, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{x^2}{2\sigma^2}}

3. 发布扰动结果:\( \tilde{w} \) 是添加噪声后发布的参数。攻击者即使拿到了 \( \tilde{w} \),也无法区分它是来自哪条具体样本的贡献。

w~=w+N(0,σ2)\tilde{w} = w + \mathcal{N}(0, \sigma^2)

在“风味联盟”的语境里,安全聚合像“集体信箱”——每个人投递的纸条被混在一起,统计者只看到总数;差分隐私像“往总数里撒胡椒面”——数字不够精确,但趋势依然明显;同态加密则像“盲盒计算”——整个过程都在看不见的状态下完成。三种技术没有绝对优劣,现实中常常组合使用,在隐私与精度之间寻找平衡。

---

应用与挑战

“风味联盟”的故事并不止于三个门店。当联盟扩展到几十个城市、上百家门店时,新的问题不断涌现:训练效率能否跟上?监管合规是否允许?技术栈是否支撑得起来?联邦学习的落地远不止算法本身,而是一个涉及工程、安全、法律的多维课题。

行业应用方面,联邦学习在医疗领域帮助多家医院在不共享患者数据的前提下联合训练诊断模型;在金融领域帮助银行与电商联合构建风控模型;在物联网领域帮助不同设备协同训练用户行为模型。这些场景的共同点是:数据高度敏感、分散于多机构、法律法规禁止直接汇聚。联邦学习提供了“数据不出域、模型共训练”的合规路径。

监管合规是联邦学习落地中不可回避的挑战。中国的《数据安全法》《个人信息保护法》以及欧盟的 GDPR 都对数据出境和跨境传输做出了严格限制。联邦学习虽然大幅降低了数据聚合的合规风险,但并非“免罪金牌”——例如,模型参数仍然可能间接携带敏感信息,跨机构协作仍需明确数据使用的授权边界。技术上的隐私预算(\(\epsilon\))如何管理、如何审计,也是监管关注的重点。

未来趋势上,联邦学习正与区块链结合,构建“数据可用不可见、行为可追溯”的去中心化 AI 基础设施。密码学原语(如同态加密、零知识证明)的效率提升、跨链互操作协议、联邦学习标准化工作,都在推动这一技术栈走向成熟。可以预见,随着隐私保护意识的增强和法规的完善,联邦学习将从“可选技术”变为“必备能力”。

ϵtotal=∑t=1Tϵt\epsilon_{total} = \sum_{t=1}^{T} \epsilon_t

1. 每轮隐私消耗:\( \epsilon_t \) 表示第 t 轮训练中加入的隐私预算是多少,它由该轮添加的噪声大小决定。

ϵt=max⁡D,D′∣ln⁡Pr⁡(Mt(D))Pr⁡(Mt(D′))∣\epsilon_t = \max_{D,D'} \left|\ln \frac{\Pr(\mathcal{M}_t(D))}{\Pr(\mathcal{M}_t(D'))}\right|

2. 串行组合:多轮训练的总隐私消耗等于各轮之和,轮次越多,隐私消耗越大。

ϵtotal=ϵ1+ϵ2+⋯+ϵT\epsilon_{total} = \epsilon_1 + \epsilon_2 + \dots + \epsilon_T

3. 权衡之道:预算越大说明隐私越弱,但模型精度越高;预算越小则越隐私,但精度受损。实际部署时要根据法规和业务要求,为总预算设定上限。

“风味联盟”一路走来,从三家门店的小作坊成长为跨地域的数字化集团。它总结经验:联邦学习不是万能的银弹,而是一套需要精细运营的协作框架——选对范式、配好隐私保护、管好合规底线,才能真正让数据释放价值。

---

AI 应用场景

医疗多中心联合诊断

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

解决的问题:传统医疗AI需要把各医院的影像数据集中到中心服务器,但患者隐私和医院数据主权使得集中式训练几乎不可行;AI 通过水平联邦学习,让各医院在本地训练模型后仅上传参数,在不共享影像的前提下获得跨院诊断模型。

具体案例:三家三甲医院联合训练一个肺结节检测模型。每家医院约 2 万张 CT 影像,特征空间完全一致(都是 CT 图像),但患者群不同。通过 FedAvg 聚合,三院联合模型的 AUC 比任何单院模型提升约 12%,全程无一张影像离开医院。

银行与电商联合风控

阶段:特征工程与联合建模阶段

解决的问题:银行有用户的收入流水和征信记录,电商有用户的消费行为和商品偏好,双方要联合评估用户信用,但用户数据跨越两个机构,直接合并违反《个人信息保护法》;AI 通过垂直联邦学习,先加密对齐公共用户,再在各自特征分片上联合训练风控模型。

具体案例:某银行与某电商平台合作,对 500 万重叠用户做联合授信建模。银行提供还款记录特征,电商提供消费频次和客单价特征,通过多方安全计算完成梯度交换,模型 KS 值从 0.32 提升到 0.41,坏账率下降约 18%。

新能源汽车充电推荐冷启动

阶段:模型部署与迁移阶段

解决的问题:品牌汽车进入一座新城市时,该城市没有历史充电行为数据,传统推荐系统无从起步;AI 通过迁移联邦学习,把其他城市训练好的充电推荐模型迁移到新城市,用少量本地数据进行微调,快速实现冷启动。

具体案例:某新能源车企在 20 个城市已有充电推荐模型,在进入新城市时,只收集到前两周 3000 条充电记录。直接训练模型过拟合严重;改用迁移联邦后,以老城市模型为初始权重,仅用新城市数据微调,推荐准确率在两周内达到老城市模型的 90%。

Python 演示

python73 行
# -*- coding: utf-8 -*-"""FedAvg 水平联邦学习迷你演示"""import random  class MiniModel:    """简单的线性回归模型"""    def __init__(self, dim=3):        self.w = [0.0] * dim        self.b = 0.0     def predict(self, x):        return sum(wi * xi for wi, xi in zip(self.w, x)) + self.b     def train_on(self, data, lr=0.02, epochs=5):        for _ in range(epochs):            for x, y in data:                err = self.predict(x) - y                for i in range(len(self.w)):                    self.w[i] -= lr * err * x[i]                self.b -= lr * err        return self.w, self.b  def make_data(size=60):    """生成 y = 3x1 - 2x2 + 1 的线性数据"""    data = []    for _ in range(size):        x1 = random.uniform(-1, 1)        x2 = random.uniform(-1, 1)        y = 3 * x1 - 2 * x2 + 1 + random.uniform(-0.2, 0.2)        data.append(([x1, x2, 1.0], y))    return data  def fed_avg(clients=4, dim=3, rounds=15, seed=42):    random.seed(seed)    client_data = [make_data() for _ in range(clients)]    global_model = MiniModel(dim)     for _ in range(rounds):        local_params, sizes = [], []        for cdata in client_data:            local = MiniModel(dim)            local.w = global_model.w[:]            local.b = global_model.b            local_params.append(local.train_on(cdata))            sizes.append(len(cdata))         total = sum(sizes)        new_w = [0.0] * dim        new_b = 0.0        for (lw, lb), n in zip(local_params, sizes):            for i in range(dim):                new_w[i] += lw[i] * n / total            new_b += lb * n / total        global_model.w, global_model.b = new_w, new_b     return global_model  def main():    model = fed_avg(clients=4)    print("全局权重:", [round(x, 4) for x in model.w])    print("全局偏置:", round(model.b, 4))     test = make_data(30)    mse = sum((model.predict(x) - y) ** 2 for x, y in test) / len(test)    print("测试 MSE:", round(mse, 4))  if __name__ == "__main__":    main()
目的:用 4 个“门店客户端”在各自本地数据上训练线性模型,模拟水平联邦学习的 FedAvg 聚合流程,最终得到一个由多方共同训练出的全局模型。
  1. random.seed(seed)固定随机种子,保证实验可复现,方便对比不同参数的效果。
  2. global_model = MiniModel(dim)初始化全局模型,相当于总部的“初始口味模板”。
  3. local.w = global_model.w[:]把全局权重拷贝给本地模型,让每轮训练从全局状态出发。
  4. local_params.append(local.train_on(cdata))各参与方在本地数据上做多轮梯度下降,返回本地参数。
  5. sizes.append(len(cdata))记录每个参与方的样本量,为后续按比例加权做准备。
  6. total = sum(sizes)计算所有参与方的样本总量,作为加权平均的分母。
  7. new_w[i] += lw[i] * n / total核心聚合步骤:按样本量占比累加各参与方的参数更新。
  8. global_model.w, global_model.b = new_w, new_b更新全局模型,完成一轮 FedAvg 迭代。
  9. model.predict(x) - y计算预测误差,驱动本地梯度下降优化。

常见误区

误区“联邦学习不是说去中心化吗?那应该没有服务器,大家直接点对点通信就行了。”

正解联邦学习的“联邦”强调的是数据不汇总,而非架构完全去中心化。大多数联邦学习系统(尤其是水平联邦的 FedAvg)仍然需要一个中央协调服务器来下发初始模型、接收本地参数、执行聚合,并分发改后的全局模型。在“风味联盟”的比喻里,总部(服务端)依然是不可缺少的调度者。真正的去中心化联邦学习(如基于区块链的联邦学习)是研究热点,但在工程实践中尚未成为主流。

为何常见:很多人看到“联邦”一词,联想到的是“联邦制国家”中各州自治,容易把联邦误解为完全去中心化,忽略了协调节点的存在。

误区“水平联邦是大家有相同的数据列,垂直联邦是大家有相同的用户,这不都差不多吗?感觉很难分清。”

正解两者有本质区别。水平联邦是“特征空间相同、样本空间不同”——好比同品牌连锁店,菜单结构一样但顾客不同;垂直联邦是“样本空间相同、特征空间不同”——好比不同业态商户服务同一批顾客,掌握的用户维度互补。判断口诀:特征相同看水平,样本相同看垂直。实际操作中,先看各方数据表的列(特征)是否一致,一致则水平,不一致则进一步看行(样本)是否重叠。

为何常见:两种范式的英文缩写 HFL/VFL 容易混淆,且在实际项目中,参与方的数据往往存在部分重叠,不是教科书式的“完全一致”或“完全不同”,导致边界模糊。

误区“联邦学习就是同态加密吧?把数据加密之后传上去,服务器在密文上算就行了。”

正解联邦学习的核心是“数据不动模型动”,它并不强制要求使用某一种具体密码学技术。同态加密只是联邦学习可选的隐私保护增强手段之一,其他还包括安全聚合、差分隐私、可信执行环境等。甚至基础版 FedAvg 在只传参数不传数据的意义下,本身就属于联邦学习。在“风味联盟”里,同态加密只是众多“保密手段”中的一种,不是联盟成立的必需品。

为何常见:文献中联邦学习常与同态加密一起出现,许多人被“加密”这一关键词吸引,误把辅助技术当成了核心定义。

误区“反正我们只上传梯度,不传原始数据,所以隐私绝对安全。”

正解这是一个危险的误解。研究表明,攻击者可以从模型梯度中重建训练样本——尤其是包含图像、文本等高维特征的样本。例如,在联邦学习训练人脸识别模型时,攻击者可以伪造一个恶意服务器,通过分析梯度更新来还原参与方的训练图片。因此,仅靠“传梯度不传数据”是不够的,还需要安全聚合隐藏个体梯度、差分隐私扰动参数、或者限制上传信息的粒度。联邦学习的隐私安全性来自于多层次防护的综合,而非单一机制。

为何常见:初学者容易把“不上传数据”等同于“绝对隐私”,忽略了模型参数本身也携带数据信息——这就像以为把文件放进碎纸机就安全了,却忘了碎纸片还能被拼回去。

误区“迁移联邦学习能处理样本和特征都不同的情况,那是不是什么数据都能往里扔?”

正解迁移联邦学习确实放宽了样本和特征一致的要求,但它并不是万能的。当源域和目标域差异过大时,会发生“负迁移”——源域的知识不仅无助于目标域,还会引入偏误,导致模型性能下降。在“风味联盟”里,火锅店的口味经验迁移到烘焙坊可能是启发,但迁移到西餐厅可能就有帮助,迁移到汽车保养就没用了。实际应用中需要评估域间相似度,设计合适的迁移策略,并通过验证集确认迁移确实带来了正向收益。

为何常见:描述迁移联邦的资料常强调其“无约束”的优势,容易让人忽略它同样存在适用边界和失败模式。

面试题

Q1. 水平联邦学习中,各参与方的数据分布特点是?

单选题 · mid

  • A.样本相同,特征互补
  • B.样本特征完全一致
  • C.样本不同,特征相同← 正确答案
  • D.样本特征均不相同

答案:C。水平联邦学习的核心条件是“特征空间相同、样本空间不同”,即各方数据表的列结构一致,但行(样本)来自不同群体。选项 A 是垂直联邦的特征,选项 B 是数据完全相同的极端情形,选项 D 是迁移联邦的场景。

Q2. 垂直联邦学习最典型的使用场景是?

单选题 · easy

  • A.同一商圈多业态联合建模← 正确答案
  • B.不同城市同品牌门店
  • C.单一企业内部数据整合
  • D.跨境电商数据共享

答案:A。垂直联邦要求样本空间重叠、特征互补。同一商圈的餐厅、奶茶店、健身房面对同一批顾客,各掌握不同维度特征,是典型的垂直联邦场景。不同城市同品牌门店是水平联邦场景;单一企业内部整合不需要联邦学习。

Q3. 联邦学习中的“中央服务器”主要职责是?

单选题 · easy

  • A.收集并存储原始数据
  • B.分发全部训练数据集
  • C.聚合客户端模型参数← 正确答案
  • D.替代所有端侧训练

答案:C。在 FedAvg 中,中央服务器负责下发初始模型、接收各客户端上传的本地模型参数,并按样本量加权聚合出新的全局模型。服务器不收集原始数据,也不承担本地训练任务。因此 C 正确。

Q4. 关于 FedAvg 聚合算法,下列说法正确的是?

多选题 · mid

  • A.本地训练后得出参数← 正确答案
  • B.服务器加权平均聚合← 正确答案
  • C.客户端之间直接传参
  • D.多轮迭代迭代收敛← 正确答案

答案:ABD。FedAvg 的流程是:各客户端用本地数据训练得到局部参数,服务器按样本量加权平均聚合,并重复多轮直到收敛。客户端之间并不直接交换参数,而是通过服务器中转,因此 C 错误。

Q5. 迁移联邦学习与垂直联邦学习最核心的区别是?

单选题 · mid

  • A.通信协议完全不同
  • B.加密算法不同
  • C.数据分布特征不同← 正确答案
  • D.模型结构必须相同

答案:C。迁移联邦适用于样本和特征均不同的场景,而垂直联邦要求样本重叠、特征互补。二者在数据分布约束上存在本质差异,这也决定了它们在实体对齐、训练策略、隐私保护方案上的区别。

Q6. 联邦学习中的常用隐私保护技术包括?

多选题 · mid

  • A.安全聚合← 正确答案
  • B.差分隐私← 正确答案
  • C.同态加密← 正确答案
  • D.数据公开脱敏

答案:ABC。安全聚合在聚合过程中隐藏个体参数,差分隐私通过添加噪声掩盖个体贡献,同态加密允许在密文上直接计算。三者都是联邦学习常用的隐私增强技术。数据公开脱敏违背联邦学习“数据不出域”的前提,故 D 错误。

Q7. 在垂直联邦学习中,实体对齐需要解决的核心问题是?

单选题 · hard

  • A.如何提升模型预测精度
  • B.不暴露原始标识下对齐公共样本← 正确答案
  • C.如何扩充原始数据集
  • D.如何压缩通信带宽

答案:B。垂直联邦的参与方拥有同一批样本的不同特征,但彼此不能直接交换用户 ID,否则就泄露了隐私。实体对齐(如 PSI 协议)的目标是在不暴露非公共用户信息的前提下,确定双方共有的样本集。B 准确概括了这一核心挑战。

Q8. 安全聚合机制保证服务器能看到的值是?

单选题 · hard

  • A.每个客户端的完整梯度
  • B.模型参数的明文总和
  • C.加掩码后聚合的总结果← 正确答案
  • D.全部原始训练数据

答案:C。安全聚合通过客户端之间交换掩码,使服务器只能看到所有客户端参数的总和(或加权平均),而无法解析出任何单个客户端的参数。这正是“风味联盟”集体信箱的效果——统计者只看得到总数,看不到单张纸条。C 正确。

Q9. 关于差分隐私在联邦学习中的作用,说法正确的有?

多选题 · hard

  • A.添加噪声保护个体信息← 正确答案
  • B.可防范梯度反推攻击← 正确答案
  • C.一定程度上牺牲模型精度← 正确答案
  • D.能完全替代同态加密

答案:ABC。差分隐私通过在参数或梯度中加入噪声,掩盖单一样本的影响,因此可以在一定程度上防御梯度逆向攻击。噪声会带来模型精度损失,这是隐私-精度的权衡。但差分隐私与同态加密解决的问题不同、机制不同,不能完全互相替代,D 错误。

Q10. 迁移联邦学习最擅长解决的问题是?

单选题 · mid

  • A.同分布数据的加速训练
  • B.消除全部隐私安全隐患
  • C.降低服务端通信开销
  • D.目标域样本不足的冷启动← 正确答案

答案:D。迁移联邦学习的核心价值在于借助源域知识帮助目标域建模,尤其适合目标域数据稀缺的冷启动阶段。它不解决同分布加速问题,也无法完全消除隐私风险,更不能降低通信开销。D 正确。