联合学习的其他压缩方法

问题描述

我注意到TFF框架中已经实现了Gradient Quantization压缩方法。通过删除全局模型的某些部分来选择子模型的非传统压缩方法呢?我在论文“通过减少客户端资源需求来扩展联合学习的范围”(https://arxiv.org/abs/1812.07210中遇到了“联合辍学”压缩方法。 Tensorflow Federated中已经支持Federated Dropout方法的任何想法。如果不是,则有什么见解如何实现(该方法的主要思想是在全局模型中删除固定百分比的激活和过滤器,以交换和训练较小的子模型)?

解决方法

当前,TFF代码库中没有该想法的实现。

但这是您如何做的概述,我建议从examples/simple_fedavg开始

  1. 修改顶层build_federated_averaging_process以接受两个model_fn-一个server_model_fn用于全局模型,一个client_model_fn用于实际训练的较小子模型结构客户。
  2. 修改build_server_broadcast_message,仅从server_state.model_weights中提取相关子模型。这将是从服务器模型到客户端模型的映射。
  3. 实际上client_update不需要更改(我不确定100%肯定),只要client_update_fn仅提供client_model_fn
  4. 修改server_update-weights_delta是客户端子模型的更新,因此您需要将其映射回更大的全局模型。

通常,步骤2和4.非常棘手,因为它们不仅取决于模型中的哪些层,而且还取决于它们的连接方式。因此,很难创建一个易于使用的通用解决方案,但可以为事先知道的特定模型结构编写这些解决方案。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...