FedAvg论文

论文:Communication-Efficient Learning of Deep Networks
from Decentralized Data
原code
Reproducing

通过阅读帖子进行的了解。

联邦平均算法就是最典型的平均算法之一。将每个客户端上的本地随机梯度下降和执行模型的平均服务器结合在一起。

联邦优化问题

  • 数据非独立同分布

  • 数据分布的不平衡性

  • 用户规模大

  • 通信有限

联邦平均算法

客户端与服务器之间的通信代价比较大,文中提出两种方法降低通信成本:

  • 增加并行性

  • 增加每个客户端计算量

首先提出FedSGD算法,本地执行多次FedSGD,得到FedAvg算法。

  • 选择一定比例客户端参与训练,而不是全部,因为全部的会比客户端的收敛速度慢,模型精度低

  • 该算法将计算量放在了本地客户端,服务器只用于聚合平均,可在平均步骤之前进行多次局部模型的更新,过多的本地迭代轮次会造成过拟合

代码复现

IID、Non-IID的含义:

  • 数据独立同分布,IID,Independent Identically Distribution,数据之间不相互影响,满足同一个分布。

    独立同分布数据,说明训练的样本点具有较好的总体代表性。

  • 非独立同分布,Non-IID,Non-Independent Identically Distribution,实际场景数据很难满足IID的前提假设。

依照帖子对代码文件的介绍,如下图所示:

在这里插入图片描述

我的本地电脑:如下图所示:

在这里插入图片描述

Fed.py

关键原理:Fed.py中的权重平均聚合算法,

def FedAvg(w):
    '''

    :param w: 权重吗?是的,是包含多个用户端模型权重的列表,每个权重相当于一个字典,带有键值
    :return:
    '''
    w_avg = copy.deepcopy(w[0]) # 利用深拷贝获取初始w[0]
    for k in w_avg.keys(): # 遍历每个权重键
        for i in range(1, len(w)):
            w_avg[k] += w[i][k] # 累加
        w_avg[k] = torch.div(w_avg[k], len(w)) # 平均
    return w_avg

参考

【FedAvg论文笔记】&【代码复现】

相关推荐

  1. <span style='color:red;'>FedAvg</span>

    FedAvg

    2024-06-10 22:22:03      23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-10 22:22:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-10 22:22:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-10 22:22:03       82 阅读
  4. Python语言-面向对象

    2024-06-10 22:22:03       91 阅读

热门阅读

  1. 2002NOIP普及组真题 1. 级数求和

    2024-06-10 22:22:03       30 阅读
  2. 深入理解交叉熵损失CrossEntropyLoss - Softmax

    2024-06-10 22:22:03       33 阅读
  3. Chrome DevTools攻略

    2024-06-10 22:22:03       36 阅读
  4. 详解 Flink Table API 和 Flink SQL 之入门介绍

    2024-06-10 22:22:03       27 阅读
  5. 【C++重载——<<&>>&==&[]&=……】

    2024-06-10 22:22:03       31 阅读
  6. 程序设计与算法(三)C++:第四章poj代码

    2024-06-10 22:22:03       27 阅读
  7. selenium的使用教程

    2024-06-10 22:22:03       35 阅读