Un'introduzione alle Reti Neurali Ricorrenti

  • Redazione
  • 04/04/2022
  • Tempo di lettura: 6 minuti

Introduzione

Avete mai usato “Grammarly” o “text summarizer” e vi siete chiesti come fa Grammarly a dirci gli errori grammaticali o come “Siri di Apple” e “Amazon Alexa” a capire quello che dite? C’è un interessante algoritmo che lavora dietro tutte queste applicazioni chiamato “Recurrent Neural Networks” o RNN in breve.

La prima volta che mi sono imbattuto nelle RNN, ero completamente confuso. Come può una NN ricordare le cose? Perché abbiamo bisogno di RNN mentre abbiamo reti neurali feedforward e convoluzionali? Dopo un sacco di ricerche e duro lavoro, sono riuscito in qualche modo a capire questo algoritmo e in questo articolo, voglio trasmettere tutte le mie conoscenze su questo algoritmo in modo che vi sentiate a vostro agio mentre leggete il documento di ricerca attuale.

Rete neurale ricorrente

Iniziamo questo algoritmo con una domanda - “amore vado in palestra a” questo ha senso per voi? Non proprio. Ora leggete questo “amo andare in palestra”, questo ha perfettamente senso. Un po' di confusione nelle parole ha reso la frase incomprensibile. Se un cervello umano non può capire questo, può un computer codificarlo? Avrà davvero difficoltà a gestire frasi del genere.

Dall’esempio di cui sopra, possiamo capire che la sequenza di un testo è molto importante. I dati, in cui l’ordine o la sequenza dei dati è importante, possono essere chiamati dati sequenziali. Il testo, il discorso e i dati delle serie temporali sono alcuni esempi di dati sequenziali.

Perché abbiamo bisogno di RNN mentre abbiamo le Reti Neurali Forward?

Supponiamo di avere alcune recensioni di giocatori di cricket, e il nostro compito è quello di prevedere se la recensione è positiva o negativa. Il primo passo prima di creare un modello è quello di convertire tutte le recensioni (dati testuali) in una forma comprensibile alla macchina. Possiamo usare varie tecniche come One Hot Encoding o tecniche di deep learning come Word2vec.

Frase-1 -> Sachin Tendulkar Leggenda del cricket

Vediamo che il numero totale di parole o token in questa frase è 5.

Allo stesso modo la frase-2 “Lui è grande” ha 3 parole, ma lo strato di input nell’architettura è fisso che è 5. Quindi non c’è un modo diretto per inserire questi dati nella rete. Ora starai pensando che perché non convertiamo ogni frase in una lunghezza uguale a quella della frase con la lunghezza massima aggiungendo degli zeri. Sì, questo potrebbe risolvere il problema ma poi pensate al numero di pesi che la vostra rete avrà, aumenterà sicuramente in modo esponenziale.

Supponiamo che la lunghezza massima di una frase sia 10 (che non è realistico, sarà molto più grande nelle applicazioni del mondo reale).

Sia il numero di parole nel corpus= 10k (considerando un corpus molto piccolo)

Allora ogni input diventerà 100k dimensionale e con solo 10 neuroni nello strato nascosto, il nostro numero di parametri diventa 1 milione! Avere una rete adeguata significa avere miliardi di parametri. Per superare questo abbiamo bisogno di una rete con capacità di condivisione dei pesi.

È qui che entrano in scena le RNN. Usano gli stessi pesi per ogni elemento della sequenza, diminuendo il numero di parametri e permettendo al modello di generalizzare a sequenze di varia lunghezza.

In una rete neurale standard, tutti gli ingressi e le uscite sono indipendenti l’uno dall’altro, tuttavia, in alcuni casi come la previsione della prossima parola della frase, le parole precedenti sono essenziali. Pertanto, è stata creata la RNN che utilizza uno strato nascosto per superare questo problema.

Panoramica del modello RNN

Nel diagramma sopra la parte “Piegata” rappresenta la rete neurale, non le passiamo l’intera frase ma piuttosto una parola e questa parola ci darà un output. Essa produrrà anche una funzione di attivazione che sarà poi passata al passo temporale successivo, come si può vedere nel diagramma. Entrambi questi diagrammi rappresentano la stessa cosa.

Capiamo questo con l’aiuto di un esempio

Supponiamo che stiate facendo un progetto di “Named Entity Recognition”, dove volete predire il nome di un’entità. La frase che passate al vostro modello è “Chirag ha lavorato alla Microsoft in India”. Invece di passare l’intera frase in una volta sola, passeremo solo la prima parola nel nostro modello.

Questa RNN prenderà un’attivazione in ingresso che non è altro che una matrice zero inizialmente (la imparerà gradualmente) e darà una funzione di attivazione in uscita che viene poi passata al timetep successivo.

In t=2, prenderà in input un lavoro e produrrà un’attivazione e un output. Qui 0 significa che non è un’entità. Prenderà poi la terza parola a t=3, continuerà a ripetere il processo fino alla fine della dichiarazione.

Alcune cose da notare qui è che questo è lo stesso blocco che si ripete nel tempo e qui l’ordine in cui passiamo la frase ha importanza, per esempio nel diagramma sopra la previsione “Organizzazione” è fatta non solo considerando la parola Microsoft ma anche considerando tutte le parole che si sono verificate nella frase finora perché stiamo passando ripetutamente le funzioni di attivazione alle successive marche temporali.

Tipi di RNN e loro applicazione

Molti a uno: Supponiamo che vogliate fare un modello che predice la valutazione di un film in base alle sue recensioni (Movie rating prediction). Lì il vostro output sarà sempre uno che è il rating del film e l’input può essere di qualsiasi dimensione, le recensioni possono essere di qualsiasi lunghezza. Alcune altre applicazioni sono l’analisi del sentimento, l’identificazione delle emozioni, ecc.

Da uno a molti: Un esempio potrebbe essere un modello il cui compito è quello di generare un nome di bambino sulla base di un dato input. Per esempio, se passiamo “maschio” come input il nostro modello dovrebbe generare un nome maschile o viceversa. Qui la dimensione dell’input può essere solo una e la dimensione dell’output può essere qualsiasi cosa. Una cosa da notare qui è che l’output di ogni timestamp viene anche passato come input al timestamp successivo ed è così che il modello sa quale carattere si è verificato per primo e quale carattere produrre.

Molti a molti: Nel caso della traduzione linguistica la dimensione dell’input può essere di qualsiasi lunghezza e anche l’output può essere di qualsiasi lunghezza. Per esempio, traduzione dall’inglese al francese. Qui quando tutte le parole di input sono passate solo allora l’output sarà generato (fig-4 nel diagramma sopra). In questo tipo di modello, la prima parte che prende l’input è conosciuta come “Encoder” e la seconda parte che dà l’output è chiamata “Decoder”, capiremo di più su questi due più tardi.

Note finali

Spero che questo articolo vi abbia fornito l’intuizione di base di cui avete bisogno. Nel prossimo articolo, capiremo cosa fa questo modello sotto il cofano, capiremo come funziona il backpropagation in RNN insieme alle descrizioni dettagliate di LSTM e GRU. Per riassumere, abbiamo imparato cosa sono i dati sequenziali e come possiamo fare uso dei dati testuali per realizzare meravigliose applicazioni come il riconoscimento vocale, il generatore di didascalie di immagini, ecc.

Provate a giocare con l’architettura di queste RNN e rimanete stupiti dalle loro prestazioni e applicazioni. Condividete le vostre scoperte e il vostro approccio nella sezione dei commenti.

Ciao, sono Michele!

Sono molto felice di saperti qui.
Ogni giorno ti raccontiamo qualcosa di nuovo sull'AI e sulle nuove tecnologie. Seguici sui social o iscriviti alla newsletter!

Iscriviti alla newsletter!

Iscrivendoti accetti la nostra Privacy Policy

Ti va di rimanere aggiornatə?

Niente spam, niente pubblicità. Ogni tanto una mail. Tutto qui.
(Ah, ovviamente i tuoi dati non verranno mai ceduti)

Iscrivendoti accetti la nostra Privacy Policy