深夜的联合侦探社,老周盯着银行流水卷宗发愁:他想判断哪些嫌疑人会赖账,手上只有收入、负债这类财务线索;隔壁小陈的电商数据库里,同一批人的消费偏好、退货频率清清楚楚,但两人都签了保密协议,卷宗绝不能离开档案室。各握半张拼图,谁也不能看对方那张——这正是“数据孤岛”。纵向联邦学习,就像一群侦探在不交换卷宗的前提下联手破案:先靠“指纹墨水”确认大家盯的是同一批嫌疑人,再用“密封信封”传递只能算、不能读的中间结果,一轮轮接力训练出融合双方线索的风险模型。数据不搬家,模型却能“合体”。这篇文章会带你拆解纵向联邦的对比、对齐、加密、训练、通信与落地。
对 AI 从业者而言,纵向联邦是打破跨机构数据孤岛、合规融合多方特征的关键技能。掌握它,你就能在金融、政务等场景中既保住数据隐私,又做出更强的模型——这是隐私计算时代算法工程师的必备竞争力。
可视化演示
展示纵向与横向联邦数据划分对比、PSI安全样本对齐流程、加密通信训练架构,切换模式查看。
本节配有交互动效(进入视口后自动加载,约 3KB)。
横纵对比:联邦学习两种数据划分 HFL:同特征不同样本(横向切分) VFL:同样本不同特征(纵向切分) HFL: split by rows | VFL: split by columns 纵向联邦适用于样本重叠多但特征分散的场景
纵横联邦对比
深夜的联合侦探社接到新案子:老周手上有嫌疑人的银行流水,小陈手上有同一批人的电商消费记录,两人都要参与“会不会赖账”的评估,但卷宗不能离手。先别急着传数据——得先搞清楚两家手里到底缺什么、补什么,这就要分清联邦学习的“横”与“纵”。
如果两家医院各自存着完全相同格式的病历表,只是病人不同,这叫横向联邦:特征相同、样本不同,数据表按“行”切开。而老周和小陈面对的是同一批客户,各自记录的字段完全不同——一个记财务、一个记消费,这叫纵向联邦:样本相同、特征不同,数据表按“列”切开。
判断用哪种联邦,只需看两张表怎么对齐:样本 ID 高度重叠、字段各缺一半,就是纵向联邦。它特别适合“服务同一群用户但彼此不竞争”的机构,比如银行、电商、运营商、政务部门。以下公式刻画了这种按列切分的关系。
就像两位侦探各自记下同一批嫌疑人的不同特征,记录本合起来才是一份完整的“人物画像”,但两个记录本从未离开各自的档案室。
- 特征矩阵\(X\) 表示所有样本的特征矩阵,每一行都是同一个用户的完整画像。
- 客方特征块\(X^{\text{客}}\) 是银行在本地保存的财务特征,如月收入、负债率。
- 主方特征块\(X^{\text{主}}\) 是电商在本地保存的消费特征,如月消费频次、客单价。
- 按列拼接中间的竖线表示把两边的特征列拼成完整特征向量,这正是“纵向”二字的本意。
安全样本对齐
确定搞纵向联邦之后,第一步是确认“咱们盯的是不是同一批人”。双方名单里各有几千万用户,直接交换明文名单显然违规。两位侦探约定:把每个 ID 蘸上“指纹墨水”盖成无法还原的指纹卡片,只比对指纹是否一致。
这种技术叫安全样本对齐,学名隐私求交(Private Set Intersection, PSI)。双方各自对用户 ID 做单向哈希得到“指纹”;为防止攻击者枚举常见 ID 反推(字典攻击),还要加入随机盐做盲化。最终双方只学到交集下标,对交集之外的名单一无所知。
对齐之后,只有交集里的样本进入后续联邦训练,既保证了样本空间一致,又守住了各自名单的隐私边界。下面公式是求交的数学表达。
老周和小陈比完指纹,只把“两边都认识的人”挑出来建模型,其余名字谁也没看见——这就是交集保护。
- 交集集合\(K\) 是双方共有的样本下标集合,后续训练只用这些行参与。
- 单向指纹函数\(h(\cdot)\) 是把任意长度 ID 压成 256 位指纹的单向函数,反推在计算上不可行。
- 指纹相等判定两个指纹相等当且仅当原始 ID 相等,从而完成“不读名单的比对”。
- 随机盐防枚举\(r\) 是双方各自加入的随机数,防止攻击者枚举常见 ID 撞库还原。
加密协议
对齐之后,训练中要传递“中间结果”。直接传明文等于把线索写在明信片上,于是联络官搬来三件“保险工具”:魔法信封(同态加密)、碎片保险箱(秘密分享)、噪声幕布(差分隐私)。
同态加密允许在密文上直接做运算——在加法同态下,把两封密文相加,解出来的正好是明文之和。秘密分享把一个数值拆成几片分给多方,凑不齐就还原不出。安全多方计算(MPC)让多方联合计算却只输出结果。差分隐私则给输出加校准噪声,让单个样本难以被反推。
纵向联邦中最常用的是加法同态(如 Paillier),因为它足以支持“把各家的中间结果聚合起来”这一核心操作,而无需昂贵的密文乘法。下面这个性质是整个协议的地基。
老周把加密的半成品投进魔法信封,小陈在不拆信的前提下“隔着信封”完成加总,再请持有私钥的一方拆开——谁也没看到对方信封里的原始数字。
- 密文记号\(\llbracket a \rrbracket\) 表示用公钥加密后的密文,只有持私钥方能读出。
- 密文域运算\(\oplus\) 是密文上的加法运算,Paillier 下表现为两个密文相乘后模 \(n^2\)。
- 结果仍是密文右边得到的是 \(a+b\) 的密文,没有私钥的人依旧读不出内容。
- 聚合意义协调方可以把各家的密文聚合起来,却看不到任何一家的明文数值。
训练流程
训练像一场“接力写报告”:主方先写前半段,客方把后半段接上,算出误差后再让主方修改自己的思路,如此反复直到预测越来越准。系统里通常有三个角色:客方(Guest,持有特征和标签,一般是业务发起方)、主方(Host,只持有部分特征)、协调方(Arbiter,负责密钥管理与聚合调度)。
以纵向联邦逻辑回归为例,每轮迭代分前向和反向两个阶段。前向阶段:主方在本地用消费特征算出局部打分 \(u^{\text{主}}\),加密发给客方;客方用自己的财务特征算出 \(u^{\text{客}}\),把两段加起来得到总打分 \(z\),再经过 sigmoid 得到违约概率。
反向阶段:客方计算预测与真实标签的误差 \(d=\hat{y}-y\),把加密后的 \(\llbracket d \rrbracket\) 发回主方;主方在密文域上计算本地梯度并更新权重,客方也同步更新自己的权重。下面公式描述主方的更新量。
报告的每一章都可以分头写,最后在“加盖印章”环节自然地合并——这就是纵向联邦的训练节奏:数据不动、梯度流动。
\displaystyle \hat{y}_i=\sigma\!\left(u_i^{\text{客}}+u_i^{\text{主}}\right),\quadu_i^{\text{客}}=x_i^{\text{客}}w_{\text{客}},\quadu_i^{\text{主}}=x_i^{\text{主}}w_{\text{主}},\quad\sigma(z)=\frac{1}{1+e^{-z}}- 误差项预测概率与真实标签之差,正数表示该样本的风险被低估。
- 加密误差客方把误差加密成密文,主方只能用于运算而无法读出。
- 主方梯度在密文上把误差乘上主方特征并求和,得到密文梯度。
- 权重更新解密后主方减去梯度完成更新,客方在自己的本地数据上做同样的事。
通信机制
每一轮迭代,情报专线要跑两趟:一趟送前向贡献,一趟送反向误差。线路带宽和班次密度,决定了整轮“破案”的速度。
纵向联邦的通信拓扑常是星型:客方、主方各与协调方交换密文。通信总量由三个因素决定:训练轮次、每趟密文大小(同态加密会让密文膨胀数倍)、参与方数量。三者线性相乘,轮次一多通信就成了最粗的瓶颈。
工程上常用梯度量化、批量打包、异步更新来压低成本,让“信封”更轻、“班车”更少。通信量的量化公式如下。
班车越少、信封越轻、线路越短,破案就越快;纵向联邦的工程实践,很大程度上就是在帮这些“信封”减肥。
- 训练轮次梯度下降在全部数据上迭代的次数,由 epochs 与批量数决定。
- 密文大小同态加密后数值会膨胀约 2~4 倍,直接抬高每趟投递的字节数。
- 参与方数除了客方之外还有多少个主方,每多一方就多一份投递。
- 线性放大三个因素相乘,任一变大都会让总通信量成比例上涨。
金融风控应用
侦探破案的流程落到信贷场景,就是银行与电商的联合风控。老周的角色变成银行信贷员,小陈的角色变成合作机构的分析师。
传统信贷审批只依赖行内流水、征信和申请表,特征面窄,很多“行为特征”根本看不到。引入电商消费行为、运营商使用习惯后,风险画像更完整:一个收入不高但消费稳定的人,和一个收入高却频繁套现的人,风险评估完全不同。
在隐私计算平台上,双方先做安全样本对齐,再用同态加密完成联合训练。某银行与头部电商合作后,模型 KS 从 0.32 提升到 0.41,坏账率下降约 18%。最终的风险分可以写成下面的公式。
老周不再只读流水,小陈也不再空守数据,双方在合规框架下一起把“画像”补齐,坏人更难遁形——这就是打破数据孤岛的真实价值。
- 偏置项\(w_0\) 是全局截距,相当于模型的“起评分”。
- 客方贡献银行侧特征与权重的内积,反映财务状况的得分。
- 主方贡献电商侧特征与权重的内积,反映行为偏好的得分。
- 风险分数两项相加后经 sigmoid 得到违约概率,银行据此设定审批阈值。
安全效率分析
魔法信封再结实,也有被撬的风险;加密与通信都有真实成本。安全与效率,是纵向联邦这架天平的两端,缺一不可。
安全上,明文特征永远不出域,半诚实模型下协议可证明安全;但梯度与预测结果仍可能泄露成员与标签信息,需要差分隐私等补充手段。效率上,同态加密的模指数运算是算力大山,密文膨胀又让通信成为瓶颈。
实践中常采用“同态加密 + 秘密分享 + 差分隐私”的混合方案,或用批量加密与硬件加速摊薄成本。一次训练的耗时可以拆成三块。
侦探们最终的选择是“够用就好”:普通案子用半诚实协议加同态加密,高敏感场景再加差分隐私,必要时上硬件加速——安全与效率,从来都是工程里的平衡艺术。
- 本地计算各参与方在本地数据上做矩阵运算,通常很快。
- 加解密开销同态加密的模指数运算很昂贵,是横在路中间的大山。
- 通信耗时与网络往返次数及密文大小成正比,轮次越多越明显。
- 三者权衡加密越强、轮次越多,后两块开销就越大,需要按场景取舍。
AI 应用场景
银行信贷风控联合建模
阶段:模型训练阶段(特征融合 + 联合训练)
解决的问题:传统信贷模型只用行内流水、征信和申请资料,特征维度少、区分度低;若要引入电商、运营商的消费行为数据,就必须把明文客户数据搬运到外部,既违反《个人信息保护法》又面临泄露风险。纵向联邦让各方在数据不出域的前提下完成特征对齐与联合训练,既合规又提效。
具体案例:某股份制银行与头部电商平台共建风控模型。安全求交后得到约 50 万共同客户,银行侧特征为资产、负债、流水波动,电商侧特征为消费频次、客单价、退货率。融合训练后模型 KS 由 0.32 提升至 0.41,坏账率下降约 18%。
跨机构反欺诈识别
阶段:模型推理阶段(联合打分)
解决的问题:单一机构黑样本少、特征单一,欺诈分子常跨平台作案,单点看不清全貌;直接共享黑名单又涉及个人隐私与商业机密。纵向联邦让各机构在本地计算自己的风险贡献,密文汇总得到联合风险分。
具体案例:银行与消金公司、电商平台组成纵向联邦联盟,对同一批新申请件联合推理。该机制识别出一个仅在单一平台潜伏、跨三家平台申请的团伙欺诈,召回率提升约 25%。
政务数据惠民核验
阶段:特征工程 + 联合推理
解决的问题:公安、人社、税务等部门掌握同一居民的不同维度数据,直接归集面临巨大的安全责任。纵向联邦在不出域前提下完成资格核验与精准画像。
具体案例:某市人社局与金融机构基于纵向联邦核验“创业担保贷款”申请者的社保缴纳与经营流水特征,核验耗时从 5 个工作日缩短到 1 天。
Python 演示
import numpy as np class VerticalFederatedLR: """纵向联邦逻辑回归:客方持特征+标签,主方持同批样本的另一部分特征。 真实系统中, 主方传给客方的 u 和客方回传的 d 都是同态加密密文, 这里用明文展示双方的计算分工与数据流向。 """ def __init__(self, lr=0.1, epochs=80): self.lr = lr self.epochs = epochs self.gc_count = 0 # 统计通信轮次 def train_guest(self, Xg, Xh, y): """Xg: 客方特征, Xh: 主方特征, y: 客方标签""" n = Xg.shape[0] wg = np.zeros(Xg.shape[1]) wh = np.zeros(Xh.shape[1]) losses = [] for _ in range(self.epochs): uh = Xh @ wh # 主方算自己的局部打分 ug = Xg @ wg # 客方算自己的局部打分 z = ug + uh # 客方合并总打分(真实系统里 uh 为密文) yhat = 1 / (1 + np.exp(-z)) loss = -np.mean(y * np.log(yhat + 1e-9) + (1 - y) * np.log(1 - yhat + 1e-9)) losses.append(loss) d = yhat - y # 客方算出的误差项 wg -= self.lr / n * (Xg.T @ d) # 客方本地更新 wh -= self.lr / n * (Xh.T @ d) # 主方用收到的误差更新 self.gc_count += 1 return wg, wh, losses if __name__ == "__main__": rng = np.random.default_rng(42) n, dg, dh = 2000, 3, 2 Xg = rng.standard_normal((n, dg)) Xh = rng.standard_normal((n, dh)) w_true = np.concatenate([rng.uniform(-1, 1, dg), rng.uniform(-1, 1, dh)]) z = np.concatenate([Xg, Xh], axis=1) @ w_true y = (1 / (1 + np.exp(-z)) > 0.6).astype(int) model = VerticalFederatedLR(lr=0.1, epochs=80) wg, wh, losses = model.train_guest(Xg, Xh, y) print("客方权重:", np.round(wg, 3)) print("主方权重:", np.round(wh, 3)) print("末轮损失:", round(losses[-1], 4)) print("通信轮次:", model.gc_count)
uh = Xh @ wh主方在本地用自己的特征算出的前半段打分,真实系统中加密后再发出z = ug + uh客方把两段打分合并成完整打分,完成“接力”的接棒动作yhat = 1 / (1 + np.exp(-z))sigmoid 激活,把打分转成违约概率d = yhat - y客方算出的预测误差,真实系统中加密后发给主方wg -= self.lr / n * (Xg.T @ d)客方只用本地矩阵更新权重,不碰对方数据wh -= self.lr / n * (Xh.T @ d)主方用收到的误差更新本地权重self.gc_count += 1每轮迭代记录一次通信,呼应“通信是纵向联邦成本大头”的观点
常见误区
误区“纵向联邦就是把多个模型纵着叠起来,或者把时间上前后拼接的数据拿来做联邦。”
正解“纵向”指的是数据表的列方向:同一批样本 ID、不同特征列分布在各方。好比两个侦探记的是同一批人的不同侧面,而不是各自记录不同时期的事。判断标准是样本 ID 是否相同、特征列是否互补。
为何常见:中文“纵向”在日常里常指时间先后或层次深浅,初学者容易望文生义。
误区“把用户 ID 用 MD5 或 SHA256 哈希后就能安全比对,反正不可逆。”
正解普通哈希容易遭字典攻击和彩虹表攻击——常见 ID 空间很小,攻击者枚举一遍就能还原。正规做法是加随机盐的盲化,再叠加基于 RSA 或不经意传输的 PSI 协议,保证双方连“非交集成员是否在对方名单里”都无从得知。
为何常见:单向哈希“不可逆”的说法让初学者误以为哈希即安全,忽略了枚举攻击的存在。
误区“既然能在密文上运算,那模型需要的乘除法、比较大小都能在密文上做。”
正解纵向联邦最常用的是 Paillier 加法同态,只支持密文加法和标量乘;完整乘法同态(FHE)效率极低,工程上几乎不用。逻辑回归通过“本地算双线性项 + 密文加法聚合”绕开密文乘法。
为何常见:教程常只讲同态加密“可在密文上计算”这一口号,不讲具体支持的运算类型。
误区“数据只传密文,所以原始数据和标签绝对不会泄露。”
正解半诚实模型下协议可证明安全,但恶意攻击者可能投毒、构造特殊梯度;即便诚实的参与方也可能从梯度或预测结果推断出样本成员甚至标签信息。实践中需要结合差分隐私、梯度压缩等防御手段。
为何常见:把“加密”等同于“绝对隐私”,忽略了信息通过模型输出间接泄露的通道。
误区“都是联邦学习,把横向联邦的框架配置改一改就能跑纵向。”
正解两者数据划分不同,算法流程根本不同:纵向联邦需要安全样本对齐、密文聚合中间结果、客方持有标签并触发反向传播,通信拓扑和密钥管理差异很大,工具链也各有侧重。
为何常见:共享“联邦学习”这个上层概念,初学者容易忽略下层协议和工程架构的差异。
面试题
Q1. 纵向联邦学习适用的数据划分场景是哪个?
- A.样本ID不同特征相同
- B.样本ID相同特征不同← 正确答案
- C.样本ID和特征都不同
- D.时间序列纵向前后拼接
答案:B。纵向联邦要求同一批样本、不同特征列,就像银行和电商记录同一批客户的不同侧面;A 是横向联邦的典型形态,D 是把“纵向”误当成时间维度。
Q2. 关于安全样本对齐(PSI),下列说法正确的是?
- A.双方直接交换明文ID
- B.普通哈希即可保证绝对安全
- C.找共同样本且不泄露其余← 正确答案
- D.必须训练完成之后再做
答案:C。PSI 的目标是只暴露交集、不泄露非交集成员。B 错在忽略字典攻击;A 直接明文交换违反隐私初衷;D 错,对齐发生在训练之前。
Q3. 加法同态加密的核心性质是什么?
- A.密文加法等于明文乘法
- B.密文加法等于明文加法← 正确答案
- C.密文上无法做任何运算
- D.解密后数值会变成平方
答案:B。加法同态性质是 Enc(a) ⊕ Enc(b) = Enc(a+b),即在密文上相加等价于明文相加;A 是乘法同态,C 与同态的定义矛盾,D 无此性质。
Q4. 纵向联邦训练中主方(Host)通常负责什么?
- A.持有标签并计算损失
- B.持有部分特征算贡献← 正确答案
- C.汇总各方的原始数据
- D.解密所有本地特征
答案:B。主方只有一部分特征,职责是算本地中间贡献并接收加密误差更新权重;标签和损失由客方负责,C/D 都会造成明文汇聚,违背隐私目标。
Q5. 以下哪种攻击专门针对纵向联邦中标签信息的保护?
- A.模型权重反转攻击
- B.用梯度推断标签信息← 正确答案
- C.直接窃取原始特征值
- D.对训练样本进行投毒
答案:B。纵向联邦中标签只在客方,主方可能通过构造特殊梯度、观察聚合结果来推断标签(标签推断攻击);A/C 针对特征而非标签,D 属于投毒而非“推断泄露”。
Q6. 纵向联邦的主要通信开销来自哪里?
- A.原始明文的直接传输
- B.每轮加密中间结果的传递← 正确答案
- C.模型参数在本地保存
- D.特征工程的本地计算
答案:B。纵向联邦每轮前向、反向都要传密文中间结果,通信量 = 轮次 × 密文大小 × 参与方数;明文不传输,本地计算不产生通信开销。
Q7. “打破数据孤岛”在纵向联邦语境下指什么?
- A.让各方共享原始数据库
- B.数据不出域融合特征建模← 正确答案
- C.集中存储所有用户数据
- D.完全取消所有数据加密
答案:B。纵向联邦让数据“不动、模型动”,各方原始数据不出本地,靠加密中间结果完成特征融合,这才是隐私计算语境下的破孤岛,A/C/D 都违背隐私前提。
Q8. 纵向联邦提升金融风控效果的原因有哪些?
- A.补充客方缺失的特征← 正确答案
- B.直接合并各方原始数据
- C.合规融合跨机构特征← 正确答案
- D.缩短模型训练时间
答案:AC。A/C 是核心:引入电商、运营商的互补特征,在合规前提下融合多方信息;B 直接合并原始数据违反隐私计算原则;D 与通信开销增大的现实不符,训练往往更慢。
Q9. 关于纵向联邦的安全性,正确的说法有哪些?
- A.半诚实模型下协议可证明安全← 正确答案
- B.恶意攻击者无法获得任何信息
- C.加密交换防明文特征泄露← 正确答案
- D.梯度交换也可能泄露信息← 正确答案
答案:ACD。A/C/D 正确:半诚实模型有可证明安全性,密文交换避免明文特征外泄,但梯度与输出仍可能被推断样本或标签;B 过于绝对,恶意模型下攻击者依然能从输出中学到信息。
Q10. 纵向联邦常用的隐私保护技术有哪些?
- A.采用同态加密保护梯度← 正确答案
- B.采用秘密分享拆分数值← 正确答案
- C.引入差分隐私加噪机制← 正确答案
- D.将明文数据存放于第三方云
答案:ABC。同态加密、秘密分享、差分隐私都是纵向联邦的常用技术,常组合使用;D 把明文放第三方云直接泄露隐私,与联邦学习的理念背道而驰。