Voglio discutere alcune intuizioni di alto livello dietro le reti LSTM. Ecco alcune domande per aiutare ad esplorare gli aspetti del perché:
- Perché/quando dovremmo usare una LSTM invece di una rete neurale feed forward (FFNN)?
- Quali sono i pro e i contro delle LSTM e come si confrontano con le FFNN?
- Come si differenziano dalle tradizionali reti neurali ricorrenti (RNN)?
Reti neurali feed forward (FFNN)
Per prima cosa consideriamo una FFNN standard con architettura:
Come probabilmente sapete, questa FFNN prende tre input, li elabora usando lo strato nascosto, e produce due output. Possiamo espandere questa architettura per incorporare più strati nascosti, ma il concetto di base è ancora valido: gli input entrano, vengono processati in una direzione, e vengono emessi alla fine.
Questo concetto è spiegato molto bene in altri articoli, quindi non entrerò molto più nel dettaglio. La condizione principale che separa le FFNN dalle architetture ricorrenti è che gli input di un neurone devono provenire dallo strato precedente a quel neurone.
FFNN Wikipedia
Reti neurali ricorrenti (RNN)
Le reti neurali ricorrenti sono matematicamente molto simili ai modelli FFNN. La loro principale differenza è che la restrizione posta sulle FFNN non è più applicata:
Gli ingressi a un neurone possono provenire da qualsiasi altro strato.
Vedrai spesso questa architettura è spesso “arrotolata” in un’unità ricorrente come la seguente:
Le unità “arrotolate” che potreste vedere nei diagrammi di architettura possono quindi essere ingannevolmente piccole. Quando le srotoli, la rete sarà spesso molto profonda!
RNN Wikipedia
Long-Short Term Memory (LSTM)
Le LSTM sono un tipo speciale di RNN che sono progettate per affrontare il problema del gradiente di fuga/esplosione.
Quando addestri una RNN tradizionale, la rete spesso soffre di gradienti di fuga/esplosione: srotolando una unità ricorrente si ottiene una rete molto profonda! Se si passa attraverso l’algoritmo di backpropagation usando architetture RNN tradizionali, gli strati precedenti diventeranno sempre meno significativi man mano che ci si propaga attraverso la rete. Questo rende le RNN tradizionali inclini a dimenticare le informazioni, in particolare i dati che appaiono molti timestep prima del tempo corrente.
Un esempio di cella LSTM è illustrato come segue:
Questa struttura è simile all’unità tradizionale RNN srotolata, ma la differenza chiave con la LSTM sono i gate: gate di ingresso, gate di uscita e forget gate. La funzione di queste porte è ben descritta dai loro nomi:
- la porta di ingresso controlla i dati che entrano nella cella
- la porta di dimenticanza controlla la misura in cui i dati rimangono all’interno della cella
- la porta di uscita controlla l’uscita della cella attraverso la funzione di attivazione
Questo post su github IO è una grande introduzione alle basi delle LSTM. Fa anche un ottimo lavoro nello spiegare l’intuizione dietro la matematica di un LSTM.
LSTM Wikipedia
Proprietà e un caso d’uso di esempio di RNN
I cicli di feedback prestano le reti neurali ricorrenti meglio alle sfide temporali. Il tempo è incorporato nella loro architettura!
Esaminiamo un esempio:
Forse state usando una rete per predire la prossima parola in una frase. Diciamo che vi vengono dati gli input:
Muoio di fame, Alice guida fino al negozio più vicino per comprare
Una rete neurale ricorrente potrebbe dimenticare la prima parola “morire di fame” mentre una LSTM la propagherebbe idealmente. Una LSTM userebbe quindi il contesto che ha sentito in precedenza nella frase per indovinare “cibo”, mentre una RNN potrebbe indovinare tutto ciò che si compra in un negozio, in particolare data una lunga frase o più frasi.
I meccanismi di gating che permettono questo tipo di memoria è spiegato bene da @StatsSorceress qui: Forget Layer in a Recurrent Neural Network (RNN) –
Le RNN sono progettate per gestire sequenze. Questo può essere usato per analizzare video (sequenze di immagini), scrittura/parlato (sequenze di parole), ecc.
Le LSTM sono progettate per far persistere le informazioni importanti nel tempo. Le RNN spesso “dimenticano” nel tempo.
LeFFNN sono sistemi senza memoria; dopo aver elaborato alcuni input, dimenticano tutto su quell’input. Diciamo, per esempio, che addestriamo una FFNN che prende 5 parole come input e predice il prossimo output. Questo modello riceverebbe quindi l’input dell’esempio precedente:
il negozio più vicino dove comprare .
Questo è chiaramente perdere il contesto, e otterremmo un risultato scadente.
Ora, ci si potrebbe chiedere, cosa succederebbe se facessimo una FFNN che prendesse molti input in modo da includere la parola “fame” nei suoi input? In altre parole, non potremmo aumentare il numero di input di una FFNN per rappresentare sufficientemente i dati precedenti?
La risposta è sì, ma questo metodo è sia inefficiente che spesso poco pratico. Diciamo, per esempio, che abbiamo bisogno di ricordare il contesto di un intero paragrafo indietro. Avremmo bisogno di una FFNN molto grande! Inoltre, come facciamo a sapere quante parole indietro vogliamo come contesto? Sarebbero sufficienti 20? 30? 100? L’architettura LSTM elimina completamente questi problemi lasciando che la rete gestisca una memoria transitoria. Questo problema è esacerbato dalle sfide dell’elaborazione video perché ogni fotogramma richiederà significativamente più input rispetto ai compiti NLP.
Nota, tuttavia, che le unità LSTM sono intrinsecamente più complesse dal punto di vista computazionale rispetto alle unità di una FFNN, quindi il loro addestramento è spesso più difficile e richiede più tempo. Nonostante questi svantaggi, il loro successo nelle sfide dei dati temporali giustifica chiaramente il loro utilizzo rispetto alle FFNN.
.