目录
3.1.1 Federated Learning()_ 模型
3.1.2 Federated Learning()_ 联合计算构建器
3.1.3 Federated Learning()_ 数据库
3. Tensorflow Federated 指南提纲
从这篇blog开始进入TFF,希望和大家多多切磋 ˙Ⱉ˙
- 鲁迅老师说过,想学习一种知识第一步就是去看它的官方文档。但是在看了一遍官方文档之后发现:emm真的很难懂。一方面是因为大部分文档使用英语撰写,另一方面仅有的汉语文档也十分晦涩难懂(我甚至觉得是机翻)。但是anyway,还是把官方文档的指南和教程中的key points列出来,可能随着慢慢深入学习就懂了吧。在指南的原文档中,除了概述和安装,主要内容集中在两个部分(也就是FL的两层):
将现有 Keras 或非 Keras 机器学习模型插入 TFF 框架的高级接口。无须学习联合学习算法的详细内容,您就可以执行基本任务,如联合训练或评估。 |
通过将 TensorFlow 与强类型函数式编程环境中的分布式通信算子相结合,可简明表示自定义联合算法的底层接口。 |
3.1 Federated Learning()
关于指南的提纲原文链接:https://www.tensorflow.org/federated/federated_learning
根据官方说法,FederatedLearning层所提供的接口旨在试验联合学习,而无需了解底层工作原理,以及在各种现有模型和数据上评估实现的联合学习算法。其包括的接口主要分为三个部分
- 模型:tf.learning.from_keras_model (用于包装单个函数) / tf.learning.Model (用于全定制)
- 联合计算构建器
- 数据集
3.1.1 Federated Learning()_ 模型
序列化:tff要求模型代码必须可序列化,官方推荐的方式是使用Eager模式+tf.function()包装
聚合:官方推荐使用Keras+Keras转换器构建模型
tff.learning.from_keras_model
抽象接口:
-
构造函数, forward_pass 和 report_local_outputs 方法应相应地构造模型变量、前向传递以及要报告的统计数据。。
-
input_spec属性以及返回可训练、不可训练和本地变量的 3 个属性表示元数据。
3.1.2 Federated Learning()_ 联合计算构建器
讲道理,联合计算构建器的这个名字着实让我很费解。我第一反应是python的builder模式,但仔细一看(好像)并不相干。再搜一搜发现这个构建器其实就是指创建迭代过程并计算(包括编译和执行的过程)
目前,TFF 为联合训练和评估提供了两个生成联合计算的构建器函数:
-
tff.learning.build_federated_averaging_process
使用一个模型函数和一个客户端优化器,并返回一个有状态的tff.templates.IterativeProcess
。 -
tff.learning.build_federated_evaluation
使用一个 model 函数,并为模型的联合评估返回一个单一的联合计算,因为评估没有状态。
但说实在的这个联合构建器我还是没完全搞明白,就懂了但没完全懂。先在这立一个标记等看完全部文档再回过头来看看会不会好一点。| ᐕ)⁾⁾
3.1.3 Federated Learning()_ 数据库
所谓数据库在联邦学习的环境下其实是指每个客户端的数据集。在模拟联邦学习的时候一般会把一个完整的数据集先split成若干段(至于怎么分要根据实验要求来具体设置,比如独立同分布)在TFF中提供接口抽象:tff.simulation.ClientData
而且
为了在模拟中使用,TFF已指定将命名空间 tff.simulation.datasets
专门用于实现 tff.simulation.ClientData
接口的数据集,并为其提供 2 个数据集作为种子,从而支持图像分类和文本生成。
3.2 Federated Core
讲真的,FC这部分在官方文档介绍的极其混乱,看了好多遍都没懂它到底再说什么。这里非常感谢两位老师的blog,写的非常好,给了我非常大的帮助;在文末我会附上这两位老师的文章链接。
根据官方文档的说法,对于FC的最好的理解就是将其看作一种实现分布式计算的编程环境。(并不是很好懂)而根据两位老师的总结,FC似乎有更好的理解方式:
Federated Learning (FL) API:该层提供了一组高阶接口,使开发者能够将包含的联合训练和评估实现应用于现有的 TensorFlow 模型。
Federated Core (FC) API:该系统的核心是一组较低阶接口,可以通过在强类型函数式编程环境中结合使用 TensorFlow 与分布式通信运算符,简洁地表达新的联合算法。这一层也是我们构建联合学习的基础。
根据我的理解也许不对,FL API 用于训练,实现,评估评估现有的TF模型。而FC API用于构建新的FL算法。所以FC API应该是学习的重点。
3.2.1 FC类型
在官方文档中也讲到了FC的类型系统,可以用下面这幅图表示
而更好的方式是通过端有关类型和端无关类型去理解(毕竟这也是联邦学习的精髓);其中第一个大括号下的四种类型为端无关类型, 即不需要标注存储端;后面的大括号囊括了端有关类型。值得注意的是函数也可以被定义成端有关类型。
3.2.2 FC 构建模块
FC主要包括四种模块:
- TF计算 + 装饰器包装
- 内联函数(大多数表示与 TFF 一起使用的分布通信算子)
- λ 表达式
- 布局函数
- 函数调用(__call__)
以上三部分(即blog1-2)从tf入手复习了一遍tf流程即tff中的两层api,下一章开始准备复习代码部分,也会拿着官网的例子拆开来分析分析。
这里贴出两位老师的文章链接,写的非常好,对于tff学者值得一看。
Tensorflow Federated Framework 谷歌联邦学习框架:自底向上简明入门:https://blog.csdn.net/Mr_Zing/article/details/100051535?spm=1001.2014.3001.5501
Federated Core API学习笔记:https://blog.csdn.net/m0_46327721/article/details/109709433?spm=1001.2014.3001.5501