Skip to content

FedOpt 自适应联邦优化

FedOpt 将自适应优化器(如 Adam、Yogi)引入联邦学习的服务端聚合步骤,提升收敛速度和最终性能。

FedOpt自适应联邦优化

FedOpt 框架

FedOpt 将 FedAvg 的聚合步骤替换为自适应优化器更新:

FedAvg:  w_(t+1) = Σ n_k/n × w_k^(t+1)         # 简单加权平均
FedOpt:  w_(t+1) = w_t - η_s × ServerOptimizer(Δ_t)  # 自适应更新

其中 Δ_t = w_t - Σ n_k/n × w_k^(t+1) 是伪梯度

服务端优化器

FedAdam

python
class FedAdamServer:
    def __init__(self, model, lr=0.01, beta1=0.9, beta2=0.999, epsilon=1e-8, tau=1e-3):
        self.global_model = model
        self.lr = lr
        self.beta1 = beta1
        self.beta2 = beta2
        self.epsilon = epsilon
        self.tau = tau  # 适配率

        self.m = None  # 一阶矩
        self.v = None  # 二阶矩

    def aggregate(self, pseudo_gradient, round_num):
        """FedAdam 聚合"""
        if self.m is None:
            self.m = torch.zeros_like(pseudo_gradient)
            self.v = torch.zeros_like(pseudo_gradient)

        # 更新一阶矩和二阶矩
        self.m = self.beta1 * self.m + (1 - self.beta1) * pseudo_gradient
        self.v = self.beta2 * self.v + (1 - self.beta2) * pseudo_gradient ** 2

        # 偏差修正
        m_hat = self.m / (1 - self.beta1 ** round_num)
        v_hat = self.v / (1 - self.beta2 ** round_num)

        # 自适应更新
        update = self.lr * m_hat / (torch.sqrt(v_hat) + self.tau)

        for param, delta in zip(self.global_model.parameters(), update):
            param.data += delta

FedYogi

python
# FedYogi 使用不同的二阶矩更新公式
self.v = self.v - (1 - self.beta2) * pseudo_gradient ** 2 * torch.sign(
    self.v - pseudo_gradient ** 2
)

优化器对比

优化器自适应学习率收敛速度鲁棒性推荐
FedAvg (SGD)IID 基线
FedAdam通用推荐
FedYogi最好Non-IID 推荐
FedAdagrad不推荐

超参数选择

python
# FedOpt 推荐配置
fedopt_config = {
    "server_lr": 0.01,       # 服务端学习率
    "client_lr": 0.01,       # 客户端学习率
    "beta1": 0.9,            # Adam 一阶矩系数
    "beta2": 0.999,          # Adam 二阶矩系数
    "tau": 1e-3,             # 适配率(防除零)
    "client_epochs": 5,      # 本地训练轮数
}

双层学习率

FedOpt 有两个学习率:服务端学习率(控制聚合步长)和客户端学习率(控制本地训练步长)。通常服务端学习率较客户端大 1-10 倍。

tau 参数

tau 是 FedAdam 的关键超参数。tau 过小会导致自适应学习率过于激进,训练不稳定;tau 过大则退化为 FedAvg。建议从 1e-3 开始调参。

相关资源

最近更新