【问题标题】:Other compression methods for Federated Learning联邦学习的其他压缩方法
【发布时间】:2020-08-17 18:51:15
【问题描述】:

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

【问题讨论】:

    标签: tensorflow-federated


    【解决方案1】:

    目前,TFF 代码库中没有这个想法的实现。

    但这里是你如何做到这一点的大纲,我建议从examples/simple_fedavg开始

    1. 修改顶级build_federated_averaging_process 以接受两个model_fns - 一个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. 很棘手,因为它们不仅取决于模型中的层,还取决于它们的连接方式。所以很难创建一个易于使用的通用解决方案,但是为您预先知道的特定模型结构编写这些应该是可以的。

    【讨论】:

    • 感谢您的见解。
    • 关于草图解决方案,我想知道(并询问)是否以及如何考虑不同的子模型(即,相同的子模型架构但随机“组合”考虑到每个客户端的不同丢弃过滤器/神经元),因为 tff.federated_broadcast 只是向每个客户端发送相同的消息(即相同的模型权重)——在上面的大纲中发生在第 (2) 点。我认为类似的问题可能来自收集不同映射的子模型,第 (4) 点。这方面的任何建议对我来说都非常重要和有用。
    • 您可以广播整个模型并在 CLIENTS 执行选择,每个人都独立。我不清楚它们应该如何再次组合在一起,我可以看到多种变体,但不知道什么最有意义。
    • 非常感谢。我直接在 CLIENTS 实现了它。关于您关于聚合的最后一点:当组合来自不同子模型的客户权重增量时,它们是否应该只为相关的子模型参数做出贡献,因此我是否应该实施临时聚合?我的意思是,如果我通过用零填充丢弃的过滤器/连接将子模型权重增量映射回全局模型,那么之后联合平均值将(不正确地)被这些零破坏,还是我错了?我无法在上述论文中检索到此信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多