概述
TFF 是一个可扩展且强大的框架,通过在现实代理数据集上模拟联邦计算来进行联邦学习 (FL) 研究。本页介绍了与研究模拟相关的主要概念和组件,以及在 TFF 中进行不同类型研究的详细指南。
TFF 中研究代码的典型结构
在 TFF 中实现的研究 FL 模拟通常包含三种主要类型的逻辑。
单个 TensorFlow 代码片段,通常是
tf.function
,封装在单个位置(例如,在客户端或服务器上)运行的逻辑。此代码通常在没有tff.*
引用情况下编写和测试,并且可以在 TFF 之外重复使用。例如,联邦平均中的客户端训练循环 在此级别实现。TensorFlow 联邦编排逻辑,它通过将 1. 中的单个
tf.function
包装为tff.tensorflow.computation
,然后使用抽象(如tff.federated_broadcast
和tff.federated_mean
)在tff.federated_computation
中进行编排,将它们绑定在一起。例如,请参阅 联邦平均的编排。一个外部驱动程序脚本,模拟生产 FL 系统的控制逻辑,从数据集选择模拟客户端,然后在这些客户端上执行 2. 中定义的联邦计算。例如,联邦 EMNIST 实验驱动程序。
联邦学习数据集
TensorFlow 联邦 托管多个数据集,这些数据集代表了可以用联邦学习解决的现实世界问题的特征。
数据集包括
StackOverflow. 一个用于语言建模或监督学习任务的现实文本数据集,包含 342,477 个唯一用户,训练集中有 135,818,730 个示例(句子)。
联邦 EMNIST. EMNIST 字符和数字数据集的联邦预处理,其中每个客户端对应于不同的编写者。完整的训练集包含 3400 个用户,来自 62 个标签的 671,585 个示例。
莎士比亚. 一个基于威廉·莎士比亚全集的较小的字符级文本数据集。数据集包含 715 个用户(莎士比亚戏剧的角色),其中每个示例对应于角色在特定戏剧中说的一组连续的台词。
CIFAR-100. CIFAR-100 数据集在 500 个训练客户端和 100 个测试客户端之间的联邦分区。每个客户端有 100 个独特的示例。分区以一种方式完成,以在客户端之间创建更真实的异质性。有关更多详细信息,请参阅 API。
Google Landmark v2 数据集 数据集包含世界各地地标的照片,图像按摄影师分组,以实现数据的联邦分区。有两种数据集可用:一个较小的数据集,包含 233 个客户端和 23080 张图像,以及一个较大的数据集,包含 1262 个客户端和 164172 张图像。
CelebA 一个包含名人面部示例(图像和面部属性)的数据集。联邦数据集将每个名人的示例分组在一起以形成一个客户端。有 9343 个客户端,每个客户端至少有 5 个示例。数据集可以按客户端或按示例拆分为训练组和测试组。
iNaturalist 一个包含各种物种照片的数据集。数据集包含 120,300 张 1,203 个物种的图像。有七种数据集可用。其中一种按摄影师分组,包含 9257 个客户端。其余数据集按拍摄照片的地理位置分组。这六种数据集包含 11-3,606 个客户端。
高性能模拟
虽然 FL *模拟* 的挂钟时间不是评估算法的相关指标(因为模拟硬件不代表真实的 FL 部署环境),但能够快速运行 FL 模拟对于研究效率至关重要。因此,TFF 在提供高性能的单机和多机运行时方面投入了大量资金。文档正在开发中,但目前请参阅有关 使用加速器进行 TFF 模拟 的说明,以及有关 在 GCP 上使用 TFF 设置模拟 的说明。高性能 TFF 运行时默认启用。
TFF 用于不同的研究领域
联邦优化算法
可以在 TFF 中以不同的方式进行联邦优化算法的研究,具体取决于所需的自定义级别。
这里提供了一个 联邦平均 算法的最小独立实现 这里。代码包括用于本地计算的 TF 函数,用于编排的 TFF 计算,以及一个 驱动脚本,以 EMNIST 数据集为例。这些文件可以轻松地根据 README 中的详细说明,针对自定义应用程序和算法更改进行调整。
可以在 这里找到更通用的联邦平均实现。此实现允许使用更复杂的优化技术,包括在服务器和客户端上使用不同的优化器。其他联邦学习算法,包括联邦 k 均值聚类,可以在 这里找到。
模型更新压缩
模型更新的损耗压缩可以降低通信成本,从而减少整体训练时间。
要重现最近的 论文,请参阅 此研究项目。要实现自定义压缩算法,请参阅项目中的 comparison_methods,以基线为例,以及 TFF 聚合器教程(如果您还不熟悉)。
差分隐私
TFF 与 TensorFlow Privacy 库互操作,以支持对具有差分隐私的模型的联邦训练的新算法的研究。有关使用 基本 DP-FedAvg 算法 和 扩展 进行 DP 训练的示例,请参阅 此实验驱动程序。
如果您想实现自定义 DP 算法并将其应用于联邦平均的聚合更新,您可以实现一个新的 DP 均值算法,作为 tensorflow_privacy.DPQuery
的子类,并使用您的查询实例创建一个 tff.aggregators.DifferentiallyPrivateFactory
。可以在 这里找到实现 DP-FTRL 算法 的示例。
联邦 GAN(在 下面描述)是另一个 TFF 项目的示例,它实现了用户级差分隐私(例如,代码中的这里)。
鲁棒性和攻击
TFF 还可用于模拟针对联邦学习系统和差分隐私防御的定向攻击,如 你能真正对联邦学习进行后门攻击吗? 中所述。这是通过构建一个迭代过程来完成的,该过程可能包含恶意客户端(参见 build_federated_averaging_process_attacked
)。targeted_attack 目录包含更多详细信息。
- 新的攻击算法可以通过编写一个客户端更新函数来实现,该函数是一个 Tensorflow 函数,请参阅
ClientProjectBoost
以获取示例。 - 新的防御可以通过自定义 'tff.utils.StatefulAggregateFn' 来实现,该函数聚合客户端输出以获得全局更新。
有关模拟示例脚本,请参阅 emnist_with_targeted_attack.py
。
生成对抗网络
GAN 构成了一个有趣的 联邦编排模式,它看起来与标准联邦平均略有不同。它们涉及两个不同的网络(生成器和鉴别器),每个网络都使用自己的优化步骤进行训练。
TFF 可用于研究 GAN 的联邦训练。例如,最新工作 中提出的 DP-FedAvg-GAN 算法在 TFF 中实现。这项工作证明了将联邦学习、生成模型和 差分隐私 相结合的有效性。
个性化
在联邦学习环境中,个性化是一个活跃的研究领域。个性化的目标是为不同的用户提供不同的推理模型。解决这个问题可能存在不同的方法。
一种方法是让每个客户端使用其本地数据微调单个全局模型(使用联邦学习训练)。这种方法与元学习有关,例如,参见 这篇论文。这种方法的一个示例在 emnist_p13n_main.py
中给出。要探索和比较不同的个性化策略,您可以
通过实现一个
tf.function
来定义个性化策略,该函数从初始模型开始,使用每个客户端的本地数据集训练和评估个性化模型。一个示例由build_personalize_fn
给出。定义一个
OrderedDict
,它将策略名称映射到相应的个性化策略,并将其用作tff.learning.build_personalization_eval_computation
中的personalize_fn_dict
参数。
另一种方法是通过完全在本地训练模型的一部分来避免训练完全的全局模型。这种方法的实例在 这篇博文 中进行了描述。这种方法也与元学习有关,参见 这篇论文。要探索部分本地联邦学习,您可以
使用
tff.learning.reconstruction.build_training_process
创建部分本地训练过程,修改dataset_split_fn
以自定义过程行为。