网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
现代移动设备可以获取大量适合学习模型的数据,而这些数据反过来又可以极大地改善设备上的用户体验。例如,语言模型可以提高语音识别和文本输入,图像模型可以自动选择好的照片。然而,这些丰富的数据往往是隐私敏感的,数量大,或者两者兼而有之,这可能妨碍使用常规方法登录数据中心和在那里进行培训。我们提倡一种替代方法,让训练数据分布在移动设备上,并通过聚集本地计算的更新来学习共享模型。我们将这种去中心化的学习方式称为联邦学习。
我们提出了一种基于迭代模型平均的深度网络联邦学习的实用方法,并进行了广泛的实证评估,考虑了五种不同的模型架构和四个数据集。这些实验表明,该方法对不平衡和非IID数据分布具有鲁棒性,这些分布是该设置的一个定义特性。通信开销是主要约束,与同步随机梯度下降相比,所需的通信轮数减少了10 - 100 ×。
主要内容(contributions)
- 确定了从移动设备分散数据的训练问题作为一个重要的研究方向;
- 选择一个简单实用的算法可以应用到这个设定中;
- 对所提出的方法进行了广泛的实证评估。
引入了联邦平均算法,该算法将每个客户端上的局部随机梯度下降( SGD )与执行模型平均的服务器相结合。并对该算法进行了广泛的实验,证明了它对不平衡和非IID数据分布具有鲁棒性,并且可以将在分散数据上训练深度网络所需的通信轮数减少数量级。
FederatedAveraging
联邦学习
联邦学习的理想问题具有以下特性:
- 对来自移动设备的真实世界数据进行训练比对数据中心中通常可用的代理数据进行训练具有明显优势;
- 该数据对隐私敏感或数据量较大(对比了模型的大小),最好不要纯粹为了模型训练(服务于集中收集原则)而登录数据中心;
- 对于有监督的任务,可以从用户交互中自然地推断数据上的标签。
隐私
与在数据中心持久化数据上的训练相比,联邦学习在隐私上拥有明显的优势。即使保有一个“匿名化”的数据集,仍然可能通过与其它数据联合而将用户隐私置于风险之中。相比之下,联邦学习中传输的信息则是改进特定模型所必须的最小更新(梯度)。它们所含有的信息,永远不会超过原始训练数据,并且通常会更少。进一步的,聚合算法并不需要知道更新的源,所以更新可以不识别元信息而在混合网络中传输或通过一个可信第三方。简要讨论了联邦学习与安全多方计算和差分隐私。
联邦优化
将联邦学习中隐含的优化问题称为联邦优化,它为分布式优化绘制了一个连接和对比。联邦优化有几个关键性质,使其区别于典型的分布式优化问题:
- 非IID:给定客户端上的训练数据通常基于特定用户对移动设备的使用情况,因此任何特定用户的本地数据集都不能代表总体分布。
- 不平衡:同样,一些用户会比其他用户更多地使用服务或应用程序,从而导致本地训练数据的数量不同。
- 大规模分布:预计参与优化的客户端数量比每个客户端的平均示例数量要多得多。
- 通信受限:移动设备经常离线或连接缓慢或昂贵。
该文重点关注优化的非IID和非平衡性质,以及通信约束的临界性质。一个已部署的联邦优化系统还必须解决大量的实际问题:随着数据的添加和删除而变化的客户端数据集;以复杂方式与本地数据分布关联的客户端可用性;以及从不响应或发送损坏的更新的客户端。
联邦平均算法(FedAVG)
- 假定在多轮通信中的一个同步更新方案,有一组K个客户端组成的固定集合,每个客户端都有一个固定的本地数据。
- 在每一轮开始,随机的一小部分比例 的客户端被选定,并且服务端把当前全局算法状态(当前的模型参数)发送给被选中的每一个客户端。【为了提高效率我们只选中一小部分客户端,因为我们的实验表明超过某一点继续增加客户端的数量回报就会持续衰减。】
- 基于全局模型参数以及本地数据集,每一个被选中的客户端开始执行本地计算,并再把更新发送到服务端。
- 而后服务端再把收到的这批更新应用给全局参数,然后就是不断重复执行这个过程。
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)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!