【FedCoin: A Peer-to-Peer Payment System for Federated Learning】

在这篇论文中,我们提出了FedCoin,一个基于区块链的点对点支付系统,专为联邦学习设计,以实现基于Shapley值的实际利润分配。在FedCoin系统中,区块链共识实体负责计算SV,并且新的区块是基于“Shapley证明”(PoSap)协议创建的。这与流行的比特币网络不同,在比特币网络中,共识实体通过解决无意义的难题来“挖矿”生成新区块。

FedCoin是首次尝试将区块链技术应用于联邦学习激励机制研究中的创新实践。这一举措为那些拥有计算资源但缺乏本地数据的实体提供了参与联邦学习的新机遇,使它们能够通过贡献计算资源获得相应的激励回报,进而推动整个联邦学习生态系统的健康发展。

在本工作中,我们的目标并非减少计算复杂度,而是建立一种机制,使得原本可能被浪费的分布式计算资源得以利用,协助联邦学习系统计算SV。

1.初步说明

每个样本 ( x i , y i ) (x_i,y_i) (xi,yi)
第i轮的模型参数记为: w i w_i wi
第t轮下的损失函数 F i ( w ) = ℓ ( x i , y i ; w t ) F_i(w)=\ell(x_i,y_i;w_t) Fi(w)=(xi,yi;wt)
第k个客户端有一个本地数据集 D k D_k Dk, n k = ∣ D k ∣ n_k=|D_k| nk=Dk表示第k个客户端拥有的数据量。
全局的数据集记为 D = { D 1 , . . . , D k } D=\{D_1,...,D_k\} D={D1,...,Dk} n = ∣ D ∣ = ∑ k = 1 K n k n=|D|=\sum^K_{k=1}n_k n=D=k=1Knk
目标的优化函数为 min ⁡ w ∈ R d F ( w ) = 1 n ∑ k = 1 K ∑ i ∈ D k F i ( w ) ( 1 ) \min_{w\in R^d}F(w)=\frac{1}{n}\sum^K_{k=1}\sum_{i\in D_k}F_i(w)\space(1) minwRdF(w)=n1k=1KiDkFi(w) (1)
这个优化问题通常通过基于随机梯度下降(SGD)的方法来解决。举例来说,基于当前模型wt,联邦平均算法计算客户端k上的平均梯度gt,
公式如下: g t k = 1 n k ∑ i ∈ D k ∇ F i ( w t ) g_t^k = \frac{1}{n_k} \sum_{i \in D_k} \nabla F_i(w_t) gtk=nk1iDkFi(wt)
然后,每个客户端使用该梯度来更新其本地模型,更新规则为:
w t + 1 k = w t − η g t k w_{t+1}^k = w_t - \eta g_t^k wt+1k=wtηgtk
最后,FL服务器将所有客户端的本地模型聚合成全局FL模型。聚合过程由聚合函数A完成,其形式如下:
w t + 1 = A ( { w t + 1 k ∣ k = 1 , … , K } ) w_{t+1} = A(\{ w_{t+1}^k | k = 1, \ldots, K \}) wt+1=A({wt+1kk=1,,K})

2.FedCoin

2.1 网络概述

在这里插入图片描述
在作者的系统中存在两个参与者网络:
1)联邦学习网络
2)点对点区块链网络
联邦学习模型请求者或联邦学习训练任务请求者指的是需要训练联邦学习网络并拥有预算V的实体。
客户端可以通过训练获得报酬和激励(TrainPrice)
聚合会产生一个聚合激励(ComPrice)
向区块链网络转移会产生一笔处理费(SapPrice)
总的花费应该 T r a i n P r i c e + C o m P r i c e + S a p P r i c e ≤ V TrainPrice+ComPrice+SapPrice \leq V TrainPrice+ComPrice+SapPriceV以维持支付平衡,而无需依赖将价值从外部转移至此系统。

服务器在每次全局更新之后,会向区块链发送一个任务,计算每个FL客户端的贡献。然后,区块链网络中的共识节点共同计算SV。获胜者获得奖励:TrainPrice+SapPrice。获胜者根据各自的SVs按比例将ComPrice分配给FL客户端,通过在区块链中创建交易来实现。

联邦学习网络和区块链网络之间靠一种特殊类型的任务产生联系,

一个特殊任务包括接收到的本地更新集合 W = { w k ∣ k = 1 , . . . , K } W = \{w_k|k = 1, . . . , K\} W={wkk=1,...,K},聚合函数 A A A,损失函数 F ( w ) F(w) F(w),以及每个更新轮次的SapPrice和TrainPrice的值。随着训练轮次的增加,SapPrice和TrainPrice会减少,并且用于训练的总付款可以平均分配或不平均分配给每一轮。

2.2 挖矿算法

挖矿算法如下
在这里插入图片描述
如何创建一个区块:
每当矿工接收到S和时间时,矿工计算所有收到的S的平均结果S(第16行)。然后,矿工计算自己的S与S之间的距离P。当距离不大于挖矿难度D时,矿工成为赢家并生成新的区块Blk(第18行)。
存在一些改进的空间,我觉得可以维持一个队列,只保存一段时间的产生的区块,因为刚开始计算出的S的稳定性不高,之后计算的结果会越来越接近于真实值

2.3 区块验证的算法

  1. 获胜者的 S t S_t St减去获胜者的 S t ‾ \overline {S_t} St平均的需要满足 ∣ ∣ S t − S t ‾ ∣ ∣ p < = D ||S_t-\overline{S_t}||_p <=D ∣∣StStp<=D
  2. 本机计算出的 S ‾ \overline S S需要满足 ∣ ∣ S ‾ − S t ‾ ∣ ∣ p < = D ||\overline S-\overline{S_t}||_p <=D ∣∣SStp<=D(我认为是防止winner机器作弊,同时防止本地机器偷懒)要求区块的S值应足够接近本地聚合S
  3. 当前区块ID应最大,以确保只有最长的链可接受。
    在这里插入图片描述

2.4 挖矿难度

挖掘新区块的难度水平可以动态调整:
影响难度更新的两个主要因素是:
1)矿工的总挖矿能力
2)生成区块的速度。在相同的挖矿能力下,随着区块生成速度的增加,难度级别应该降低。在相同的区块生成速度下,随着挖矿能力的增加,难度级别应该增加
3)(我编的:)是否应该考虑一下任务的总量

2.5 支付算法

在FedCoin系统中,一个FL模型请求者首先通过向FL服务器存入V个FedCoins来启动。V的价值不应大于请求者的FL模型的价值。为了在FL客户端、区块链矿工和FL服务器之间分配V,所有实体都应注册一个交易账户。

TrainPrice:支付给FL客户端;
ComPrice:支付给FL服务器用于处理模型聚合;
SapPrice:支付给区块链网络矿工用于计算每个客户端的Shapley值。

这种分配可以由预先约定的智能合约确定。例如,分配合约可以指定TrainPrice:ComPrice:SapPrice=7:1:2。那么,TrainPrice=0.7V,ComPrice=0.1V,而SapPrice=0.2V。
在这里插入图片描述

3. 实验结果

在这里插入图片描述
对于给定的数据集,高EMD值表示数据质量低。每个客户端类型的数据质量通过EMD来衡量,如表2所示。我们可以观察到,从T0到T9,数据质量呈线性递减。
在这里插入图片描述
随着质量等级从T1降至T9,Shapley值减小。此外,只有T0到T4类型的值为正,表明只有一半的客户端可以积极贡献于模型准确度的提升。这也表明我们的PoSap可以有效促进高质量数据在协作FL应用场景中的推广。对于T5到T9类型的负Shapley值意味着这些客户端可能会误导模型训练。

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

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

相关文章

自定义类型:【结构体】

我们知道C语言中有许多的类型&#xff0c;比如char&#xff0c;short&#xff0c;int等等类型。像是这些C语言本身就支持的类型叫做内置类型&#xff0c;但是有一些复杂对象&#xff0c;只有这些类型是完全不够的。比如人&#xff0c;或者一本书。那么我们就可以自己定义一些类…

day 5|中间件

本节目标&#xff1a; 设计并实现 Web 框架的中间件(Middlewares)机制。 实现通用的Logger中间件&#xff0c;能够记录请求到响应所花费的时间&#xff0c;代码约50行 中间件是啥 我们的框架不可能理解所有的业务&#xff0c;框架只是一个空空的躯体&#xff0c;他有什么具…

mysql--事务四大特性与隔离级别

事务四大特性与隔离级别 mysql事务的概念事务的属性事务控制语句转账示例 并发事务引发的问题脏读脏读场景 不可重复读幻读幻读场景 事务的隔离级别读未提交读已提交可重复读&#xff08;MySQL默认&#xff09; 总结 mysql事务的概念 事务就是一组操作的集合&#xff0c;他是一…

多线程之并发变成高级面试题-2024

有三个线程T1,T2,T3,如何保证顺序执行 使用 join() 方法&#xff1a; 可以在每个线程内部使用 join() 方法来等待前一个线程执行完成。具体操作是在线程 T2 的 run() 方法中调用 T1.join()&#xff0c;在线程 T3 的 run() 方法中调用 T2.join()。这样可以确保 T1 在 T2 之前执…

鸿蒙OS开发实例:【手撸服务卡片】

介绍 服务卡片指导文档位于“开发/应用模型/Stage模型开发指导/Stage模型应用组件”路径下&#xff0c;说明其极其重要。 本篇文章将分享实现服务卡片的过程和代码 准备 请参照[官方指导]&#xff0c;创建一个Demo工程&#xff0c;选择Stage模型 鸿蒙OS开发更多内容↓点击…

图像识别在工业检测中的应用

图像识别技术在工业检测中的应用非常广泛&#xff0c;它通过自动化的图像处理和分析&#xff0c;提高了生产效率、保证了产品质量&#xff0c;并降低了人力成本。以下是图像识别在工业检测中的一些主要应用领域&#xff1a; 缺陷检测&#xff1a;在制造业中&#xff0c;图像识…

面试经典150题【111-120】

文章目录 面试经典150题【111-120】67.二进制求和190.颠倒二进制位191.位1的个数136.只出现一次的数字137.只出现一次的数字II201.数字范围按位与5.最长回文子串97.交错字符串72.编辑距离221.最大正方形 面试经典150题【111-120】 六道位运算&#xff0c;四道二维dp 67.二进制…

PCB损耗来源

信号经过PCB板会产生损耗&#xff0c;主要包括导体损耗&#xff0c;介电损耗和辐射损耗 导体损耗&#xff1a;导体损耗是由于电流流动过程中产生电阻损耗而发热。 介电损耗&#xff1a;介电损耗是由于电场通过介质时分子的交替极化和晶格碰撞造成的。 辐射损耗&#xff1a;辐…

YOLOv9 实战指南:打造个性化视觉识别利器,从零开始训练你的专属测试集

论文地址&#xff1a;YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information GitHub&#xff1a;WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information (github.com)…

定时备份mysql数据库数据--mysqldump版

前言&#xff1a;mysqldump是MySQL自带的逻辑备份工具&#xff0c;可以将整个数据库或者指定的表格导出为一个SQL脚本文件&#xff0c;可以用于数据库备份。 1、编写shell脚本 # 备份文件保存路径 backup_dir/data/mysqlbackup # 当前时间 current_timedate %Y-%m-%d-%H-%M-%S…

git 更改仓库地址

背景&#xff1a; 项目本来在A仓库进行保管&#xff0c;研发已经开发一段时间了&#xff0c;现在切换到了新的仓库B&#xff0c;研发本地如何将仓库切换到B 解决&#xff1a; # 查看远端地址 git remote -v # 查看远端仓库名 git remote # 重新设置远程仓库 git remote s…

Linux---多线程(下)

前情提要&#xff1a;Linux---多线程(上) 七、互斥 临界资源&#xff1a;多线程执行流共享的资源就叫做临界资源临界区&#xff1a;每个线程内部&#xff0c;访问临界资源的代码&#xff0c;就叫做临界区互斥&#xff1a;任何时刻&#xff0c;互斥保证有且只有一个执行流进入临…

PL/SQL的词法单元

目录 字符集 标识符 分隔符 注释 oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 PL/SQL块中的每一条语句都必须以分号结束。 一个SQL语句可以跨多行&#xff0c;但分号表示该语句的结束:一行中也可以有多条 SQL语句&…

3.28(迭代搜索算法 + java学习总结)

迭代加深搜索 迭代加深算法是一在DFS的基础上添加搜索深度限制的搜索方法&#xff1b; 其核心思想是从深度为0的地方开始搜索&#xff0c;然后逐步加深搜索深度&#xff0c;重新搜索一遍&#xff1b;这对于那些已知答案在浅层&#xff0c;但整个树或图存在极多分支的情况&#…

Selenium自动化测试:从time.sleep到显式等待的转变

在自动化测试的神秘世界里&#xff0c;我们的英雄——Selenium驾驶者&#xff0c;面临着一个古老的难题&#xff1a;如何等待&#xff1f;当然&#xff0c;最简单的法术是time.sleep&#xff0c;但这就像用锤子敲打每一个螺丝——有时候行得通&#xff0c;但并不总是最好的选择…

【前端Vue】HR-saas中台项目开发md文档第1篇:vuex基础-介绍,vuex基础-初始化功能【附代码文档】

HR-saas中台管理项目开发完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;vuex基础-介绍,vuex基础-初始化功能,vuex基础-state,vuex基础-mutations,vuex基础-actions,vuex基础-getters。项目课设计&#xff0c;人力资源的环境搭建vue-element-admin的了解和…

[flask]http请求//获取请求头信息+客户端信息

在网站中查询请求头信息&#xff0c;可以通过以下操作进行 右键然后选择检查 进入改页面后选择文档&#xff0c;刷新一下页面就好了 获取所有的请求头信息 print(request.headers, type(request.headers)) 在flask模块中&#xff0c;使用上面的输出函数就可以查看到有关于请求…

Python爬虫之pyquery和parsel的使用

三、pyquery的使用 1、准备工作 pip3 install pyquery2、初始化 2.1、字符串初始化 把HTML的内容当做参数&#xff0c;来初始化PyQuery对象。 html <div><ul><li class"item-0">first item</li><li class"item-1">&l…

Qt 窗口MainWindow(上)

Qt 窗口是通过 QMainWindow 类来实现的。 QMainWindow 是一个为用户提供主窗口程序的类&#xff0c;继承自 QWidget 类&#xff0c;并且提供了⼀个预定义的布局。QMainWindow 包含一个菜单栏&#xff08;menubar&#xff09;、多个工具栏(toolbars)、多个浮动窗口&#xff08;…

第十四届蓝桥杯JavaA组省赛真题 - 特殊日期

解题思路&#xff1a; 暴力秒了 public class Main {public static void main(String[] args) {int cnt 0;for (int i 1900; i < 9999; i) {for (int j 1; j < 12; j) {for (int k 1; k < days(i, j); k) {if (sum(i) sum(j) sum(k)) cnt;}}}System.out.print…