L’apprentissage automatique est une discipline issue des statistiques qui cherche à effectuer des prédictions. Par exemple, dans un problème de classification : sachant la valeur d’une série de variables, eu égard aux données disponibles, quelle classe attribuer à l’échantillon que l’on vient de recevoir ? Pour ce faire, l’algorithme d’apprentissage extrait des corrélations dans les données qu’il reçoit. L’une des techniques pour y arriver est d’entraîner un réseau de neurones, une idée très vaguement inspirée par la biologie et l’organisation des cerveaux.

Cependant, l’apprentissage risque de patiner dans le cas où le nombre de classes possibles est grand. Par exemple, la classification de spam ne fait appel qu’à deux classes : spam ou pas (“ham”). Au contraire, prédire un produit qu’un consommateur pourrait acheter nécessite de retourner un produit dans le catalogue d’un magasin (de par le monde, Amazon vendrait pas loin de trois milliards de produits différents…). Si on prend un réseau neuronal assez basique, on se retrouve avec au moins deux mille paramètres à apprendre pour chaque produit : dans le cas d’un magasin en ligne de grande taille (cent millions de produits à l’étalage), cela fait deux cent milliards de valeurs numériques à déterminer, presque un téraoctet et demi — sans compter les données sur lesquelles entraîner ce modèle. C’est beaucoup trop ! Surtout que l’entraînement est surtout effectué sur des cartes graphiques, qui ont du mal à dépasser les trente-deux gigaoctets de mémoire pour le moment…

Des chercheurs de l’université Rice, aux États-Unis, ont eu l’idée d’appliquer une série de transformations aléatoires sur les données pour que cet entraînement soit plus facilement réalisable. Ils ont décidé d’appeler leur algorithme MACH (merged average classifiers via hashing). Aléatoirement, les cent millions de classes sont divisées en un certain nombre de seaux (peu nombreux : par exemple, dix ou cinquante), on entraîne alors le réseau neuronal (ou n’importe quel autre algorithme d’apprentissage) à prédire dans quel seau doit aller chaque échantillon (on parle donc de métaclasse).

Formellement, il ne s’agit pas d’une répartition aléatoire, mais selon une fonction de hachage (idéalement, une fonction de hachage a une sortie qui ressemble furieusement à un nombre aléatoire). Ce modèle n’est pas encore utile : il faut répéter ce processus un grand nombre de fois, toujours en créant les métaclasses plus ou moins au hasard. Ensuite, quand on dispose d’un nombre suffisant de modèles, on peut leur demander leur prédiction : la valeur que cet empilement de modèles doit produire est l’élément qui est présent dans toutes les prédictions. (Plus précisément, les chercheurs travaillent avec des probabilités que l’échantillon appartienne à une métaclasse, ce qui permet de gérer le cas où les différents modèles ne prédisent pas des métaclasses qui se superposent : c’est le théorème 1 de leur article.)


Tout l’intérêt de cette approche se situe dans la création arbitraire de métaclasses : les classificateurs à entraîner sont beaucoup plus petits, ce qui règle le problème de la taille du modèle complet. Cependant, il existait déjà des techniques pour gérer des nombres extrêmement importants de classes, comme Parabel, FastXML ou la création de plongements denses (représenter une classe avec quelques variables). Néanmoins, elles souffrent de problèmes de performance : leur découpage n’est jamais assez indépendant (l’entraînement des modèles ne peut pas se faire en parallèle sur des machines ne communiquant pas) ; de plus, MACH effectue de meilleures prédictions (du moins en regardant le rappel et en maintenant la précision à 100 %).


Source : article publié à NeurIPS 2019.