我用 TFF 训练了一个 ResNet50 模型,我在测试数据上使用测试精度进行评估,但是我发现如下图所示的很多波动,请问我该如何避免这种波动?
2 回答
我会说这样的行为通常是随机优化的预期行为。固有的差异会导致您在好的解决方案周围摇摆不定。方差的大小和优化目标的属性控制着在查看准确度指标时它的振荡程度。
对于普通的 SGD,降低学习率会降低方差并减慢收敛速度。
对于联邦学习的优化方法,情况要复杂一些,但降低客户端学习率或减少本地步骤的数量(同时保持其他事情相同)可能会产生类似的效果,通常包括减慢收敛速度。更多详细信息可以在https://arxiv.org/abs/2007.00878中找到,其他答案中也提到了。潜在地降低跨轮的客户学习率也可以奏效。详细信息也可能因您使用的优化方法而异。
测试精度如何计算?客户训练了多少个本地时期?
如果全局模型在一组示例上进行测试,则客户端可能会在本地训练期间出现有害的过度拟合。随着全局模型趋于收敛,每个客户端最终都会训练出一个对他们来说效果很好的模型,但可能会偏离最佳全局模型(有时称为客户端漂移 https://arxiv.org/abs/1910.06378)。当客户端的本地数据集的分布与全局分布非常不同时,可能会发生这种情况,并且更有可能在客户端学习率较高时发生 ( https://arxiv.org/abs/2007.00878 )。
降低客户端学习率,减少步骤/批次的数量,以及其他导致客户端在每轮通信轮次中做更少“工作”的方法可能会减少波动。