Einbettungen

Angenommen, Sie entwickeln eine App für Essensempfehlungen. Nutzer können darin ihre Lieblingsgerichte eingeben, und die App schlägt ähnliche Speisen vor, die sie mögen könnten. Sie möchten ein Modell für maschinelles Lernen (ML) entwickeln, das die Ähnlichkeit von Lebensmitteln vorhersagt, damit Ihre App qualitativ hochwertige Empfehlungen geben kann („Da Sie Pfannkuchen mögen, empfehlen wir Ihnen Crêpes“).

Sie stellen einen Datensatz mit 5.000 beliebten Gerichten zusammen, um damit Ihr Modell zu trainieren, darunter Borschtsch, Hotdog, Salat, Pizza, und Shawarma.

Abbildung 1: Mehrere Abbildungen von fünf Nahrungsmitteln. Von oben links im Uhrzeigersinn: Borschtsch, Hotdog, Salat, Pizza, Shawarma.
Abbildung 1. Beispiele für Nahrungsmittel, die im Datensatz enthalten sind.

Sie erstellen eine meal-Funktion, die eine one-hot-codierte Darstellung der einzelnen Nahrungsmittel im Datensatz enthält. Codieren bezieht sich auf den Prozess für die Auswahl einer anfänglichen numerischen Darstellung der Daten, anhand der das Modell trainiert wird.

Abbildung 2: Oben: eine Visualisierung der One-Hot-Codierung für Borschtsch.
       Der Vektor [1, 0, 0, 0, ..., 0] wird oberhalb von sechs Kästchen angezeigt, die jeweils von links nach rechts an einer der Vektornummern ausgerichtet sind. Die Kästchen enthalten folgende Bilder (von links nach rechts): Borschtsch, Hotdog, Salat, Pizza, [leer], Schawarma. Mitte: eine Visualisierung der One-Hot-Codierung für Hotdog.
       Der Vektor [0, 1, 0, 0, ..., 0] wird oberhalb von sechs Kästchen angezeigt, die jeweils von links nach rechts an einer der Vektornummern ausgerichtet sind. Die Kästchen enthalten von links nach rechts die gleichen Bilder wie bei der Borschtsch-Visualisierung oben. Unten: eine Visualisierung der One-Hot-Codierung für Shawarma. Der Vektor [0, 0, 0, 0, ..., 1] wird oberhalb von sechs Kästchen angezeigt, die jeweils von links nach rechts an einer der Vektornummern ausgerichtet sind. Die Kästchen enthalten von links nach rechts die gleichen Bilder wie bei der Borschtsch- und bei der Hotdog-Visualisierung.
Abbildung 2. One-Hot-Codierungen von Borschtsch, Hotdog und Schawarma. Jeder One-Hot-Codierungsvektor hat eine Länge von 5.000 (ein Eintrag für jeden Menüpunkt im Datensatz). Die Ellipse im Diagramm steht für die 4.995 nicht angezeigten Einträge.

Stolperfallen bei dünnbesetzten Datendarstellungen

Bei der Durchsicht dieser One-Hot-Codierungen fallen mehrere Probleme mit der Darstellung der Daten auf.

  • Anzahl der Gewichte. Große Eingangsvektoren bedeuten eine hohe Anzahl an Gewichten für ein neuronales Netzwerk. Mit M Einträgen in Ihrer One-Hot-Codierung und N Knoten in der ersten Ebene des Netzwerks nach der Eingabe muss das Modell MxN Gewichte für diese Ebene trainieren.
  • Anzahl der Datenpunkte. Je mehr Gewichte Sie für Ihr Modell verwenden, desto mehr Daten brauchen Sie für ein effektives Training.
  • Rechenleistung. Je mehr Gewichte beinhaltet sind, desto mehr Rechenleistung ist erforderlich, um das Modell zu trainieren und zu verwenden. Die Kapazität Ihrer Hardware kann dabei leicht überschritten werden.
  • Arbeitsspeicher. Je mehr Gewichte Ihr Modell enthält, desto mehr Speicher benötigen die Beschleuniger, die das Modell trainieren und bereitstellen. Diesen Prozess effizient zu skalieren, ist sehr schwierig.
  • Schwierigkeiten bei der Unterstützung von integriertem maschinellen Lernen (On-Device Machine Learning, ODML). Wenn Sie Ihr ML-Modell auf lokalen Geräten ausführen möchten (statt es bereitzustellen), müssen Sie Ihr Modell vorrangig verkleinern und die Anzahl der Gewichte verringern.

In diesem Modul lernen Sie, Einbettungen zu erstellen: dünnbesetzte Datendarstellungen mit weniger Dimensionen, die diese Probleme adressieren.