研究ブログ

読んだ論文とか試したライブラリとかを紹介

【論文紹介】A speed-optimized and cache-friendly implementation of stochastic gradient-boosted decision trees for multivariate classification

論文のダウンロード先

[1609.06119] FastBDT: A speed-optimized and cache-friendly implementation of stochastic gradient-boosted decision trees for multivariate classification

論文の内容

Gradient Boosting Decision Treeの高速化を、特徴量の構造を工夫してCPUキャッシュヒットしやすくすることによって、より高速化したという論文。
XGBoostよりシングルコア比較で2.2倍速く,マルチコア比較で3.8倍速い。また他のライブラリ(e.g. xgboost)より推定精度も向上したとのこと。

内容

  • 多クラス分類問題とか、線形問題においてGradient Boosting Decision Treeが最近よく使われている。
  • 本論文では計算処理を最適化、キャッシュ処理の最適化をとくに考慮したFastBSD(の提案手法及び実装)を提案。
  • 高速化手法の具体的な方法は以下の通り
  • 特徴量の整数化、一様分布化
  • CPUキャッシュの特徴を考慮した推定
    • 従来の特徴量のメモリ内での持ち方はstruct of arrays。これをFASTBSDではarray of structs構造を採用。これをやることによってCPUのメモリキャッシュのヒット率を上げる。

f:id:kaita_v:20160926161834p:plain

評価

  • gradient-boosted decision treesを実装したライブラリを評価
    • scikit-learn
    • XGBoost(シングルスレッド)
    • TMVA
    • XGBoost-i7(マルチコア)
    • FastBSD(提案手法)
  • 評価に利用したデータ・セット
    • 100件のデータポイント、35次元の特徴量。人工データ(モンテカルロを利用)
    • データ・セットを各ライブラリ向けのフォーマットに変換
    • ハイパーパラメータは以下の通り
      • depth of the trees = 3
      • number of trees = 100
      • number of features = 35
      • number of training data-points = 500000 • sampling-rate = 0.5
      • shrinkage = 0.1

結果

  • 推定モデルの生成速度

XGBoostよりシングルコア比較で2.2倍速く,マルチコア比較で3.8倍速い
f:id:kaita_v:20160926161922p:plain
f:id:kaita_v:20160926162007p:plain

  • 推定精度

基本的に他の手法を上回る。例外としてはtreeを深くしていった場合。
過学習がおきてしまって精度がxgboostに劣る。理由はxgboostの何らかの過学習対策が寄与している?

f:id:kaita_v:20160926162055p:plain

  • ツールとして実装でできていないこと。
    • Negative Weights
    • 欠損値のサポート
    • 特徴量重要度の表示

所感

  • xgboostを利用してhyperparameterチューニングとかCVとかやると計算が膨大になるので、そういった意味で高速化手法が出てくるのは嬉しい。
  • なぜ精度がよくなるかがいまいち不明。
    • 論文では整数化&特徴量の一様分布化をすることによって、過学習がおきなくなっている、といっているけど確信がないので、追加調査が必要

その他

  • 論文で紹介されている手法の実装

github.com

  • xgboostの人たちの同研究に対する反応

github.com

紹介中の図は論文を引用しています