联邦学习FedAvg中模型聚合过程的理解分析
作者:Cyril_KI 发布时间:2023-09-28 02:29:48
问题
联邦学习原始论文中给出的FedAvg的算法框架为:
参数介绍: K 表示客户端的个数, B表示每一次本地更新时的数据量, E 表示本地更新的次数, η表示学习率。
首先是服务器执行以下步骤:
对每一个本地客户端来说,要做的就是更新本地参数,具体来讲:
把自己的数据集按照参数B分成若干个块,每一块大小都为B。
对每一块数据,需要进行E轮更新:算出该块数据损失的梯度,然后进行梯度下降更新,得到新的本地 w 。
更新完后 w w w将被传送到中央服务器,服务器整合所有客户端计算出的 w,得到最新的全局模型参数 wt+1
客户端收到服务器发送的最新全局参数模型参数,进行下一次更新。
我们仔细观察server的最后一步:
聚合
那么针对聚合,就有以下两种情况。
1. 聚合所有客户端
服务器端每次将新的全局模型发送给全部客户端,并且聚合全部客户端的模型参数。如果客户端未被选中,那么一轮通信结束后,该客户端的模型为一轮通信开始时从服务器获得的初始模型。
设当前全局模型为 wt,服务器选中了 m个客户端(集合V),m个客户端本地更新完毕后,服务器端的聚合公式为:
也就是说,每一次聚合时服务器端都将所有客户端的模型考虑在内。
2. 仅聚合被选中的客户端
服务器每次只是将当前新的参数传递给被选中的模型,并且只是聚合被选中客户端的模型参数。
设当前全局模型为 wt,服务器选中了 m 个客户端(集合V),然后将wt只发送给这 m个客户端。 m m m个客户端训练完毕后,服务器端的聚合公式为:
3. 选择
虽然原始论文中对所有K个客户端都进行了聚合,但在真正实现时,感觉用第二种会更好一点,因为如果客户端数量很庞大,每一次通信都会有不小的代价,用第二种会明显降低通信成本。
来源:https://blog.csdn.net/Cyril_KI/article/details/122991420
猜你喜欢
- 项目场景:postman通常需要传递各式各样的参数,这样的话,进行写参数比较头疼,不知怎么进行传参。解决方案:可以考虑将参数对象写成json
- import pdbdef pdb_test(arg): for i in range(arg):&nb
- Http与https对比详细介绍概要:HTTPS(Secure Hypertext Transfer Protocol)安全超文
- 安装依赖1)下载安装opencv-2.4.9,并将cv2.pyd拷贝到python安装目录的site-package下2)pip insta
- 由于js的代码逻辑越来越重,一个js文件可能会有上千行,十分不利于开发与维护。最近正在把逻辑很重的js拆分成模块,在一顿纠结是使用requi
- 这段时间因为要做个网站,而空间又不支持ASP,所以又拿起JavaScript教程看了下,看能不能在静态的空间里实现动态,当然,这个动态不是真
- 不能再向以前一样使用model.add(Merge([Model1,Model2]))必须使用函数式out = Concatenate()(
- 假如有一个数组是这样子:var arr1 = ["a", "b", "c", &
- 1.理论只要两个表的公共字段有匹配值,就将这两个表中的记录组合起来。个人理解:以一个共同的字段求两个表中符合要求的交集,并将每个表符合要求的
- 0.摘要在Python中,尤其是数组当中,对于一些异常值往往需要进行特殊处理。为了防止异常值与正常数据混淆,影响最终计算结果,常用的方法是将
- sql中的 IF 条件语句的用法IF 表达式IF( expr1 , expr2 , expr3 )expr1 的值为 TRUE,则返回值为
- 本文实例讲述了Python单向链表和双向链表原理与用法。分享给大家供大家参考,具体如下:链表是一种数据结构,链表在循环遍历的时候效率不高,但
- 本文实例讲述了js实现ajax分页的方法。分享给大家供大家参考,具体如下:<!DOCTYPE html PUBLIC "-/
- 企业最有价值的资产通常是其数据库中的客户或产品信息。因此,在这些企业中,数据库管理的一个重要部分就是保护这些数据免受外部攻击,及修复软/硬件
- 使用代码让我们从Mongo数据库的一些细节和基本命令开始,并最终介绍如何创建一个可连接至Mongo数据库的.NET Windows应用。Mo
- 引言Python中的并发编程允许你同时执行多个任务,提高程序的运行效率。在本文中,我们将介绍Python中的asyncio库,它是一个基于异
- 有几个巨头公司,即Facebook和Netflix,决定禁止用户在控制台(console)执行JavaScript命令。 最初这是 由Fac
- 问题一:将u'\u810f\u4e71'转换为'\u810f\u4e71'方法:s_unicode = u&
- 要使用多个定界符拆分字符串:使用 re.split() 方法,例如 re.split(r',|-', my_str)。re.
- Flask解决跨域1、下载flask_cors包pip install flask-cors2、使用flask_cors的CORS代码示例f