首页 > 解决方案 > 集中式与联合式收敛

问题描述

所以我从 700 多个智能电表中获得了一些数据。每个仪表的数据包括每隔 15 分钟的用电量、室外温度、湿度,如果是国定假日……
目标是预测电网用户的综合用电量。
当我通过汇总所有电力来组合数据并训练我的模型(归一化、一些批处理、具有 512 个节点的 3 个 lstm 层、一些 dropout、relu 激活、adam 优化器、绝对损失、默认 lr)时,我得到了很好的结果,我很高兴和。
但是当我在联合中进行时,每个用户都使用他的私人数据进行培训,使用我所做的相同模型(服务器 lr = 1.0,因为我认为它不那么令人困惑)我得到了非常糟糕的结果。
不系统地我搞砸了批量大小,为 SGD 切换 adam,改变学习率,增加 epochs,改变每轮计算梯度的用户数量。似乎没有任何效果。
我应该以某个数量级提高时代吗?我是否有任何理论保证存在一组参数,在这些参数下,收敛于数据总和的同一模型应该在联合中收敛?
这更像是一个软问题,但如果需要,我可以发布代码或结果。

标签: tensorflow-federated

解决方案


在这个问题中让我印象深刻的一件事是提到规范化。在 TFF 的默认联合平均实现中,只有可训练变量在客户端之间进行平均。

Keras 的BatchNorm实现使用不可训练的变量来跟踪批次间参数的均值和标准差,因此这里的组合不好。然而,使用 TFF 的GroupNorm实现作为替代品已经取得了成功。你在使用 BatchNorm 吗?如果是这样,我可能会建议尝试简单地换成 GroupNorm。


推荐阅读