纵向联邦学习:特征互补的安全联合建模
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