Estoy tratando de entender cómo se pueden usar los rnn para predecir secuencias trabajando con un ejemplo simple. Aquí está mi red simple, que consta de una entrada, una neurona oculta y una salida:
La neurona oculta es la función sigmoidea, y se considera que la salida es una salida lineal simple. Entonces, creo que la red funciona de la siguiente manera: si la unidad oculta comienza en estado s
, y estamos procesando un punto de datos que es una secuencia de longitud, , entonces:
En el momento 1
, el valor predicho,, es
En el momento 2
, tenemos
En el momento 3
, tenemos
¿Hasta aquí todo bien?
El rnn "desenrollado" se ve así:
Si usamos un término de suma de error cuadrado para la función objetivo, ¿cómo se define? En toda la secuencia? En cuyo caso tendríamos algo como?
¿Se actualizan los pesos solo una vez que se examinó la secuencia completa (en este caso, la secuencia de 3 puntos)?
En cuanto al gradiente con respecto a los pesos, necesitamos calcular , Intentaré hacerlo simplemente examinando las 3 ecuaciones para arriba, si todo lo demás parece correcto. Además de hacerlo de esa manera, esto no me parece una propagación inversa, porque los mismos parámetros aparecen en diferentes capas de la red. ¿Cómo nos ajustamos para eso?
Si alguien puede ayudarme a guiarme a través de este ejemplo de juguete, estaría muy agradecido.
Respuestas:
Creo que necesitas valores objetivo. Entonces para la secuencia(X1,X2,X3) , necesitarías objetivos correspondientes (t1,t2,t3) . Como parece que desea predecir el próximo término de la secuencia de entrada original, necesitaría:
Necesitarías definirX4 4 , así que si tuviera una secuencia de entrada de longitud norte para entrenar al RNN, solo podrás usar el primero norte- 1 términos como valores de entrada y el último norte- 1 términos como valores objetivo.
Hasta donde sé, tienes razón: el error es la suma de toda la secuencia. Esto es porque los pesostu , v y w son los mismos en el RNN desplegado.
Entonces,
Sí, si utilizo la propagación inversa a través del tiempo, creo que sí.
En cuanto a los diferenciales, no querrá expandir toda la expresión parami y diferenciarlo cuando se trata de RNN más grandes. Entonces, alguna notación puede hacerlo más ordenado:
Entonces, los derivados son:
Dóndet ∈ [ 1 , T ] para una secuencia de longitud T y:
Esta relación recurrente proviene de darse cuenta de que eltth la actividad oculta no solo afecta el error en tth salida, Et , pero también afecta el resto del error más abajo en el RNN, E−Et :
Este método se llama propagación inversa a través del tiempo (BPTT), y es similar a la propagación inversa en el sentido de que utiliza la aplicación repetida de la regla de la cadena.
Un ejemplo trabajado más detallado pero complicado para un RNN se puede encontrar en el Capítulo 3.2 de 'Etiquetado de secuencias supervisadas con redes neuronales recurrentes' por Alex Graves - ¡lectura realmente interesante!
fuente
El error que describió anteriormente (después de la modificación que escribí en el comentario debajo de la pregunta) puede usarlo solo como un error de predicción total, pero no puede usarlo en el proceso de aprendizaje. En cada iteración, coloca un valor de entrada en la red y obtiene una salida. Cuando obtenga resultados, debe verificar el resultado de su red y propagar el error a todos los pesos. Después de la actualización, colocará el siguiente valor en secuencia y hará una predicción para este valor, de lo que también propagará el error, etc.
fuente