Rekursive oder rekursive neuronale Netze: Was ist besser für NLP?

48

Es gibt wiederkehrende neuronale Netze und rekursive neuronale Netze. Beide werden normalerweise mit dem gleichen Akronym bezeichnet: RNN. Laut Wikipedia sind Recurrent NN in der Tat Recursive NN, aber ich verstehe die Erklärung nicht wirklich.

Außerdem scheine ich nicht zu finden, was (mit Beispielen oder so) für die Verarbeitung natürlicher Sprache besser ist. Tatsache ist, dass Socher in seinem Tutorial zwar Recursive NN für NLP verwendet , ich aber keine gute Implementierung rekursiver neuronaler Netzwerke finde. Wenn ich in Google suche, beziehen sich die meisten Antworten auf Recurrent NN.

Gibt es außerdem eine andere DNN, die für NLP besser geeignet ist, oder hängt sie von der NLP-Aufgabe ab? Deep Belief Netze oder gestapelte Autoencoder? (Ich finde anscheinend keinen besonderen Nutzen für ConvNets in NLP, und die meisten Implementierungen beziehen sich auf die Bildverarbeitung.)

Schließlich würde ich DNN-Implementierungen für C ++ (besser noch, wenn es GPU-Unterstützung hat) oder Scala (besser, wenn es Spark-Unterstützung hat) lieber als Python oder Matlab / Octave.

Ich habe Deeplearning4j ausprobiert, aber es wird ständig weiterentwickelt und die Dokumentation ist ein wenig veraltet und ich kann es scheinbar nicht zum Laufen bringen. Schade, denn es hat die "Black Box" -ähnliche Art Dinge zu tun, sehr ähnlich wie Scikit-Learn oder Weka, was ich wirklich will.

crscardellino
quelle

Antworten:

42

Wiederkehrende neuronale Netze treten mit der Zeit immer wieder auf. Zum Beispiel, wenn Sie eine Sequenz haben

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

Diese Sequenz wird einem einzelnen Neuron zugeführt, das eine einzige Verbindung zu sich selbst hat.

Zum Zeitpunkt 0 wird der Buchstabe "h" als Eingabe gegeben. Zum Zeitpunkt 1 wird "e" als Eingabe gegeben. Das Netzwerk sieht im Laufe der Zeit so aus.

RNN

Ein rekursives Netzwerk ist nur eine Verallgemeinerung eines wiederkehrenden Netzwerks. In einem wiederkehrenden Netzwerk werden die Gewichte über die gesamte Länge der Sequenz verteilt (und die Dimensionalität bleibt konstant). Wie würden Sie mit positionsabhängigen Gewichten umgehen, wenn Sie zur Testzeit auf eine Sequenz stoßen, die eine andere Länge aufweist als die, die Sie zur Zeit des Zuges gesehen haben? . In einem rekursiven Netzwerk werden die Gewichte an jedem Knoten aus demselben Grund geteilt (und die Dimensionalität bleibt konstant).

Dies bedeutet, dass alle W_xh-Gewichte gleich sind (gemeinsam genutzt werden), und dies gilt auch für das W_hh-Gewicht. Dies liegt einfach daran, dass es sich um ein einzelnes Neuron handelt, das mit der Zeit entfaltet wurde.

So sieht ein rekursives neuronales Netzwerk aus. Rekursives neuronales Netzwerk

Es ist ziemlich einfach zu verstehen, warum es als rekursives neuronales Netzwerk bezeichnet wird. Die Kinder jedes Elternknotens sind einfach ein Knoten, der diesem Knoten ähnlich ist.

Das neuronale Netzwerk, das Sie verwenden möchten, hängt von Ihrer Nutzung ab. In Karpathys Blog generiert er Zeichen nacheinander, sodass ein wiederkehrendes neuronales Netzwerk gut ist.

Wenn Sie jedoch einen Analysebaum generieren möchten, ist die Verwendung eines rekursiven neuronalen Netzwerks besser, da hierdurch bessere hierarchische Darstellungen erstellt werden können.

Wenn Sie in c ++ vertiefend lernen möchten, verwenden Sie CUDA. Es hat eine nette Benutzerbasis und ist schnell. Ich weiß nicht mehr darüber, kann also nicht mehr kommentieren.

In Python ist Theano die beste Option, da es eine automatische Unterscheidung bietet. Dies bedeutet, dass Sie beim Bilden großer, umständlicher NNs keine Farbverläufe von Hand finden müssen. Theano erledigt das automatisch für Sie. Diese Funktion fehlt Torch7.

Theano ist sehr schnell, da es C-Wrapper für Python-Code bereitstellt und auf GPUs implementiert werden kann. Es hat auch eine großartige Benutzerbasis, die sehr wichtig ist, um etwas Neues zu lernen.

Azrael
quelle
11

Große wiederkehrende neuronale Netze gelten als das vielleicht leistungsstärkste Modell für NLP. Ein großartiger Artikel von A. Karpathy über wiederkehrende neuronale Netze und die Modellierung auf Zeichenebene ist unter http://karpathy.github.io/2015/05/21/rnn-effectiveness/ verfügbar.

Ich habe eine große Anzahl von Bibliotheken zum vertieften Lernen ausprobiert (theano, caffe etc.). Ich würde dringend die Verwendung von Torch7 empfehlen, das als das modernste Tool für NNs gilt und von NYU, Facebook AI und Google DeepMind unterstützt wird. Torch7 basiert auf lua und es gibt so viele Beispiele, mit denen Sie sich leicht vertraut machen können. Auf github ist viel Code zu finden, ein guter Anfang wäre https://github.com/wojzaremba/lstm .

Schließlich ist das Schöne an Lua, dass LuaJIT sehr einfach in Java, Python, Matlab usw. injiziert werden kann.

Yannis Assael
quelle
2
Schlagen Sie vor, Karpathys Blog zu lesen. Wirklich hilfreich für das Verständnis von RNN.
SolessChong
1

Rekurrente Neuronale Netze (RNN) entfalten sich im Wesentlichen über die Zeit. Es wird für sequentielle Eingaben verwendet, bei denen der Zeitfaktor der Hauptunterscheidungsfaktor zwischen den Elementen der Sequenz ist. Hier ist zum Beispiel ein wiederkehrendes neuronales Netzwerk, das für die Sprachmodellierung verwendet wird und im Laufe der Zeit entfaltet wurde. Bei jedem Zeitschritt wird zusätzlich zur Benutzereingabe zu diesem Zeitschritt auch die Ausgabe der verborgenen Ebene akzeptiert, die im vorherigen Zeitschritt berechnet wurde.

RNN


Ein rekursives neuronales Netzwerk ähnelt eher einem hierarchischen Netzwerk, in dem die Eingabesequenz keinen zeitlichen Aspekt aufweist, sondern die Eingabe hierarchisch in einer Baumstruktur verarbeitet werden muss. Hier ist ein Beispiel, wie ein rekursives neuronales Netzwerk aussieht. Es zeigt den Weg, einen Analysebaum eines Satzes zu lernen, indem rekursiv die Ausgabe der Operation genommen wird, die an einem kleineren Teil des Textes ausgeführt wird.

Neuronale Netze rekursieren


[ HINWEIS ]:

LSTM und GRU sind zwei erweiterte RNN-Typen mit dem Vergessen-Gate, die in NLP sehr verbreitet sind.

LSTM

LSTM und GRU


LSTM-Zellformel:

Bildbeschreibung hier eingeben

Benyamin Jafari
quelle