纵向联邦学习:特征互补的安全联合建模

FreeGuideOnline 最新 2026-06-20

python

主导方 A 持有特征 X_A 和标签 y

被动方 B 持有特征 X_B

1. 各方本地前向计算(明文)

u_A = X_A @ w_A # A 的线性部分 u_B = X_B @ w_B # B 的线性部分(在B本地计算)

2. B 加密 u_B 发送给 A

enc_u_B = HE.encrypt(u_B, B_pub_key)

3. A 在密文上完成聚合和损失计算

enc_u_total = u_A + enc_u_B # 同态加法 enc_pred = sigmoid(enc_u_total) enc_loss = compute_loss(enc_pred, y) # 可能需要近似计算

4. A 计算顶部梯度并回传残差给 B

enc_residual = enc_pred - y

A 更新自己的权重 w_A(明文梯度)

w_A -= lr * (X_A.T @ residual)

5. B 接收加密残差,并更新 w_B

使用同态密文梯度计算或解密后更新

enc_grad_B = X_B.T @ enc_residual grad_B = HE.decrypt(enc_grad_B, B_priv_key) w_B -= lr * grad_B