论文笔记--FEDERATED LEARNING: STRATEGIES FOR IMPROVING COMMUNICATION EFFICIENCY

论文笔记--FEDERATED LEARNING: STRATEGIES FOR IMPROVING COMMUNICATION EFFICIENCY

  • 1. 文章简介
  • 2. 文章概括
  • 3 文章重点技术
    • 3.1 联邦学习(federated learning, FL)
    • 3.2 Structured updates
    • 3.3 Sketched Update
  • 4. 文章亮点
  • 5. 原文传送门

1. 文章简介

  • 标题:FEDERATED LEARNING: STRATEGIES FOR IMPROVING COMMUNICATION EFFICIENCY
  • 作者:Jakub Konecny, H. Brendan McMahan, Felix X. Yu, Ananda Theertha Suresh, Dave Bacon
  • 日期:2016
  • 期刊:arxiv

2. 文章概括

  文章给出了一种联邦学习(federated learning, FL)的新的方法,可以提升多终端之间的交流效率,从而支持多台设备在不稳定网络下的快速传输。

3 文章重点技术

3.1 联邦学习(federated learning, FL)

  先简要叙述下联邦学习的概念:一个共享的全局模型被部署于中央服务器,然后各个客户端通过本地数据进行训练,并将更新后的模型传输回中央服务器。假设FL的目的是学习一个参数为 W ∈ R d 1 × d 2 W\in\mathbb{R}^{d_1\times d_2} WRd1×d2的模型,则联邦学习的第 t ≥ 0 t\ge 0 t0轮按如下几个步骤执行:

  1. 随机选择 n t n_t nt个可用的客户端集合 S t S_t St,在这些客户端上从中央服务器下载当前的模型 W W W
  2. 上述选定的客户端用各自的本地数据更新模型,得到更新后的参数分别为 W t 1 , … , W t n t W_t^1, \dots, W_t^{n_t} Wt1,,Wtnt,从而各自的更新量为 H t i : = W t i − W t , i = 1 , … , n t H_t^i := W_t^i - W_t ,i = 1, \dots, n_t Hti:=WtiWt,i=1,,nt
  3. 上述选定的客户端将更新量 H t 1 , … , H t n t H_t^1, \dots, H_t^{n_t} Ht1,,Htnt分别发送到中央服务器
  4. 服务器将所有更新的模型进行聚合(通常采用均值): H t : = 1 n t ∑ i ∈ S t H t i H_t := \frac 1{n_t} \sum_{i\in S_t} H_t^i Ht:=nt1iStHti,并更新全局模型: W t + 1 = W t + η t H t W_{t+1} = W_t + \eta_t H_t Wt+1=Wt+ηtHt
    其中, η t \eta_t ηt表示每一轮的学习率,简单起见文章采用 η t = 1 \eta_t=1 ηt=1
      上述步骤中,第3步耗时较长,尤其是模型很大或者网络不稳定的时候。文章提出了两种方法来减少第3步的耗时:Structured updates和Sketched updates。

3.2 Structured updates

  文章提出的第一种效率提升方式为结构更新,即限制更新的 H t i H_t^i Hti为某种预定义的结构。文章考虑了两种预定义的结构

  • low rank:限制每一轮更新的参数矩阵 H t i ∈ R d 1 , … , d 2 H_t^i \in \mathbb{R}^{d_1, \dots, d_2} HtiRd1,,d2的秩最多为某个固定数值 k k k。为此,我们可以将 H t i H_t^i Hti表示为两个矩阵的乘积: H t i = A t i B t i H_t^i = A_t^i B_t^i Hti=AtiBti,其中 A t i ∈ R d 1 , … , k , B t i ∈ R k , … , d 2 A_t^i \in \mathbb{R}^{d_1, \dots, k}, B_t^i \in \mathbb{R}^{k, \dots, d_2} AtiRd1,,k,BtiRk,,d2,则由 rank ( A B ) ≤ rank ( A ) \text{rank} (AB) \le \text{rank} (A) rank(AB)rank(A)可以知道 H t i ≤ k H_t^i \le k Htik。我们初始化一个随机的 A t i A_t^i Ati,然后训练的时候仅更新 B t i B_t^i Bti的参数。则模型上传的时候我们只需上传 A t i A_t^i Ati的随机种子和 B t i B_t^i Bti的参数即可。故我们将效率从 d 1 × d 2 d_1 \times d_2 d1×d2提升为 k × d 2 k \times d_2 k×d2,提升了 d 1 / k d_1/k d1/k倍。
  • random rank:限制每一轮更新的参数矩阵 H t i ∈ R d 1 , … , d 2 H_t^i \in \mathbb{R}^{d_1, \dots, d_2} HtiRd1,,d2为一个稀疏矩阵,满足某种与定义的稀疏模式(只需随机选出non-zero的索引即可),更新的时候我们只更新non-zero的参数。上传模型的时候只需上传稀疏化的随机种子和非零元素的更新值即可。

3.3 Sketched Update

  文章提出的第二种效率提升方法为sketched update,核心思想为在各个客户端训练完整的参数更新,然后将更新的参数进行压缩上传,再在中央服务器上解压然后更新全局模型的参数。文章实验了几种不同的压缩方法:

  • subsampling:各个客户端每次更新完模型之后从 H t i H_t^i Hti中随机采样一小部分值 H ^ t i \hat{H}_t^i H^ti发送到中央服务器,然后取各个客户端的平均更新值作为全局的更新值。当每个客户端每一轮的随机mask独立时,我们有 E [ H ^ t ] = H t \mathbb{E} [\hat{H}^t] = H_t E[H^t]=Ht
  • probabilistic quantiazation:首先介绍one-bit的情况。令 h = ( h 1 , … , h d 1 × d 2 ) h = (h_1, \dots, h_{d_1\times d_2}) h=(h1,,hd1×d2) H t i H_t^i Hti的平铺向量,取 h m a x = max ⁡ j ( h j ) h_{max} = \max_j (h_j) hmax=maxj(hj), h m i n = min ⁡ j ( h j ) h_{min} = \min_j (h_j) hmin=minj(hj),则可以将 h h h压缩为: h ‾ j = { h m a x , with probability h j − h m i n h m a x − h m i n h m i n , with probability h m a x − h j h m a x − h m i n \overline{h}_j = \begin{cases} h_{max}, \quad \text{with probability} \quad \frac {h_j - h_{min}}{h_{max}-h_{min}}\\h_{min}, \quad \text{with probability} \quad \frac {h_{max} - h_j}{h_{max}-h_{min}}\end{cases} hj={hmax,with probabilityhmaxhminhjhminhmin,with probabilityhmaxhminhmaxhj,则可以得到 E [ h ‾ ] = h m a x h − h m i n h m a x − h m i n + h m i n h m a x − h h m a x − h m i n = h \mathbb{E} [\overline{h}] = h_{max} \frac {h - h_{min}}{h_{max}-h_{min}} +h_{min} \frac {h_{max} - h}{h_{max}-h_{min}} = h E[h]=hmaxhmaxhminhhmin+hminhmaxhminhmaxh=h,从而 h ‾ \overline{h} h h h h的无偏估计。上述为one-bit的情况,我们可以增加bit数,将 [ h m i n , h m a x ] [h_{min}, h_{max}] [hmin,hmax]划分为 2 b 2^b 2b个区间,然后按照上述定义将每个子区间内的 h j h_j hj进行压缩。发送的时候我们只需要发送区间数和每个子区间端点的个数即可,对应的发送量为 2 b 2^b 2b
  • Quantilization by structured random rotations:上述方法当不同维度的数值比较相近的时候效果较好。比如大部分的值为0,但 m a x = 1 , m i n = − 1 max =1, min = -1 max=1,min=1,则上述压缩方法有明显的误差。为此,我们可以先对 h h h应用一个旋转(乘一个随机正交矩阵),则上述误差可以得到有效控制(有其它研究可以支撑)。解码阶段,需要首先将压缩后的参数乘正交矩阵的逆阵再进行聚合、更新。

4. 文章亮点

  文章提出了两类联邦学习加速的算法:基于预定义参数和基于参数压缩的方法。数值实验表明我们的方法可以在精度损失很少的情况下更快地发送参数。

5. 原文传送门

FEDERATED LEARNING: STRATEGIES FOR IMPROVING COMMUNICATION EFFICIENCY

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

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

相关文章

React之内置的高阶组件

React之内置的高阶组件 React内置了一些高阶组件,以便对一些组件做特殊处理,从而提高代码性能。例如React.memo、React.forwardRef 注意:高阶组件不是Reacts视图组件 什么是高阶组件 高阶组件本质是高阶函数。高阶组件接收一个组件作为参数&…

QListWidget设置QWidget作为QListWidgetItem

1、实现QListWidget按照N像素进行滑动; 2、实现自定义QWidget作为QListWidgetItem; 代码实现: from PyQt5.QtWidgets import QWidget, QLabel, QVBoxLayout, QHBoxLayout, QTextEdit, QListWidget, QListWidgetItem, QScrollArea from PyQt5…

GNN的一篇入门 :A Gentle Introduction to Graph Neural Networks

原文链接 A Gentle Introduction to Graph Neural Networks (distill.pub)https://distill.pub/2021/gnn-intro/ 内容简介:本文是“A Gentle Introduction to Graph Neural Networks”的阅读笔记,因为第一次接触GNN,很多深奥的概念不懂&…

使用TensorFlow和VGG-19模型实现艺术风格迁移:一步一步打造你的数字艺术世界

在当下的AI领域,神经风格迁移是最富有创新性和艺术性的技术之一。这项技术可以将一种图像的风格迁移至另一种图像,创造出让人眼前一亮的视觉效果。这种转变所展现的技术之美,让我们深感人工智能所带来的可能性。本文将带领大家一步步通过TensorFlow和VGG-19模型实现风格迁移…

C++容器——list的模拟实现

目录 一.list的基本结构 二. 接下来就是对list类构造函数的设计了: 三.链表数据的增加: 四.接下来就是迭代器的创建了: 四.简单函数的实现: 五.构造与析构 六.拷贝构造和赋值重载 传统写法: 现代写法: 七.迭…

docker启动mysql时的两个报错

目录 1.Error response from daemon: driver failed programming external connectivity on endpoint mysql 2.Error response from daemon: Conflict. The container name "/mysql" is already in use by container 1.Error response from daemon: driver failed …

【预处理】——获取可变参数宏的参数数量

文章目录 功能说明实现... 的作用__VA_ARGS__ 的作用##__VA_ARGS__ 的作用 解析COUNT_ARGS(2, 4, 5)没有参数 COUNT_ARGS()参数大于 22 个 示例 功能说明 用于获取可变参数宏实际传递了多少个参数。 COUNT_ARGS(1, 2, 3),填入了 3 个参数,返回值就是 3…

C#中未能找到为main方法指定的XXX.Program怎么解决

有时在修改项目名称后,报错未能找到为main方法指定的XXX.Program 解决办法: 点击进入项目属性,将启动对象设置为空或者你要指定的XXX.Program(改名后的)

akka 简单使用

由于AKka的核心是Actor,而Actor是按照Actor模型进行实现的,所以在使用Akka之前,有必要弄清楚什么是Actor模型。 Actor模型最早是1973年Carl Hewitt、Peter Bishop和Richard Seiger的论文中出现的,受物理学中的广义相对论(general…

服务器数据恢复-误操作导致存储VDisk丢失的数据恢复案例

服务器数据恢复环境: IBM某型号存储; Solaris操作系统,部署Oracle数据库。 服务器故障: 重建MDisk导致对应的存储池中的VDisk丢失,导致Solaris操作系统中的Oracle数据库无法使用。 服务器数据恢复过程: 1、…

理解Android中不同的Context

作者:两日的blog Context是什么,有什么用 在Android开发中,Context是一个抽象类,它是Android应用程序环境的一部分。它提供了访问应用程序资源和执行各种操作的接口。可以说,Context是Android应用程序与系统环境进行交…

面向对象——步入JavaScript高级阶段的敲门砖

目录 前言一、认识对象1.什么是对象2.对象的方法3.对象的遍历4.对象的深浅克隆 二、认识函数上下文1.函数的上下文规则 ★2.call和apply ★ 三、构造函数1.用new操作符调用函数2.类与实例3.构造函数和类" 四、原型和原型链1.prototype和原型链查找 ★2.在prototype上添加方…

Windows下安装Hadoop(手把手包成功安装)

Windows下安装Hadoop(手把手包成功安装) Windows下安装Hadoop(手把手包成功安装)一、环境准备1.1、查看是否安装了java环境 二、下载Hadoop的相关文件三、解压Hadoop安装包四、替换bin文件夹五、配置Hadoop环境变量六、检查环境变…

【数学建模】时间序列分析

文章目录 1. 条件2. 模型分类3. SPSS处理时间序列 1. 条件 1.使用于具有时间、数值两种要素 2.数据具有周期性可以使用时间序列分解 2. 模型分类 叠加模型【YTSCI】 序列的季节波动变化越来越大,反映变动之间的关系发生变化乘积序列【YTSC*I】 时间序列波动保持恒…

【多模态】16、DetCLIP | 构建超大词汇字典来进行开放世界目标检测

论文:DetCLIP: Dictionary-Enriched Visual-Concept Paralleled Pre-training for Open-world Detection 代码:无。。。 出处:NIPS2022 | 华为诺亚方舟 | 中山大学 | 香港科技大学 效果: 在 LVIS 的 1203 个类别上超越了 GLIP…

【树上乘法原理】ICPC Shanghai 2021 G, Edge Groups

http://oj.daimayuan.top/course/8/problem/400 题意: 思路: 求方案数,考虑组合数学 手摸一下样例发现,对于一棵子树,若边数为偶数,那么可以内部匹配,但是如果边数为奇数,那么就一…

嵌入式:QT Day2

一、继续完善登录框&#xff0c;当登陆成功时&#xff0c;关闭登陆页面&#xff0c;跳转到新的界面中 源码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> //用于打印输出 #include <QIcon> …

无涯教程-jQuery - jQuery.getScript( url, callback )方法函数

jQuery.getScript(url&#xff0c;[callback])方法使用HTTP GET请求加载并执行JavaScript文件。 该方法返回XMLHttpRequest对象。 jQuery.getScript( url, [callback] ) - 语法 $.getScript( url, [callback] ) 这是此方法使用的所有参数的描述- url - 包含请求…

mac 移动硬盘未正常退出,再次链接无法读取(显示)

&#xff08;1&#xff09;首先插入自己的硬盘&#xff0c;然后找到mac的磁盘工具 &#xff08;2&#xff09;打开磁盘工具&#xff0c;发现自己的磁盘分区在卸载状态&#xff1b;点击无法成功装载。 &#xff08;3&#xff09;打开终端&#xff0c;输入 diskutil list查看自…

VITE + VUE 全局环境变量使用相关知识

一. 全局环境变量配置及使用 配置&#xff1a; 创建.env和.env.development&#xff0c;.env.production等配置文件&#xff0c;.env.uat, .env.test及其它均可。变量要以大写的VITE_开头&#xff0c; 如VITE_APP_NAME 测试网站 使用&#xff1a; 在代码中 import.meta.env…