sirven redes que programacion para neuronales las inteligencia funcionan estadistica ejemplos como artificial aplicaciones actualidad computer-science machine-learning neural-network backpropagation

computer-science - que - redes neuronales matlab



Comprender la propagación de redes neuronales (3)

Actualización: una mejor formulación del problema.

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 sesgo, 2 neuronas en la capa oculta + 1 sesgo y 1 neurona de salida.

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

Estoy usando una retropropagación estocástica .

Después de leer un poco más he descubierto 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, la forma en que se distribuye el error es difícil de comprender al principio.

El paso 1 calcula la salida para cada instancia de entrada.
El paso 2 calcula el error entre la (s) neurona (s) de salida (en nuestro caso solo hay una) y los valores objetivo (s):
Paso 2 http://pandamatak.com/people/anand/771/html/img342.gif
Paso 3 usamos el error del Paso 2 para calcular el error para cada unidad oculta h:
Paso 3 http://pandamatak.com/people/anand/771/html/img343.gif

El ''peso kh'' es el peso entre la unidad oculta h y la unidad de salida k, 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 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 ''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? Según entiendo, cada nodo de entrada tiene dos salidas: una que va al primer nodo de la capa oculta y otra que va a la segunda capa oculta del nodo. ¿Cuál de las dos salidas debe ser conectada a la parte O(h)*(1 - O(h)) de la fórmula?
Paso 3 http://pandamatak.com/people/anand/771/html/img343.gif


El tutorial que publicaste aquí lo está haciendo mal. Lo comprobé dos veces contra los dos libros estándar de Bishop y dos de mis implementaciones en funcionamiento. Señalaré a continuación dónde exactamente.

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

Si quieres entender la propagación inversa, debes entender la regla de la cadena. Se trata de la regla de la cadena aquí. Si no sabes cómo funciona exactamente, revisa en wikipedia, no es tan difícil. Pero tan pronto como comprenda las derivaciones, todo encajará en su lugar. ¡Promesa! :)

∂E / ∂W se puede componer en ∂E / ∂o ∂o / ∂W a través de la regla de la cadena. ∂o / ∂W se calcula fácilmente, ya que es solo 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, o y W son vectores / matrices aquí)

Los tenemos para las unidades de salida, ya que es donde podemos calcular el error. (Principalmente tenemos una función de error que se reduce al delta de (t_k - o_k), por ejemplo, para la función de error cuadrático en el caso de las salidas lineales y la entropía cruzada en el caso de las salidas logísticas).

La pregunta ahora es, ¿cómo obtenemos los derivados para las unidades internas? Bien, sabemos que la salida de una unidad es la suma de todas las unidades entrantes ponderadas por sus ponderaciones y la aplicación de una función de transferencia después. Entonces o_k = f (suma (w_kj * o_j, para todos j)).

Entonces, lo que hacemos es derivar o_k con respecto a o_j. Dado que 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!

Hagámoslo. o_k = f (suma (w_kj * o_j, para todos j)) => ∂o_k / ∂o_j = f ''(suma (w_kj * o_j, para todos j)) * w_kj = f'' (z_k) * w_kj.

Para 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! )


Lo que leo de la ecuación del Paso 3 es:

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

Cada unidad tiene solo una salida, pero cada enlace entre la salida y la siguiente capa está ponderado. Por lo tanto, la salida es la misma, pero en el extremo receptor, cada unidad recibirá 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. El error no se aplica a la capa de entrada, ya que, por definición, la entrada no tiene ''error'' per se.

El error debe calcularse capa por capa, comenzando en el lado de salida, ya que necesitamos los valores de error de la capa N + 1 para calcular la capa N. Usted tiene razón, no hay conexión directa entre la entrada y la salida en la retropropagación.

Creo que la ecuación es correcta, si contraintuitivo. Lo que probablemente sea confuso es que en la propagación directa para cada unidad tenemos que considerar todas las unidades y enlaces a la izquierda de la unidad (valores de entrada), pero para la propagación de errores (retropropagación) era necesario considerar las unidades de la derecha (salida valor) de la unidad que se procesa.


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

Asumiré que su pregunta se debe a que está confundido acerca de cómo se deriva el delta oculto de retropropagación. Si esta es tu pregunta, por favor considera

texto alternativo http://pandamatak.com/people/anand/771/html/img334.gif

Probablemente esté confundido sobre cómo el autor obtuvo esta ecuación. Esta es en realidad una aplicación directa de la regla de cadena multivariada. A saber, (lo que sigue se toma de la 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 estas funciones son todas diferenciables. regla de la cadena se vería así:

"

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

E (z '' 1 , z'' 2 , ..., z '' n ) donde z'' k es la salida de la k-ésima preactivación de la capa de salida, y z '' k (w ji ), es decir que E es una función de z ''y z'' en sí mismo es una función de w ji (si esto no tiene sentido para usted, primero piense cuidadosamente cómo se configura un NN). La aplicación de la regla de cadena se extiende directamente a n variables:

δE (z '' 1 , z'' 2 , .., z '' n ) / δw ji = Σ k δe / δz'' k δz '' k / δw ji

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

δz '' k / δw ji = δz'' k / δo j δo j / δz j δz j / δw ji .

Si tiene dificultades para entender la regla de la cadena, es posible que deba realizar un curso de cálculo multivariable o leer una sección de este tipo en un libro de texto.

Buena suerte.