L'idea alla base di Recurrent Neural Network (RNN) mi è chiara. Lo capisco nel modo seguente:
abbiamo una sequenza di osservazioni ( ) (o, in altre parole, serie temporali multivariate). Ogni singola osservazione è un -dimensionale vettore numerico. Nel modello RNN assumiamo che l'osservazione successiva sia una funzione dell'osservazione precedente nonché del precedente "stato nascosto" , dove gli stati nascosti sono anche rappresentati da vettori numerici (le dimensioni degli stati osservati e nascosti possono essere diverse). Si presume anche che gli stati nascosti dipendano dall'osservazione precedente e dallo stato nascosto:
Infine, nel modello RNN, si assume che la funzione sia una rete neurale. Formiamo (adattiamo) la rete neurale usando i dati disponibili (una sequenza di osservazioni). Il nostro obiettivo nella formazione è di essere in grado di prevedere l'osservazione successiva nel modo più accurato possibile utilizzando le osservazioni precedenti.
Ora, la rete LSTM è una modifica della rete RNN. Per quanto ho capito, la motivazione alla base di LSTM è quella di risolvere il problema della memoria corta che è peculiare di RNN (l'RNN convenzionale ha problemi con eventi relativi che sono troppo distanti nel tempo).
Capisco come funzionano le reti LSTM. Ecco la migliore spiegazione di LSTM che ho trovato. L'idea di base è la seguente:
Oltre al vettore di stato nascosto introduciamo un cosiddetto vettore di "stato di cella" che ha le stesse dimensioni (dimensionalità) del vettore di stato nascosto ( ). Penso che il vettore di "stato cellulare" sia stato introdotto per modellare la memoria a lungo termine. Come nel caso dell'RNN convenzionale, la rete LSTM ottiene lo stato osservato e nascosto come input. Usando questo input, calcoliamo un nuovo "stato di cella" nel modo seguente:
dove le funzioni di , e sono modellate da reti neurali. Per semplificare l'espressione, rimuovo semplicemente gli argomenti:
Quindi, possiamo vedere che il nuovo "vettore di stato cellulare" ( ) è una somma ponderata del vecchio vettore di stato ( ) e un vettore di stato di cella "intermedio" ( ). La moltiplicazione tra i vettori è basata sul componente (moltiplichiamo due vettori di dimensione N e otteniamo, di conseguenza, un altro vettore di dimensione N). In altre parole, mescoliamo due vettori di stati cellulari (quello vecchio e quello intermedio) usando pesi specifici dei componenti.
Ecco l'intuizione tra le operazioni descritte. Il vettore di stato della cella può essere interpretato come un vettore di memoria. Il secondo vettore di pesi (calcolato da una rete neurale) è un cancello "keep" (o dimentico). I suoi valori decidono se mantenere o dimenticare (cancellare) un valore corrispondente dal vettore di stato della cella (o vettore di memoria a lungo termine). Il primo vettore di pesi ( ), che viene calcolato da un'altra rete neurale, è chiamato gate "write" o "memorize". Decide se una nuova memoria (il vettore di stato di cella "intermedio") deve essere salvata (o più precisamente, se un particolare componente di essa deve essere salvato / scritto). "Intermedio"vettore). In realtà, sarebbe più preciso affermare che con i due vettori pesi (e) "mescoliamo" il vecchio e il nuovo ricordo.
Quindi, la mia domanda è: perché (o come esattamente) questa architettura risolve il problema?
In particolare non capisco quanto segue:
- Usiamo una rete neurale per generare una memoria "intermedia" (vettore di stato di cella) che viene mescolata con la "vecchia" memoria (o stato di cella) per ottenere una "nuova" memoria (stato di cella). I fattori di ponderazione per la miscelazione sono calcolati anche da reti neurali. Ma perché non possiamo usare solo una rete neurale per calcolare il "nuovo" stato cellulare (o memoria). O, in altre parole, perché non possiamo usare lo stato osservato, lo stato nascosto e la vecchia memoria come input per una rete neurale che calcola la "nuova" memoria?
- Alla fine usiamo gli stati osservati e nascosti per calcolare un nuovo stato nascosto e quindi usiamo la "nuova" memoria dello stato di cella (o memoria (a lungo termine)) per correggere il componente dello stato nascosto appena calcolato. In altre parole, i componenti dello stato della cella vengono utilizzati come pesi che riducono solo i componenti corrispondenti dello stato nascosto calcolato. Ma perché il vettore di stato cellulare viene utilizzato in questo modo particolare? Perché non possiamo calcolare il nuovo stato nascosto inserendo il vettore dello stato della cella (memoria a lungo termine) nell'input di una rete neurale (che prende anche gli stati osservati e nascosti come input)?
Inserito il:
Ecco un video che potrebbe aiutare a chiarire come sono organizzate le diverse porte ("keep", "write" e "read").