eSGD(edge SGD) 边缘设备进行分布式机器学习的参数聚合策略实现高效通信 论文精读

news2024/11/23 2:46:25

说明

这篇论文比较短,但是提出的方法确很不错。联邦学习或者分布式机器学习中减少通信开销一般有两种方法:

  1. 减少发送的数据量;
  2. 通过改变通信的拓扑结构;

本文通过选取重要的梯度进行更新而减少通信的开销,属于第一种方式。
本篇论文是2018年的论文,属于比较新的论文(现在是2023年)。
论文的原文链接:eSGD: Communication Efficient Distributed Deep Learning on the Edge

ABS

在边缘设备上训练越来越流行,但是在边缘设备上进行训练,需要进行参数聚合,而参数聚合需要消耗大量的通信资源。

现在已经有很多方法能够减少通信资源的消耗。而eSGD是另外一种方法,该方法重点根据两个机制实现:

  1. 梯度是稀疏的(指梯度中有很多项接近 0 0 0),由这一点得到了不同参数的梯度拥有着不同的重要程度,所以可以只选择某些重要的梯度进行参数的聚合,而不需要选择所有的梯度;
  2. 为了防止未被选择的梯度严重严重影响准确性,为没有被选中的梯度提供了残余机制,该机制能够让没有被选中的梯度的更新在本地进行累计,当达到一定值的时候再发送给服务器。

eSGDMNIST上的效果不戳,即使每次只选择 12.5 % 12.5\% 12.5%的梯度进行更新准确度也能达到 81.5 81.5% 81.5

1 INTRO

我们将所有的参数依次进行编号,如果有两层,第一层编号为 1 , 2 , 3 1,2,3 1,2,3,那么第二层的参数应该从 4 4 4进行编号。这样我们就可以通过 g i g_i gi来表示第 i i i维的梯度。

之前已经有论文发现:大量的参数的值在参与训练后非常接近于 0 0 0(可以理解这一部分的值更新量非常少)。这也就说明了有许多的梯度的值非常接近 0 0 0(只有梯度的值接近 0 0 0才回出现相对应的参数不会有太大的变化,参数才有可能稳定在 0 0 0附近)。而由于每个边缘设备拥有的数据量是非常少的,这就导致会有更多的数据的梯度接近 0 0 0。这些特性使得只选取少量重要的梯度进行参数聚合成为可能。作者设置了一个 H H H变量,其中 H i H_i Hi用来表示编号为 i i i梯度的重要程度,该值是动态更新的,每一轮会根据选择更新的梯度来更新对应的 H H H值,这意味着重要的梯度会越来越重要,这也是符合常识的(例如财富会向少数富人聚集)。

除了重要的梯度之外,作者还发现,即使有的梯度非常接近 0 0 0,但是一旦这些梯度参与更新,那么整个模型的准确性会有巨大的变化,所以作者不打算直接舍弃这些小梯度,而是使用了一种方法将这类小的梯度进行累计起来,当达到一定值的时候,在选择参与更新。

2 Related Work

有两类相关工作来减少通信发送的数据量:

Vector Quantization:通过降低梯度的精度,或者使用近似值来代替原有的梯度,从而使得通信所需要传递的数据量减少。

Gradient Sparsification:作者所做的工作属于这一范畴,每次选择一部分重要的梯度进行参与更新。例如之前提出了,固定的threshold只有梯度大于 t h r e s h o l d threshold threshold的才能进行更新,但是直接这样做似乎 B L E U BLEU BLEU分数不理想。

3 eSGD Technique

3.1 Observations

一般的参数聚合使用的方法是:
x t = x t − 1 − γ 1 N b Σ i N Σ z ∇ L ( x , z ) x_t = x_{t-1}-\gamma \frac 1 {Nb}\Sigma_i^N\Sigma_z \nabla L(x, z) xt=xt1γNb1ΣiNΣzL(x,z)
x t x_t xt代表 t t t轮的时候的参数, γ \gamma γ代表学习率, N N N代表参与的结点个数, b b b代表每个节点训练数据的大小(为了可读性这里假设的是所有结点拥有的数据量相同), L ( x , z ) L(x, z) L(x,z)代表损失函数的参数为 x x x,而输入为 z z z。上面的式子也就是新的梯度是所有节点的梯度的平均值。

而如果增加 x i , t x_{i, t} xi,t用来表示第 i i i个参数在第 t t t轮的值,在 T T T轮之后结束我们可以用下面的式子来代替上面的式子(这里的式子我认为原文中写的有点问题,根据自己的理解写了一下):
x i , t = x i , t − 1 − γ 1 N b T Σ i N Σ z Σ j T − 1 ∇ L ( x j , z ) x_{i,t} = x_{i, t-1} - \gamma \frac 1 {NbT}\Sigma_i^N\Sigma_z\Sigma_j^{T-1}\nabla L(x_j, z) xi,t=xi,t1γNbT1ΣiNΣzΣjT1L(xj,z)
作者写出这个式子的目的是为了说明,参与更新的梯度可以不立即进行而是将每一轮的梯度进行累计起来再进行更新。(这样似乎是很符合常识的,但是这一部分作者并没有做过多的解释,同时这里的梯度累积应该不能跨越过长的轮数,因为之前有论文做过实验:让每个结点执行到局部最优解的时候在进行更新得到的全局模型效果并不好)

3.2 Importance Updating

有了上面的Observations(即梯度的更新可以累积一定轮数后再进行同步),这一部分作者就讲如何选择重要的梯度。

在这里插入图片描述

算法的过程如Algorithm 1所示,这里有一些需要注意的地方:

  • H H H的大小是用于做权重随机选择的时候会用上,所谓权重随机选择是指 H H H越大的值被选中的概率越大;
  • t = 0 或 1 t=0或1 t=01的时候,是直接进行随机选择;

上面的Algorithm 1每一轮选择参与更新的梯度个数是总梯度的个数的 k % k\% k%,其基本的思想是通过比较当前更新后的损失 l ( x t ) l(x_t) l(xt)和上一轮的损失 l ( x t − 1 ) l(x_{t-1}) l(xt1),如果当前的损失较小,那么此时我们可以认为上一轮选择进行更新的梯度是合理的,那么此时我们依然选择上一轮进行更新的梯度进行更新,同时我们会更新被选中的梯度的 H H H值,这也意味着随着算法的进行,重要的梯度可能会变得越来越重要,从而被选取的几率会越来越大。如果当前的损失反而比上一轮的损失大,那么我们此时进行权重随机选取 k % k\% k%的梯度进行更新。

3.3 Momentum Residual Accumulation

上述判断完成之后我们会进行未选中的梯度累加,当未选中的梯度的累计值达到阈值之后,未选中的梯度会替代掉本轮选择的部分梯度,替换方法如下:首先将预先选择的梯度的 H H H值进行从大到小排序,每一次的替换会选择 H H H最小的梯度进行替换。

下面来看如何进行未选中的梯度累加:

在这里插入图片描述

上述算法中设置 β \beta β的目的是为了防止梯度过时,因为之前提到过可能当间隔的久了,这些梯度参与更新的效果可能并不那么好,于是设置了 β \beta β参数,每次进行累计的时候,上一轮的值只选取 β \beta β的部分。

阈值的设定:从算法一的开头可以看到阈值为所有梯度的均值这说明阈值是动态变化的,这样设置的好处是能够尽可能的让所有的梯度都能或早或晚的参与更新。如果不使用动态变化的阈值,而是将其固定为某一个值,那么可能很多比较小的梯度都不会参与更新,使用平均值能够让其中一部分更有可能的参与更新。

4 Experiment

4.1 Experiment Settings

数据集:MNIST data set

测试平台:MATLAB 2018R

超参数的设定: β = 0.9 , γ = 0.1 2 e \beta = 0.9, \gamma = \frac {0.1} {2e} β=0.9,γ=2e0.1, e e e代表的是epoch

分别做了不同丢弃率的实验(根据 A l g o r i t h m 1 Algorithm 1 Algorithm1 k k k参数不同进行实验)。

Figure 2展示的是不同 k k k下的损失随着迭代次数的变化:

在这里插入图片描述

Table 1Table 2给出了不同方法的和不同超参数下的准确率。其中std SGD表示标准 S G D SGD SGD(也就是每次选择所有的梯度进行更新), t h r e s h o l d S G D thresholdSGD thresholdSGD指的是选取梯度大于固定的阈值的梯度进行更新。

在这里插入图片描述

5 Conclusions

实验的结果表明,即使丢弃掉接近 90 % 90\% 90%的梯度(这意味着在通信条件不变的情况下,通信的开销变为原来的 1 10 \frac 1 {10} 101),准确率也能非常高(从 99 % 99\% 99%降到了 88 % 88\% 88%,下降的比例非常低)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

招聘链接怎么做_分享招聘小程序制作步骤

招聘小程序的主要用户就是企业招聘端和找工作人员的用户端,下面从这两个端来对招聘小程序开发的功能进行介绍。 企业端功能 1、岗位发布:企业根据自身岗位需求,在招聘app上发布招聘岗位及所需技能。 2.简历筛选:根据求职者提交的简历选择合适的简历,并对公开发布的简历进行筛…

主数据管理平台如何进行模型管理

企业管理主数据,模型管理尤为重要。在对主数据进行建模操作时,既要保证数据通用性、安全性,又要符合企业的业务需求。今天小亿带你认识一下亿信华辰睿码主数据管理平台里的主数据模型管理。 主数据模型分类 一款专业的主数据管理平台&#…

【RabbitMQ笔记01】Windows搭建RabbitMQ消息队列基础运行环境

这篇文章,主要介绍如何在Windows系统中,搭建RabbitMQ消息队列的运行环境。 目录 一、RabbitMQ消息队列 1.1、什么是RabbitMQ 1.2、安装Erlang (1)下载安装包 (2)配置环境变量 (3&#xff…

C++STL剖析(七)—— map和multimap的概念和使用

文章目录1. map的介绍和使用🍑 map的模板参数列表🍑 map的构造🍑 map的使用🍅 insert🍅 operator[ ]🍅 find🍅 erase🍅 swap🍅 empty🍅 size🍅 co…

共享—1658页《Java面试突击核心手册》几乎覆盖市面上所有面试考点

说快也快,说不快也不慢! 年前,陆陆续续,好多大厂都在裁员; 年后,又有一大批程序员失业,找不到避风港; 这时候,就有人说了,为什么找工作这么难?…

堆排序的概念

文章目录一、堆(Heap)的基本概念1.1 引入二叉树的顺序存储二、建立大根堆三、基于大根堆进行排序选择排序:在每一趟待排元素中选取关键字最小(或最大)的元素加入有序子序列选择排序分为: 简单选择排序堆排…

springboot+mybatis连接数据库实现增删改查功能

springbootmybatis连接数据库实现增删改查功能创建表创建项目实体类DAO接口写sql的XML文件Service层Controller启动类结果目录结构参考博客创建表 create table user(id int ,name varchar(30),pwd varchar(40) )insert into user values(2,hxf,789101),(3,hlm,789102),(4,hzh…

【ArcGIS自定义脚本工具】批量对栅格执行栅格计算器

文章目录一、功能介绍二、脚本代码三、工具参数四、用例4.1 批量单位换算4.2 批量计算植被覆盖度4.3 批量填充空值系列文章目录: ArcGIS自定义脚本工具一、功能介绍 功能 将多个栅格文件按照某以代数表达式执行栅格计算器(Raster Calculator) 工具,并将输…

linux内核内存笔记

一、linux用户态内核态内存结构 对于32位的linux操作系统,系统为每个进程分配0~4G的内存空间,而64位系统则更大: linux内存空间地址范围 可见Linux的内存分配规则: 二、总体分配规则 1、用户态在低地址,内核态在高地址…

进击中的 Zebec 生态,Web2 与 Web3 世界的连接器

虽然从意识形态上看,Web2世界与Web3世界存在着不同的逻辑,但我们同样看到,随着加密资产领域的发展,其正在作为优质投资品,被以Paypal、高盛等主流机构重视与接受。当然,除了作为投资者品外,近年…

C++学习笔记-环境设置

C 是一种通用编程语言,如今已广泛用于竞争性编程。它具有命令式,面向对象和通用编程功能。 C 在Windows,Linux,Unix,Mac等许多平台上运行。在开始使用C 进行编程之前。我们将需要在本地计算机上设置一个环境&#xff0…

用PHP实现CSPRepor报告预警信息存储和动态显示。

一、了解CSP内容安全策略 CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。 作用就是:大大增强了网页的安全性。…

透明和半透明效果

Alpha通道 透明度可以通过base map的alpha通道来控制。Alpha值低的话,mesh就变得更加透明,alpha值高的话,mesh的透明度会变低,变得能更加轻松地被看到。当alpha为0时,mesh就完全不可见了,alpha值在中间时&a…

kubernetes(k8s) 知识总结(第2期)

1. “控制器”思想 kube-controller-manager 是一系列控制器的集合,这些控制器被放在 Kubernetes 项目的 pkg/controller 目录,这些控制器都以独有的方式负责某种编排功能。它们都遵循一个通用的编排模式——控制循环。 以 Deployment 为例介绍它对控…

最最普通程序员,如何利用工资攒够彩礼,成为人生赢家

今天我们不讲如何提升你的专业技能去涨工资,不讲面试技巧如何跳槽涨工资,不讲如何干兼职赚人生第一桶金,就讲一个最最普通的程序员,如何在工作几年后,可以攒够彩礼钱,婚礼酒席钱,在自己人生大事…

什么是网络流量分析(NTA),有什么好用的NTA软件

分析网络的稳定性首先要监控其性能、设备功能、网络速度以及许多网络管理员忽略的另一个方面:网络流量。网络流量分析 (NTA) 通常是考虑最少的方面,但它会影响许多问题,例如性能下降和用户速度缓慢。忽视它可能会让位于…

SQL语句实现找到一行中数据最大值(greatest)/最小值(least);mysql行转列

今日我在刷题时遇到这样一个题,它提到了以下需求: 有一场节目表演,五名裁判会对节目提供1-10分的打分,节目最终得分为去掉一个最高分和一个最低分后的平均分。 存在以下一张表performence_detail,包含字段有performa…

Docker安装RocketMQ 4.8

1拉取4.8镜像 docker pull foxiswho/rocketmq:4.8.0拉取控制台镜像 docker pull styletang/rocketmq-console-ng2创建rocketmq使用的共有网络,便于相互访问 docker network create rocketmq_network3启动rmqnamesrv docker run -d --name rmqnamesrv --network …

电脑录屏怎样不录到外界声音?调整这一个开关,即可实现

​有很多小伙伴希望自己电脑录屏的时候,不要录制自己的声音,而是通过后期配音的方式完成视频创作。电脑录屏怎样不录到外界声音?其实只需要调整这一个开关,就能实现不录外界声音,一起来看看吧。 不录外界声音1&#xf…

什么是 Java 泛型?

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注! 作者| 慕课网精英讲师 ColorfulC 通过本篇文章你将了解到什么是泛型,为什么需要泛型,如何使用泛型,如何自定义泛型&…