联邦学习实战隐私保护下的分布式AI训练在数据隐私法规GDPR、个人信息保护法日益严格的背景下数据不出门成为企业AI落地的刚性约束。联邦学习Federated Learning通过在本地训练、只传模型参数的方式实现了数据不动模型动的分布式AI训练范式。本文将从原理到实践系统介绍联邦学习的核心算法和工程实现。一、联邦学习的基本范式1.1 核心思想与传统集中式训练不同联邦学习的数据分布在多个参与方客户端中央服务器只聚合模型更新# 联邦学习训练流程简化 class FederatedLearning: def __init__(self, server_model, clients): self.global_model server_model self.clients clients def train_round(self): # 1. 服务器广播全局模型 for client in self.clients: client.receive_model(self.global_model.state_dict()) # 2. 各客户端本地训练数据不出本地 local_updates [] for client in self.clients: update client.local_train(epochs5) local_updates.append(update) # 3. 服务器聚合更新FedAvg self.global_model self.aggregate(local_updates) return self.evaluate() def aggregate(self, updates): FedAvg算法按数据量加权平均 total_samples sum(u[num_samples] for u in updates) averaged {} for key in updates[0][weights].keys(): averaged[key] sum( u[weights][key] * u[num_samples] / total_samples for u in updates ) self.global_model.load_state_dict(averaged) return self.global_model1.2 联邦学习的分类| 类型 | 数据分布特征 | 典型场景 | 挑战 | |------|------------|----------|------| | 横向联邦 | 特征相同样本不同 | 跨机构医疗影像 | 数据异构 | | 纵向联邦 | 样本相同特征不同 | 银行与电商联合风控 | 对齐困难 | | 联邦迁移 | 特征和样本都不同 | 跨域推荐 | 知识迁移 |二、核心算法详解2.1 FedAvg及其改进FedAvg是最基础的聚合算法但在数据非独立同分布Non-IID时性能下降class FedProx: FedProx在本地目标函数中加入近端项限制本地更新偏离全局模型 def local_train(self, global_weights, mu0.01): optimizer torch.optim.SGD(self.model.parameters(), lr0.01) for epoch in range(self.local_epochs): for batch in self.local_data: x, y batch pred self.model(x) loss criterion(pred, y) # 近端项惩罚与全局模型的距离 proximal_term 0 for param, global_param in zip(self.model.parameters(), global_weights): proximal_term torch.norm(param - global_param) ** 2 total_loss loss (mu / 2) * proximal_term total_loss.backward() optimizer.step() return self.model.state_dict() class SCAFFOLD: SCAFFOLD使用控制变量修正客户端漂移 def __init__(self): self.global_control None # 全局控制变量 self.local_control None # 本地控制变量 def local_update(self, global_model, global_control): # 使用控制变量修正梯度方向 for param, g_control, l_control in zip(