嵌套学习架构设计
嵌套学习(Nested Learning)将联邦学习组织为多层次的树状结构,解决大规模参与方的层次化聚合问题。
层次化聚合
在跨设备 + 跨机构混合场景中,设备先聚合到边缘服务器,边缘服务器再聚合到中心服务器:
中心服务器
/ \
边缘A 边缘B
/ \ / \
设备1 设备2 设备3 设备4python
class NestedFL:
"""嵌套联邦学习"""
def __init__(self, num_edge_servers, devices_per_edge):
self.edge_servers = num_edge_servers
self.devices_per_edge = devices_per_edge
def train_round(self):
# 第一层:设备 → 边缘
edge_models = []
for edge_id in range(self.edge_servers):
device_updates = []
for device in self.get_devices(edge_id):
update = device.local_train(self.global_model)
device_updates.append(update)
edge_model = self.edge_aggregate(device_updates)
edge_models.append(edge_model)
# 第二层:边缘 → 中心
self.global_model = self.center_aggregate(edge_models)
def edge_aggregate(self, updates):
"""边缘层聚合"""
return FedAvg.aggregate(updates)
def center_aggregate(self, edge_models):
"""中心层聚合"""
return FedAvg.aggregate(edge_models)层次化差分隐私
每层分配不同的隐私预算:
python
class HierarchicalDP:
"""层次化差分隐私"""
def __init__(self, total_epsilon=10.0):
self.total_epsilon = total_epsilon
def allocate_budget(self, num_levels=2):
"""分配隐私预算"""
# 按层分配:底层分配更多(更多参与方)
budgets = []
for level in range(num_levels):
# 指数递减分配
budget = self.total_epsilon / (2 ** level)
budgets.append(budget)
return budgets
def add_noise(self, update, epsilon, sensitivity=1.0):
"""添加高斯噪声"""
sigma = sensitivity / epsilon
noise = torch.randn_like(update) * sigma
return update + noise优势与权衡
| 特性 | 扁平结构 | 嵌套结构 |
|---|---|---|
| 通信量 | O(N×d) | O((N/K+K)×d) |
| 延迟 | 高(所有设备直连中心) | 低(本地聚合) |
| 容错 | 差 | 好(边缘容错) |
| 隐私 | 单层 DP | 层次 DP |
| 复杂度 | 低 | 中 |
嵌套学习适用场景
- 跨设备 + 跨机构混合(设备→机构→中心)
- 地理分布广泛(区域→总部)
- 网络带宽受限(边缘聚合减少上传量)
- 需要局部个性化(边缘保留区域特征)
层次化偏差
边缘聚合可能引入偏差:每个边缘下的设备数据分布不同,边缘模型倾向于代表该区域。需要在中心聚合时进行偏差修正。