62 votos

Redes neuronales recurrentes y recursivas: ¿Qué es mejor para la PNL?

Existen redes neuronales recurrentes y redes neuronales recursivas. Ambas se suelen denominar con el mismo acrónimo RNN. Según Wikipedia En realidad, las NN Recurrentes son NN Recurrentes, pero no entiendo muy bien la explicación.

Además, no encuentro cuál es mejor (con ejemplos o así) para el Procesamiento del Lenguaje Natural. El caso es que, aunque Socher utiliza NN Recursivas para PNL en su tutorial No puedo encontrar una buena implementación de redes neuronales recursivas, y cuando busco en Google, la mayoría de las respuestas son sobre NN Recurrentes.

Además, ¿hay alguna otra DNN que se aplique mejor para la PNL, o depende de la tarea de PNL? ¿Redes de creencia profundas o autocodificadores apilados? (Parece que no encuentro ninguna utilidad particular para las ConvNets en PNL, y la mayoría de las implementaciones son con visión artificial en mente).

Por último, realmente preferiría implementaciones de DNN para C++ (mejor aún si tiene soporte para GPU) o Scala (mejor si tiene soporte para Spark) en lugar de Python o Matlab/Octave.

He probado Deeplearning4j, pero está en constante desarrollo y la documentación está un poco anticuada y no consigo que funcione. Una lástima porque tiene la "caja negra" como la forma de hacer las cosas, muy parecido a scikit-learn o Weka, que es lo que realmente quiero.

54voto

sebnow Puntos 950

Las redes neuronales recurrentes son recurrentes en el tiempo. Por ejemplo, si tienes una secuencia

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

Esta secuencia se introduce en un solo neurona que tiene una única conexión consigo misma.

En el paso de tiempo 0, se da la letra "h" como entrada y en el paso de tiempo 1, se da la letra "e" como entrada. La red, una vez desplegada en el tiempo, tendrá el siguiente aspecto.

RNN

Una red recursiva no es más que una generalización de una red recurrente. En una red recurrente, los pesos se comparten (y la dimensionalidad permanece constante) a lo largo de la longitud de la secuencia, ya que cómo se puede tratar con pesos dependientes de la posición cuando se encuentra una secuencia en el momento de la prueba de longitud diferente a la que se vio en el momento del entrenamiento. En una red recursiva, los pesos se comparten (y la dimensionalidad se mantiene constante) en cada nodo por la misma razón.

Esto significa que todos los pesos W_xh serán iguales (compartidos) y también lo será el peso W_hh. Esto se debe simplemente a que se trata de una única neurona que se ha desdoblado en el tiempo.

Esto es lo que un Red neuronal recursiva parece. Recursive Neural Network

Es bastante sencillo ver por qué se llama Red Neural Recursiva. Los hijos de cada nodo padre son simplemente un nodo similar a ese nodo.

La red neuronal que quieras usar depende de tu uso. En El blog de Karpathy Está generando caracteres de uno en uno, así que una red neuronal recurrente es buena.

Pero si se quiere generar un árbol de análisis sintáctico, es mejor utilizar una red neuronal recursiva porque ayuda a crear mejores representaciones jerárquicas.

Si quieres hacer deep learning en c++, entonces usa CUDA. Tiene una buena base de usuarios y es rápido. No sé más sobre eso así que no puedo comentar más.

En python, Theano es la mejor opción porque proporciona diferenciación automática, lo que significa que cuando estás formando NNs grandes e incómodas, no tienes que encontrar gradientes a mano. Theano lo hace automáticamente por usted. Esta característica no la tiene Torch7.

Theano es muy rápido, ya que proporciona envolturas de C para el código de Python y se puede implementar en las GPU. También tiene una base de usuarios impresionante, lo que es muy importante cuando se aprende algo nuevo.

16voto

Paul Woolcock Puntos 4028

Las grandes redes neuronales recurrentes se consideran quizá el modelo más potente para la PNL. Un gran artículo escrito por A. Karpathy sobre las redes neuronales recurrentes y el modelado a nivel de caracteres está disponible en http://karpathy.github.io/2015/05/21/rnn-effectiveness/

Después de haber probado un gran número de bibliotecas para el aprendizaje profundo (theano, caffe, etc.). Sugiero encarecidamente el uso de Torch7 que se considera la herramienta de vanguardia para NNs y es apoyado por NYU, Facebook AI y Google DeepMind. Torch7 está basado en lua y hay muchos ejemplos con los que te puedes familiarizar fácilmente. Se puede encontrar mucho código en github, un buen comienzo sería https://github.com/wojzaremba/lstm .

Finalmente, la belleza de lua es que LuaJIT puede ser inyectado muy fácilmente en Java, Python, Matlab, etc.

2 votos

Sugiere la lectura del blog de Karpathy. Es muy útil para entender la RNN.

7voto

Benyamin Jafari Puntos 114

Las redes neuronales recurrentes (RNN) se desarrollan básicamente en el tiempo. Se utiliza para entradas secuenciales en las que el factor tiempo es el principal factor de diferenciación entre los elementos de la secuencia. Por ejemplo, aquí tenemos una red neuronal recurrente utilizada para el modelado del lenguaje que se ha desplegado en el tiempo. En cada paso de tiempo, además de la entrada del usuario en ese paso de tiempo, también acepta la salida de la capa oculta que se calculó en el paso de tiempo anterior.

RNN


Una red neuronal recursiva es más bien una red jerárquica en la que realmente no hay ningún aspecto temporal en la secuencia de entrada, sino que ésta debe procesarse jerárquicamente en forma de árbol. Este es un ejemplo de cómo se ve una red neuronal recursiva. Muestra la forma de aprender un árbol de análisis de una frase tomando recursivamente la salida de la operación realizada en un trozo más pequeño del texto.

Recursice Neural Networks


[ NOTA ]:

LSTM y GRU son dos tipos de RNN extendidas con la puerta del olvido, que son muy comunes en la PNL.

LSTM

LSTM and GRU


Fórmula LSTM-Cell:

enter image description here

2voto

keymirro Puntos 16

Para responder a un par de preguntas:

Sin duda, las CNN se utilizan a veces para tareas de PNL. Son una forma de tomar una entrada de lenguaje natural de longitud variable y reducirla a una salida de longitud fija, como la incorporación de una frase. El codificador universal de frases multilingües (USE) de Google es un ejemplo:

Desde que se planteó esta pregunta, se han propuesto varios modelos nuevos para la PNL distintos de los mencionados anteriormente, como los transformadores y los modelos neurales del lenguaje preformados, como BERT y algunos de los otros tipos de USE. https://en.wikipedia.org/wiki/Transformer_(modelo de aprendizaje automático)

-2voto

frankov Puntos 72

No conozco las redes neuronales recursivas. Sólo he visto Redes Neuronales Recurrentes. También he leído sobre las redes feedforward con retardo de tiempo.

Según la implementación pienso usar keras y theano (está en python con soporte CUDA)

Le sugiero que lea este libro: ftp://ftp.sron.nl/pub/antonion/Neural_Networks_-_A_Comprehensive_Foundation_-_Simon_Haykin.pdf

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X