Pregunta

Actualizar:una mejor formulación de la cuestión.

Estoy tratando de entender el algoritmo de retropropagación con una red neuronal XOR como ejemplo.Para este caso hay 2 neuronas de entrada + 1 de polarización, 2 neuronas en la capa oculta + 1 de polarización y 1 neurona de salida.

 A   B  A XOR B
 1    1   -1
 1   -1    1
-1    1    1
-1   -1   -1

A sample XOR neural network
(fuente: wikimedia.org)

Estoy usando retropropagación estocástica.

Después de leer un poco más, descubrí que el error de la unidad de salida se propaga a las capas ocultas...Inicialmente esto era confuso, porque cuando llegas a la capa de entrada de la red neuronal, cada neurona recibe un ajuste de error de ambas neuronas en la capa oculta.En particular, al principio resulta difícil comprender la forma en que se distribuye el error.

Paso 1 Calcule la salida para cada instancia de entrada.
Paso 2 calcule el error entre la(s) neurona(s) de salida (en nuestro caso solo hay una) y el(los) valor(es) objetivo:
Step 2
Paso 3 Usamos el error del Paso 2 para calcular el error para cada unidad oculta h:
Step 3

El 'peso kh' es el peso entre la unidad oculta h y la unidad de salida k, bueno, esto es confuso porque la unidad de entrada no tiene un peso directo asociado con la unidad de salida.Después de mirar la fórmula durante unas horas, comencé a pensar en lo que significa la suma y estoy empezando a llegar a la conclusión de que el peso de cada neurona de entrada que se conecta a las neuronas de la capa oculta se multiplica por el error de salida y se suma. .Esta es una conclusión lógica, pero la fórmula parece un poco confusa ya que dice claramente el 'peso kh' (entre la capa de salida k y la capa oculta h).

¿Estoy entendiendo todo correctamente aquí?¿Alguien puede confirmar esto?

¿Cuál es O(h) de la capa de entrada?Tengo entendido que cada nodo de entrada tiene dos salidas:uno que va al primer nodo de la capa oculta y otro que va al segundo nodo de la capa oculta.¿Cuál de las dos salidas debe conectarse al O(h)*(1 - O(h)) parte de la fórmula?
Step 3

¿Fue útil?

Solución

El tutorial informados aquí está haciendo realmente mal. Me doble comprobado contra dos libros estándar y dos de mis implementaciones de trabajo de Bishop. Voy a señalar a continuación dónde exactamente.

Una cosa importante a tener en cuenta es que siempre está en busca de los derivados de la función de error con respecto a una unidad o peso. Los primeros son los deltas, este último es lo que se utiliza para actualizar los pesos.

Si se quiere entender propagación hacia atrás, usted tiene que entender la regla de la cadena. Es todo acerca de la cadena de regla aquí. Si usted no sabe cómo funciona exactamente, comprueben en Wikipedia - no es tan difícil. Pero en cuanto a entender las derivaciones, todo cae en su lugar. ¡Promesa! :)

∂E / ∂W puede estar compuesta en ∂E / ∂o ∂o / ∂W a través de la regla de la cadena. ∂o / ∂W se calcula fácilmente, ya que es sólo la derivada de la activación / salida de una unidad con respecto a los pesos. ∂E / ∂o es en realidad lo que llamamos los deltas. (Estoy asumiendo que E, S y W son vectores / matrices aquí)

Tenemos ellos por las unidades de salida, ya que es donde podemos calcular el error. (Principalmente tenemos una función de error que se reduce a delta (The Kid -. O_k), por ejemplo para la función cuadrática de error en el caso de salidas lineales y entropía cruzada en el caso de las salidas de logística)

La pregunta ahora es, ¿cómo obtener los derivados de las unidades internas? Bueno, sabemos que la salida de una unidad es la suma de todas las unidades de entrada ponderados por sus pesos y la aplicación de una función de transferencia después. Así o_k = f (suma (w_kj * o_j, para todo j)).

Así que lo que hacemos es, o_k deriva con respecto al o_j. Desde delta_j = ∂E / ∂o_j = ∂E / ∂o_k ∂o_k / ∂o_j = Delta_K ∂o_k / o_j. Así que dado Delta_K, podemos calcular delta_j!

Vamos a hacer esto. o_k = f (sum (w_kj * o_j, para todo j)) => ∂o_k / ∂o_j = f '(sum (w_kj * o_j, para todo j)) * w_kj = f' (z_k) * w_kj.

En el caso de la función de transferencia sigmoidal, esto se convierte en z_k (1 - z_k) * w_kj. ( Aquí está el error en el tutorial, el autor dice o_k (1 - o_k) * w_kj )

Otros consejos

No estoy seguro de cuál es tu pregunta, pero yo mismo revisé ese tutorial y puedo asegurarte que, aparte de un error tipográfico obvio, no hay nada incorrecto en él.

Asumiré que su pregunta se debe a que está confundido acerca de cómo funciona la retropropagación. oculto se deriva delta.Si esta es realmente su pregunta, considere

alt text
(fuente: pandamatak.com)

Probablemente no sepa cómo el autor obtuvo esta ecuación.En realidad, esta es una aplicación sencilla de la regla de la cadena multivariante.Es decir, (lo que sigue está tomado de Wikipedia)

"Supongamos que cada argumento de z = f(u, v) es una función de dos variables tal que u = h(x, y) y v = g(x, y), y que todas estas funciones son diferenciables.Entonces la regla de la cadena quedaría así:

alt text

alt text "

Ahora imaginemos extender la regla de la cadena mediante un argumento de inducción a

mi(z'1,z'2,..,z'norte) donde z 'k es la salida de la pre-activación de la capa de salida de KTH y z 'k(wJi) es decir que E es función de z' y z' en sí es función de wJi (si esto no tiene sentido para ti al principio pensar con mucho cuidado sobre cómo se configura un NN). Aplicando la regla de la cadena directamente extendida a n variables:

δE(z'1,z'2,..,z'norte)/δwJi = Σk δE/δz'k δz'k/δwJi

ese es el paso más importante, el autor luego aplica nuevamente la regla de la cadena, esta vez dentro de la suma para expandir la δz'k/δwJi término, es decir

δz'k/δwJi = δz'k/δoj δoj/δzj δzj/δwJi.

Si tiene dificultades para comprender la regla de la cadena, es posible que deba realizar un curso de cálculo multivariado o leer dicha sección en un libro de texto.

Buena suerte.

Lo que leo de la ecuación de la Etapa 3 es:

  1. O_h = última salida de esta unidad oculta (O_h en la capa de entrada es el valor de entrada real)
  2. w_kh = peso de conexión entre esta unidad oculta y una unidad de la capa siguiente (hacia la salida)
  3. Delta_K = error de la unidad de la capa siguiente (hacia la salida, la misma unidad como viñeta anterior)

Cada unidad tiene sólo una salida, pero cada enlace entre la salida y la siguiente capa es ponderada. Por lo que la salida es la misma, pero en el extremo receptor, cada unidad recibe un valor diferente si el peso de los enlaces es diferente. O_h siempre se refiere al valor de esta neurona para la última iteración. Error no se aplica a la capa de entrada, ya que por definición, la entrada no tiene 'error' per se.

necesita ser calculado capa por capa, comenzando en el lado de salida, ya que necesitamos los valores de error de capa El error N + 1 a N. capa calcular usted razón, no hay conexión directa entre la entrada y salida en backpropagation .

Creo que la ecuación es correcta, si es contrario a la intuición. Lo que es, probablemente, confundiendo es que en la propagación hacia adelante para cada unidad que tenemos que considerar todas las unidades y los enlaces a la izquierda de la unidad (valores de entrada), pero para la propagación de errores (backpropagation) era tener en cuenta las unidades a la derecha (salida valor) de la unidad está procesando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top