微众银行联邦学习SecureBoost论文学习笔记

一、联邦学习的背景

数据孤岛:如上图,企业A有数据X1(特征),企业B有数据X2和标签,对于A,没有标签难以建模,对于B,特征X2较少,虽有标签,但模型精度达不到要求。

将所有的数据放在一起,联合建模的话,由于数据隐私问题,A、B都难以接受。这时候联邦学习的作用就发挥出来了,联邦学习可以在不暴露双方的数据特征的情况下,联合训练模型,得到的模型可以达到或接近的联合建模的精度。这就是联邦学习的作用和不同点。

联邦学习的分类:如上图,主要分纵向联邦学习,横向联邦学习和联邦迁移学习,下面以信贷违约预测的业务场景为例

纵向联邦学习:企业A有用户的社交信息,企业B(假如是银行)有用户的信用记录和历史违约标签,双方的用户存在很大一部分的交集,这时候使用纵向联邦学习。

横向联邦学习:企业A和企业B都有用户的信用记录和历史违约标签,但是双方用户存在很少的交集(比如A有u1,u2,u3,u4用户的,B有u5,u6,u7,u8用户),这时候使用横向联邦学习。

联邦迁移学习:联邦迁移学习的应用场景和纵向联邦学习是相类似的,但是实际建模过程不一样。联邦迁移学习是A、B各自用自己的数据建模(B有标签的话,就B先建好模型),然后再基于预训练模型进行联邦建模。

目前应用比较多的还是纵向联邦学习和横向联邦学习,联邦迁移学习在实际应用中,由于其效率比较低,所以应用不是很广泛。本文主要介绍的是纵向和横向联邦学习。

二、纵向联邦学习

假定如上的业务场景,微众银行有X4,X5和标签Y,合作企业有X1,X2,X3,双方在保护隐私的条件下,建立联合模型,其效果超过单边数据建模。

纵向联邦学习主要过程分两步:样本对齐(又称样本id匹配)联邦建模,主要如下图

总结一下有两个关键点

(1)样本id匹配:实质上是从A和B中找出相同id(样本唯一标识)的用户或样本,但是要保护A、B双方的隐私(后面会详细介绍)

(2)模型训练过程中的传递的参数是什么以及传递方式。

1、样本id匹配:

A和B共同拥有用户u1,u2,u3的数据,但是,A不想让B知道他有u4,B不想让A知道他有u5,在满足A和B保护隐私的要求下,求出两者交集{u1,u2,u3},是这一步需要解决的问题。微众银行使用的是RSA+ 哈希机制的安全求交方案。整个过程如下图所示:

注:RSA是属于非对称加密算法的一种,就是加密算法和解密算法不是同一种(非对称),所以要想破解的话,必须同时拥有加密算法和解密算法。假设A要传输信息a(明文)给B,首先A使用加密算法e(encry表示加密)对a加密,加密结果是a'(密文),B接受到密文a',使用解密算法d(decry表示解密)解密,得到明文a,在A、B两方之外,其他人无法获得明文a。(在这一步的时候楼主刚开始也有疑惑,以为这个和后面的同态加密有联系,实质上是没有什么联系的,这一步只是双方用来通信的,不涉及模型的训练和生成)

具体步骤如下:

(1)首先B通过RSA算法生成n(公有密钥)、e(加密算法)、d(解密算法),然后将公钥(n、e)传给A;

(2)A将自己所有的用户id首先通过哈希函数(哈希函数的作用是建立一个映射,就相当于加密),然后再通过加密函数e加密(加锁)回传给B,传过去的是Y(A);

(3)B接受到Y(A)之后,首先使用解密算法d解密,这时候ri的e和d抵消了(一个加密、一个解密),但是由于还是存在随机噪声ri和A的哈希函数H,所以B无法得知A的用户id。B计算Z(A),Z(B),其中,Z(B)是指B在A传回来的结果中的一部分加了一个哈希函数,将Z(A),Z(B)回传给A;

(4)A首先消除掉Z(A)中的随机噪声(第2步中自己加的),然后再做一次哈希,生成D(A),此时D(A)的形式和Z(B)就一致了,两者求交。A就可以得到两者的交集{u1,u2,u3}。

(5)此时B也获得的两者交集{u1,u2,u3}。

注:实际上(4)(5)楼主也有点疑惑,本着看不懂就略读的原则吧,知道大体是什么流程就够了,毕竟咱不是专门的密码学人士。

经过样本id匹配之后,双方的的样本就对齐了,接下来就是联邦建模了。

2、基于同态加密的模型训练过程

在这个过程中要关注的点有如下几个:

(1)同态加密的含义;

(2)模型训练过程中传递什么参数,通过何种方式传递;

同态加密:

先和大家普及一下加密算法:

一般加密算法,A、B都是明文,f是加密函数,g是解密函数,将A、B加密之后相加得到f(A) + f(B) = f(C), 将f(C)解密得到g(f(C)),最终得到的是一堆乱码。

但对于同态加密存在这个性质:f(A) + f(B) = f(C) = f(A + B),就是即使你只给我加密后的密文,我只要通过同态加密的算法,我是可以知道你们的和的。

同态加密只支持加法和数乘运算,不支持幂运算等其他运算。secureBoost中用的是加法同态加密,

下面就以微众银行的SecureBoost举例:

SecureBoost是微众银行提出的一个联邦学习算法,实质上是将XGBoost使用联邦学习的方式建模。首先,回顾一下XGBoost算法原理,如下图:

(1)首先是XGBoost的损失函数,gi和hi分别是一阶导数和二阶导数

(2)Ij是划分到每个叶子结点的样本集合

(3)Obj(t)是每一轮优化的目标(loss),经过合并,变形之后,可以看出当前每轮的损失函数只和每个样本的一阶导数和二阶导数的和有联系。换句话说,只要知道每一轮优化的一阶导数和二阶导数就可以计算出loss了(这一点很关键,很重要,关系到后面的同态加密)。

结点分裂的标准如下:

原理很简单,用分裂之后的分数减去未分裂的分数(和信息增益的概念差不多),这个分数的计算也是和一阶导数和二阶导数有关的。

XGBoost结点分裂的过程

(1)对于每个特征,随机生成分裂点(阈值),比如年龄,分裂结点定在0,18,26,30...类似;

(2)对每个特征,在遍历每个样本之后,以生成梯度直方图,这一步实际上是选择该分裂哪个特征,实际上,这一步是并行的。如在计算年龄和受教育程度的梯度直方图时(用来计算信息增益),两个特征之间是相互没有影响的。

(3)选择好改分裂的特征之后,(1)中对于每个特征有了分裂的阈值,按照这个进行分裂,计算左右叶子结点分数(看看G(L)的计算公式,这个地方体现了梯度提升的思想(面试考点)),根据gain的共识,计算最大的信息增益。后面就是重复的步骤了。

注:具体的很多细节,需要大家自己去啃论文了(XGBoost资料见参考链接)

整个XGBoost的训练过程过了一遍,实际上,大家记住一个地方就可以了:在结点分裂的时候,有一阶导数和二阶导数即可计算loss函数和信息增益gain。

用联邦学习的方式训练XGBoost叫做SecureBoost, 这时候可能大家可能有几个疑问:

(1)每一方的数据不都是保密的吗,那还怎么计算一阶导数和二阶导数呢?

(2)既然每方的数据都是保密的,那我怎么知道一个结点分裂完之后,下一个结点该谁分裂了呢?

SecureBoost的整个流程如下图:

几个概念:

active party:主动方,有数据,有标签;

passive party:被动方,有数据,没标签;

(1)party2分裂第一个结点,即根结点。这是SecureBoost中为了防止数据泄漏的所做的一个操作(重点),意思就是说,第一个结点是只有标签的一方分裂的(主动方),这样的话,即使你根据后面的分裂结果,最多只能反解到第二层,根结点你是解不出来的,相当于做了一个差分隐私;

(2)party2分裂根结点后,将一阶导数g1和二阶导数g2经过经过同态加密,传给party1,了解同态加密的性质可知,知道加密后的g1和h1,他们加密后再相加的结果等于他们先相加再加密的结果。一阶梯度的和 and二阶梯度的和传过来之后,party1就可以计算loss和gain了,就可以训练了。party1分裂之后,把自己分裂所得的一阶导数和二阶导数经过加密之后传给party2,这样就实现了active party和passive party的通信;

(3)party2 和3的过程同(2);

上面的过程是生成一棵树的过程,后面树的生成过程实质上是重复的。

如何保证主动方的标签信息不会泄漏?

secureBoost提出了completely secureBoost,主要思想是:第一颗树完全由主动方的特征构建,被动方完全不参与,因此,被动方只能接触到经过第一颗树后的残差,相当于做了一个差分隐私。这样就可以保证,主动方的标签基本上不会泄漏(论文中有详细公式证明,而且经过实验验证)。

下面这幅图是从整体上看整颗树构建过程,上面是从算法角度看(如同态加密传递梯度)

我们可以带着问题来看上面的图,在看SecureBoost论文的时候,我想到的几个问题是:

(1)一个结点分裂完了之后,怎么样知道下个结点该谁分裂了,是不是有一个类似于管理员类的角色来全局统筹;

(2)中间的信息真的不会泄漏吗?是真的安全吗

先来回答第一个问题:确实有一个类似于管理员的角色,就是active party 即主动方,有标签的一方,它知道整颗树的结构,但是它只知道自己分裂的结点的具体信息,如字段名,分裂阈值等,对于其他被动方,它只知道,到了这个结点,该你分裂了,但是不知道具体是哪个特征分裂,分裂阈值是多少。

从整体上看,整颗树的结构如上图,实质上这也是主动方手里掌握的结构,但是除了自己的结点,对于其他的结点,他只知道party id(该谁分裂),Record ID(该谁的第几个特征分裂),并不知道具体的含义(重点)。

注:需要提到一点,每个叶子结点只有主动方知道,因为叶子结点的计算需要用到标签(面试考点)。

通过上面的过程,我们就构建了SecoreBoost模型,下面是他的推理过程(预测过程):

这个地方感觉应该挺清楚的,就是输入样本,预测。

三、横向联邦学习

(coming soon...)

参考资料:

1、FedAI官网:https://www.fedai.org/

2、SecureBoost: A Lossless Federated Learning Framework:https://www.fedai.org/research/publications/secureboost-a-lossless-federated-learning-framework/

3、Federated Machine Learning: Concept and Applications:https://www.fedai.org/research/publications/federated-machine-learning-concept-and-applications/

4、FATE github主页:https://github.com/FederatedAI/FATE

  • 11
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值