Embeddings

Imaginons que vous développez une application destinée à recommander des aliments. Les utilisateurs y indiquent leurs plats préférés et l'application leur suggère des plats similaires qui pourraient leur plaire. Vous souhaitez créer un modèle de machine learning (ML) capable de prédire les similarités entre différents aliments afin que l'application puisse faire des recommandations de haute qualité (par exemple, "puisque vous aimez les pancakes, nous vous recommandons des crêpes").

Pour entraîner votre modèle, vous préparez un ensemble de données sur 5 000 plats populaires, dont le bortsch, le hot dog, la salade, la pizza et le shawarma.

Figure 1. Ensemble d'illustrations de cinq aliments. Dans le sens des aiguilles d'une montre, en partant du haut à gauche : bortsch, hot dog, salade, pizza et shawarma.
Figure 1. Exemples de plats inclus dans l'ensemble de données d'aliments.

Vous créez une caractéristique meal qui contient une représentation avec un encodage one-hot de chacun des plats dans l'ensemble de données. L'encodage désigne le processus visant à choisir une représentation numérique initiale des données sur laquelle entraîner le modèle.

Figure 2. En haut : une visualisation de l'encodage one-hot pour le bortsch.
       Le vecteur [1, 0, 0, 0, ... 0] est affiché au-dessus de six cases, chacune alignée de gauche à droite avec l'un des numéros de vecteur. Les cases, de gauche à droite, contiennent les images suivantes : bortsch, hot dog, salade, pizza, [vide] et shawarma. Au milieu : une visualisation de l'encodage one-hot pour le hot dog.
       Le vecteur [0, 1, 0, 0, ... 0] est affiché au-dessus de six cases, chacune alignée de gauche à droite avec l'un des numéros de vecteur. Les cases contiennent les mêmes images de gauche à droite que pour la visualisation du bortsch ci-dessus. En bas : une visualisation de l'encodage one-hot pour le shawarma. Le vecteur [0, 0, 0, 0, ... 1] est affiché au-dessus de six cases, chacune alignée de gauche à droite avec l'un des numéros de vecteur. Les cases contiennent les mêmes images de gauche à droite que pour les visualisations du bortsch et du hot dog.
Figure 2. Encodages one-hot pour le bortsch, le hot dog et le shawarma. La longueur de chaque vecteur d'encodage one-hot est de 5 000 (une entrée pour chaque plat dans l'ensemble de données). Les points de suspension sur le diagramme représentent les 4 995 entrées non affichées.

Problèmes liés aux représentations de données creuses

En examinant ces encodages one-hot, vous pouvez remarquer plusieurs problèmes concernant cette représentation des données.

  • Nombre de pondérations : plus il y a de vecteurs d'entrée, plus le nombre de pondérations est considérable pour un réseau de neurones. Avec M entrées dans votre encodage one-hot et N nœuds dans la première couche du réseau après l'entrée, le modèle doit entraîner MxN pondérations pour cette couche.
  • Nombre de points de données : plus il y a de pondérations dans votre modèle, plus vous avez besoin de données pour un entraînement efficace.
  • Nombre de calculs : plus il y a de pondérations, plus vous devez effectuer de calculs pour entraîner et utiliser le modèle. Vous pouvez facilement dépasser les capacités de votre matériel.
  • Quantité de mémoire : plus votre modèle contient de pondérations, plus la mémoire nécessaire sur les accélérateurs qui l'entraînent et le servent est importante. Il est donc très difficile de le faire évoluer efficacement.
  • Difficulté de prendre en charge le machine learning sur l'appareil : si vous voulez exécuter votre modèle de machine learning sur des appareils locaux (plutôt que de le servir), vous devrez veiller à réduire sa taille ainsi que le nombre de pondérations.

Dans ce module, vous apprendrez à créer des embeddings, des représentations de données creuses de dimension inférieure, qui répondent à ces problématiques.