-
Notifications
You must be signed in to change notification settings - Fork 78
HeteroSecureBoost介绍
dylanxu edited this page Aug 20, 2020
·
5 revisions
HeteroSecureBoost 为纵向联邦SecureBoost在线推理的实现过程,与离线不同的是,目前serving只支持单个host的预测。
它主要包含3个文件"HeteroSecureBoost", "HeteroSecureBoostingTreeGuest", "HeteroSecureBoostingTreeHost",下面对这三个文件展开说明
HeteroSecureBoost是HeteroSecureBoostingTreeGuest和HeteroSecureBoostingTreeHost的模型基类,该基类提供了模型的初始化、层次遍历等功能。
- HeteroSecureBoost继承自BaseModel类,BaseModel类为所有模型的基类,所有算法模型必须继承该类和实现相关接口,用于统一的调度。
- 模型初始化:InitModel函数,功能是对输入的Meta和Param两个序列化的模型文件进行反序列话,同时,初始化相关的类属性,初始化的内容包括:
treeNum: 树的数量
initScore: boost的初始化得分,具体可参考FATE离线建模文档
trees: 具体的树信息列表,可参考对应的DecisionTreeModelParam numClasses: 多少类,二分类问题为2,多分类问题则为具体分类数,回归问题为0,通过该字段可以判断具体建模任务类型
classes: 类别标签,对于分类问题,用预测的结果下表去索引真正的分类标签 treeDim: boost的每轮树的数量,对于回归和二分类等于1,对于多分类,是类别数量,每轮每个分类都有一个对应的树 learningRate: 学习率和权重放缩因子,推理时每个树得到的权重都会乘以learning_rate。 - 功能函数说明:
a. getSite: 离线的时候,每个树节点的域信息是$role:$partyid,如host:10000,通过该函数获取$role b. generateTag: 用来存储和读取每轮使用的数据,用法在下面辉介绍 c. gotoNextLevel: 输入当前的树、节点编号,特征值,输出树的下一层节点编号
HeteroSecureBoostingTreeGuest 和 HeteroSecureBoostingTreeHost是 party guest 和host对应的实现代码,其中party guest收到请求后,会执行推理过程,与此同时,需要与host一起决策每个树的预测流程,在新版本中,serving对预测流程做了专门优化,现预测流程如下:
- HeteroSecureBoostingTreeGuest 首先执行本地推导,对于所有的树进行遍历,如果某棵树遇到host节点,则将host节点记录;如果所有树都没遇到host节点,则得到叶子节点权重,跳至5。
- HeteroSecureBoostingTreeGuest 遇到的host节点,通过通信通知Host。
- Host 接收到推理指令后,执行完整的推理调用逻辑(数据预处理->特征工程->HeteroSecureBoost),完成数据处理后,Host本地提取节点路由,对于该预测的样本,对于所有自身拥有的Host节点,判断该样本的遍历方向(向左还是向右),并把所有的路由方向记录下来。
- Host将提取出的路由方向整理发送至Guest
- HeteroSecureBoostingTreeGuest继续推理逻辑,由于已经获得Host方发送的路由表,则在后续的推理过程中,遇到任何的Host的节点,都可以知道遍历方向。 Guest从记录的host节点继续往下推导,直至到达叶子节点。
- Guest得到每个树的节点编号,利用节点编号索引出叶子权重,经过处理后得到预测结果,并将结果输出,推理流程完成。
当前的HeteroSecureBoost交互次数最坏情况下也仅需要1次数据交换。 另外,HeteroSecureBoost在最新版本中支持批量预测。
HeteroSecureBoost在线推理流程图如下: