Embedding

Immagina di sviluppare un'applicazione di consigli gastronomici, in cui gli utenti inseriscono i loro piatti preferiti e l'app suggerisce piatti simili che potrebbero essere di loro gusto. Vuoi sviluppare un modello di machine learning in grado di prevedere la somiglianza tra i cibi, in modo che la tua app possa offrire consigli di alta qualità ("Dato che ti piacciono i pancake, ti consigliamo le crêpe").

Per addestrare il tuo modello, selezioni un set di dati di 5000 piatti molto amati, tra cui borscht, hot dog, insalata, pizza e shawarma.

Figura 1. Una serie di illustrazioni di cinque cibi. Dall'alto a sinistra
       in senso orario: borscht, hot dog, insalata, pizza e shawarma.
Figura 1. Campionamento dei piatti inclusi nel set di dati dei cibi.

Crei una caratteristica meal che contiene una rappresentazione con codifica one-hot di ciascun piatto nel set di dati. La codifica si riferisce al processo di scelta di una rappresentazione numerica iniziale dei dati su cui addestrare il modello.

Figura 2. In alto: una visualizzazione della codifica one-hot per il borscht.
       Il vettore [1, 0, 0, 0, …, 0] è visualizzato sopra a sei riquadri,
       ciascuno allineato da sinistra
       a destra con uno dei numeri del vettore. I riquadri, da sinistra a destra,
       contengono le seguenti immagini: borscht, hot dog, insalata, pizza, [vuoto] e
       shawarma. Al centro: una visualizzazione della codifica one-hot per l'hot dog.
       Il vettore [0, 1, 0, 0, …, 0] è visualizzato sopra sei riquadri, ciascuno
       allineato da sinistra a destra con uno dei numeri del vettore. I riquadri presentano
       le stesse immagini da sinistra a destra della visualizzazione del borscht
       qui sopra. In basso: una visualizzazione della codifica one-hot per lo shawarma. Il
       vettore [0, 0, 0, 0, …, 1] è visualizzato sopra a sei riquadri, ciascuno allineato
       da sinistra a destra con uno dei numeri del vettore. I riquadri presentano
       le stesse immagini da sinistra a destra delle visualizzazioni del borscht
       e dell'hot dog.
Figura 2. Codifiche one-hot del borscht, dell'hot dog e dello shawarma. Ogni vettore di codifica one-hot ha una lunghezza di 5000 (una voce per ciascuna voce di menu nel set di dati). I puntini di sospensione nel diagramma rappresentano le 4995 voci non mostrate.

Inconvenienti delle rappresentazioni di dati sparsi

Esaminando queste codifiche one-hot, si notano diversi problemi con questa rappresentazione dei dati.

  • Numero di pesi. I vettori di input di grandi dimensioni comportano un numero enorme di pesi per una rete neurale. Con le voci P nella codifica one-hot e i nodi N nel primo strato della rete dopo l'input, il modello deve addestrare PxN pesi per quello strato.
  • Numero dei punti dati. Maggiore è il numero di pesi nel tuo modello, maggiore è il numero di dati che devi addestrare in modo efficace.
  • Quantità di calcolo. Maggiore è il numero di pesi, maggiore è il calcolo richiesto per addestrare e usare quel modello. È facile superare le capacità dell'hardware.
  • Quantità di memoria. Maggiore è il numero di pesi nel tuo modello, maggiore è la memoria richiesta agli acceleratori che lo addestrano e lo gestiscono. Scalare questo processo in modo efficiente è molto difficile.
  • Difficoltà nel supportare il machine learning integrato nel dispositivo. Se vuoi eseguire il tuo modello di machine learning su dispositivi locali (anziché distribuirli), dovrai concentrarti sulla riduzione delle dimensioni del modello e sarà opportuno che tu riduca il numero dei pesi.

In questo modulo imparerai a creare embedding, rappresentazioni a dimensionalità ridotta di dati sparsi, che affrontano queste problematiche.