赞
踩
横向联邦学习也称为按样本划分的联邦学习,可以应用于联邦学习的各个参与方的数据集有相同的特征空间和不同的样本空间的场景,类似于在表格视图中对数据进行水平划分的情况。
例如,两个地区的城市商业银行可能在各自的地区拥有非常不同的客户群体,所以他们的客户交集非常小,他们的数据集有不同的样本ID。然而,他们的业务模型非常相似,因此他们的数据集的特征空间是相同的。这两家银行可以联合起来进行横向联邦学习以构建更好的风控模型。
具有K个参与方(客户端)在服务器的帮助下,协作地训练一个机器学习模型。
横向联邦学习系统的训练过程通常由如下四步组成:
然后迭代执行上述步骤,直到损失函数收敛或者达到允许的迭代次数的上限或允许的训练时间。这种架构独立于特定的机器学习算法,并且所有参与方将会共享最终的模型参数。
在这种架构中,横向联邦学习系统的K个参与方也被称为训练方(trainer)或分布式训练方。每一个训练方负责只使用。此外,训练方们使用安全链路在相互之间传输模型参数信息。为了保证任意两方之间的通信安全,需要使用例如基于公共密钥的加密方法等安全措施。
由于对等网络架构中不存在中央服务器,训练方们必须提前商定发送和接收模型参数信息的顺序,主要有两种方法可以达到这个目的:
联邦平均算法(Federal Average Algorithm)是一种用于计算加权平均值的算法,的基本思想将数据点按照某个权重进行加权平均,从而得到一个加权平均值。
H. B. McMahan, E. Moore, D. Ramage, S. Hampson, and B. A. Y. Arcas, “Communication-efficient learning of deep networks from decentralized data,” in Proc. AISTATS, 2016, pp. 1273–1282.
在原文中对联邦平均算法的描述如下:
假定在多轮通信中的一个同步更新方案,有一组K个客户端组成的固定集合,每个客户端都有一个固定的本地数据。
在每一轮开始,随机的一小部分比例 的客户端被选定,并且服务端把当前全局算法状态(当前的模型参数)发送给被选中的每一个客户端。【为了提高效率我们只选中一小部分客户端,因为我们的实验表明超过某一点继续增加客户端的数量回报就会持续衰减。】
基于全局模型参数以及本地数据集,每一个被选中的客户端开始执行本地计算,并再把更新发送到服务端。
而后服务端再把收到的这批更新应用给全局参数,然后就是不断重复执行这个过程。
这里给出它的伪代码描述:
# local_w 表示每个客户端训练得到的权重列表
weights_avg = local_w[0]
for k in weights_avg.keys():
for i in range(1, len(local_w)):
# weights_avg[k] += local_w[i][k] * weight
weights_avg[k] = weights_avg[k] + local_w[i][k]
weights_avg[k] = weights_avg[k] / len(local_w)
global_weights = weights_avg
model.load_state_dict(global_weights)
在联邦平均算法的实现中,在每一个全局模型训练轮次中,每一个参与方都需要给服务器发送完整的模型参数更新。由于现代的DNN模型通常有数百万个参数,给协调方发送如此多的数值将会导致巨大的通信开销,并且这样的通信开销会随着参与方数量和迭代轮次的增加而增加。当存在大量参与方时,从参与方上传模型参数至协调方将成为联邦学习的瓶颈。可以从以下两个方面对联邦平均算法进行改进:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。