联邦学习的修仙之路_2

目录

3. Tensorflow Federated 指南提纲

3.1 Federated Learning()

3.1.1 Federated Learning()_ 模型

3.1.2 Federated Learning()_ 联合计算构建器

3.1.3 Federated Learning()_ 数据库

3.2 Federated Core

3.2.1 FC类型

3.2.2 FC 构建模块


3. Tensorflow Federated 指南提纲

从这篇blog开始进入TFF,希望和大家多多切磋 ˙Ⱉ˙ ​​​

  1. 鲁迅老师说过,想学习一种知识第一步就是去看它的官方文档。但是在看了一遍官方文档之后发现:emm真的很难懂。一方面是因为大部分文档使用英语撰写,另一方面仅有的汉语文档也十分晦涩难懂(我甚至觉得是机翻)。但是anyway,还是把官方文档的指南和教程中的key points列出来,可能随着慢慢深入学习就懂了吧。在指南的原文档中,除了概述和安装,主要内容集中在两个部分(也就是FL的两层):
  • Federated Learning ()

将现有 Keras 或非 Keras 机器学习模型插入 TFF 框架的高级接口。无须学习联合学习算法的详细内容,您就可以执行基本任务,如联合训练或评估。

  • Federated Core ()

通过将 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 为联合训练和评估提供了两个生成联合计算的构建器函数:

但说实在的这个联合构建器我还是没完全搞明白,就懂了但没完全懂。先在这立一个标记等看完全部文档再回过头来看看会不会好一点。| ᐕ)⁾⁾

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 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值