騰訊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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章