Skip to content

HeteroSecureBoost介绍

dylanxu edited this page Aug 20, 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一起决策每个树的预测流程,在新版本中,serving对预测流程做了专门优化,现预测流程如下:

  1. HeteroSecureBoostingTreeGuest 首先执行本地推导,对于所有的树进行遍历,如果某棵树遇到host节点,则将host节点记录;如果所有树都没遇到host节点,则得到叶子节点权重,跳至5。
  2. HeteroSecureBoostingTreeGuest 遇到的host节点,通过通信通知Host。
  3. Host 接收到推理指令后,执行完整的推理调用逻辑(数据预处理->特征工程->HeteroSecureBoost),完成数据处理后,Host本地提取节点路由,对于该预测的样本,对于所有自身拥有的Host节点,判断该样本的遍历方向(向左还是向右),并把所有的路由方向记录下来。
  4. Host将提取出的路由方向整理发送至Guest
  5. HeteroSecureBoostingTreeGuest继续推理逻辑,由于已经获得Host方发送的路由表,则在后续的推理过程中,遇到任何的Host的节点,都可以知道遍历方向。 Guest从记录的host节点继续往下推导,直至到达叶子节点。
  6. Guest得到每个树的节点编号,利用节点编号索引出叶子权重,经过处理后得到预测结果,并将结果输出,推理流程完成。

当前的HeteroSecureBoost交互次数最坏情况下也仅需要1次数据交换。 另外,HeteroSecureBoost在最新版本中支持批量预测。

HeteroSecureBoost在线推理流程图如下: image