Preguntas al avanzar de la red neuronal de vainilla a la red neuronal recurrente

8

Recientemente he aprendido cómo funcionaría una red neuronal vainilla, con un número dado de entradas, nodos ocultos y el mismo número de salidas que las entradas.

He estado mirando varias publicaciones relacionadas con la red neuronal recurrente, y entiendo el concepto detrás de ella, pero no entiendo ciertas partes de la lógica detrás de la RNN.

Aquí hay cuatro preguntas principales que tengo:

  1. ¿Cómo funciona la retropropagación en la red neuronal recurrente?
  2. ¿Los pesos que conducen desde la entrada a los nodos ocultos son los mismos para cualquier otro paso? ¿Qué pasa con los pesos de los nodos ocultos a las salidas?
  3. ¿Cómo funcionan exactamente los sesgos en una red neuronal recurrente?
  4. ¿Por qué se usa generalmente la función tanh en lugar de la función sigmoidea como la función de actividad?

Me doy cuenta de que algunas de estas preguntas son muy básicas, pero supongo que lo básico es exactamente lo que necesito en este momento.

Incluso los enlaces a videos o publicaciones relacionadas serán extremadamente útiles, al igual que las palabras clave de Google que muestran los resultados correctos. Estas cuatro preguntas me impiden comprender ejemplos de códigos de Python, por lo que realmente necesito ayuda.

Daniel
fuente
"el mismo número de salidas que entradas". ¿Esperar lo? Tenga cuidado con esto: no es frecuente que se encuentre con un NN donde su declaración sería verdadera. Estos números pueden variar enormemente y no puedo pensar en la última vez que trabajé en un NN donde mis entradas y salidas coincidían exactamente. Sus entradas son lo que quiera que se basen en las características disponibles, sus salidas dependen de la respuesta que está tratando de obtener (binario, clasificación, etc.). Es muy raro que esos dos coincidan.
I_Play_With_Data

Respuestas:

3

Esta pregunta aborda algunas cualidades muy importantes de los RNN y DNN en general. Contestaré cada una de sus subpreguntas, aunque no en el mismo orden (intentaré resaltar dónde lo hago)

Parámetros compartidos

Primero, la calidad más importante de los RNN se llama compartir parámetros . Los datos secuenciales generalmente se ingresan en capas separadas. Para una entrada de longitud 20, una red RNN tendría 20 capas. Se usan los mismos parámetros internos para cada capa, por lo que las 20 capas usan los mismos pesosW y sesgo si. Compare esto con un perceptrón multicapa que tendría 20 pesos y sesgos separados.

El intercambio de parámetros tiene varios beneficios:

  • Ahora tenemos muchos menos parámetros. Hay 1 bloque repetido en lugar de 20 capas separadas. ¡Una reducción de 20x!
  • Esto multiplica efectivamente los datos de entrenamiento. La capa recurrente puede aprender de cada palabra en una sola oración de ejemplo, mientras que cada capa en un MLP aprende de una sola palabra por oración.
  • Nuestra red ahora es mucho más flexible. Podemos entrenarnos en oraciones de hasta 20 palabras y luego generalizar a una oración de 25 palabras agregando más pasos o usando un RNN dinámico

Red de arquitectura

Preguntas sobre las activaciones sigmoideas y de tanh. Para responder a esto, tenemos que hablar sobre arquitecturas RNN específicas. El RNN simple discutido anteriormente tiene una sola activación. Los RNN simples tienden a crear el problema de la desaparición de los gradientes (¡o de la explosión!) Debido a la aplicación repetida de los mismos pesos y la función de activación.

Los bloques RNN activados (como GRU y LSTM) utilizan mecanismos de activación para pasar activaciones dentro y fuera de los estados de memoria y para combinar estados de memoria con entrada para generar la salida de cada bloque. Debido a esto, las puertas pueden evitar que el gradiente se propague hacia atrás. La sigmoide es una función de activación común para puertas porque aplasta las activaciones a (0,1) --- 0 detiene completamente la activación y 1 la deja pasar. Sin embargo, cualquier función de activación decente con un perfil de aplastamiento similar funciona. Como anécdota, el sigmoide duro es bastante común en estos días.

Además de las puertas, los bloques RNN cerrados tienen un estado interno para el cual la activación varía bastante. Debido a que la compuerta limita el backprop de gradiente, tenemos mucha flexibilidad en esta activación. No necesita ser aplastamiento, por ejemplo, y aquí es donde a menudo se ven las activaciones rectificadoras (relu, elu, islu, etc.). Tanh es una elección perfectamente sensata también.

Con respecto a los sesgos y los pesos, cada activación en una célula RNN generalmente tiene su propio peso y sesgo. Por lo tanto, un GRU tiene 3 activaciones (oculto, actualizar y restablecer) y cada uno tiene su propio peso y sesgo. Sin embargo, recuerde que como RNN, cada uno de estos se reutiliza para cada paso de tiempo.

Pase hacia atrás

Eso cubre el pase hacia adelante bastante bien, pero también hace una pregunta importante sobre cómo el error se propaga hacia atrás. Hay dos métodos para abordar esto.

Maestro forzando

Para los RNN que generan una predicción en cada paso de tiempo (como predecir el resultado de los siguientes pasos, la traducción o el reconocimiento de fonemas), el forzamiento del maestro es un método para aislar cada paso del RNN. Al eliminar estas dependencias, Teacher Forcing permite a RNN usar backprop convencional con la regla de la cadena.

pero como funciona? Las redes de forzamiento de maestros tienen arquitecturas de tren y prueba separadas. Para entrenamiento, en cada paso de tiempot, la entrada Xt se concatena con el objetivo anterior, yt-1. Imagine esto para una red encargada de predecir el siguiente personaje. La red acaba de intentar predecir el carácter para el paso de tiempo anterior. Pero en su lugar utilizamos el carácter observado en ese paso de tiempo (lo sabemos porque estamos en la fase de entrenamiento). Por lo tanto, el error en el paso de tiempot depende solo del valor observado en t-1 y la entrada en t. Por lo tanto, hemos eliminado cualquier conexión a través del tiempo de la red.

En la prueba, no sabemos el valor verdadero en cada paso de tiempo, por lo que reemplazamos yt-1 con la salida de la capa anterior ot-1. En este caso, las conexiones temporales han regresado pero solo para la fase de prueba.

Propagación hacia atrás a través del tiempo

Pero no tenemos que recurrir al forzamiento de maestros. La propagación hacia atrás a través del tiempo nos permite aplicar el algoritmo de backprop a los RNN. Considere la red connorte pasos de tiempo y una entrada Xestado oculto h, salida oy valor observado y para cada paso de tiempo.

BPTT funciona en los siguientes pasos.

  1. Calcular el gradiente ot para cada ot,ytpar. (Esto se puede hacer de una vez).
  2. Calcular el gradiente htpara cada paso de tiempo, comenzando con el último paso de tiempo y trabajando iterativamente hacia atrás. (Esto debe hacerse uno a la vez).
  3. Esto nos da norte bordes para cada parámetro interno de nuestro RNN. El truco para actualizar los parámetros es encontrar la contribución de gradiente para cada paso de tiempo (p. Ej.Wt aunque solo tengamos uno W) y luego sumar esos gradientes para actualizar los parámetros internos.

Otras lecturas

Recomiendo encarecidamente el capítulo 10 de Goodfellow, Bengio y Courville's Deep Learning para obtener más información sobre las RNN. Además, el libro RNN de Graves es fantástico para detalles de alto nivel

Sophie Searcy - Metis
fuente