¿Cuál es una explicación simple de una red neuronal recurrente?

¿Sencillo? Seguro.

Si ya sabe qué es una red neuronal tradicional:

Un RNN simplemente usa fuentes de entrada anteriores dentro de los cálculos. Digamos que está analizando la escritura a mano, puede predecir palabras y letras futuras mucho mejor si recuerda las letras anteriores. Si está muy seguro de que la persona escribió “ganar”, puede usar eso para ayudar a descifrar las futuras w, i y n, ya que probablemente se parecerán mucho a los caracteres utilizados en esa palabra.

Si no sabe qué es una red neuronal, agregue lo anterior a la explicación a continuación:

Tienes un montón de puntos en ese clásico diagrama de red neuronal que has visto:

Parece complejo BS? Estoy de acuerdo…

Como ejemplo, nuestra red tomará una muestra de voz como entrada y dará salida a la ubicación de acento.

Los puntos (“nodos”) están conectados a otros puntos y representan información. Puede tratarse de cualquier tipo de información recopilada, como “el espacio entre palabras en la muestra de voz coincide significativamente con el acento de Manhattan” o “la cadencia suena hispana”. Estas salidas, si se alcanzan, son las entradas para la siguiente capa.

Para que una conexión de punto (la flecha de uno a otro) se “dispare”, se debe cumplir el umbral de una función de activación. Digamos que para un acento británico, el rango de tono generalmente varía en una octava completa: la función de activación calcula el rango de tono, y si está por encima de un umbral, dispara la ruta al nodo “el rango de tono suena británico”. Si no, no vayas!

Las conexiones pueden tener pesos, lo que significa la importancia de esa conexión: si los acentos británicos son uno de los pocos acentos que tienen una octava completa, y la muestra tiene ese rango, ¡hay una alta probabilidad de que el acento ingresado sea británico! Dale a esa conexión un alto peso.

Digamos que la siguiente capa verifica la redondez de las sílabas. Usando los resultados de la primera capa como entradas, crea funciones / pesos para la siguiente capa. Y el siguiente … hasta que toda la información que desee esté suficientemente explicada.

Al final, llega al punto de salida, donde su programa toma la decisión. Esta última parte analiza los resultados para determinar el acento más probable.

Con buenos pesos, funciones de activación sólidas y muchos datos de entrenamiento (que pueden usarse para ayudar a establecer sus pesos), el programa puede determinar con precisión los resultados.

Explicación más fácil: busque la “Red Elman”, que es la red neuronal recurrente más fácil de entender. Hay una sección sobre redes de Elman en este artículo: Red neuronal recurrente – Wikipedia.

En pocas palabras: en una red neuronal recurrente almacenamos las activaciones de salida de una o más de las capas de la red. A menudo, estas se ocultan activaciones posteriores. Luego, la próxima vez que enviemos un ejemplo de entrada a la red, incluiremos las salidas almacenadas previamente como entradas adicionales. Puede pensar en las entradas adicionales como concatenadas al final de las entradas “normales” a la capa anterior. Por ejemplo, si una capa oculta tenía 10 nodos de entrada regulares y 128 nodos ocultos en la capa, en realidad tendría 138 entradas totales (suponiendo que está alimentando las salidas de la capa en sí mismo a la Elman) en lugar de en otra capa). Por supuesto, la primera vez que intente calcular la salida de la red necesitará completar esas 128 entradas adicionales con 0s o algo así.

Las redes recurrentes son excelentes para manejar secuencias de entrada de longitud variable. Las salidas de los estados ocultos que se retroalimentan como entradas adicionales a esa capa para el siguiente elemento de la secuencia le dan a la red una sensación de memoria que puede persistir por más tiempo que un solo ejemplo de entrada.

En teoría, la memoria de una red recurrente puede incluir datos relevantes de entradas que ocurrieron mucho antes, dándole una especie de memoria a largo plazo. En la práctica, por ejemplo, con una red Elman, esto no funciona tan bien debido al problema del gradiente de fuga. Afortunadamente, las arquitecturas más nuevas, como la LSTM, mejoran la manera en que la red puede almacenar recuerdos a más largo plazo.

La forma más simple de explicar una red neuronal recurrente es quizás pensar en ella como un mecanismo de bucle, que actualiza un estado interno en cada paso. El ciclo opera sobre una secuencia, utilizando un elemento de la secuencia y el estado anterior en cada paso para calcular y actualizar el estado.

Como se muestra a continuación, el polígono discontinuo muestra un paso del bucle. El bucle en sí está operando en una secuencia de longitud dos. U y W son multiplicadores que extraen y transforman la información en el estado anterior y el elemento de la secuencia antes de combinarlos )

El estado final puede considerarse y usarse como un resumen de toda su secuencia.

Si necesita una pequeña cartilla, vea si esta publicación de blog ayuda.

Para comprender las redes neuronales recurrentes (RNN), necesitamos comprender un poco acerca de las redes neuronales de alimentación directa, a menudo denominadas MLP (perceptrón multicapa).

A continuación se muestra una imagen de un MLP con 1 capa oculta. Primero, ignore el desorden de las conexiones de peso entre cada capa y concéntrese en el flujo general de datos (es decir, siga las flechas). En el pase directo, vemos que para cada neurona en un MLP, obtiene algunos datos de entrada, realiza algunos cálculos y alimenta sus datos de salida hacia la siguiente capa, de ahí el nombre de red de avance. La capa de entrada alimenta a la capa oculta y la capa oculta alimenta a la capa de salida.

Con RNN, las conexiones ya no son puramente de avance. Como su nombre lo indica, ahora hay una conexión recurrente que conecta la salida de una neurona RNN a sí misma.

A continuación se muestra una imagen de una sola neurona RNN sobre lo que quise decir arriba.

En esta imagen, la entrada, [math] x_t [/ math], es la entrada en el tiempo [math] t [/ math]. Al igual que en el caso de retroalimentación, alimentamos la entrada a nuestra neurona (bloque A), realiza algunos cálculos y obtenemos la salida [math] h_t [/ math]. Sin embargo, tenga en cuenta una conexión recurrente adicional que alimenta la misma salida [math] h_t [/ math] de nuevo en A (la conexión se dibuja dejando el bloque A en el tamaño correcto e ingresando en el izquierdo). Tenga en cuenta que esta conexión recurrente se utilizará como parte del cálculo de entrada en el siguiente paso de tiempo.

¿Qué pasa con esta neurona en el siguiente paso? Bueno, obtendremos otra entrada, [matemática] x_ {t + 1} [/ matemática], y la alimentaremos a nuestra neurona (Bloque A), sin embargo, recordaremos nuestra conexión recurrente del paso de tiempo anterior, [matemática] h_t [ / math], esto también es parte de nuestra entrada.

En una asignación de función simple, el cálculo de un RNN será, siguiendo la notación del diagrama anterior:

[matemáticas] h_t = f (x_t, h_ {t-1}) [/ matemáticas]

Esto significa que para RNN, para cada neurona, hay dos pesos, un peso de avance (tal como lo tendríamos en un MLP) y un peso recurrente.

Desenrollar a través del tiempo

Si algunos de ustedes son observadores, notarán que podemos enmarcar el cálculo de RNN de forma anticipada al igual que un MLP.

¿Cómo? Bueno, si tomamos nuestro cálculo RNN por ejemplo 10 pasos de tiempo, y desenrollamos este cálculo a través del tiempo, llegaremos a la imagen a continuación.

En este diagrama, hemos desenrollado el cálculo de nuestro RNN a través del tiempo, comenzando en T [matemática] = 0 [/ matemática] hasta [matemática] T = t [/ matemática]. ¿Ves la similitud con el MLP ahora? La conexión recurrente en cada paso de tiempo actúa como la conexión de puente entre los pasos de tiempo. (este es el componente a menudo referido cuando hablamos de la propagación inversa de RNN a través del tiempo)

Puede pensar en RNN como algo similar a una red MLP / Feed-forward, pero en lugar de expandirse a través de capas, expandimos un cálculo de RNN a través del tiempo, así como un RNN tiene los mismos pesos aplicados en cada paso de tiempo (tenga en cuenta que estamos usando el mismo bloque A para el cálculo en todos los pasos de tiempo).

Una forma alternativa de pensar acerca de RNN es que tiene un estado persistente a lo largo de todos los pasos de cómputo, específicamente h_t. El RNN debería aprender a codificar información de pasos de tiempo anteriores en h_t, para que la red pueda usar esta información codificada para el cálculo en pasos de tiempo mucho más tardíos.

Por ejemplo, un RNN bien entrenado en la generación de oraciones debe aprender a codificar el hecho de que abrió un paréntesis en dicho paso 2 en [math] h_ {2} [/ math], que se lleva adelante en cada paso de la computación, y el RNN cerrará el soporte en el paso 10 con el uso de [math] h_ {9}. [/ math]

Nota: La mayoría de estos diagramas están tomados del excelente tutorial de Colah sobre LSTM, un RNN más complicado que resuelve algunos problemas con el RNN de vainilla que ves arriba. (Principalmente, el problema del gradiente de desaparición, como puede ver que durante una secuencia larga, el RNN desenrollado a través del tiempo será una red muy profunda, lo que causa problemas cuando hacemos propagación hacia atrás). El enlace está debajo (enlace 1).

Referencia:

  1. Comprender las redes LSTM
  2. Para un análisis más completo sobre RNN, consulte aquí: Tutorial de redes neuronales recurrentes, Parte 1 – Introducción a los RNN

Suponiendo que las predicciones son probabilísticas, se pueden generar secuencias novedosas a partir de una red capacitada mediante el muestreo iterativo de la distribución de salida de la red, y luego alimentar la muestra como entrada en el siguiente paso. En otras palabras, al hacer que la red trate sus inventos como si fueran reales, como una persona soñando.

Comprenderlo usando un ejemplo es mucho más fácil:
• Generación de imágenes basadas en el lenguaje.
Aprender a generar escritura a mano para un texto dado. Para enfrentar este desafío, se enreda una ventana suave con la cadena de texto y se alimenta como una entrada adicional a la red de predicción. La red genera los parámetros de la ventana al mismo tiempo que realiza las predicciones, de modo que determina dinámicamente una alineación entre el texto y las ubicaciones del lápiz. En pocas palabras, aprende a decidir qué personaje escribir a continuación.

More Interesting

¿Cuál es el mejor lenguaje de programación para escribir Inteligencia Artificial en la web?

¿Cómo podría ayudar el chip TrueNorth de IBM a mejorar Watson?

¿Serán útiles los antecedentes en estadística matemática y matemática pura en la investigación de IA?

¿Cuáles son ejemplos de problemas que los humanos son mucho mejores para resolver en comparación con las computadoras?

¿Existe una inteligencia artificial que salve a personas irrelevantes?

¿Qué algoritmos de minería de datos / reconocimiento de patrones toman los datos como entrada y luego generan modelos / fórmulas matemáticas?

¿Cómo reaccionan los nigerianos ante la tecnología moderna?

¿Es posible automatizar tareas que involucren movimientos de precisión de mano humana?

¿Por qué los investigadores de aprendizaje automático no se preocupan por el número efectivo de épocas?

¿Por qué solo se utilizan redes neuronales convolucionales para imágenes, en lugar de otras técnicas de aprendizaje profundo?

¿Los avances actuales [y pronosticados en el futuro cercano] en inteligencia artificial causarán una interrupción importante en el empleo? Si es así, ¿cómo [como se especula] tratarán los gobiernos / la sociedad?

Si los humanos pudieran aprender a copiar nuestra conciencia e incrustarla en una máquina, como un Transformador, ¿estarías dispuesto?

Cómo utilizar mejor mis grados de informática y contabilidad, teniendo en cuenta el advenimiento de la inteligencia artificial, la automatización, etc.

Después de que AI comenzó a escribir su propio código, tuve dudas sobre si debía estudiar Ciencias de la Computación en la universidad. ¿Debo dejar que AI haga su trabajo?

¿Hay algún buen punto de partida de código abierto para escribir una IA para un RTS?