查看原文
其他

TensorFlow Federated 发布

Google TensorFlow 2021-07-27

文 / Alex Ingerman,产品经理; Krzys Ostrowski,研究员


据估计,全球现有 30 亿部智能手机70 亿台联网设备。这些手机和设备正在不断生成新数据。如果采用传统的分析和机器学习技术,就需要先将数据收集在一起,然后进行处理,得出数据分析和 ML 模型,最终获得更佳产品。当涉及敏感数据或集中采集成本高昂时,这种集中处理的方法就可能产生问题。如果我们能够在生成数据的设备上进行数据分析和机器学习,并且仍然能够将学到的内容汇总到一起,这样岂不更好?

注:30 亿部智能手机 链接

https://newzoo.com/insights/trend-reports/newzoo-global-mobile-market-report-2018-light-version/

70 亿台联网设备 链接

https://iot-analytics.com/state-of-the-iot-update-q1-q2-2018-number-of-iot-devices-now-7b/


TensorFlow Federated (TFF) 是一个开源框架,用于试验针对分散式数据的机器学习和其他计算。它采用的是一种名为 联合学习 (FL) 的方法,许多参与的客户端能够训练共享的 ML 模型,同时将数据保存在本地。我们根据在 Google 开发联合学习技术时积累的 经验 设计了 TFF,而 Google 可以为 ML 模型进行 移动键盘预测设备内搜索 提供支持。通过 TFF,我们很高兴能够为所有 TensorFlow 用户提供一个灵活、开放的框架,使其可以通过该框架在本地模拟分散式计算。

注:TensorFlow Federated 链接

https://www.tensorflow.org/federated/

经验 链接

https://arxiv.org/abs/1902.01046

移动键盘预测 链接

https://arxiv.org/abs/1811.03604

设备内搜索 链接

https://ai.google/stories/ai-in-hardware/


TensorFlow Federated 让开发者能够展示和模拟联合学习系统。

如图所示,每部手机在本地训练模型 (A)。它们的更新会汇总到一起 (B),形成一个改进后的共享模型 (C)


为了阐明 FL 和 TFF 的用法,我们先来看看这个著名的图像数据集:MNIST。MNIST 的前身是 NIST 原始数据集,该数据集包含从 3600 名志愿者手中收集的 810000 张手写数字图像,我们的任务就是构建一个能够识别这些数字的 ML 模型。我们构建模型的传统方法是一次性对整个数据集应用一个 ML 算法。但是,如果我们出于某些原因不能将所有数据综合在一起,例如,志愿者不同意将其原始数据上传到中心服务器,这时该怎么办?


通过 TFF,我们可以表达自选的 ML 模型架构,然后使用所有作者提供的数据来训练此模型,同时保持每位作者的数据彼此独立并且保存在本地。下面的代码展示我们如何通过 TFF 的 Federated Learning (FL) API 来实现上述目的。我们使用经过 Leaf 项目 处理的 NIST 数据集,将每位志愿者书写的数字分开。

# 加载模拟数据。

source, _ = tff.simulation.datasets.emnist.load_data()

def client_data(n):

 dataset = source.create_tf_dataset_for_client(source.client_ids[n])

 return mnist.keras_dataset_from_emnist(dataset).repeat(10).batch(20)


# 包装一个 Keras 模型,以便与 TFF 一起使用。

def model_fn():

 return tff.learning.from_compiled_keras_model(

     mnist.create_simple_keras_model(), sample_batch)


# 使用所选的客户端设备模拟若干轮训练。

trainer = tff.learning.build_federated_averaging_process(model_fn)

state = trainer.initialize()

for _ in range(5):

 state, metrics = trainer.next(state, train_data)

 print (metrics.loss)

注:Federated Learning (FL) API 链接

https://www.tensorflow.org/federated/federated_learning

Leaf 项目 链接

https://github.com/TalwalkarLab/leaf


您可以在 联合 MNIST 分类教程 中查看其余代码。

注:联合 MNIST 分类教程 链接

https://www.tensorflow.org/federated/tutorials/federated_learning_for_image_classification


除了 FL API,TFF 还拥有一组较低层级的原语,我们称其为 Federated Core (FC) API。此 API 支持针对分散式数据集的各种计算的表达。使用联合学习技术训练 ML 模型是联合计算的一个示例,使用分散式数据对模型进行评估则是另一个示例。

注:Federated Core (FC) API 链接

https://www.tensorflow.org/federated/federated_core


我们通过一个简单示例来了解 FC API。假设我们用一组传感器来记录温度读数,并且想要计算这些传感器所记录温度的平均值,但不想把数据集中上传至某个中心位置。借助 FC API,我们可以表达一个新的数据类型,指定其基础数据 (tf.float32) 和数据的存放位置(在分布式客户端上)。

READINGS_TYPE = tff.FederatedType(tf.float32, tff.CLIENTS)


然后指定针对该类型的联合平均温度函数。

@tff.federated_computation(READINGS_TYPE)

def get_average_temperature(sensor_readings):

 return tff.federated_average(sensor_readings)


在定义联合计算后,TFF 将以能够在分散式设置中运行的形式将其表现出来。TFF 的初始版本包括一个本地机器运行时,它会模拟在一组保存数据的客户端上执行的计算,各客户端计算其在本地的数据,然后集中式协调器将所有这些数据汇总到一起。但从开发者的角度来看,我们可以将联合计算视为一个普通函数,而它恰好拥有驻留在不同位置(分别在单个客户端上和协调服务中)的输入和输出。


get_average_temperature 的联合计算表达示意图


使用 TFF 的陈述式模型,我们还可以非常轻松地表达 联合平均算法 的简单变体:

@tff.federated_computation(

 tff.FederatedType(DATASET_TYPE, tff.CLIENTS),

 tff.FederatedType(MODEL_TYPE, tff.SERVER, all_equal=True),

 tff.FederatedType(tf.float32, tff.SERVER, all_equal=True))

def federated_train(client_data, server_model, learning_rate):

 return tff.federated_average(

     tff.federated_map(local_train, [

         client_data,

         tff.federated_broadcast(server_model),

         tff.federated_broadcast(learning_rate)]))

注:联合平均算法 链接

https://arxiv.org/abs/1602.05629


借助 TensorFlow Federated,我们将逐步实现让更广泛的受众皆可运用这项技术,同时吸引社区在一个开放灵活的平台上参与开发联合学习的研究。您可以浏览 教程,只需点击几下,即可在浏览器中试用 TFF。参与研究的方式有很多:您可以在自己的模型上试验现有的 FL 算法;为 TFF 代码库 贡献新的联合数据集和模型;添加新 FL 算法的实现,或者为现有算法扩展新功能。

注:教程 链接

https://www.tensorflow.org/federated/tutorials/federated_learning_for_image_classification

TFF 代码库 链接

https://github.com/tensorflow/federated


从长远来看,我们希望 TFF 运行时能够支持主要的设备平台,并且能够集成其他有助于保护敏感用户数据的技术,包括 联合学习的差异化隐私(集成了 TensorFlow 隐私)和 安全数据聚集。我们期待与社区一起开发 TFF,让每位开发者都能够使用联合技术。

注:联合学习的差异化隐私 链接

https://arxiv.org/abs/1710.06963

TensorFlow 隐私 链接

https://github.com/tensorflow/privacy

安全数据聚集 链接

https://arxiv.org/abs/1611.04482


准备好了吗?请访问

https://www.tensorflow.org/federated/,立刻试用 TFF!



致谢

TensorFlow Federated 的开发是团队共同努力的成果。特别感谢 Brendan McMahan、Keith Rush、Michael Reneer 和 Zachary Garrett,他们都为此项目作出了巨大贡献。



更多 AI 相关阅读:



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存