什么是联邦学习

本质:联邦学习本质上是一种分布式机器学习技术,或机器学习框架。

目标:联邦学习的目标是在保证数据隐私安全及合法合规的基础上,实现共同建模,提升AI模型的效果。

前置知识:

  • IID:独立同分布,表示一组随机变量的概率分布都相同,而且相互独立。例如掷色子。联邦学习背景下,数据集是非独立同分布的。

  • SGD: 梯度下降算法

    • 绝大多数机器学习模型都有一个损失函数,来衡量预测值与实际值的差异。损失函数的值越小,模型的精确度就越高。通过使用梯度下降来调节参数,进而最小化损失函数。

    • 损失函数里一般有两种参数,一种是控制输入信号量的权重(Weight, 简称 w ),另一种是调整函数与真实值距离的偏差(Bias,简称 b )。我们所要做的工作,就是通过梯度下降方法,不断地调整权重 w 和偏差b,使得损失函数的值变得越来越小。

    • 通过计算梯度可以找到下降的方向,然后通过学习率a来控制下降的快慢。

      def train(X, y, W, B, alpha, max_iters):
          '‘’
          选取所有的数据作为训练样本来执行梯度下降
          X : 训练数据集
          y : 训练数据集所对应的目标值
          W : 权重向量
          B : 偏差变量
          alpha : 学习速率
          max_iters : 梯度下降过程最大的迭代次数
         '''
         dW = 0 # 初始化权重向量的梯度累加器
         dB = 0 # 初始化偏差向量的梯度累加器
         m = X.shape[0] # 训练数据的数量
         
         # 开始梯度下降的迭代
         for i in range(max_iters): 
             dW = 0 # 重新设置权重向量的梯度累加器
             dB = 0 # 重新设置偏差向量的梯度累加器
             
             # 对所有的训练数据进行遍历
             for j in range(m):
                 # 1. 遍历所有的训练数据
                 # 2. 计算每个训练数据的权重向量梯度w_grad和偏差向量梯度b_grad
                 # 3. 把w_grad和b_grad的值分别累加到dW和dB两个累加器里
             
             W = W - alpha * (dW / m) # 更新权重的值
             B = B - alpha * (dB / m) # 更新偏差的值
      
          return W, B # 返回更新后的权重和偏差。
      

优化过程

  • 固定总数 K 个客户端,每个客户端都有本地数据集。

  • 每次选取分数 C (比例)个客户端

  • 服务器将当前的全局算法发送给每个客户端。

  • 每个被选定的客户端执行本地计算,并将服务器更新。

通信成本占主导

一般数据中心中,通讯花费占少数,计算花费占大头。但是在联邦优化中,通讯占主导地位

  • 通常上传带宽被限制到1MB或者更低。

  • 客户端只有在充电,插入电源,和有不限量WIFI的情况下才会参与到优化过程中来。

  • 希望每个客户每天只参加少量的更新回合

因为单个客户端的训练数据很小,而且当前智能手机等客户端的计算能力是足够强的,所以通过使用额外的计算量来减少通信的次数

  • 增加并行量。在每次通信过程中,使用更多客户端来更新。

  • 增加每个客户端的计算量

联邦平均算法

联邦背景下,对梯度下降算法的扩展。

选取K个Client,Server将当前的参数传递给Client,Client根据本地数据集和参数来进行梯度下降。

最后将训练后的参数返回给Server,Server将获得的所有参数加权处理后得到最终的参数。然后再进行下一轮计算。

fedsvg.png

如图所示,当B $\rightarrow$ $\infty$,E $\rightarrow$ 1  表示本地数据全部参与训练,只训练一次,称为FedSGD。

分类

我们把每个参与共同建模的企业称为参与方,根据多参与方之间数据分布的不同,把联邦学习分为三类:横向联邦学习、纵向联邦学习和联邦迁移学习。

横向联邦学习

横向联邦学习的本质是 样本的联合,适用于参与者间业态相同但触达客户不同,即特征重叠多,用户重叠少时的场景,比如不同地区的银行间,他们的业务相似(特征相似),但用户不同(样本不同)

学习过程:

  • 参与方各自从服务器A下载最新模型
  • 每个参与方利用本地数据训练模型,加密梯度上传给服务器A,服务器A聚合各用户的梯度更新模型参数;
  • 服务器A返回更新后的模型给各参与方;
  • 各参与方更新各自模型。

纵向联邦学习

纵向联邦学习的本质是 特征的联合,适用于用户重叠多,特征重叠少的场景,比如同一地区的商超和银行,他们触达的用户都为该地区的居民(样本相同),但业务不同(特征不同)。

学习过程

纵向联邦学习的本质是交叉用户在不同业态下的特征联合,比如商超A和银行B,在传统的机器学习建模过程中,需要将两部分数据集中到一个数据中心,然后再将每个用户的特征join成一条数据用来训练模型,所以就需要双方有用户交集(基于join结果建模),并有一方存在label。其学习步骤如上图所示,分为两大步:

第一步:加密样本对齐。是在系统级做这件事,因此在企业感知层面不会暴露非交叉用户。

第二步:对齐样本进行模型加密训练:

  • 由第三方C向A和B发送公钥,用来加密需要传输的数据;
  • A和B分别计算和自己相关的特征中间结果,并加密交互,用来求得各自梯度和损失;
  • A和B分别计算各自加密后的梯度并添加掩码发送给C,同时B计算加密后的损失发送给C;
  • C解密梯度和损失后回传给A和B,A、B去除掩码并更新模型。

联邦迁移学习

当参与者间特征和样本重叠都很少时可以考虑使用联邦迁移学习,如不同地区的银行和商超间的联合。主要适用于以深度神经网络为基模型的场景。

迁移学习,是指利用数据、任务、或模型之间的相似性,将在源领域学习过的模型,应用于 目标领域的一种学习过程。