Skip to content

HeteroSecureBoost介绍

FanTao edited this page Feb 25, 2020 · 5 revisions

HeteroSecureBoost 在线推理

HeteroSecureBoost 为纵向联邦SecureBoost在线推理的实现过程,与离线不同的是,目前serving只支持单个host的预测。
它主要包含3个文件"HeteroSecureBoost", "HeteroSecureBoostingTreeGuest", "HeteroSecureBoostingTreeHost",下面对这三个文件展开说明

HeteroSecureBoost

HeteroSecureBoost是HeteroSecureBoostingTreeGuest和HeteroSecureBoostingTreeHost的模型基类,该基类提供了模型的初始化、层次遍历等功能。

  1. HeteroSecureBoost继承自BaseModel类,BaseModel类为所有模型的基类,所有算法模型必须继承该类和实现相关接口,用于统一的调度。
  2. 模型初始化:InitModel函数,功能是对输入的Meta和Param两个序列化的模型文件进行反序列话,同时,初始化相关的类属性,初始化的内容包括:
    treeNum: 树的数量
    initScore: boost的初始化得分,具体可参考FATE离线建模文档
    trees: 具体的树信息列表,可参考对应的DecisionTreeModelParam numClasses: 多少类,二分类问题为2,多分类问题则为具体分类数,回归问题为0,通过该字段可以判断具体建模任务类型
    classes: 类别标签,对于分类问题,用预测的结果下表去索引真正的分类标签 treeDim: boost的每轮树的数量,对于回归和二分类等于1,对于多分类,是类别数量,每轮每个分类都有一个对应的树 learningRate: 学习率和权重放缩因子,推理时每个树得到的权重都会乘以learning_rate。
  3. 功能函数说明:
    a. getSite: 离线的时候,每个树节点的域信息是$role:$partyid,如host:10000,通过该函数获取$role b. generateTag: 用来存储和读取每轮使用的数据,用法在下面辉介绍 c. gotoNextLevel: 输入当前的树、节点编号,特征值,输出树的下一层节点编号

HeteroSecureBoostingTreeGuest and HeteroSecureBoostingTreeHost

HeteroSecureBoostingTreeGuest 和 HeteroSecureBoostingTreeHost是 party guest 和host对应的实现代码,其中party guest收到请求后,会执行推理过程,与此同时,需要与host一起决策每个树的预测流程,下面给出具体说明。

  1. HeteroSecureBoostingTreeGuest 发起推理指令给host
  2. Host 接收到推理指令后,执行完整的推理调用逻辑(数据预处理->特征工程->HeteroSecureBoost),当首次调用HeteroSecureBoostingTreeHost的predict函数时,host方直接将上游组件的特征数据保存到数据库中。
  3. HeteroSecureBoostingTreeGuest继续推理逻辑,首先对每个树进行遍历,等每个树遍历完成之后,如果treeLocation为空,进入5,否则进入4。 遍历规则是:
    a. 如果到达了叶子节点,则记录下节点编号,停止遍历。
    b. 否则如果该点属于guest方,则使用自身特征数据判断下一层节点的走向,重复该过程直到碰到节点为host方或者走到了叶子节点。 c. 如果该点属于host方,则将(treeId, treeNodeId)保存至treeLocation
  4. Guest给Host发送treeLocation,host接收到后,从数据库中取出特征数据,然后遍历树集合,将结果反馈给guest,guest得到结果后,返回3
  5. Guest得到每个树的节点编号,利用节点编号索引出叶子权重,经过处理后得到预测结果,并将结果输出,推理流程完成。

当前的HeteroSecureBoost交互次数最坏可能达到树的深度,未来我们会进一步对此优化。
相关的推理流程图参考如下:
HeteroSecureBoost在线推理流程图