谁都能看懂的纵向联邦学习(VFL)加密聚合算法的解释

场景说明

为便于分析,先考虑最简单的情形,现在有两个clients,client A和 client B,以及一个受信任的第三方client C(或者用server代替也可以)。client A和 client B都有一定数量的sample(每一条sample都对应ID编号,IDA表示client A的样本编号),只有client A持有label。
如果放在纵向联邦学习的场景中,那么A和B的ID是大部分都相同的(举个例子,假如A和B分别代表同一个城市的一家银行和一家保险公司,每个ID则对应每一个客户,因为在同一个城市里,所以他们面对的客户大部分都是同一批人,即大部分ID都是重合的),而我们假设A和B对应的同一个ID的feature是互斥的(银行和保险公司办理的业务一般是不同的,不同的业务类型即不同的feature)。

在上述场景下,我们来让A和B一起训练一个模型,同时要保证隐私不泄露。

训练步骤

1.首先client A将自己存放的所有数据ID加密为 EnA[IDA] 发送给client B,EnA表示A使用的加密算法。
2.client B将client A发来的加密ID与自己的数据ID一起加密,分别得到 EnB[EnA[IDA]] 和 EnB[IDB],再将两组密文一起发送给client A。EnB表示B使用的加密算法。
3.client A收到client B发来的密文后对密文使用私钥进行解密,得到 EnB[IDA] 和 EnB[IDB],根据同态性质,此时可以对两种密文取交集,得到 EnB[IDAB],即样本对齐。

到这里已经实现了样本ID对齐。

4.client A将对齐后的密文 EnB[IDAB] 发送给client B,B方拿到密文后用私钥B解密得到IDAB,并将其用自己的sample预测的label值加密为 EnB[Y],与对应的IDAB 一起发给A。
5.client A根据收到的label得到残差(一个ID对应一个Res),并将Res和对应ID一起发给client B。
6.client A计算自己的grad(一个feature对应一个grad),再将grad、loss等参数使用C分配的公钥加密后发给C方。同理,client B拿到client A发来的Res后可计算出自己的grad等参数,用公钥加密发送给C。
7.C方收到client A和 client B的密文 EnC[gradA]、EnC[gradB] 后用公钥解密,更新参数后再加密返回给client A和 client B(A、B分别只拿到自己的参数)。
8.client A和 client B更新参数评估accuracy,判断是否进行下一轮迭代。

以上的训练过程,简单讲其实就是client A和 client B各自使用各自的样本做训练,通过密文的互传获得相应的参数进行参数更新。

与横向联邦学习(HFL)的区别

类似的场景,与纵向FL不同的是,在横向FL中,我们的client A和 client B存放的每个sample都有足够的feature(比如不同城市的两家银行,他们面对的客户是没什么交集的,但是同样作为银行,客户办理的业务是类似的),这样A B就可以各自训练各自的model,也不需要ID对齐这一步,因为不需要互传数据和参数,所以在保护数据隐私时只考虑server是否诚实即可。

你可能感兴趣的:(机器学习,1024程序员节)