当前位置: 首页 > news >正文

【联邦学习(Federated Learning)】- 横向联邦学习与联邦平均FedAvg

文章目录

  • 横向联邦学习的定义
  • 横向联邦学习架构
    • 客户-服务器架构
    • 对等网络架构
  • 联邦平均算法

横向联邦学习的定义

横向联邦学习也称为按样本划分的联邦学习,可以应用于联邦学习的各个参与方的数据集有相同的特征空间和不同的样本空间的场景,类似于在表格视图中对数据进行水平划分的情况。
在这里插入图片描述

例如,两个地区的城市商业银行可能在各自的地区拥有非常不同的客户群体,所以他们的客户交集非常小,他们的数据集有不同的样本ID。然而,他们的业务模型非常相似,因此他们的数据集的特征空间是相同的。这两家银行可以联合起来进行横向联邦学习以构建更好的风控模型。

横向联邦学习架构

客户-服务器架构

具有K个参与方(客户端)在服务器的帮助下,协作地训练一个机器学习模型。
横向联邦学习系统的训练过程通常由如下四步组成:

  1. 各参与方在本地计算模型梯度,并使用同态加密、差分隐私或秘密共享等加密技术,对梯度信息进行掩饰,并将掩饰后的结果(加密梯度)发送给聚合服务器。
  2. 服务器进行安全聚合操作,如使用基于同态加密的加权平均。
  3. 服务器将聚合后的结果发送给各参与方。
  4. 各参与方对收到的梯度进行解密,并使用解密后的梯度结果更新各自的模型参数。

在这里插入图片描述
然后迭代执行上述步骤,直到损失函数收敛或者达到允许的迭代次数的上限或允许的训练时间。这种架构独立于特定的机器学习算法,并且所有参与方将会共享最终的模型参数。

对等网络架构

在这种架构中,横向联邦学习系统的K个参与方也被称为训练方(trainer)或分布式训练方。每一个训练方负责只使用。此外,训练方们使用安全链路在相互之间传输模型参数信息。为了保证任意两方之间的通信安全,需要使用例如基于公共密钥的加密方法等安全措施。
在这里插入图片描述

由于对等网络架构中不存在中央服务器,训练方们必须提前商定发送和接收模型参数信息的顺序,主要有两种方法可以达到这个目的:

  1. 循环传输:训练方们被组织成一条链。第一个训练方(即链首)将当前的模型参数发送给它的下一个训练方。该训练方接收来自上游的模型参数后,将使用来自本地数据集的小批量数据更新收到的模型参数。之后,它将更新后的模型参数传输给下一个训练方。这一过程将被持续重复,直到模型参数收敛或达到允许的最大训练时间。
  2. 随机传输: 随机传输模式中 ,第k个训练方从 {1 ,···,L}中选取i,并将模型参数发送给训练方i。当第i个训练方收到来自第k个训练方的模型参数后,它将使用来自本地数据集的数据的mini-batch更新收到的模型参数。之后,第i个训练方也从{1,···,L}中等概率地随机选取一个数字j,并将自己的模型参数发送给训练方j。这一过程将会重复,直到K个训练方同意模型参数收敛或达到允许的最大训练时间。

联邦平均算法

联邦平均算法(Federal Average Algorithm)是一种用于计算加权平均值的算法,的基本思想将数据点按照某个权重进行加权平均,从而得到一个加权平均值。
在这里插入图片描述

H. B. McMahan, E. Moore, D. Ramage, S. Hampson, and B. A. Y. Arcas, “Communication-efficient learning of deep networks from decentralized data,” in Proc. AISTATS, 2016, pp. 1273–1282.

在原文中对联邦平均算法的描述如下:
在这里插入图片描述

  1. 假定在多轮通信中的一个同步更新方案,有一组K个客户端组成的固定集合,每个客户端都有一个固定的本地数据。

  2. 在每一轮开始,随机的一小部分比例 的客户端被选定,并且服务端把当前全局算法状态(当前的模型参数)发送给被选中的每一个客户端。【为了提高效率我们只选中一小部分客户端,因为我们的实验表明超过某一点继续增加客户端的数量回报就会持续衰减。】

  3. 基于全局模型参数以及本地数据集,每一个被选中的客户端开始执行本地计算,并再把更新发送到服务端。

  4. 而后服务端再把收到的这批更新应用给全局参数,然后就是不断重复执行这个过程。

这里给出它的伪代码描述:

# local_w 表示每个客户端训练得到的权重列表
weights_avg = local_w[0]
for k in weights_avg.keys():
    for i in range(1, len(local_w)):
        # weights_avg[k] += local_w[i][k] * weight
        weights_avg[k] = weights_avg[k] + local_w[i][k]
    weights_avg[k] = weights_avg[k] / len(local_w)
global_weights = weights_avg
model.load_state_dict(global_weights)

在联邦平均算法的实现中,在每一个全局模型训练轮次中,每一个参与方都需要给服务器发送完整的模型参数更新。由于现代的DNN模型通常有数百万个参数,给协调方发送如此多的数值将会导致巨大的通信开销,并且这样的通信开销会随着参与方数量和迭代轮次的增加而增加。当存在大量参与方时,从参与方上传模型参数至协调方将成为联邦学习的瓶颈。可以从以下两个方面对联邦平均算法进行改进:

  • 压缩的模型参数更新:参与方正常计算模型更新,之后进行本地压缩。压缩的模型参数更新通常是真正更新的无偏估计值。(提出了一种执行模型参数压缩的三层流水线。首先,通过去除冗余来删除DNN内的某些连接,只保留最重要的连接部分。其次,量化权重,从而使得多个连接共享同一个权重值,只保留有效权重。最后,使用哈夫曼编码以利用有效权重的偏倚分布。)
  • 参与方选择:第一步是资源检查,即向随机筛选出来的参与方发送资源查询消息,询问它们的本地资源以及与训练任务相关的数据规模。第二步是协调方使用这些信息估计每一个参与方计算本地模型更新所需的时间,以及上传更新所需的时间。之后,协调方将基于这些估计决定选择哪一个参与方。在给定一个全局迭代轮次所需的具体时间预算的情况下,协调方希望选择尽可能多的参与方。

相关文章:

  • 免费一键生成原创文章-原创文章批量生成
  • 众人围剿,GPT-5招惹了谁
  • Spring Boot 3.0系列【19】核心特性篇之自定义Starter启动器
  • oracle中sql 正则怎么写?
  • 【5G RRC】NR测量Gap介绍
  • 【T+】登录畅捷通T+软件后提示同一个浏览器中不允许存在用户XX同时在线。
  • pom文件详解
  • JVM 类加载器子系统
  • 半小时内实现Esp32-Cam模型训练和图像识别
  • 关于一个大学生写一个题目写一天
  • 【C#进阶】C# 多线程
  • mlq移动最小二乘方法
  • 【Spring6】| Spring IoC注解式开发
  • 数据库+加密算法参考材料-2023.3.29
  • fastp软件介绍
  • Angular2开发踩坑系列-生产环境编译
  • cookie和session
  • Docker 笔记(2):Dockerfile
  • input的行数自动增减
  • JavaScript 一些 DOM 的知识点
  • Java小白进阶笔记(3)-初级面向对象
  • k8s 面向应用开发者的基础命令
  • mysql外键的使用
  • Nodejs和JavaWeb协助开发
  • React Native移动开发实战-3-实现页面间的数据传递
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • #DBA杂记1
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (六)c52学习之旅-独立按键
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)scrum常见工具列表
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • .gitignore文件_Git:.gitignore
  • .net 7 上传文件踩坑
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net Signalr 使用笔记
  • .NET命名规范和开发约定
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • ::before和::after 常见的用法
  • ??myeclipse+tomcat
  • @Bean有哪些属性
  • @KafkaListener注解详解(一)| 常用参数详解
  • @selector(..)警告提示
  • @Transaction注解失效的几种场景(附有示例代码)