联邦学习设置中迭代后精度下降

Accuracy decreasing after iteration in federated learning setting

我正在研究联合学习以检测不良客户端。

联邦学习简介——数据被分成不同的客户端,训练在客户端完成,然后每个客户端将结果发送到中央服务器,在中央服务器完成客户端权重的聚合,然后再次聚合模型发送给当地客户进行培训。

我正在检测客户端向中央服务器发送恶意更新。我正在使用现有的基本代码 here.

我写了一个方法过滤器客户端,它会检测某个客户端是否是恶意的,并将该客户端从聚合步骤中删除。我预计如果从全局聚合中删除其中一个客户端权重,性能不会有太大差异,但结果让我感到困惑。我添加了这段代码。 noisy_client[itr] != 0 只会出现在 1/10 个客户端上,并且在每次迭代中都会出现在同一个客户端上。

if noisy_client[itr] == 0:
            scaled_local_weight_list.append(scaled_weights)
        

如果不使用此代码,则每次迭代的准确性都会稳步提高

0.6102380952380952
0.7195238095238096
0.7723809523809524
0.8014285714285714
0.8195238095238095
0.8314285714285714
0.8397619047619047
0.8438095238095238
0.8516666666666667
0.8545238095238096
0.8573809523809524
0.8602380952380952
0.861904761904762
0.8635714285714285
0.8654761904761905
0.8671428571428571
0.8683333333333333

但是当使用代码时,前几次迭代的准确度会增加,之后每次迭代的准确度都会降低

0.6883333333333334 0.7373809523809524 0.7552380952380953 0.765 0.763095238095238 0.7559523809523809 0.7497619047619047 0.7414285714285714 0.7323809523809524 0.7221428571428572 0.7154761904761905 0.705952380952381 0.6966666666666667 0.6895238095238095 0.6819047619047619 0.6730952380952381 0.6597619047619048 0.6102380952380952

我曾尝试将学习率从 0.01 降低到 0.001,还降低了批量大小,但之后看到了相同的行为。 这可能是什么原因以及如何纠正?

一个常见的问题可能是您试图在 no_grad() 范围内进行聚合。发生在我身上一次。即使模型正在聚合,优化器基本上每轮联合都会重置一次。

这是我的预感,因为我还没有看到任何代码,所以我不能说更多。