纵向联邦学习(VFL)一般是适用于数据集上具有相同的样本空间、不同的特征空间的参与方所组成的联邦学习场景,纵向联邦学习也可以理解为按特征划分的联邦学习。
举个例子,我们假设有两家公司A和B想要协同地训练一个机器学习模型,每一家公司都拥有各自的数据。例如保险公司与银行合作,根据同一用户的购买历史与消费习惯,为该用户提供定制化的服务;医院与制药公司合作,通过利用同类患者的医疗记录,从而治疗患者的慢性疾病,并降低患者未来住院治疗的风险。
由于用户隐私和数据安全的原因,A方和B方不能直接交换数据,为了保证训练过程中的数据保密性,此时需要加入了一个第三方的协调者C。C是一个半诚实的第三方,它主要用来帮助参与方进行安全的联邦学习,C独立于各参与方,它将会收集中间结果用来计算梯度和损失值,并将结果转发给每一参与方。C收到的来自参与方的信息是被加密过或者被混淆处理过的,因此各方的原始数据并不会暴露给彼此,并且各参与方只会收到与其拥有的特征相关的模型参数。
还是刚才的例子,我们假设C方是诚实的且不与A方或B方共谋,但A方和B方都是诚实但好奇的。被信任的第三方C是一个合理的假设,因为C方的角色可以由权威机关(如政府)扮演或由安全计算节点代替。
纵向联邦学习的训练过程一般由两部分组成:首先对齐具有相同ID但分布于不同参与方的实体,然后基于这些已对齐的实体执行加密的或隐私保护的模型训练。
纵向联邦学习系统的架构:
第一部分:加密实体对齐
由于A方和B方公司的用户群体不同,系统使用一种基于加密的用户ID对齐技术来确保A方和B方不需要暴露各自的原始数据便可以对齐共同用户。在实体对齐期间,系统不会将属于某一家公司的用户暴露出来。
第二部分:加密模型训练
在确定共有实体后,各方可以使用这些共有实体的数据来协同地训练一个机器学习模型。训练过程可以被分为以下四个步骤:
1、协调者C创建密钥对,并将公共密钥发送给A方和B方;
2、A方和B方对中间结果进行加密和交换,中间结果用来帮助计算梯度和损失值;
3、A方和B方计算加密梯度并分别加入附加掩码,B方还会计算加密损失,A方和B方将加密的结果发送给C方;
4、C方对梯度和损失信息进行解密,并将结果发送回A方和B方。A方和B方解除梯度信息上的掩码,并根据这些梯度信息来更新模型参数。
安全联邦线性回归算法主要是利用同态加密方法,在联邦线性回归模型的训练过程中保护属于每一个参与方的本地数据。
根据前文所述,一般会在A方和B方之间会加入一个第三方C方,但在实际中,将一个第三方加入此过程中并不总是可行的,因为第三方的合法性和可问责性难以得到保障,此时可以使用安全多方计算技术来移除第三方以及让联邦学习去中心化。不过在这里,我们依然以存在第三方的情况来探讨这个算法。
在表述训练过程前,我们先明确一下所使用的符号及含义:
符号 | 含义 |
![]() |
学习率 |
![]() |
正则化参数 |
![]() |
B方的标签空间 |
![]() |
分别表示A方和B方的特征空间 |
![]() |
分别表示A方和B方的本地模型参数 |
![]() |
定义为 ![]() |
![]() |
定义为 ![]() |
![]() |
定义为![]() |
![]() |
A方的本地数据集 |
![]() |
B方的本地数据集和标记 |
![]() |
加法同态加密 |
![]() |
分别表示A方和B方的随机掩码 |
线性回归模型训练的过程:
● 步骤一:
A方:初始化
B方:初始化
C方:创建加密密钥对,并将公共密钥发送给A方和B方
● 步骤二:
A方:计算 和
,并将其发送给B方
B方:计算 、
、
,将
发送给C方
C方:无
● 步骤三:
● 步骤四:
A方:更新
B方:更新
C方:无
● 最终获得的数据:
A方:
B方:
C方:无
在实体对齐和模型训练期间,A方和B方所拥有的数据存储在本地,并且模型训练中的交互不会导致数据隐私泄露。需要注意的是,由于C方是受信任的,所以C方的潜在信息泄露可能会或可能不会被认为是隐私侵犯。为了进一步防止C方从A方或B方学习到相关信息,A方和B方可以将它们的梯度信息加上加随机掩码。
在上面的过程中,A方在每一步都会学习它的梯度,这对于A方来说并不足以学习到关于B方的任何信息,因为标量积协议的安全性建立在仅用 n 个方程无法解出 n 个以上的未知数的基础上。类似地,B方也不能学习到关于A方的任何信息。由此可以证明该协议的安全性。
在预测期间,两方需要协作地计算预测结果,在预测过程中,属于每一方的数据不会暴露给其他方。预测步骤如下:
● 步骤一:
A方:无
B方:无
C方:将 i (i代指用户ID)发送给A方和B方
● 步骤二:
A方:计算 并将其发送给C方
B方:计算 并将其发送给C方
C方:计算 的结果
每一个被动方首先要对其所有的特征进行分桶,然后将每个特征的特征值映射至每个桶中,基于分桶后的特征值,被动方将聚合相应的加密梯度统计信息。通过这种方法,主动方只需要从所有被动方处收集聚合的加密梯度统计信息,从而主动方可以更高效地确定全局最优分割。
寻找最优分割算法的过程:
全局最优分割可以表示为:[参与方id(i),特征id(),阈值id(
)]。具体步骤如下:
● 步骤一:
从主动方开始,首先计算和
,i∈{1,···,N},并使用加法同态加密对其进行加密。其中N为样本个数。主动方将加密的
和
发送给所有的被动方。
● 步骤二:
对于每一个被动方,将当前节点样本空间中样本的特征映射至桶中,并以此为基础将加密梯度统计信息聚合起来,将结果发送给主动方。
● 步骤三:
主动方对各被动方聚合的梯度信息进行解密,并根据以上算法确定全局最优分割,并将和
返回给相应的被动方。
● 步骤四:
被动方根据从主动方发送的和
确定特征的阈值,并对当前的样本空间进行划分。然后,该被动方在查找表中记录选中特征的阈值,形成记录:[记录id,特征,阈值],并将记录id和
返回给主动方。
● 步骤五:
主动方将会根据收到的[记录id,]对当前节点进行划分,并将当前节点与[参与方id,记录id]关联。主动方将当前节点的划分信息与所有被动方同步,并进入对下一节点的分割。
● 步骤六:
迭代步骤2--5,直至达到训练停止条件。
那如何对新的样本或未标注的样本进行分类呢?新样本的特征也分散于各个参与方中,并且不能对外公开,每个参与方知道自己的特征,但是对其他参与方的特征一无所知。因此,分类过程需要在隐私保护的协议下,由各参与方协调进行,分类过程从主动方的root节点开始,步骤如下:
● 步骤一:
主动方查询与当前节点相关联的[参与方id,记录id]记录。基于该记录,主动方向相应参与方发送待标注样本的id和记录id,并且询问下一步的树搜索方向(即向左子节点或右子节点)。
● 步骤二:
被动方接收到待标注样本的id和记录id后,将待标注样本中相应特征的值与本地查找表中的记录[记录id,特征,阈值]中的阈值进行比较,得出下一步的树搜索方向。然后,该被动方将搜索决定发往主动方。
● 步骤三:
主动方接收到被动方传来的搜索决定,前往相应的子节点。
● 步骤四:
迭代步骤1--3,直至到达一个叶节点得到分类标签以及该标签的权值。