联邦学习——Ditto:同时提升公平性和鲁棒性

《Ditto: Fair and Robust Federated Learning Through Personalization》这篇文章的作者之一Virginia Smith于2017年提出了Federated Multi-Task Learning用于实现个性化联邦学习。这篇文章提出的Ditto算法也是基于联邦多任务学习的个性化方法,目的在于同时提升联邦学习中的公平性和鲁棒性。

FL公平性和鲁棒性的定义

公平性:不同设备的本地模型具有相同性能
鲁棒性:具体指拜占庭鲁棒性,即恶意节点可以给服务器发送任意更新来破坏训练阶段。常见的三类比较常见的训练阶段攻击:
在这里插入图片描述
存在的问题
之前的研究只单独考虑公平性或者鲁棒性,并且提高公平性会以牺牲鲁棒性为代价。而提高鲁棒性的方法可能会过滤掉一些罕见但又有价值的更新参数,从而降低了不公平。简单讲就是目前还没有一种有效方法能同时提升公平性和鲁棒性。
这篇文章的作者提出数据异构性是导致这一问题的而主要原因,并提出用应用多任务学习(多任务学习内在原理可以很自然的同时提升公平性和鲁棒性)

Ditto

Ditto的全局目标函数

Ditto的全局目标是对参与训练的本地模型的聚合,可以应用目前所有的聚合方法,如FedAvg,FedProx等。式中 F k F_k Fk(w)是本地目标函数,G(·)是聚合函数。
在这里插入图片描述

Ditto的本地目标函数

在这里插入图片描述
Ditto新定义的本地目标函数其实就是在原始的本地目标函数的基础上加上一个正则项,其中 v k v_k vk是设备k的个性化模型, w ∗ w^* w是全局模型。实际上文章的重点就在于这个超参数λ,也是λ实现了能够同时提升鲁棒性和公平性。具体为什么可以看后面的分析。

Ditto算法框架

Ditto的伪代码如Algorithm 1所示。需要注意的是设备训练的本地模型是通过加上正则化项的目标函数,而传给服务器的更新参数则是不加正则化项的。
在这里插入图片描述

正如前面说的Sever aggregates可以应用目前任何聚合算法,文章以FedAvg为例给出了伪代码如Algorithm 2所示
在这里插入图片描述
粉色标记部分就是文章所做的主要研究,可以看到,除了聚合函数可以随意选择外,主要的特点在于往加入了原先的本地目标函数加上了一个正则化项,为什么这么简单就能同时满足鲁棒性和公平性呢?

正则化项的作用

由于恶意节点会破环全局模型的训练,所以单纯将全局模型应用于各异构性设备的效果可能会非常糟糕;而良性节点单纯依靠本地的少量数据又无法训练出较好的模型。Ditto通过超参数λ在个性化模型和全局模型之间做trade-off。λ越大,个性化模型 v k v_k vk越接近全局模型w,λ越小,个性化模型 v k v_k vk越偏离受毒害的全局模型w。各设备通过调整λ的值在全局模型和本地模型之间找到适合自己的个性化模型。这样就可以同时提升鲁棒性和公平性。

实验

实验设置

数据集使用的是常规的联邦学习数据集,包括图像数据集和文本数据集,模型包括凸模型和非凸模型。
在这里插入图片描述

鲁棒性实验

测试Ditto在不同比例的恶意节点下的鲁棒性,比较对象为其他鲁棒性算法。
鲁棒性评价指标:良性节点在测试集的平均准确率
在这里插入图片描述

公平性实验

将Ditto与近期提出的公平性联邦学习算法TERM进行实验对比
公平性评价指标:良性节点在测试集的平均准确率
在这里插入图片描述

Ditto,FedProx,L2GD

前面总结过FedProx,L2GD这两个算法。这三个算法都是在聚合全局模型的基础上加入一个正则化项
其中FedProx算法是通过γ不等式动态控制每个节点在每轮通信下的更新次数;
L2GD算法是通过概率p控制节点训练/服务器聚合,并且分两次进行GD更新,一次是在节点训练的时候,一次是在服务器聚合后;
Ditto算法是通过在原处的本地目标函数中加上一个正则项,再继续优化本地模型,最后传给服务器的是没有加正则项的优化参数更新,实现了Local和Global两不耽误。
此外,FedProx和L2GD算法正则项的参数是固定的,Ditto的正则参数是动态调整的。正则项中节点模型减去的项也有所差别,FedProx是减去上一轮的全局模型,L2GD减去所有节点模型的平均值,Ditto减去全局最优模型。

参考

https://zhuanlan.zhihu.com/p/372772592
https://zhuanlan.zhihu.com/p/375761132

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Eclipse Ditto是一个开源的IoT平台,它提供了一套完整的IoT解决方案,包括设备管理、数据存储、数据分析、API管理等功能。 在Eclipse Ditto中,数据存储是一个非常重要的功能。数据可以存储在不同的存储后端中,例如Apache Cassandra、InfluxDB、MongoDB等。在Ditto中,数据存储是通过所谓的“Things”进行的。每个Thing都代表一个设备或一组设备,并包含与该设备相关的所有数据。 以下是使用Eclipse Ditto进行数据存储的步骤: 1. 创建Thing 在Eclipse Ditto中,可以通过REST API或Java API创建Thing。创建Thing时需要指定Thing ID和Thing Type。Thing ID是唯一的标识符,Thing Type定义了Thing的属性和行为。 2. 存储数据 在Eclipse Ditto中,可以通过REST API或Java API将数据存储到Thing中。数据可以是任何格式,例如JSON、XML或二进制数据。存储数据时需要指定数据的键和值。 3. 检索数据 在Eclipse Ditto中,可以通过REST API或Java API检索存储在Thing中的数据。可以使用键、值或查询语句来检索数据。 4. 更新数据 在Eclipse Ditto中,可以通过REST API或Java API更新存储在Thing中的数据。更新数据时需要指定要更新的键和新值。 5. 删除数据 在Eclipse Ditto中,可以通过REST API或Java API删除存储在Thing中的数据。删除数据时只需要指定要删除的键即可。 总的来说,Eclipse Ditto提供了非常灵活和可扩展的数据存储功能,可以很好地满足不同的IoT应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

联邦学习小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值