Domande quando si passa dalla rete neurale alla vaniglia alla rete neurale ricorrente


8

Di recente ho imparato come funzionerebbe una rete neurale vanilla, con un determinato numero di input, nodi nascosti e lo stesso numero di output degli input.

Ho esaminato vari post ora correlati alla rete neurale ricorrente e capisco il concetto alla base, ma non riesco a capire alcune parti della logica dietro l'RNN.

Ecco quattro domande principali che ho:

  1. Come funziona la retro-propagazione nella rete neurale ricorrente?
  2. I pesi che portano dall'input ai nodi nascosti sono gli stessi per ogni altro passaggio? Che dire dei pesi dai nodi nascosti alle uscite?
  3. Come funzionano esattamente i pregiudizi in una rete neurale ricorrente?
  4. Perché la funzione tanh viene solitamente utilizzata al posto della funzione sigmoide come funzione di attivazione?

Mi rendo conto che alcune di queste domande sono molto basilari, ma credo che le basi siano esattamente ciò di cui ho bisogno in questo momento.

Anche i collegamenti a video o post correlati saranno estremamente utili, così come le parole chiave di Google che mostrano i risultati giusti. Queste quattro domande mi impediscono di comprendere i codici Python di esempio, quindi ho davvero bisogno di aiuto.


"lo stesso numero di uscite degli ingressi". Aspetta cosa? Fai attenzione: non capita spesso di imbatterti in una NN in cui la tua affermazione sarebbe vera. Questi numeri possono variare notevolmente e non riesco a pensare all'ultima volta in cui ho lavorato su un NN in cui i miei input e output corrispondevano esattamente. I tuoi input sono qualunque cosa tu voglia che siano basati sulle funzionalità disponibili, i tuoi output dipendono dalla risposta che stai cercando di ottenere (binario, classificazione, ecc.). Molto raro avere quei due match up.
I_Play_With_Data

Risposte:


3

Questa domanda arriva ad alcune qualità molto importanti di RNN e DNN in generale. Risponderò a ciascuna delle tue domande secondarie, anche se non nello stesso ordine (cercherò di evidenziare dove lo faccio)

Condivisione dei parametri

Innanzitutto, la qualità più importante degli RNN si chiama condivisione dei parametri . I dati sequenziali vengono in genere immessi in livelli separati. Per un input di lunghezza 20, una rete RNN avrebbe 20 layer. Gli stessi parametri interni sono usati per ogni strato, quindi tutti e 20 gli strati usano gli stessi pesi e bias . Confronta questo con un percettrone multistrato che avrebbe 20 pesi e distorsioni separati.Wb

La condivisione dei parametri ha diversi vantaggi:

  • Ora abbiamo molti meno parametri. C'è 1 blocco ripetuto invece di 20 livelli separati. Una riduzione di 20x!
  • Questo moltiplica efficacemente i dati di allenamento. Il livello ricorrente impara da ogni parola in una singola frase di esempio mentre ogni livello in una MLP impara da una singola parola per frase.
  • La nostra rete è ora molto più flessibile. Possiamo allenarci su frasi fino a 20 parole e quindi generalizzare a una frase di 25 parole aggiungendo più passaggi o utilizzando un RNN dinamico

Architettura di rete

Chiedete delle attivazioni tanh e sigmoid. Per rispondere a questo dobbiamo parlare di architetture RNN specifiche. Il semplice RNN discusso sopra ha un'unica attivazione. I semplici RNN tendono a creare il problema dei gradienti di fuga (o che esplodono!) A causa della ripetuta applicazione degli stessi pesi e funzione di attivazione.

I blocchi RNN con gate (come GRU e LSTM) utilizzano meccanismi di gating per passare attivazioni dentro e fuori dagli stati di memoria e per combinare gli stati di memoria con l'input per generare l'output di ciascun blocco. Per questo motivo, le porte possono impedire al gradiente di propagarsi all'indietro. Sigmoid è una funzione di attivazione comune per cancelli perché schiaccia le attivazioni su (0,1) --- 0 interrompe completamente l'attivazione e 1 la lascia passare. Tuttavia, qualsiasi funzione di attivazione decente con un profilo di compressione simile funziona. Aneddoticamente, il sigmoide duro è abbastanza comune in questi giorni.

Oltre alle porte, i blocchi RNN con gate hanno uno stato interno per il quale l'attivazione varia un po '. Poiché il gating limita il backprop a gradiente, abbiamo molta flessibilità su questa attivazione. Non deve essere schiacciato per esempio, ed è qui che si vedono spesso le attivazioni di rettifica (relu, elu, islu, ecc.). Tanh è anche una scelta perfettamente sensata.

Per quanto riguarda distorsioni e pesi, ogni attivazione in una cella RNN ha in genere il suo peso e la sua propensione. Quindi un GRU ha 3 attivazioni (nascosto, aggiorna e ripristina) e ognuna ha il suo peso e la sua propensione. Tuttavia, ricorda che come RNN, ognuno di questi viene riutilizzato per ogni timestep.

Passaggio all'indietro

Questo copre abbastanza bene il passaggio in avanti ma fai anche una domanda importante su come l'errore si propaga all'indietro. Esistono due metodi per avvicinarsi a questo.

Forzatura dell'insegnante

Per gli RNN che generano una previsione in ogni fase (come la previsione del risultato delle fasi successive, traduzione o riconoscimento dei fonemi), la forzatura dell'insegnante è un metodo per isolare ogni fase dell'RNN. Rimuovendo queste dipendenze, Teacher Forcing consente a RNN di utilizzare il backprop convenzionale con la regola della catena.

Ma come funziona? Le reti di forzatura degli insegnanti hanno architetture di treni e prove separate. Per l'allenamento, ad ogni timestep , l'ingresso viene concatenato con il target precedente, . Immagina questo per una rete incaricata di prevedere il seguente personaggio. La rete ha appena tentato di prevedere il personaggio per il precedente timestep. Ma invece usiamo il personaggio osservato in quel momento (lo sappiamo perché siamo nella fase di addestramento). Così l'errore al passo temporale dipende solo dal valore osservato in e l'ingresso a . Abbiamo quindi rimosso tutte le connessioni nel tempo dalla rete.txtyt1tt1t

Al test, non conosciamo il vero valore ad ogni timestep, quindi sostituiamo con l'output del layer precedente . In questo caso, le connessioni temporali sono tornate, ma solo per la fase di test.yt1ot1

Propagazione indietro nel tempo

Ma non dobbiamo ricorrere al forzante degli insegnanti. La propagazione retroattiva nel tempo ci consente di applicare l'algoritmo backprop agli RNN. Considerare la rete con timestep e input , stato nascosto , output e valore osservato per ciascun timestep.nxhoy

BPTT funziona nei seguenti passaggi.

  1. Calcola il gradiente per ogni coppia . (Questo può essere fatto tutto in una volta.)otot,yt
  2. Calcola il gradiente per ogni timestep, iniziando dall'ultimo timestep e procedendo iterativamente all'indietro. (Questo deve essere fatto uno alla volta.)ht
  3. Questo ci dà bordi per ogni parametro interno del nostro RNN. Il trucco per aggiornare i parametri è trovare il contributo del gradiente per ogni timestep (es. anche se abbiamo solo un ) e quindi sommare quei gradienti per aggiornare i parametri interni.n WtW

Ulteriori letture

Consiglio vivamente il capitolo 10 di Goodfellow, Bengio e Courville's Deep Learning per ulteriori informazioni sugli RNN. Inoltre, il libro RNN di Graves è fantstic per dettagli di livello superiore

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.