有很多用户安装了Google的app,比如搜索引擎等。这些移动端的app都会搜集数据,产生数据。有些数据对于Google来说是有用的,所以Google想要建立一个机器学习模型,然后使用移动端的数据来训练机器学习模型。app把这些数据收集起来,发送到Google云端,然后Google在自己的集群上来训练模型,Google有足够的计算资源,这样不就解决了吗?但是事情不是这么简单的。假如有一个这样的限制,照片是隐私不想让Google传到云端上,那么如何训练机器学习模型呢?
每家医院都有自己的数据,可以用来训练自己的模型将实现预测等,但是每家的数据都不多,训练的效果也不好。最简单的方法就是将数据整合起来,在服务器上将模型进行训练。但是,用户数据不能轻易交给别人。
之前的时候学习过并行算法或者是分布式算,其中有一种编程模型,Parameter Server,我们可以用这种模型训练神经网络, 计算几乎都是Worker做的,Server端存储模型参数或者更新模型参数。
每一轮都要重复这样的操作:Worker向Server索要模型参数,然后Worker作本机计算,求出模型梯度。 Worker将计算出的梯度发送给Server,然后Server用梯度更新模型更新参数。
上述过程中,我们可以知道数据没有离开Worker,这样的话减少clock time的同时还保护了用户的隐私。联邦学习是一种分布式学习,联邦学习跟传统的分布式学习有很多不同:
- 用户对他们的设备和数据有绝对的控制权
- Worker节点不稳定
- 通信代价比计算代价要高
- 存储在Worker节点中的数据并不是独立同分布的(IID)
- 节点负载不平衡