低レイテンシの本番環境での勾配ブースティング予測?

Source machine-learning classification

<10〜15msの範囲(速いほど良い)の勾配ブースティングモデルを使用して予測を行うための戦略を誰かが推奨できますか?

私はRgbmパッケージを使用していますが、最初の予測には最大50ミリ秒かかります(後続のベクトル化された予測は平均1ミリ秒なので、おそらくC++ライブラリの呼び出しでオーバーヘッドがあるようです)。ガイドラインとして、最大10〜50の入力と最大50〜500のツリーがあります。タスクは分類であり、予測された確率にアクセスする必要があります。

そこにはたくさんの図書館があることは知っていますが、それらの大まかな予測時間でさえ情報を見つけることができませんでした。トレーニングはオフラインで行われるため、予測のみを高速にする必要があります。また、予測は、トレーニングを行うものとは完全に分離されたコード/ライブラリから取得される場合があります(ツリーを表すための共通の形式がある場合)。 。
推奨答え
私は、PythonでのGradient Boosted RegressionTrees実装であるscikit-learngradient boosting moduleの作成者です。この方法は低遅延環境(特にランキングの問題)を対象としているため、予測時間の最適化にいくらか努力しました。予測ルーチンはCで記述されていますが、Python関数呼び出しによるオーバーヘッドがあります。そうは言っても、最大50の特徴と約250のツリーを持つ単一のデータポイントの予測時間は<< 1msである必要があります。

私のユースケースでは、予測時間は特徴抽出のコストによって左右されることがよくあります。オーバーヘッドの原因を特定するためにプロファイリングを強くお勧めします(Pythonを使用している場合は、line_profilerをお勧めします)。

オーバーヘッドの原因が特徴抽出ではなく予測である場合、単一のデータポイントを予測する代わりにバッチ予測を実行できるかどうかを確認して、Python関数呼び出しによるオーバーヘッドを制限できます(たとえば、ランキングでは、多くの場合、上位をスコアリングする必要があります- Kドキュメント。最初に特徴抽出を実行してから、K xn_features行列でpredictを実行できます。

これでも問題が解決しない場合は、ツリーの数を制限してみてください。予測の実行時コストは基本的にツリーの数に比例するためです。
モデルの精度に影響を与えずにツリーの数を制限するには、いくつかの方法があります。
  • 学習率の適切な調整。学習率が小さいほど、より多くのツリーが必要になるため、予測が遅くなります。
  • L1正則化を使用した後処理GBM(Lasso); Elements of Statistical Learningセクション16.3.1を参照してください-各ツリーの予測を新しい機能として使用し、L1正則化線形モデルを介して表現を実行します-重みがないツリーを削除します。
  • 完全に修正された重みの更新。最新のツリーに対してのみライン探索/重みの更新を行う代わりに、すべてのツリーを更新します([Warmuth2006]および[Johnson2012]を参照)。より良い収束-より少ない木。

  • 上記のいずれもうまくいかない場合は、カスケードまたは早期出口戦略を調査できます([Chen2012]を参照)。

    参照:

    [Warmuth2006] M. Warmuth、J。Liao、およびG.Ratsch。マージンを最大化する完全に修正されたブースティングアルゴリズム。 2006年の機械学習に関する第23回国際会議の議事録。

    [Johnson2012] Rie Johnson、Tong Zhang、正則化された貪欲な森を使用した非線形関数の学習、arxiv、2012年。

    [Chen2012] Minmin Chen、Zhixiang Xu、Kilian Weinberger、Olivier Chapelle、Dor Kedem、機能評価コストを最小化するための分類子カスケード、JMLR W&CP 22:218-226、2012。

    関連記事

    Python2.3で文字列のリストを最後のN文字で並べ替える
    WebGLで複数のテクスチャを使用するにはどうすればよいですか?
    単一パーセプトロン-非線形評価関数
    TensorFlow SparseCategoricalCrossentropyはどのように機能しますか?
    Tensorflow.jsのメモリリーク:未使用のテンソルをクリーンアップする方法は?