RNN

Dati dei dati sequenziali come input/output, una rete che riceve l’input al tempo t e lo hidden state precedente , e produce in output.
La cosa importante è che non compare un nuovo modello a ogni time stamp. Un singolo set di parametri A viene usato su tutti i time stamp.
La rappresentazione compressa a sinistra si chiama rolled diagram; quella che mostra i time stamp è l’unrolled diagram.

Il diagramma appare come sopra.
- : nuovo vettore di hidden state
- : funzione RNN con parametri W.
- W: matrice di trasformazione lineare
- : vettore di output al time step t.
- Calcolato usando .
- Può essere calcolato a ogni step, o solo alla fine — è flessibile.
- Es. il POS tagging richiede il calcolo a ogni step, mentre l’analisi del sentimento serve solo all’ultimo.

è definita come una funzione non lineare come mostrato sopra. e sono separati da W nella formula, e possono essere intesi come derivati da un’unica matrice W come nella figura sotto.

Poiché la dimensione di è un iperparametro, impostiamola a 2.
Per ricevere e in input e produrre in output, W deve avere forma (2, 5). Perché il prodotto scalare della concatenazione di e con W dà (2,1). Invece di tenere W come (2, 5), possiamo dividerlo al confine tra i cerchi rossi e verdi nella figura. Cioè, e hanno ciascuno il proprio W, e sommando i risultati dei prodotti scalari si ottiene .
Quindi trasforma in , e trasforma in .
Con la stessa logica, trasforma in .
Per la binary classification, sarebbe un vettore 1-dimensionale (scalare). Si applica sigmoid per usare il risultato come probabilità prevista. Per multi-class, la dimensione di è uguale al numero di classi, e si applica softmax per ottenere una distribuzione di probabilità.
Tipi di RNN
Le RNN possono gestire casi in cui uno o entrambi tra input/output sono dati sequenziali.
ref: http://karpathy.github.io/2015/05/21/rnn-effectiveness/
- one to one (rete neurale standard)
- Né input né output sono dati sequenziali, con un singolo time step.
- Stessa struttura di un DNN standard.
- one to many
- L’input non è sequenziale, ma l’output è sequenziale su più time step.
- Solo il primo step ha un input reale; i restanti ricevono tensor tutti a zero.
- Es. Image captioning
- many to one
- L’input avviene a ogni time step, con un singolo output alla fine.
- Es. Sentiment classification
- many to many
- I dati sequenziali vengono inseriti per time step, poi emessi per time step.
- Es. Machine translation
- Input e output a ogni time step.
- Es. Video classification on frame level
- I dati sequenziali vengono inseriti per time step, poi emessi per time step.
Modello linguistico a livello di carattere
Un modello linguistico (language model) predice la prossima parola basandosi sulla sequenza data di caratteri o parole. Può essere eseguito sia a livello di parola che di carattere.
La costruzione di un modello linguistico a livello di carattere procede così:
Esempio di sequenza di training: “hello”
- Costruire un vocabolario unico a livello di carattere. [h, e, l, o]
- I caratteri nel vocabolario vengono rappresentati come vettori one-hot, come nel word embedding. h = [1,0,0,0]
- Inserire “hell” nella RNN in sequenza secondo la formula:

Il punto chiave è che il prossimo carattere deve essere previsto a ogni time step. Quindi la RNN è impostata come many-to-many:

L’output si calcola come:

Si chiama logit perché si usa softmax per la classificazione multi-classe.
Inferenza

Essendo una RNN, l’output di ogni time step può essere usato come input del time step successivo. Quindi basta dare ‘h’ come primo input e lasciare che il resto venga generato automaticamente.
Training sulle opere di Shakespeare
Il metodo usato a livello di carattere può essere applicato anche al testo. Si costruisce un vocabolario a livello di parola, includendo tutta la punteggiatura — virgole, ‘\n’, spazi, tutto. Così si può costruire un semplice language model con RNN.

Man mano che il training procede, le frasi generate a partire da un primo carattere diventano più naturali.
Altri esempi
- Apprendere opere teatrali per distinguere personaggi e battute.
- Addestrare su paper in LaTeX per generare nuovi paper in inferenza.
- Addestrare su codice C per generare codice.
BPTT (Backpropagation through time)
Sarebbe ideale usare tutte le loss per il training, ma le sequenze sono di solito troppo lunghe. Quindi tutti i dati vengono usati per il training, ma la loss viene presa solo da certi segmenti per la backpropagation.
Come funziona la RNN
Si può tracciare come la RNN apprende. L’hidden state contiene tutte le informazioni precedenti al tempo t. Quindi tracciare come l’hidden state cambia rispetto al suo stato iniziale rivela come la RNN apprende.
I risultati qui sotto provengono da LSTM e GRU (non vanilla RNN) e mostrano i cambiamenti dell’hidden state.
Il rosso indica che una cella specifica nell’hidden state diventa più negativa; il blu che diventa più positiva.
Tracciando la cella responsabile del rilevamento delle virgolette nell’hidden state, si ottiene il risultato sopra.
L’hidden state della cella che gestisce gli if statement è cambiato come sopra.
Vanishing/Exploding gradient nelle RNN

La RNN in sé è solida, ma i problemi emergono nella backpropagation. Le formule della RNN coinvolgono la moltiplicazione ripetuta di e il passaggio attraverso funzioni di attivazione. Questa moltiplicazione ripetuta fa sì che i gradienti crescano senza limiti se maggiori di 1, o si riducano verso zero se minori di 1.

Per un esempio semplice, pensiamo a W come uno scalare. Per ottenere il gradiente di h3, si differenzia. Calcolare il gradiente rispetto a h1 richiede di applicare la regola della catena 3 volte, e (valore 3) viene moltiplicato 3 volte come parte del gradiente. Per una sequenza più lunga, il gradiente sarebbe proporzionale a una potenza ancora maggiore di 3. Se fosse minore di 1, i valori si ridurrebbero drasticamente.
Il risultato è che il valore generato in h3 dovrebbe propagarsi bene fino a h1, ma invece i gradienti convergono verso infinito o zero.