Reti neuronali ricorrenti vs ricorsive: qual è la soluzione migliore per la PNL?


48

Esistono reti neurali ricorrenti e reti neurali ricorsive. Entrambi sono generalmente indicati con lo stesso acronimo: RNN. Secondo Wikipedia , le NN ricorrenti sono in realtà NN ricorsive, ma non capisco davvero la spiegazione.

Inoltre, non riesco a trovare quale sia meglio (con esempi o giù di lì) per l'elaborazione del linguaggio naturale. Il fatto è che, sebbene Socher utilizzi NN ricorsivo per la PNL nel suo tutorial , non riesco a trovare una buona implementazione di reti neurali ricorsive e quando cerco su Google, la maggior parte delle risposte riguarda NN ricorrente.

Oltre a ciò, esiste un altro DNN che si applica meglio alla PNL o dipende dall'attività della PNL? Reti per credenze profonde o codificatori automatici impilati? (Non mi sembra di trovare alcun programma di utilità particolare per ConvNets in PNL e la maggior parte delle implementazioni sono pensate per la visione artificiale).

Infine, preferirei davvero le implementazioni DNN per C ++ (meglio ancora se ha il supporto GPU) o Scala (meglio se ha il supporto Spark) piuttosto che Python o Matlab / Octave.

Ho provato Deeplearning4j, ma è in costante sviluppo e la documentazione è un po 'datata e non riesco a farlo funzionare. Peccato perché ha la "scatola nera" come il modo di fare le cose, molto simile a scikit-learn o Weka, che è quello che voglio davvero.

Risposte:


42

Le reti neurali ricorrenti sono ricorrenti nel tempo. Ad esempio se hai una sequenza

x = ['h', 'e', ​​'l', 'l']

Questa sequenza è alimentata da un singolo neurone che ha una singola connessione con se stesso.

Al passaggio 0, la lettera "h" viene fornita come input. Alla fase 1, "e" viene fornita come input. La rete quando aperta nel tempo sarà simile a questa.

RNN

Una rete ricorsiva è solo una generalizzazione di una rete ricorrente. In una rete ricorrente i pesi sono condivisi (e la dimensionalità rimane costante) lungo la lunghezza della sequenza perché come gestiresti i pesi dipendenti dalla posizione quando incontri una sequenza al momento del test di diversa lunghezza rispetto a quella che hai visto al momento del treno . In una rete ricorsiva i pesi sono condivisi (e la dimensionalità rimane costante) in ogni nodo per lo stesso motivo.

Ciò significa che tutti i pesi W_xh saranno uguali (condivisi) e quindi sarà il peso W_hh. Questo semplicemente perché è un singolo neurone che è stato spiegato nel tempo.

Ecco come appare una rete neurale ricorsiva . Rete neurale ricorsiva

È abbastanza semplice capire perché si chiama rete neurale ricorsiva. I figli di ciascun nodo genitore sono semplicemente un nodo simile a quel nodo.

La rete neurale che desideri utilizzare dipende dal tuo utilizzo. Nel blog di Karpathy , sta generando personaggi uno alla volta, quindi una rete neurale ricorrente è buona.

Ma se vuoi generare un albero di analisi, usare una rete neurale ricorsiva è meglio perché aiuta a creare rappresentazioni gerarchiche migliori.

Se vuoi fare il deep learning in c ++, usa CUDA. Ha una buona base di utenti ed è veloce. Non ne so di più, quindi non posso commentare di più.

In Python, Theano è l'opzione migliore perché fornisce una differenziazione automatica, il che significa che quando si formano NN grandi e scomode, non è necessario trovare i gradienti a mano. Theano lo fa automaticamente per te. Torch7 non ha questa funzione.

Theano è molto veloce in quanto fornisce wrapper C al codice Python e può essere implementato su GPU. Ha anche una fantastica base di utenti, che è molto importante durante l'apprendimento di qualcosa di nuovo.


11

Le grandi reti neurali ricorrenti sono considerate forse il modello più potente per la PNL. Un grande articolo scritto da A. Karpathy sulle reti neurali ricorrenti e la modellazione a livello di personaggio è disponibile su http://karpathy.github.io/2015/05/21/rnn-effectiveness/

Avendo provato un gran numero di biblioteche per l'apprendimento profondo (theano, caffe ecc.). Consiglio vivamente l'uso di Torch7 che è considerato lo strumento all'avanguardia per NN e supportato da New York, Facebook AI e Google DeepMind. Torch7 si basa su lua e ci sono così tanti esempi che puoi facilmente familiarizzare. Un sacco di codice può essere trovato su github, un buon inizio sarebbe https://github.com/wojzaremba/lstm .

Infine, la bellezza di lua è che LuaJIT può essere iniettato molto facilmente in Java, Python, Matlab ecc.


2
Suggerisci di leggere il blog di Karpathy. Davvero enorme nel comprendere RNN.
SolessChong

1

Le reti neurali ricorrenti (RNN) si svolgono sostanzialmente nel tempo. Viene utilizzato per gli ingressi sequenziali in cui il fattore tempo è il principale fattore di differenziazione tra gli elementi della sequenza. Ad esempio, ecco una rete neurale ricorrente utilizzata per la modellazione del linguaggio che è stata sviluppata nel tempo. Ad ogni passaggio temporale, oltre all'input dell'utente in quel passaggio temporale, accetta anche l'output del livello nascosto che era stato calcolato nel passaggio temporale precedente.

RNN


Una rete neurale ricorsiva è più simile a una rete gerarchica in cui non vi è davvero alcun aspetto temporale nella sequenza di input ma l'input deve essere elaborato gerarchicamente in un modo ad albero. Ecco un esempio di come appare una rete neurale ricorsiva. Mostra il modo di apprendere un albero di analisi di una frase prendendo in modo ricorsivo l'output dell'operazione eseguita su un pezzo più piccolo del testo.

Reti neurali ricorsive


[ NOTA ]:

LSTM e GRU sono due tipi di RNN estesi con il gate di dimenticanza, che sono molto comuni nella PNL.

LSTM

LSTM e GRU


Formula delle cellule LSTM:

inserisci qui la descrizione dell'immagine

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.