Réseaux de neurones récurrents ou récursifs: quel est le meilleur pour la PNL?

48

Il existe des réseaux de neurones récurrents et des réseaux de neurones récursifs. Les deux sont généralement désignés par le même acronyme: RNN. Selon Wikipedia , NN récurrent est en réalité NN récursif, mais je ne comprends pas vraiment l'explication.

De plus, je ne semble pas trouver ce qui est le mieux (avec des exemples ou à peu près) pour le traitement du langage naturel. Le fait est que, bien que Socher utilise Recursive NN pour la PNL dans son tutoriel , je ne parviens pas à trouver une bonne implémentation des réseaux de neurones récursifs. Lorsque je recherche dans Google, la plupart des réponses portent sur NN récurrent.

De plus, y a-t-il un autre DNN qui s'applique mieux à la PNL ou dépend-il de la tâche de la PNL? Filets de croyances profondes ou autoencodeurs empilés? (Je ne trouve pas d'utilisation particulière pour ConvNets dans la PNL, et la plupart des implémentations sont conçues pour la vision par ordinateur).

Enfin, je préférerais vraiment les implémentations DNN pour C ++ (mieux encore s'il prend en charge le processeur graphique) ou Scala (mieux pour le support Spark) que pour Python ou Matlab / Octave.

J'ai essayé Deeplearning4j, mais il est en développement constant et la documentation est un peu dépassée et je n'arrive pas à le faire fonctionner. Dommage car il a la "boîte noire" comme une façon de faire les choses, tout à fait comme scikit-learn ou Weka, ce que je veux vraiment.

Crscardellino
la source

Réponses:

42

Les réseaux de neurones récurrents sont récurrents dans le temps. Par exemple si vous avez une séquence

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

Cette séquence est transmise à un seul neurone qui possède une seule connexion à lui-même.

Au pas de temps 0, la lettre 'h' est donnée en entrée. Au pas de temps 1, 'e' est donné en entrée. Le réseau une fois déployé au fil du temps ressemblera à ceci.

RNN

Un réseau récursif est juste une généralisation d'un réseau récurrent. Dans un réseau récurrent, les poids sont partagés (et la dimensionnalité reste constante) tout au long de la séquence, car comment traiteriez-vous les poids dépendant de la position lorsque vous rencontrez une séquence au moment du test différente de celle que vous avez vue au moment du train . Dans un réseau récursif, les poids sont partagés (et la dimensionnalité reste constante) à chaque nœud pour la même raison.

Cela signifie que tous les poids W_xh seront égaux (partagés), de même que le poids W_hh. C'est simplement parce que c'est un seul neurone qui s'est déroulé dans le temps.

Voici à quoi ressemble un réseau de neurones récursifs . Réseau de neurones récursifs

Il est assez simple de voir pourquoi on l’appelle un réseau de neurones récursifs. Les enfants de chaque noeud parent sont simplement un noeud similaire à ce noeud.

Le réseau de neurones que vous souhaitez utiliser dépend de votre utilisation. Dans le blog de Karpathy , il génère des personnages un à un, un réseau de neurones récurrent est donc une bonne chose .

Mais si vous souhaitez générer un arbre d'analyse syntaxique, il est préférable d'utiliser un réseau de neurones récursifs, car il permet de créer de meilleures représentations hiérarchiques.

Si vous souhaitez approfondir votre connaissance de c ++, utilisez CUDA. Il a une bonne base d’utilisateurs et est rapide. Je n'en sais pas plus alors je ne peux pas en dire plus.

En python, Theano est la meilleure option car elle fournit une différenciation automatique, ce qui signifie que lorsque vous créez de grands NN difficiles à manipuler, vous n'avez pas à rechercher les dégradés à la main. Theano le fait automatiquement pour vous. Torch7 manque à cette fonctionnalité.

Theano est très rapide car il fournit des wrappers C au code python et peut être implémenté sur des GPU. Il a également une base d'utilisateurs impressionnante, ce qui est très important pour apprendre quelque chose de nouveau.

Azrael
la source
11

Les grands réseaux de neurones récurrents sont peut-être considérés comme le modèle le plus puissant pour la PNL. Un excellent article rédigé par A. Karpathy sur les réseaux de neurones récurrents et la modélisation au niveau des personnages est disponible à l' adresse http://karpathy.github.io/2015/05/21/rnn-effectiveness/

Après avoir essayé un grand nombre de bibliothèques pour un apprentissage en profondeur (theano, caffe, etc.). Je suggérerais fortement d'utiliser Torch7, considéré comme l'outil de pointe pour les NN et soutenu par NYU, Facebook AI et Google DeepMind. Torch7 est basé sur lua et il y a tellement d'exemples que vous pouvez facilement vous familiariser. Beaucoup de code peut être trouvé sur github, un bon début serait https://github.com/wojzaremba/lstm .

Enfin, la beauté de Lua réside dans le fait que LuaJIT peut être injecté très facilement en Java, Python, Matlab, etc.

Yannis Assael
la source
2
Suggérez la lecture du blog de Karpathy. Vraiment beaucoup dans la compréhension de RNN.
SolessChong
1

Les réseaux de neurones récurrents (RNN) se développent essentiellement dans le temps. Il est utilisé pour les entrées séquentielles où le facteur temps est le principal facteur de différenciation entre les éléments de la séquence. Par exemple, voici un réseau de neurones récurrent utilisé pour la modélisation du langage et qui s'est développé au fil du temps. À chaque pas de temps, en plus de l'entrée utilisateur à ce pas de temps, il accepte également la sortie du calque masqué qui a été calculé au pas de temps précédent.

RNN


Un réseau de neurones récursifs ressemble plus à un réseau hiérarchique où la séquence d’entrée n’a pas d’aspect temporel, mais l’entrée doit être traitée hiérarchiquement de manière arborescente. Voici un exemple de l'apparence d'un réseau neuronal récursif. Il montre comment apprendre l’arbre d’analyse d’une phrase en prenant de manière récursive le résultat de l’opération effectuée sur une plus petite partie du texte.

Réseaux de neurones récursifs


[ NOTE ]:

LSTM et GRU sont deux types RNN étendus avec la porte oubliée, qui sont très courants dans la PNL.

LSTM

LSTM et GRU


Formule LSTM-Cell:

entrez la description de l'image ici

Benyamin Jafari
la source