我正在开展联合学习以检测不良客户。
联邦学习简介 - 数据被分成不同的客户端,训练在客户端完成,然后每个客户端将结果发送到中央服务器,在中央服务器完成客户端权重的聚合,然后再次将聚合模型发送到本地客户端训练。
我正在检测客户端向中央服务器发送恶意更新。我正在使用这里的基本代码。
我编写了一个方法过滤器客户端,它将检测某个客户端是否是恶意的,并将该客户端从聚合步骤中删除。我预计如果从全局聚合中删除客户端权重之一,则性能不会有太大差异,但结果让我感到困惑。我添加了这段代码。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,并且还减小了批量大小,但之后看到了相同的行为。这可能是什么原因以及如何纠正?