-1

我正在开展联合学习以检测不良客户。

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

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

我编写了一个方法过滤器客户端,它将检测某个客户端是否是恶意的,并将该客户端从聚合步骤中删除。我预计如果从全局聚合中删除客户端权重之一,则性能不会有太大差异,但结果让我感到困惑。我添加了这段代码。noise_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,并且还减小了批量大小,但之后看到了相同的行为。这可能是什么原因以及如何纠正?

4

1 回答 1

0

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

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

于 2021-03-31T12:37:33.773 回答