7 votes

Prédictions par boosting de gradient dans des environnements de production à faible latence ?

Quelqu'un peut-il recommander une stratégie permettant de faire des prédictions à l'aide d'un modèle de boosting de gradient dans un délai de <10-15 ms (plus c'est rapide, mieux c'est) ?

J'ai utilisé R 's gbm mais la première prédiction prend ~50ms (les prédictions vectorielles suivantes sont en moyenne de 1ms, donc il semble y avoir une surcharge, peut-être dans l'appel à la bibliothèque C++). A titre indicatif, il y aura ~10-50 entrées et ~50-500 arbres. La tâche est la classification et j'ai besoin d'accéder aux probabilités prédites.

Je sais qu'il existe de nombreuses bibliothèques, mais j'ai eu peu de chance de trouver des informations, même sur les périodes de prédiction approximatives pour elles. L'apprentissage se fera hors ligne, donc seules les prédictions ont besoin d'être rapides - de plus, les prédictions peuvent provenir d'un morceau de code / d'une bibliothèque qui est complètement séparé de ce qui fait l'apprentissage (tant qu'il y a un format commun pour représenter les arbres).

18voto

Peter Prettenhofer Points 686

Je suis l'auteur du scikit-learn module d'amplification du gradient une implémentation de l'arbre de régression par boostage de gradient en Python. J'ai fait quelques efforts pour optimiser le temps de prédiction puisque la méthode était destinée aux environnements à faible latence (en particulier les problèmes de classement) ; la routine de prédiction est écrite en C, mais il y a quand même un certain surcoût dû aux appels de fonctions Python. Cela dit, le temps de prédiction pour des points de données uniques avec ~50 caractéristiques et environ 250 arbres devrait être << 1ms.

Dans mes cas d'utilisation, le temps de prédiction est souvent déterminé par le coût de l'extraction des caractéristiques. Je recommande fortement le profilage pour identifier la source du surcoût (si vous utilisez Python, je peux recommander ligne_profiler ).

Si la source du surcoût est la prédiction plutôt que l'extraction de caractéristiques, vous pouvez vérifier s'il est possible de faire des prédictions par lot au lieu de prédire des points de données uniques, limitant ainsi le surcoût dû à l'appel de fonction Python (par exemple, dans le classement, vous avez souvent besoin de noter les K premiers documents, vous pouvez donc faire l'extraction de caractéristiques d'abord et ensuite exécuter predict sur la matrice K x n_features.

Si cela n'aide pas non plus, vous devriez essayer de limiter le nombre d'arbres, car le coût du temps d'exécution pour la prédiction est fondamentalement linéaire dans le nombre d'arbres. Il existe un certain nombre de moyens de limiter le nombre d'arbres sans affecter la précision du modèle :

  1. Réglage approprié du taux d'apprentissage ; plus le taux d'apprentissage est faible, plus il faut d'arbres et donc plus la prédiction est lente.

  2. Post-traitement GBM avec régularisation L1 (Lasso) ; Voir Éléments d'apprentissage statistique Section 16.3.1 - utiliser les prédictions de chaque arbre comme de nouvelles caractéristiques et faire passer la représentation par un modèle linéaire régularisé L1 - supprimer les arbres qui n'ont pas de poids.

  3. Mises à jour des poids entièrement correctives ; au lieu de faire la recherche de lignes/mise à jour des poids uniquement pour l'arbre le plus récent, mettre à jour tous les arbres (voir [Warmuth2006] et [Johnson2012]). Meilleure convergence - moins d'arbres.

Si rien de ce qui précède ne fonctionne, vous pouvez étudier les cascades ou les stratégies de sortie anticipée (voir [Chen2012]).

Références :

[Warmuth2006] M. Warmuth, J. Liao et G. Ratsch. Algorithmes de boosting totalement correctifs qui maximisent la marge. Dans les actes de la 23e conférence internationale sur l'apprentissage automatique, 2006.

[Johnson2012] Rie Johnson, Tong Zhang, Learning Nonlinear Functions Using Regularized Greedy Forest, arxiv, 2012.

[Chen2012] Minmin Chen, Zhixiang Xu, Kilian Weinberger, Olivier Chapelle, Dor Kedem, Classifier Cascade for Minimizing Feature Evaluation Cost, JMLR W&CP 22 : 218-226, 2012.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X