笔记:VF2Boost
VF2Boost: Very Fast Vertical Federated Gradient Boosting for Cross-Enterprise Learning
优化现有的SecureBoost方案,实现速度和规模的提升
场景
两企业持有两个数据集,列属性(特征)不同,有部分行(实例)重叠,且只有B方持有标签。目标是在数据不互通的情况下训练模型
1 GBDT
梯度提升决策树:通过训练一群弱学习者得到一系列决策树,然后利用提升的策略对模型进行改进
1.1 损失函数
对第t棵树来说,目的是最小化损失函数:
Friedman提出的一种实现是
其中gi是梯度,hi是黑塞(二阶导)
1.2 最佳分割
决策树的分割【深入浅出理解决策树算法(一)-核心思想——忆臻】
每一次子结点的产生,是由于在当前层数选择了不同的特征来作为我的分裂因素造成的。比如下图用红色三角形表示选择的特征
每一层选择了指定的特征之后,我们就可以继续由该特征的不同属性值进行划分,依次一直到叶子结点。
为什么在第一次选择特征分裂的时候,不选择触感呢?而是选择纹理,比如如下:
不换成触感,或者其它特征为什么也不行呢?为什么选择的是纹理,**这是以什么标准来选择特征的?**这就是我们要说的决策树的关键步骤是分裂属性。
所谓分裂属性就是在某个节点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂子集尽可能地“纯”。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别。
GBDT的分割
决策树的决策依据是根据某个特征进行分割,为了决定以哪个特征作为决策树的分割点,需要对每个可能的分割计算其分割收益,选择分割收益最大的分割点
2. SecureBoost过程
-
gradient statistics encryption and communication
B根据每棵树的预测值计算出梯度和黑塞矩阵(二阶导),将其同态加密发送给A
-
Histogram construction:
A和B根据自身的实例的特征,在直方图对应位置累加梯度和二阶导,构造直方图
-
Histogram communication and decryption
A将加密的直方图发送给B,B解密后统计并计算最佳分割点
2.1 bottleneck
当前的实现为串行实现,执行1时,A闲逛;建造直方图时,B速度较快,建造完后闲逛等待A建造完
- A等待B进行加解密操作
- A构造直方图时为同态密文加法,两个不同指数的数相加,需要放缩操作,开销很大
3 系统架构
- 针对梯度加密,提出了blaster-style encryption
- 针对直方图构建,提出了re-ordered histogram accumulation
- 针对直方图发送,提出了histogram packing
- 针对分割点寻找,提出了optimistic node-splitting strategy
3.1 系统实现
- 生产友好:使用apache spark–一个分布式引擎
- 规模和鲁棒性:消息队列
- 高性能:开发了一个高效的paillier加密库
3.2 Concurrent training protocol
-
blaster-style encryption scheme
利用A闲逛的时间,将训练实例分成小batch,然后独立地处理它们。如此,B的加密、密文传输、直方图构造三者可以并行执行,也缓解了网络拥堵
-
optimistic node-splitting strategy
B乐观地根据自身的特征进行分割点寻找和节点分割,然后进行下一层的分割点寻找,当A建造完成自身的直方图后,按照B的分割点进行分割。若B接收到A的直方图后汇总时发现最佳分割点在A,则A放弃当前分割,并按最佳分割点进行分割
3.3 Customized Cryptography for GBDT
-
re-order accumulation technique
根据同态加密数的指数调整同态加密算子的先后顺序,以减少放缩操作次数
-
Polynomial-based histogram pack
将量化值编码到 一个整数中 ,将t个整数为 一批编码到多项式中,然后对整数进行传输和HE操作,操作效率可以提升t倍(类似BatchCrypt)
总结
这篇文章分析现有的SecureBoost方案,从通信方式和加密操作两方面进行了改进,实现了实现速度和规模的提升
由于之前没有了解过决策树相关概念,此次只是做了简单的了解,文中的方法倒是比较好理解