腾讯angel中实现的GBDT解析

看了论文《TencentBoost: A Gradient Boosting Tree System with Parameter Server》,主要从以下三个方面阐述论文思想:
一 ,woker端的工作(其中有一个节点是leader worker主要负责sample features,合并梯度图):
    1.每个worker根据分配到的数据,统计部分特征的分位图,然后把统计的分位图Push到server上。
    2. 从server上Pull下全部特征的分位图,根据分位图确定候选特征值。

    3. 每个worker初始化树结构,并选定一个根节点为active。leader worker选取一些特征push到server上。

    4. worker从server上Pull下来选取的特征,为active node计算梯度图。把计算好的梯度直方图push给server。
    5. leader worker从server端pull下所有的梯度图,计算最佳切分点,并push给server。

  6. worker从server上pull下最佳切分点,根据最佳切分点,划分子树,并置已选节点为unactive。然后开始下一轮的计算梯度图,直至已满足树的深度。

二,server端工作:

1.存储方式:用vector存储,对于稀疏数据则之间存储非零值的索引。

 2.参数空间的划分:range-hash混合存储。先根据索引划分几个范围,每个范围内通过哈希映射确定每个服务器负责的参数范围。

三,网络结构优化

  1为计算最佳切分点是高维操作,仅仅由leader worker一个节点计算效率太低,为了加快获得最佳切分点的速度,有两个地方可以优化。
   (1)针对worker端 Round-robin work partition。采用轮询策略,确定每个worker所负责的候选特征值。每个woker在自己所负责的特征值内,寻找最佳特征切分值。
  (2) 针对server端 Sparse pull。假设有P个分区,每个分区中含有K个特征,通过pull操作循环依次获取每个特征的梯度图,以确定这K个特征的最佳切分点。将结果以split feature/split value/gain的向量形式传递给worker。worker获得P个最佳值后,再从这P个特征值中选择一个最佳切分点最为最终的结果。(本质上是分而治之的思想)从而节约了数据存储以及数据传输。

针对论文里面的实验结果,很多人有争议,可以查看这里https://github.com/Tencent/angel/issues/7


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值