详解FedProx:FedAvg的改进版 Federated optimization in heterogeneous networks

FedProx:2020 FedAvg的改进

论文:《Federated Optimization in Heterogeneous Networks》
引用量:4445
源码地址
官方实现(tensorflow)https://github.com/litian96/FedProx
几个pytorch实现:https://github.com/ki-ljl/FedProx-PyTorch ,https://github.com/rruisong/pytorch_federated_learning
针对的问题
在FL中,多个client并行训练本地模型,然后server将这些局部模型聚合起来得到全局模型,在这个过程中,有两个困难点:

  1. 系统异构System Heterogeneity:各client的计算能力、存储能力、通信能力各不相同,等待落后的局部模型会拖慢整个系统的训练速度,但抛弃这些落后的client会影响全局模型的精度;
  2. 统计异构Statistical Heterogeneity:不同client间的数据是Non-IID的,此外还有数据unbalanced的情况;

FedAvg是FL中最基本的算法,但是针对上述两个难点,仍有一定问题,表现如下:

  1. 在系统异构方面:FedAvg几乎没有考虑系统异构,在实际中,当部分client在规定时间内没有完成训练时,不管是drop这些模型还是直接聚合未训练完成的模型,都会影响全局模型的acc。
  2. 在统计异构方面:FedAvg较好得解决了统计异构的难点,也正因此让它成为当时FL中的SOTA,但在算法上仍有改进的空间。
  3. 其他:FedAvg通过实验证明了其有效性,但缺少理论上对于收敛速度等指标的分析。

论文贡献
针对FedAvg的不足,作者提出了FedProx算法,该算法能很好地处理异构性,且具有理论保障。在实验中,FedProx能比FedAvg更健壮地收敛,且在高异构地环境下,FedProx比FedAvg有更稳定和准确地收敛,平均提高22%的绝对测试精度。
算法介绍
FedProx算法在FedAvg算法的基础上进行了两个改动,分别是:

  1. 针对系统异构性问题,FedProx允许出现训练不充分的局部模型(γ-inexact solution)

不论一个局部模型是否完成了“本地训练”(固定epoch),FedProx会整合所有参与训练的局部模型,这意味着FedProx不需要所有局部模型训练得很精确。
定义1
首先,作者给出了定义1,提出了γ-inexact solution,对于一个待优化的目标函数 h ( w ; w 0 ) h(w;w_0) h(w;w0),如果有:
∣ ∣ ∇ h ( w ∗ ; w 0 ) ∣ ∣ ≤ γ ∣ ∣ ∇ h ( w 0 ; w 0 ) ∣ ∣ ||\nabla h(w^*;w_0)||\leq\gamma||\nabla h(w_0;w_0)|| ∣∣∇h(w;w0)∣∣γ∣∣∇h(w0;w0)∣∣
这里的 γ ∈ [ 0 , 1 ] \gamma\in[0,1] γ[0,1],我们就说 w ∗ w^* w h h h的一个 γ-不精确解。
对这个定义,我们可以这样理解:梯度越小越精确,因为梯度大了,模型就需要更多的时间去收敛。那么在这里的 γ 如果越小,我们的解 w ∗ w^* w就越精确。这个 γ 就是用于描述在优化问题中的近似解的准确程度。
简单来说就是,这里的 γ 对应着局部模型的训练完成度,γ 越小,局部模型训练完成度就越高。
定义2
在FedProx中,允许随着 k 和 t 的不同,有不同的精确解,所以作者提出了定义2。 γ k t \gamma_k^t γkt衡量了第 k 个client在全局第 t 次迭代(或者说通信)中本地计算量。总之,定义2中的 γ 和定义1中的含义仍是一致的,只不过相比于定义1,定义2中将目标函数和梯度的计算方法引入到分布式场景上,这样定义的 γ k t \gamma_k^t γkt近似解适用于衡量每个client的解在近似程度上的准确度。也就是说在不同轮的FL中,每个client不用都完成相同的epoch次本地训练,而是可以根据自己的算力等情况去决定自己在当前通信轮要完成几个epoch次本地训练。
注意:作者在实验中并没有真正自适应地去设置 γ 的大小,而是让不同的client去完成不同epoch次本地训练来模拟不同client算力不同的场景。(所以这个 γ 只是作者用来说明问题而提出的一个概念而已)

  1. 针对统计异构,局部模型的目标函数在原损失函数基础上加上了近端项(proximal term)

这里的近端项Proximal term正是算法名FedProx的由来。
我们知道,在FedAvg中,k号client在本地训练时,需要最小化的目标函数为:
F k ( w ) = 1 n k ∑ i ∈ P k f i ( w ) F_k(w)=\frac{1}{n_k}\sum_{i\in P_k}f_i(w) Fk(w)=nk1iPkfi(w)
简单来说就是,每个client都是优化自己的所有样本的损失和,这是个正常的思路,目的是让全局模型在自己本地数据集上表现更好。
但是,当client之间各自的数据是Non-IID时,每个client优化之后的局部模型就会跟全局模型相去甚远了,局部模型会偏离全局模型,这会减缓全局模型的收敛。
为了限制这种偏差,作者提出了新的方案,修改了k号client在本地训练时需要最小化的目标函数为:
h k ( w ; w t ) = F k ( w ) + μ 2 ∣ ∣ w − w t ∣ ∣ 2 h_k(w;w^t)=F_k(w)+\frac{\mu}{2}||w-w^t||^2 hk(w;wt)=Fk(w)+2μ∣∣wwt2
加号的左边就是原来FedAvg的损失函数,作者在其基础上,加上了一个近端项proximal term。引入近端项之后,client在本地训练后得到的模型参数 w w w将不会与初始时server下发的参数 w t w^t wt偏离太多。
作者指出引入近端项的两个优点:

  1. 通过限制局部更新,让其更接近全局模型的方式,而不需要手动设置局部epoch,解决了统计异构性的问题;
  2. 允许安全合并由系统异构产生的可变数量的局部工作。

观察上式,当 μ =0 时,FedProx的优化目标就和FedAvg一致了。
这种思路还是很常见的,在机器学习中,为了防止过调节,亦或者为了限制参数变化,会在损失函数里加上一个类型的项,用于惩罚那些偏离过大的情况。
FedProx算法伪代码
输入:client总数 K、通信轮数 T、μ 和 γ、server初始化参数 w 0 w^0 w0,被选中的client个数 N、第 k 个client被选中的概率 p k p_k pk。(注意:相比于FedAvg那篇论文是随机选client,本文是有概率的选择,作者说这样对两种算法更稳定,但这会不会造成不公平呢?
对每一轮通信:

  1. server首先根据概率 p k p_k pk随机选出一批client,它们的集合为 S t S_t St
  2. server将当前全局模型的参数 w t w^t wt发送给被选中的clients。
  3. 每一个被选中的client需要寻找到一个 w k t + 1 w_k^{t+1} wkt+1,这里的 w k t + 1 w_k^{t+1} wkt+1不再是FedAvg中根据本地SGD优化得到的,而是优化 h k ( w ; w t ) = F k ( w ) + μ 2 ∣ ∣ w − w t ∣ ∣ 2 h_k(w;w^t)=F_k(w)+\frac{\mu}{2}||w-w^t||^2 hk(w;wt)=Fk(w)+2μ∣∣wwt2后得到的 γ-不精确解。
  4. 每个client将得到的不精确解传递回server,server聚合这些参数得到下一轮的初始参数。

综上,总结一下来说就是,FedProx在FedAvg上做了两点改进:

  • 引入近端项,限制了因为统计异构性导致的模型偏离;
  • 引入了不精确解,各个client不再需要训练相同的轮数,只需要得到一个不精确解,这有效缓解了某些设备的计算压力;

实验
数据集方面,本文实验使用了5个数据集,包含1个合成数据集和4个经典数据集。合成数据集Synthetic data(α;β),其中 α 控制局部模型之间的差异,β 控制每个client的本地数据之间的差异。经典数据集为:MNIST、FEMNIST(Non-IID版的MNIST,由不同作者手写的0-9、A-Z、a-z的数据集)、Shakespeare(莎士比亚作品数据集,同FedAvg)、Sent140(Non-IID,一个文本数据集,内容为一条条推文,标签为positive/negative二分类)。
关于系统异构的实验:
Baseline:FedProx会为0%、50%、90%的被选定的client分别设定 x 个epoch( x 是在 [1, E]之间均匀随机选择)。而FedAvg会简单放弃这些0%、50%、90%的clients。这模拟的是不同client之间的算力不同。
系统异构
橙线为标准的FedAvg、粉线为近端项为0的FedProx(相当于有系统异构但没有近端项的FedAvg)、蓝线为FedProx。
第一行相当于消融实验,证明了近端项Proximal term对FedProx具有优化作用。
第二、三行,证明了FedProx收敛效果基本比FedAvg要好。


关于统计异构的实验:
统计异构
合成数据集的两个参数越大,表明client数据分布越Non-IID。
第一列,说明当数据分布IID时,FedProx收敛速度和最终结果是不如FedAvg的,作者解释说是在IID情况下,FedProx包含的近端项没有带来改善。
第二、三、四列,可见在数据分布Non-IID时,FedProx比FedAvg更有优势。
注意:上面只是论文正文中的实验结果,附录中也有不少实验结果图,大致看了一下发现,在某些数据集的Non-IID条件下,FedProx也没有特别明显的优势。
此外,作者还给出了一个trick:μ 可以根据模型当前的情况自适应去选择,一种简单的做法是当loss增加时增加 μ,当loss减少时减少 μ。这种动态变化的 μ 会使FedProx的收敛效果更好。
总结展望
系统异构和统计异构对FedAvg提出了挑战,作者在FedAvg的基础上提出了FedProx,主要有两点改进:

  1. 系统异构方面,考虑到不同client间的算力差异,引入了不精确解,不同的client不需要训练相同的epoch,只需要得到一个不精确解即可。
  2. 统计异构方面,引入了近端项,限制了局部模型训练时对全局模型的偏离。

本文在系统异构方面主要关注的是算力的差异,如果是其他资源比如网络,有没有处理方法?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/696784.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十二、【源码】配置注解执行SQL

源码地址:https://github.com/mybatis/mybatis-3/ 仓库地址:https://gitcode.net/qq_42665745/mybatis/-/tree/12-annotation 配置注解执行SQL 简化一下流程,主要可以分为下面几步: 1.解析配置,写入配置项 2.执行…

问题排查: Goalng Defer 带来的性能损耗

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言问题背景结论 引言 性能优化之路道阻且长,因为脱敏规定,…

Nginx 精解:正则表达式、location 匹配与 rewrite 重写

一、常见的 Nginx 正则表达式 在 Nginx 配置中,正则表达式用于匹配和重写 URL 请求。以下是一些常见的 Nginx 正则表达式示例: 当涉及正则表达式时,理解各个特殊字符的含义是非常重要的。以下是每个特殊字符的例子: ^&#xff1…

讯飞星火大模型个人API账号免费使用申请教程

文章目录 1.登录讯飞星火大模型官网 https://www.xfyun.cn/ 2.下滑找到Spark Lite,点击立即调用 3.星火大模型需要和具体的应用绑定,我们需要先创建一个新应用 https://console.xfyun.cn/app/myapp,应用名称可以按照自己的意愿起。 4.填写应用…

打造智慧工厂核心:ARMxy工业PC与Linux系统

智能制造正以前所未有的速度重塑全球工业格局,而位于这场革命核心的,正是那些能够精准响应复杂生产需求、高效驱动自动化流程的先进设备。钡铼技术ARMxy工业计算机,以其独特的设计哲学与卓越的技术性能,正成为众多现代化生产线背后…

ViT:2 理解CLIP

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技(Mamba,xLSTM,KAN)则提…

vuInhub靶场实战系列--Kioptrix Level #3

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 arp-scan主机扫描 2.2 端口扫描2.3 指纹识别2.4 目…

快速测试 Mybatis 复杂SQL,无需启动 Spring

快速测试mybatis的sql 当我们写完sql后,我们需要测试下sql是否符合预期,在填入各种参数后能否正常工作,尤其是对于复杂的sql。 一般我们测试可能是如下的代码: 由于需要启动spring,当项目较大的时候启动速度很慢,有些…

④-2单细胞学习-cellchat单数据代码补充版(通讯网络)

目录 通讯网络系统分析 ①社会网络分析 1,计算每个细胞群的网络中心性指标 2,识别细胞的信号流模式 ②非负矩阵分解(NMF)识别细胞的通讯模式 1,信号输出细胞的模式识别 2,信号输入细胞的模式识别 信…

RocketMq源码解析六:消息存储

一、消息存储核心类 rocketmq消息存储的功能主要在store这个模块下。 核心类就是DefaultMessageStore。我们看下其属性 // 配置文件 private final MessageStoreConfig messageStoreConfig; // CommitLog 文件存储实现类 private final CommitLog commitLog; …

【研发日记】Matlab/Simulink软件优化(三)——利用NaNFlag为数据处理算法降阶

文章目录 前言 背景介绍 初始算法 优化算法 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink软件优化(一)——动态内存负荷压缩》 见《【研发日记】Matlab/Simulink软件优化(二)——通信负载柔性均衡算法》 背景介绍 在一个嵌入式软件开发项目中,需要开…

FedAvg论文

论文:Communication-Efficient Learning of Deep Networks from Decentralized Data 原code Reproducing 通过阅读帖子进行的了解。 联邦平均算法就是最典型的平均算法之一。将每个客户端上的本地随机梯度下降和执行模型的平均服务器结合在一起。 联邦优化问题 数…

开发小Tips:切换淘宝,腾讯,官方,yarn,cnpm镜像源,nrm包管理工具的具体使用方式(方便切换镜像源)

由于开发中经常要下载一些软件或者依赖,且大多数的官方源的服务器都在国外,网速比较慢,国内为了方便,国内一些大厂就建立一些镜像,加快下载速度。 1.各大镜像源的切换: 切换淘宝镜像源: npm …

Bio-Info每日一题:Rosalind-06-Counting Point Mutations

🎉 进入生物信息学的世界,与Rosalind一起探索吧!🧬 Rosalind是一个在线平台,专为学习和实践生物信息学而设计。该平台提供了一系列循序渐进的编程挑战,帮助用户从基础到高级掌握生物信息学知识。无论你是初…

数据结构笔记 线性表的查找 顺序,折半,分块查找

顺序查找:从头找到尾,或者从尾找到头 顺序查找的性能: 其中,辅助空间的O(1)用于存放哨兵的 折半查找:向下取整:指当计算的结果不为整数时取小于计算结果的整数。 折半查找的性能&am…

类和对象的学习总结(一)

面向对象和面向过程编程初步认识 C语言是面向过程的,关注过程(分析求解问题的步骤) 例如:外卖,关注点菜,接单,送单等 C是面向对象的,关注对象,把一件事拆分成不同的对象&…

十大排序

本文将以「 通俗易懂」的方式来描述排序的基本实现。 🧑‍💻阅读本文前,需要一点点编程基础和一点点数据结构知识 本文的所有代码以cpp实现 文章目录 排序的定义 插入排序 ⭐ 🧐算法描述 💖具体实现 &#x1f…

记一次Linux下Docker镜像服务器磁盘空间清理

我们开发环境Jenkins构建项目时报服务器磁盘空间不足,导致项目自动化构建部署失败, Docker镜像服务器磁盘空间清理我们做了多次了,之前在清理Docker镜像服务器时走了不少弯路,查了不少Docker镜像服务器空间清理,都大同…

架构设计-全局异常处理器404、405的问题

java web 项目中经常会遇到异常处理的问题,普遍的做法是使用全局异常处理,这样做有以下几种原因: 集中化处理:全局异常处理允许你在一个集中的地方处理整个应用程序中的异常。这有助于减少代码重复,因为你不必在每个可…

C++的string类

目录 一、导入 二、接口学习 1.默认成员函数 2.迭代器相关的函数iterator 3.与容量相关的函数Capacity系列 4.与成员权限相关的函数Element access: 5.修改器相关的函数Modifiers: 6.字符串操作接口函数String operations:​编辑 三、扩展 一、导入 学习过…